Before opening an issue, please double check:
- - [The troubleshooting documentation](https://paperless-ngx.readthedocs.io/en/latest/troubleshooting.html).
- - [The installation instructions](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation).
+ - [The troubleshooting documentation](https://docs.paperless-ngx.com/troubleshooting/).
+ - [The installation instructions](https://docs.paperless-ngx.com/setup/#installation).
- [Existing issues and discussions](https://github.com/paperless-ngx/paperless-ngx/search?q=&type=issues).
- Disable any customer container initialization scripts, if using any
id: logs
attributes:
label: Webserver logs
- description: If available, post any logs from the web server related to your issue.
+ description: Logs from the web server related to your issue.
+ render: bash
+ validations:
+ required: true
+ - type: textarea
+ id: logs_browser
+ attributes:
+ label: Browser logs
+ description: Logs from the web browser related to your issue, if needed
render: bash
- type: input
id: version
- [ ] I have read & agree with the [contributing guidelines](https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md).
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
-- [ ] If applicable, I have checked that all tests pass, see [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html#back-end-development).
-- [ ] I have run all `pre-commit` hooks, see [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html#code-formatting-with-pre-commit-hooks).
+- [ ] If applicable, I have checked that all tests pass, see [documentation](https://docs.paperless-ngx.com/development/#back-end-development).
+- [ ] I have run all `pre-commit` hooks, see [documentation](https://docs.paperless-ngx.com/development/#code-formatting-with-pre-commit-hooks).
- [ ] I have made corresponding changes to the documentation as needed.
- [ ] I have checked my modifications for any breaking changes.
name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: 3.9
+ python-version: 3.8
cache: "pipenv"
cache-dependency-path: 'Pipfile.lock'
-
-
name: Make documentation
run: |
- cd docs/
- pipenv run make html
+ pipenv run mkdocs build --config-file ./mkdocs.yml
-
name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: documentation
- path: docs/_build/html/
+ path: site/
+
+ documentation-deploy:
+ name: "Deploy Documentation"
+ runs-on: ubuntu-20.04
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ needs:
+ - documentation
+ steps:
+ -
+ name: Checkout
+ uses: actions/checkout@v3
+ -
+ name: Deploy docs
+ uses: mhausenblas/mkdocs-deploy-gh-pages@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CUSTOM_DOMAIN: docs.paperless-ngx.com
+ CONFIG_FILE: mkdocs.yml
+ EXTRA_PACKAGES: build-base
tests-backend:
name: "Tests (${{ matrix.python-version }})"
matrix:
python-version: ['3.8', '3.9', '3.10']
fail-fast: false
- services:
- tika:
- image: ghcr.io/paperless-ngx/tika:latest
- ports:
- - "9998:9998/tcp"
- gotenberg:
- image: docker.io/gotenberg/gotenberg:7.6
- ports:
- - "3000:3000/tcp"
env:
# Enable Tika end to end testing
TIKA_LIVE: 1
PAPERLESS_MAIL_TEST_HOST: ${{ secrets.TEST_MAIL_HOST }}
PAPERLESS_MAIL_TEST_USER: ${{ secrets.TEST_MAIL_USER }}
PAPERLESS_MAIL_TEST_PASSWD: ${{ secrets.TEST_MAIL_PASSWD }}
+ # Skip Tests which require convert
+ PAPERLESS_TEST_SKIP_CONVERT: 1
+ # Enable Gotenberg end to end testing
+ GOTENBERG_LIVE: 1
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
+ -
+ name: Start containers
+ run: |
+ docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml pull --quiet
+ docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml up --detach
-
name: Install pipenv
run: |
run: |
cd src/
pipenv run coveralls --service=github
+ -
+ name: Stop containers
+ if: always()
+ run: |
+ docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml logs
+ docker compose --file ${GITHUB_WORKSPACE}/docker/compose/docker-compose.ci-test.yml down
tests-frontend:
name: "Tests Frontend"
-
name: Upload release archive
id: upload-release-asset
- uses: actions/upload-release-asset@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ uses: shogo82148/actions-upload-release-asset@v1
with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
upload_url: ${{ steps.create-release.outputs.upload_url }}
asset_path: ./paperless-ngx.tar.xz
asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
CURRENT_CHANGELOG=`tail --lines +2 changelog.md`
echo -e "$CURRENT_CHANGELOG" >> changelog-new.md
mv changelog-new.md changelog.md
- pipenv run pre-commit --files changelog.md
+ pipenv run pre-commit run --files changelog.md || true
git config --global user.name "github-actions"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git commit -am "Changelog ${{ needs.publish-release.outputs.version }} - GHA"
--- /dev/null
+---
+name: Release Charts
+
+on:
+ push:
+ tags:
+ - v*
+
+jobs:
+ release_chart:
+ name: "Release Chart"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Configure Git
+ run: |
+ git config user.name "$GITHUB_ACTOR"
+ git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
+ - name: Install Helm
+ uses: azure/setup-helm@v3
+ with:
+ version: v3.10.0
+
+ - name: Run chart-releaser
+ uses: helm/chart-releaser-action@v1.4.1
+ env:
+ CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
# Django stuff:
*.log
-# Sphinx documentation
-docs/_build/
+# MkDocs documentation
+site/
# PyBuilder
target/
- id: check-json
exclude: "tsconfig.*json"
- id: check-yaml
+ exclude: "charts/paperless-ngx/templates/common.yaml"
- id: check-toml
- id: check-executables-have-shebangs
- id: end-of-file-fixer
exclude_types:
- svg
- pofile
- exclude: "(^LICENSE$)"
+ exclude: "^(LICENSE|charts/paperless-ngx/README.md)$"
- id: mixed-line-ending
args:
- "--fix=lf"
- javascript
- ts
- markdown
- exclude: "(^Pipfile\\.lock$)"
+ exclude: "(^Pipfile\\.lock$)|(^charts/paperless-ngx/README.md$)"
# Python hooks
- repo: https://github.com/asottile/reorder_python_imports
rev: v3.9.0
+++ /dev/null
-# .readthedocs.yml
-# Read the Docs configuration file
-# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
-
-# Required
-version: 2
-
-# Build documentation in the docs/ directory with Sphinx
-sphinx:
- configuration: docs/conf.py
-
-# Optionally set the version of Python and requirements required to build your docs
-python:
- version: "3.8"
- install:
- - requirements: docs/requirements.txt
To test your code, execute `pytest` in the src/ directory. This also generates a html coverage report, which you can use to see if you missed anything important during testing.
-Before you can run `pytest`, ensure to [properly set up your local environment](https://paperless-ngx.readthedocs.io/en/latest/extending.html#initial-setup-and-first-start).
+Before you can run `pytest`, ensure to [properly set up your local environment](https://docs.paperless-ngx.com/development/#initial-setup-and-first-start).
## More info:
-... is available in the documentation. https://paperless-ngx.readthedocs.io/en/latest/extending.html
+... is available [in the documentation](https://docs.paperless-ngx.com/development).
# Merging PRs
FROM python:3.9-slim-bullseye as main-app
LABEL org.opencontainers.image.authors="paperless-ngx team <hello@paperless-ngx.com>"
-LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/"
+LABEL org.opencontainers.image.documentation="https://docs.paperless-ngx.com/"
LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperless-ngx"
LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx"
LABEL org.opencontainers.image.licenses="GPL-3.0-only"
# Packages need for running
ARG RUNTIME_PACKAGES="\
+ # Python
+ python3 \
+ python3-pip \
+ python3-setuptools \
+ # General utils
curl \
- file \
+ # Docker specific
+ gosu \
+ # Timezones support
+ tzdata \
# fonts for text file thumbnail generation
fonts-liberation \
gettext \
ghostscript \
gnupg \
- gosu \
icc-profiles-free \
imagemagick \
- media-types \
+ # Image processing
liblept5 \
- libpq5 \
- libxml2 \
liblcms2-2 \
libtiff5 \
- libxslt1.1 \
libfreetype6 \
libwebp6 \
libopenjp2-7 \
libimagequant0 \
libraqm0 \
- libgnutls30 \
libjpeg62-turbo \
- python3 \
- python3-pip \
- python3-setuptools \
+ # PostgreSQL
+ libpq5 \
postgresql-client \
+ # MySQL / MariaDB
mariadb-client \
# For Numpy
libatlas3-base \
tesseract-ocr-fra \
tesseract-ocr-ita \
tesseract-ocr-spa \
- # Suggested for OCRmyPDF
+ unpaper \
pngquant \
- # Suggested for pikepdf
+ # pikepdf / qpdf
jbig2dec \
- tzdata \
- unpaper \
+ libxml2 \
+ libxslt1.1 \
+ libgnutls30 \
# Mime type detection
+ file \
+ libmagic1 \
+ media-types \
zlib1g \
# Barcode splitter
libzbar0 \
- poppler-utils"
+ poppler-utils \
+ # RapidFuzz on armv7
+ libatomic1"
# Install basic runtime packages.
# These change very infrequently
nltk = "*"
pdf2image = "*"
flower = "*"
+bleach = "*"
+# https://www.piwheels.org/project/cryptography/ last built version
+cryptography = "==38.0.1"
[dev-packages]
coveralls = "*"
pytest-env = "*"
pytest-sugar = "*"
pytest-xdist = "*"
-sphinx = "~=5.3"
-sphinx_rtd_theme = "*"
tox = "*"
black = "*"
pre-commit = "*"
sphinx-autobuild = "*"
myst-parser = "*"
+imagehash = "*"
+mkdocs-material = "*"
{
"_meta": {
"hash": {
- "sha256": "9fefc737155e789ced61b41750b4273c7780ac7801c50cf36dc5925be3b85783"
+ "sha256": "cbfe9920231de6e7f993962efb3cc371abdb6b08975232d4cf64d1bad1b53d7a"
},
"pipfile-spec": 6,
"requires": {},
"sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac",
"sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"
],
+ "index": "pypi",
"markers": "python_version < '3.9'",
"version": "==0.2.1"
},
],
"version": "==3.6.4.0"
},
+ "bleach": {
+ "hashes": [
+ "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a",
+ "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"
+ ],
+ "index": "pypi",
+ "version": "==5.0.1"
+ },
"celery": {
"extras": [
"redis"
],
"version": "==0.2.5"
},
+ "webencodings": {
+ "hashes": [
+ "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
+ "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
+ ],
+ "version": "==0.5.1"
+ },
"websockets": {
"hashes": [
"sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41",
"version": "==0.4.6"
},
"coverage": {
+ "extras": [],
"hashes": [
"sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79",
"sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a",
"index": "pypi",
"version": "==3.8.0"
},
+ "ghp-import": {
+ "hashes": [
+ "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619",
+ "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"
+ ],
+ "version": "==2.1.0"
+ },
"identify": {
"hashes": [
"sha256:48b7925fe122720088aeb7a6c34f17b27e706b72c61070f27fe3789094233440",
"markers": "python_version >= '3.5'",
"version": "==3.4"
},
+ "imagehash": {
+ "hashes": [
+ "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5",
+ "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70"
+ ],
+ "index": "pypi",
+ "version": "==4.3.1"
+ },
"imagesize": {
"hashes": [
"sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b",
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.4.1"
},
+ "importlib-metadata": {
+ "hashes": [
+ "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b",
+ "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"
+ ],
+ "markers": "python_version < '3.10'",
+ "version": "==5.1.0"
+ },
"iniconfig": {
"hashes": [
"sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
],
"version": "==2.6.3"
},
+ "markdown": {
+ "hashes": [
+ "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874",
+ "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==3.3.7"
+ },
"markdown-it-py": {
"hashes": [
"sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27",
"markers": "python_version >= '3.7'",
"version": "==0.1.2"
},
+ "mergedeep": {
+ "hashes": [
+ "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8",
+ "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==1.3.4"
+ },
+ "mkdocs": {
+ "hashes": [
+ "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5",
+ "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==1.4.2"
+ },
+ "mkdocs-material": {
+ "hashes": [
+ "sha256:b0ea0513fd8cab323e8a825d6692ea07fa83e917bb5db042e523afecc7064ab7",
+ "sha256:c907b4b052240a5778074a30a78f31a1f8ff82d7012356dc26898b97559f082e"
+ ],
+ "index": "pypi",
+ "version": "==8.5.11"
+ },
+ "mkdocs-material-extensions": {
+ "hashes": [
+ "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93",
+ "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==1.1.1"
+ },
"mypy-extensions": {
"hashes": [
"sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'",
"version": "==1.7.0"
},
+ "numpy": {
+ "hashes": [
+ "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8",
+ "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735",
+ "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd",
+ "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810",
+ "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db",
+ "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962",
+ "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79",
+ "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911",
+ "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d",
+ "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488",
+ "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5",
+ "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0",
+ "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f",
+ "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f",
+ "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2",
+ "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0",
+ "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68",
+ "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3",
+ "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6",
+ "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71",
+ "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894",
+ "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f",
+ "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329",
+ "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba",
+ "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c",
+ "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e",
+ "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef",
+ "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7"
+ ],
+ "index": "pypi",
+ "version": "==1.23.4"
+ },
"packaging": {
"hashes": [
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
"markers": "python_version >= '3.7'",
"version": "==0.10.1"
},
+ "pillow": {
+ "hashes": [
+ "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040",
+ "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8",
+ "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65",
+ "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2",
+ "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627",
+ "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07",
+ "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef",
+ "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535",
+ "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c",
+ "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc",
+ "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3",
+ "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1",
+ "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c",
+ "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa",
+ "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32",
+ "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502",
+ "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4",
+ "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f",
+ "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812",
+ "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636",
+ "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20",
+ "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c",
+ "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91",
+ "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe",
+ "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b",
+ "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad",
+ "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9",
+ "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72",
+ "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4",
+ "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de",
+ "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29",
+ "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee",
+ "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c",
+ "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7",
+ "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11",
+ "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c",
+ "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c",
+ "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448",
+ "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b",
+ "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20",
+ "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228",
+ "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd",
+ "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699",
+ "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b",
+ "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2",
+ "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4",
+ "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c",
+ "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f",
+ "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2",
+ "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c",
+ "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3",
+ "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193",
+ "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48",
+ "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02",
+ "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8",
+ "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e",
+ "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f",
+ "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b",
+ "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74",
+ "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb",
+ "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"
+ ],
+ "index": "pypi",
+ "version": "==9.3.0"
+ },
"platformdirs": {
"hashes": [
"sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb",
"markers": "python_version >= '3.6'",
"version": "==2.13.0"
},
+ "pymdown-extensions": {
+ "hashes": [
+ "sha256:0f8fb7b74a37a61cc34e90b2c91865458b713ec774894ffad64353a5fce85cfc",
+ "sha256:ac698c15265680db5eb13cd4342abfcde2079ac01e5486028f47a1b41547b859"
+ ],
+ "markers": "python_version >= '3.7'",
+ "version": "==9.9"
+ },
"pyparsing": {
"hashes": [
"sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb",
],
"version": "==2022.6"
},
+ "pywavelets": {
+ "hashes": [
+ "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b",
+ "sha256:058b46434eac4c04dd89aeef6fa39e4b6496a951d78c500b6641fd5b2cc2f9f4",
+ "sha256:231b0e0b1cdc1112f4af3c24eea7bf181c418d37922a67670e9bf6cfa2d544d4",
+ "sha256:23bafd60350b2b868076d976bdd92f950b3944f119b4754b1d7ff22b7acbf6c6",
+ "sha256:3f19327f2129fb7977bc59b966b4974dfd72879c093e44a7287500a7032695de",
+ "sha256:47cac4fa25bed76a45bc781a293c26ac63e8eaae9eb8f9be961758d22b58649c",
+ "sha256:578af438a02a86b70f1975b546f68aaaf38f28fb082a61ceb799816049ed18aa",
+ "sha256:6437af3ddf083118c26d8f97ab43b0724b956c9f958e9ea788659f6a2834ba93",
+ "sha256:64c6bac6204327321db30b775060fbe8e8642316e6bff17f06b9f34936f88875",
+ "sha256:67a0d28a08909f21400cb09ff62ba94c064882ffd9e3a6b27880a111211d59bd",
+ "sha256:71ab30f51ee4470741bb55fc6b197b4a2b612232e30f6ac069106f0156342356",
+ "sha256:7231461d7a8eb3bdc7aa2d97d9f67ea5a9f8902522818e7e2ead9c2b3408eeb1",
+ "sha256:754fa5085768227c4f4a26c1e0c78bc509a266d9ebd0eb69a278be7e3ece943c",
+ "sha256:7ab8d9db0fe549ab2ee0bea61f614e658dd2df419d5b75fba47baa761e95f8f2",
+ "sha256:875d4d620eee655346e3589a16a73790cf9f8917abba062234439b594e706784",
+ "sha256:88aa5449e109d8f5e7f0adef85f7f73b1ab086102865be64421a3a3d02d277f4",
+ "sha256:91d3d393cffa634f0e550d88c0e3f217c96cfb9e32781f2960876f1808d9b45b",
+ "sha256:9cb5ca8d11d3f98e89e65796a2125be98424d22e5ada360a0dbabff659fca0fc",
+ "sha256:ab7da0a17822cd2f6545626946d3b82d1a8e106afc4b50e3387719ba01c7b966",
+ "sha256:ad987748f60418d5f4138db89d82ba0cb49b086e0cbb8fd5c3ed4a814cfb705e",
+ "sha256:d0e56cd7a53aed3cceca91a04d62feb3a0aca6725b1912d29546c26f6ea90426",
+ "sha256:d854411eb5ee9cb4bc5d0e66e3634aeb8f594210f6a1bed96dbed57ec70f181c",
+ "sha256:da7b9c006171be1f9ddb12cc6e0d3d703b95f7f43cb5e2c6f5f15d3233fcf202",
+ "sha256:daf0aa79842b571308d7c31a9c43bc99a30b6328e6aea3f50388cd8f69ba7dbc",
+ "sha256:de7cd61a88a982edfec01ea755b0740e94766e00a1ceceeafef3ed4c85c605cd"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==1.4.1"
+ },
"pyyaml": {
"hashes": [
"sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf",
],
"version": "==6.0"
},
+ "pyyaml-env-tag": {
+ "hashes": [
+ "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb",
+ "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"
+ ],
+ "markers": "python_version >= '3.6'",
+ "version": "==0.1"
+ },
"requests": {
"hashes": [
"sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983",
"markers": "python_version >= '3.7' and python_version < '4'",
"version": "==2.28.1"
},
+ "scipy": {
+ "hashes": [
+ "sha256:02b567e722d62bddd4ac253dafb01ce7ed8742cf8031aea030a41414b86c1125",
+ "sha256:1166514aa3bbf04cb5941027c6e294a000bba0cf00f5cdac6c77f2dad479b434",
+ "sha256:1da52b45ce1a24a4a22db6c157c38b39885a990a566748fc904ec9f03ed8c6ba",
+ "sha256:23b22fbeef3807966ea42d8163322366dd89da9bebdc075da7034cee3a1441ca",
+ "sha256:28d2cab0c6ac5aa131cc5071a3a1d8e1366dad82288d9ec2ca44df78fb50e649",
+ "sha256:2ef0fbc8bcf102c1998c1f16f15befe7cffba90895d6e84861cd6c6a33fb54f6",
+ "sha256:3b69b90c9419884efeffaac2c38376d6ef566e6e730a231e15722b0ab58f0328",
+ "sha256:4b93ec6f4c3c4d041b26b5f179a6aab8f5045423117ae7a45ba9710301d7e462",
+ "sha256:4e53a55f6a4f22de01ffe1d2f016e30adedb67a699a310cdcac312806807ca81",
+ "sha256:6311e3ae9cc75f77c33076cb2794fb0606f14c8f1b1c9ff8ce6005ba2c283621",
+ "sha256:65b77f20202599c51eb2771d11a6b899b97989159b7975e9b5259594f1d35ef4",
+ "sha256:6cc6b33139eb63f30725d5f7fa175763dc2df6a8f38ddf8df971f7c345b652dc",
+ "sha256:70de2f11bf64ca9921fda018864c78af7147025e467ce9f4a11bc877266900a6",
+ "sha256:70ebc84134cf0c504ce6a5f12d6db92cb2a8a53a49437a6bb4edca0bc101f11c",
+ "sha256:83606129247e7610b58d0e1e93d2c5133959e9cf93555d3c27e536892f1ba1f2",
+ "sha256:93d07494a8900d55492401917a119948ed330b8c3f1d700e0b904a578f10ead4",
+ "sha256:9c4e3ae8a716c8b3151e16c05edb1daf4cb4d866caa385e861556aff41300c14",
+ "sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f",
+ "sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33",
+ "sha256:a0aa8220b89b2e3748a2836fbfa116194378910f1a6e78e4675a095bcd2c762d",
+ "sha256:d3b3c8924252caaffc54d4a99f1360aeec001e61267595561089f8b5900821bb",
+ "sha256:e013aed00ed776d790be4cb32826adb72799c61e318676172495383ba4570aa4",
+ "sha256:f3e7a8867f307e3359cc0ed2c63b61a1e33a19080f92fe377bc7d49f646f2ec1"
+ ],
+ "index": "pypi",
+ "version": "==1.8.1"
+ },
"setuptools": {
"hashes": [
"sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31",
"sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d",
"sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"
],
- "index": "pypi",
"version": "==5.3.0"
},
"sphinx-autobuild": {
],
"markers": "python_version >= '3.6'",
"version": "==20.16.6"
+ },
+ "watchdog": {
+ "hashes": [
+ "sha256:083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412",
+ "sha256:117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654",
+ "sha256:186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306",
+ "sha256:195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33",
+ "sha256:226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd",
+ "sha256:247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7",
+ "sha256:255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892",
+ "sha256:43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609",
+ "sha256:4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6",
+ "sha256:5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1",
+ "sha256:64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591",
+ "sha256:6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d",
+ "sha256:70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d",
+ "sha256:7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c",
+ "sha256:8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3",
+ "sha256:97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39",
+ "sha256:9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213",
+ "sha256:a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330",
+ "sha256:ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428",
+ "sha256:b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1",
+ "sha256:bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846",
+ "sha256:d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153",
+ "sha256:d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3",
+ "sha256:ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9",
+ "sha256:ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658"
+ ],
+ "index": "pypi",
+ "version": "==2.1.9"
+ },
+ "zipp": {
+ "hashes": [
+ "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1",
+ "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"
+ ],
+ "markers": "python_version < '3.9'",
+ "version": "==3.10.0"
}
}
}
[](https://github.com/paperless-ngx/paperless-ngx/actions)
[](https://crowdin.com/project/paperless-ngx)
-[](https://paperless-ngx.readthedocs.io/en/latest/?badge=latest)
+[](https://docs.paperless-ngx.com)
[](https://coveralls.io/github/paperless-ngx/paperless-ngx?branch=master)
-[](https://matrix.to/#/#paperless:adnidor.de)
+[](https://matrix.to/#/%23paperlessngx%3Amatrix.org)
+[](https://demo.paperless-ngx.com)
<p align="center">
<img src="https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/png/Black%20logo%20-%20no%20background.png#gh-light-mode-only" width="50%" />
# Features
-
-
+
+
- Organize and index your scanned documents with tags, correspondents, types, and more.
- Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents.
- Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents).
- - Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ngx.readthedocs.io/en/latest/configuration.html#tika-settings))
+ - Office document support is optional and provided by Apache Tika (see [configuration](https://docs.paperless-ngx.com/configuration/#tika))
- Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely.
- Single page application front end.
- Includes a dashboard that shows basic statistics and has document upload.
- Paperless-ngx learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless.
- Optimized for multi core systems: Paperless-ngx consumes multiple documents in parallel.
- The integrated sanity checker makes sure that your document archive is in good health.
-- [More screenshots are available in the documentation](https://paperless-ngx.readthedocs.io/en/latest/screenshots.html).
+- [More screenshots are available in the documentation](https://docs.paperless-ngx.com/#screenshots).
# Getting started
bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
```
-Alternatively, you can install the dependencies and setup apache and a database server yourself. The [documentation](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation) has a step by step guide on how to do it.
+Alternatively, you can install the dependencies and setup apache and a database server yourself. The [documentation](https://docs.paperless-ngx.com/setup/#installation) has a step by step guide on how to do it.
-Migrating from Paperless-ng is easy, just drop in the new docker image! See the [documentation on migrating](https://paperless-ngx.readthedocs.io/en/latest/setup.html#migrating-from-paperless-ng) for more details.
+Migrating from Paperless-ng is easy, just drop in the new docker image! See the [documentation on migrating](https://docs.paperless-ngx.com/setup/#migrating-to-paperless-ngx) for more details.
<!-- omit in toc -->
### Documentation
-The documentation for Paperless-ngx is available on [ReadTheDocs](https://paperless-ngx.readthedocs.io/).
+The documentation for Paperless-ngx is available at [https://docs.paperless-ngx.com](https://docs.paperless-ngx.com/).
# Contributing
-If you feel like contributing to the project, please do! Bug fixes, enhancements, visual fixes etc. are always welcome. If you want to implement something big: Please start a discussion about that! The [documentation](https://paperless-ngx.readthedocs.io/en/latest/extending.html) has some basic information on how to get started.
+If you feel like contributing to the project, please do! Bug fixes, enhancements, visual fixes etc. are always welcome. If you want to implement something big: Please start a discussion about that! The [documentation](https://docs.paperless-ngx.com/development/) has some basic information on how to get started.
## Community Support
- [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless-ngx. Also works with the original Paperless and Paperless-ng.
- [Paperless Share](https://github.com/qcasey/paperless_share). Share any files from your Android application with paperless. Very simple, but works with all of the mobile scanning apps out there that allow you to share scanned documents.
- [Scan to Paperless](https://github.com/sbrunner/scan-to-paperless): Scan and prepare (crop, deskew, OCR, ...) your documents for Paperless.
+- [Paperless Mobile](https://github.com/astubenbord/paperless-mobile): A modern, feature rich mobile application for Paperless.
These projects also exist, but their status and compatibility with paperless-ngx is unknown.
--- /dev/null
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+# OWNERS file for Kubernetes
+OWNERS
+# helm-docs templates
+*.gotmpl
--- /dev/null
+---
+apiVersion: v2
+appVersion: "1.9.2"
+description: Paperless-ngx - Index and archive all of your scanned paper documents
+name: paperless
+version: 10.0.0
+kubeVersion: ">=1.16.0-0"
+keywords:
+ - paperless
+ - paperless-ngx
+ - dms
+ - document
+home: https://github.com/paperless-ngx/paperless-ngx/tree/main/charts/paperless-ngx
+icon: https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/svg/square.svg
+sources:
+ - https://github.com/paperless-ngx/paperless-ngx
+maintainers:
+ - name: Paperless-ngx maintainers
+dependencies:
+ - name: common
+ repository: https://library-charts.k8s-at-home.com
+ version: 4.5.2
+ - name: postgresql
+ version: 11.6.12
+ repository: https://charts.bitnami.com/bitnami
+ condition: postgresql.enabled
+ - name: redis
+ version: 16.13.1
+ repository: https://charts.bitnami.com/bitnami
+ condition: redis.enabled
+deprecated: false
+annotations:
+ artifacthub.io/changes: |
+ - kind: changed
+ description: Moved to Paperless-ngx ownership
--- /dev/null
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2020 k8s@Home
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
--- /dev/null
+# paperless
+
+ 
+
+Paperless-ngx - Index and archive all of your scanned paper documents
+
+**Homepage:** <https://github.com/paperless-ngx/paperless-ngx/tree/main/charts/paperless-ngx>
+
+## Maintainers
+
+| Name | Email | Url |
+| ---- | ------ | --- |
+| Paperless-ngx maintainers | | |
+
+## Source Code
+
+* <https://github.com/paperless-ngx/paperless-ngx>
+
+## Requirements
+
+Kubernetes: `>=1.16.0-0`
+
+| Repository | Name | Version |
+|------------|------|---------|
+| https://charts.bitnami.com/bitnami | postgresql | 11.6.12 |
+| https://charts.bitnami.com/bitnami | redis | 16.13.1 |
+| https://library-charts.k8s-at-home.com | common | 4.5.2 |
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| env | object | See below | See the following files for additional environment variables: https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose/ https://github.com/paperless-ngx/paperless-ngx/blob/main/paperless.conf.example |
+| env.COMPOSE_PROJECT_NAME | string | `"paperless"` | Project name |
+| env.PAPERLESS_DBHOST | string | `nil` | Database host to use |
+| env.PAPERLESS_OCR_LANGUAGE | string | `"eng"` | OCR languages to install |
+| env.PAPERLESS_PORT | int | `8000` | Port to use |
+| env.PAPERLESS_REDIS | string | `nil` | Redis to use |
+| image.pullPolicy | string | `"IfNotPresent"` | image pull policy |
+| image.repository | string | `"ghcr.io/paperless-ngx/paperless-ngx"` | image repository |
+| image.tag | string | chart.appVersion | image tag |
+| ingress.main | object | See values.yaml | Enable and configure ingress settings for the chart under this key. |
+| persistence.consume | object | See values.yaml | Configure volume to monitor for new documents. |
+| persistence.data | object | See values.yaml | Configure persistence for data. |
+| persistence.export | object | See values.yaml | Configure export volume. |
+| persistence.media | object | See values.yaml | Configure persistence for media. |
+| postgresql | object | See values.yaml | Enable and configure postgresql database subchart under this key. For more options see [postgresql chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/postgresql) |
+| redis | object | See values.yaml | Enable and configure redis subchart under this key. For more options see [redis chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/redis) |
+| service | object | See values.yaml | Configures service settings for the chart. |
+
--- /dev/null
+{{- define "custom.custom.configuration.header" -}}
+## Custom configuration
+{{- end -}}
+
+{{- define "custom.custom.configuration" -}}
+{{ template "custom.custom.configuration.header" . }}
+N/A
+{{- end -}}
--- /dev/null
+env:
+ PAPERLESS_REDIS: redis://paperless-redis-headless:6379
+
+persistence:
+ data:
+ enabled: true
+ type: emptyDir
+ media:
+ enabled: true
+ type: emptyDir
+ consume:
+ enabled: true
+ type: emptyDir
+ export:
+ enabled: true
+ type: emptyDir
+
+redis:
+ enabled: true
+ architecture: standalone
+ auth:
+ enabled: false
+ master:
+ persistence:
+ enabled: false
+ fullnameOverride: paperless-redis
--- /dev/null
+{{- include "common.notes.defaultNotes" . }}
+2. Create a super user by running the command:
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "common.names.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ kubectl exec -it --namespace {{ .Release.Namespace }} $POD_NAME -- bash -c "python manage.py createsuperuser"
--- /dev/null
+{{/* Make sure all variables are set properly */}}
+{{- include "common.values.setup" . }}
+
+{{/* Append the hardcoded settings */}}
+{{- define "paperless.harcodedValues" -}}
+env:
+ PAPERLESS_URL: http{{if ne ( len .Values.ingress.main.tls ) 0 }}s{{end}}://{{ (first .Values.ingress.main.hosts).host }}
+{{- end -}}
+{{- $_ := merge .Values (include "paperless.harcodedValues" . | fromYaml) -}}
+
+{{ include "common.all" . }}
--- /dev/null
+#
+# IMPORTANT NOTE
+#
+# This chart inherits from our common library chart. You can check the default values/options here:
+# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
+#
+
+image:
+ # -- image repository
+ repository: ghcr.io/paperless-ngx/paperless-ngx
+ # -- image pull policy
+ pullPolicy: IfNotPresent
+ # -- image tag
+ # @default -- chart.appVersion
+ tag:
+
+# -- See the following files for additional environment variables:
+# https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose/
+# https://github.com/paperless-ngx/paperless-ngx/blob/main/paperless.conf.example
+# @default -- See below
+env:
+ # -- Project name
+ COMPOSE_PROJECT_NAME: paperless
+ # -- Redis to use
+ PAPERLESS_REDIS:
+ # -- OCR languages to install
+ PAPERLESS_OCR_LANGUAGE: eng
+ # USERMAP_UID: 1000
+ # USERMAP_GID: 1000
+ # PAPERLESS_TIME_ZONE: Europe/London
+ # -- Database host to use
+ PAPERLESS_DBHOST:
+ # -- Port to use
+ PAPERLESS_PORT: 8000
+ # -- Username for the root user
+ # PAPERLESS_ADMIN_USER: admin
+ # -- Password for the root user
+ # PAPERLESS_ADMIN_PASSWORD: admin
+ # PAPERLESS_URL: <set to main ingress by default>
+
+# -- Configures service settings for the chart.
+# @default -- See values.yaml
+service:
+ main:
+ ports:
+ http:
+ port: 8000
+
+ingress:
+ # -- Enable and configure ingress settings for the chart under this key.
+ # @default -- See values.yaml
+ main:
+ enabled: false
+
+persistence:
+ # -- Configure persistence for data.
+ # @default -- See values.yaml
+ data:
+ enabled: false
+ mountPath: /usr/src/paperless/data
+ accessMode: ReadWriteOnce
+ emptyDir:
+ enabled: false
+ # -- Configure persistence for media.
+ # @default -- See values.yaml
+ media:
+ enabled: false
+ mountPath: /usr/src/paperless/media
+ accessMode: ReadWriteOnce
+ emptyDir:
+ enabled: false
+ # -- Configure volume to monitor for new documents.
+ # @default -- See values.yaml
+ consume:
+ enabled: false
+ mountPath: /usr/src/paperless/consume
+ accessMode: ReadWriteOnce
+ emptyDir:
+ enabled: false
+ # -- Configure export volume.
+ # @default -- See values.yaml
+ export:
+ enabled: false
+ mountPath: /usr/src/paperless/export
+ accessMode: ReadWriteOnce
+ emptyDir:
+ enabled: false
+
+# -- Enable and configure postgresql database subchart under this key.
+# For more options see [postgresql chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/postgresql)
+# @default -- See values.yaml
+postgresql:
+ enabled: false
+ postgresqlUsername: paperless
+ postgresqlPassword: paperless
+ postgresqlDatabase: paperless
+ persistence:
+ enabled: false
+ # storageClass: ""
+
+# -- Enable and configure redis subchart under this key.
+# For more options see [redis chart documentation](https://github.com/bitnami/charts/tree/master/bitnami/redis)
+# @default -- See values.yaml
+redis:
+ enabled: false
+ auth:
+ enabled: false
--- /dev/null
+# docker-compose file for running paperless testing with actual gotenberg
+# and Tika containers for a more end to end test of the Tika related functionality
+# Can be used locally or by the CI to start the nessecary containers with the
+# correct networking for the tests
+
+version: "3.7"
+services:
+ gotenberg:
+ image: docker.io/gotenberg/gotenberg:7.6
+ hostname: gotenberg
+ container_name: gotenberg
+ network_mode: host
+ restart: unless-stopped
+ # The gotenberg chromium route is used to convert .eml files. We do not
+ # want to allow external content like tracking pixels or even javascript.
+ command:
+ - "gotenberg"
+ - "--chromium-disable-javascript=true"
+ - "--chromium-allow-list=file:///tmp/.*"
+ tika:
+ image: ghcr.io/paperless-ngx/tika:latest
+ hostname: tika
+ container_name: tika
+ network_mode: host
+ restart: unless-stopped
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: db
- PAPERLESS_DBUSER: paperless
- PAPERLESS_DBPASSWORD: paperless
+ PAPERLESS_DBUSER: paperless # only needed if non-default username
+ PAPERLESS_DBPASS: paperless # only needed if non-default password
PAPERLESS_DBPORT: 3306
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
gotenberg:
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
+ # The gotenberg chromium route is used to convert .eml files. We do not
+ # want to allow external content like tracking pixels or even javascript.
command:
- "gotenberg"
- - "--chromium-disable-routes=true"
+ - "--chromium-disable-javascript=true"
+ - "--chromium-allow-list=file:///tmp/.*"
tika:
image: ghcr.io/paperless-ngx/tika:latest
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: db
- PAPERLESS_DBUSER: paperless
- PAPERLESS_DBPASSWORD: paperless
+ PAPERLESS_DBUSER: paperless # only needed if non-default username
+ PAPERLESS_DBPASS: paperless # only needed if non-default password
PAPERLESS_DBPORT: 3306
gotenberg:
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
+
+ # The gotenberg chromium route is used to convert .eml files. We do not
+ # want to allow external content like tracking pixels or even javascript.
command:
- "gotenberg"
- - "--chromium-disable-routes=true"
+ - "--chromium-disable-javascript=true"
+ - "--chromium-allow-list=file:///tmp/.*"
tika:
image: ghcr.io/paperless-ngx/tika:latest
gotenberg:
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
+
+ # The gotenberg chromium route is used to convert .eml files. We do not
+ # want to allow external content like tracking pixels or even javascript.
command:
- "gotenberg"
- - "--chromium-disable-routes=true"
+ - "--chromium-disable-javascript=true"
+ - "--chromium-allow-list=file:///tmp/.*"
tika:
image: ghcr.io/paperless-ngx/tika:latest
}
+custom_container_init() {
+ # Mostly borrowed from the LinuxServer.io base image
+ # https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
+ local -r custom_script_dir="/custom-cont-init.d"
+ # Tamper checking.
+ # Don't run files which are owned by anyone except root
+ # Don't run files which are writeable by others
+ if [ -d "${custom_script_dir}" ]; then
+ if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
+ echo "**** Potential tampering with custom scripts detected ****"
+ echo "**** The folder '${custom_script_dir}' must be owned by root ****"
+ return 0
+ fi
+ if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
+ echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
+ echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
+ return 0
+ fi
+
+ # Make sure custom init directory has files in it
+ if [ -n "$(/bin/ls -A "${custom_script_dir}" 2>/dev/null)" ]; then
+ echo "[custom-init] files found in ${custom_script_dir} executing"
+ # Loop over files in the directory
+ for SCRIPT in "${custom_script_dir}"/*; do
+ NAME="$(basename "${SCRIPT}")"
+ if [ -f "${SCRIPT}" ]; then
+ echo "[custom-init] ${NAME}: executing..."
+ /bin/bash "${SCRIPT}"
+ echo "[custom-init] ${NAME}: exited $?"
+ elif [ ! -f "${SCRIPT}" ]; then
+ echo "[custom-init] ${NAME}: is not a file"
+ fi
+ done
+ else
+ echo "[custom-init] no custom files found exiting..."
+ fi
+
+ fi
+}
+
initialize() {
# Setup environment from secrets before anything else
set -e
"${gosu_cmd[@]}" /sbin/docker-prepare.sh
+
+ # Leave this last thing
+ custom_container_init
+
}
install_languages() {
echo "Installing languages..."
- local -r langs="$1"
- read -ra langs <<<"$langs"
+ read -ra langs <<<"$1"
# Check that it is not empty
if [ ${#langs[@]} -eq 0 ]; then
fi
}
-custom_container_init() {
- # Mostly borrowed from the LinuxServer.io base image
- # https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
- local -r custom_script_dir="/custom-cont-init.d"
- # Tamper checking.
- # Don't run files which are owned by anyone except root
- # Don't run files which are writeable by others
- if [ -d "${custom_script_dir}" ]; then
- if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
- echo "**** Potential tampering with custom scripts detected ****"
- echo "**** The folder '${custom_script_dir}' must be owned by root ****"
- return 0
- fi
- if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
- echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
- echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
- return 0
- fi
-
- # Make sure custom init directory has files in it
- if [ -n "$(/bin/ls -A "${custom_script_dir}" 2>/dev/null)" ]; then
- echo "[custom-init] files found in ${custom_script_dir} executing"
- # Loop over files in the directory
- for SCRIPT in "${custom_script_dir}"/*; do
- NAME="$(basename "${SCRIPT}")"
- if [ -f "${SCRIPT}" ]; then
- echo "[custom-init] ${NAME}: executing..."
- /bin/bash "${SCRIPT}"
- echo "[custom-init] ${NAME}: exited $?"
- elif [ ! -f "${SCRIPT}" ]; then
- echo "[custom-init] ${NAME}: is not a file"
- fi
- done
- else
- echo "[custom-init] no custom files found exiting..."
- fi
-
- fi
-}
-
do_work() {
if [[ "${PAPERLESS_DBENGINE}" == "mariadb" ]]; then
wait_for_mariadb
superuser
- # Leave this last thing
- custom_container_init
-
}
do_work
+++ /dev/null
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = _build
-
-# User-friendly check for sphinx-build
-ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
-$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
-endif
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " livehtml to preview changes with live reload in your browser"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " texinfo to make Texinfo files"
- @echo " info to make Texinfo files and run them through makeinfo"
- @echo " gettext to make PO message catalogs"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " xml to make Docutils-native XML files"
- @echo " pseudoxml to make pseudoxml-XML files for display purposes"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
-
-clean:
- rm -rf $(BUILDDIR)/*
-
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-livehtml:
- sphinx-autobuild "./" "$(BUILDDIR)" $(O)
-
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhc"
-
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan"
- @echo "# devhelp"
-
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-latexpdfja:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through platex and dvipdfmx..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
- @echo "Run \`make' in that directory to run these through makeinfo" \
- "(use \`make info' here to do that automatically)."
-
-info:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo "Running Texinfo files through makeinfo..."
- make -C $(BUILDDIR)/texinfo info
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
- @echo
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
-
-xml:
- $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
- @echo
- @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-pseudoxml:
- $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
- @echo
- @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+++ /dev/null
-/* Variables */
-:root {
- --color-text-body: #5c5962;
- --color-text-body-light: #fcfcfc;
- --color-text-anchor: #7253ed;
- --color-text-alt: rgba(0, 0, 0, 0.3);
- --color-text-title: #27262b;
- --color-text-code-inline: #e74c3c;
- --color-text-code-nt: #062873;
- --color-text-selection: #b19eff;
- --color-bg-body: #fcfcfc;
- --color-bg-body-alt: #f3f6f6;
- --color-bg-side-nav: #f5f6fa;
- --color-bg-side-nav-hover: #ebedf5;
- --color-bg-code-block: var(--color-bg-side-nav);
- --color-border: #eeebee;
- --color-btn-neutral-bg: #f3f6f6;
- --color-btn-neutral-bg-hover: #e5ebeb;
- --color-success-title: #1abc9c;
- --color-success-body: #dbfaf4;
- --color-warning-title: #f0b37e;
- --color-warning-body: #ffedcc;
- --color-danger-title: #f29f97;
- --color-danger-body: #fdf3f2;
- --color-info-title: #6ab0de;
- --color-info-body: #e7f2fa;
-}
-
-.dark-mode {
- --color-text-body: #abb2bf;
- --color-text-body-light: #9499a2;
- --color-text-alt: rgba(0255, 255, 255, 0.5);
- --color-text-title: var(--color-text-anchor);
- --color-text-code-inline: #abb2bf;
- --color-text-code-nt: #2063f3;
- --color-text-selection: #030303;
- --color-bg-body: #1d1d20 !important;
- --color-bg-body-alt: #131315;
- --color-bg-side-nav: #18181a;
- --color-bg-side-nav-hover: #101216;
- --color-bg-code-block: #101216;
- --color-border: #47494f;
- --color-btn-neutral-bg: #242529;
- --color-btn-neutral-bg-hover: #101216;
- --color-success-title: #02120f;
- --color-success-body: #041b17;
- --color-warning-title: #1b0e03;
- --color-warning-body: #371d06;
- --color-danger-title: #120902;
- --color-danger-body: #1b0503;
- --color-info-title: #020608;
- --color-info-body: #06141e;
-}
-
-* {
- transition: background-color 0.3s ease, border-color 0.3s ease;
-}
-
-/* Typography */
-body {
- font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
- font-size: inherit;
- line-height: 1.4;
- color: var(--color-text-body);
-}
-
-.rst-content p {
- word-break: break-word;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-family: inherit;
-}
-
-.rst-content .toctree-wrapper>p.caption, .rst-content h1, .rst-content h2, .rst-content h3, .rst-content h4, .rst-content h5, .rst-content h6 {
- padding-top: .5em;
-}
-
-p, .main-content-wrap, .rst-content .section ul, .rst-content .toctree-wrapper ul, .rst-content section ul, .wy-plain-list-disc, article ul {
- line-height: 1.6;
-}
-
-pre, .code, .rst-content .linenodiv pre, .rst-content div[class^=highlight] pre, .rst-content pre.literal-block {
- font-family: "SFMono-Regular", Menlo,Consolas, Monospace;
- font-size: 0.75em;
- line-height: 1.8;
-}
-
-.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4 {
- font-size: 1rem
-}
-
-.rst-versions {
- font-family: inherit;
- line-height: 1;
-}
-
-footer, footer p {
- font-size: .8rem;
-}
-
-footer .rst-footer-buttons {
- font-size: 1rem;
-}
-
-@media (max-width: 400px) {
- /* break code lines on mobile */
- pre, code {
- word-break: break-word;
- }
-}
-
-
-/* Layout */
-.wy-side-nav-search, .wy-menu-vertical {
- width: auto;
-}
-
-.wy-nav-side {
- z-index: 0;
- display: flex;
- flex-wrap: wrap;
- background-color: var(--color-bg-side-nav);
-}
-
-.wy-side-scroll {
- width: 100%;
- overflow-y: auto;
-}
-
-@media (min-width: 66.5rem) {
- .wy-side-scroll {
- width:264px
- }
-}
-
-@media (min-width: 50rem) {
- .wy-nav-side {
- flex-wrap: nowrap;
- position: fixed;
- width: 248px;
- height: 100%;
- flex-direction: column;
- border-right: 1px solid var(--color-border);
- align-items:flex-end
- }
-}
-
-@media (min-width: 66.5rem) {
- .wy-nav-side {
- width: calc((100% - 1064px) / 2 + 264px);
- min-width:264px
- }
-}
-
-@media (min-width: 50rem) {
- .wy-nav-content-wrap {
- position: relative;
- max-width: 800px;
- margin-left:248px
- }
-}
-
-@media (min-width: 66.5rem) {
- .wy-nav-content-wrap {
- margin-left:calc((100% - 1064px) / 2 + 264px)
- }
-}
-
-
-/* Colors */
-body.wy-body-for-nav,
-.wy-nav-content {
- background: var(--color-bg-body);
-}
-
-.wy-nav-side {
- border-right: 1px solid var(--color-border);
-}
-
-.wy-side-nav-search, .wy-nav-top {
- background: var(--color-bg-side-nav);
- border-bottom: 1px solid var(--color-border);
-}
-
-.wy-nav-content-wrap {
- background: inherit;
-}
-
-.wy-side-nav-search > a, .wy-nav-top a, .wy-nav-top i {
- color: var(--color-text-title);
-}
-
-.wy-side-nav-search > a:hover, .wy-nav-top a:hover {
- background: transparent;
-}
-
-.wy-side-nav-search > div.version {
- color: var(--color-text-alt)
-}
-
-.wy-side-nav-search > div[role="search"] {
- border-top: 1px solid var(--color-border);
-}
-
-.wy-menu-vertical li.toctree-l2.current>a, .wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,
-.wy-menu-vertical li.toctree-l3.current>a, .wy-menu-vertical li.toctree-l3.current li.toctree-l4>a {
- background: var(--color-bg-side-nav);
-}
-
-.rst-content .highlighted {
- background: #eedd85;
- box-shadow: 0 0 0 2px #eedd85;
- font-weight: 600;
-}
-
-.wy-side-nav-search input[type=text],
-html.writer-html5 .rst-content table.docutils th {
- color: var(--color-text-body);
-}
-
-.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
-.wy-table-backed,
-.wy-table-odd td,
-.wy-table-striped tr:nth-child(2n-1) td {
- background-color: var(--color-bg-body-alt);
-}
-
-.rst-content table.docutils,
-.wy-table-bordered-all,
-html.writer-html5 .rst-content table.docutils th,
-.rst-content table.docutils td,
-.wy-table-bordered-all td,
-hr {
- border-color: var(--color-border) !important;
-}
-
-::selection {
- background: var(--color-text-selection);
-}
-
-/* Ridiculous rules are taken from sphinx_rtd */
-.rst-content .admonition-title,
-.wy-alert-title {
- color: var(--color-text-body-light);
-}
-
-.rst-content .hint,
-.rst-content .important,
-.rst-content .tip,
-.rst-content .wy-alert-success,
-.wy-alert.wy-alert-success {
- background: var(--color-success-body);
-}
-
-.rst-content .hint .admonition-title,
-.rst-content .hint .wy-alert-title,
-.rst-content .important .admonition-title,
-.rst-content .important .wy-alert-title,
-.rst-content .tip .admonition-title,
-.rst-content .tip .wy-alert-title,
-.rst-content .wy-alert-success .admonition-title,
-.rst-content .wy-alert-success .wy-alert-title,
-.wy-alert.wy-alert-success .rst-content .admonition-title,
-.wy-alert.wy-alert-success .wy-alert-title {
- background-color: var(--color-success-title);
-}
-
-.rst-content .admonition-todo,
-.rst-content .attention,
-.rst-content .caution,
-.rst-content .warning,
-.rst-content .wy-alert-warning,
-.wy-alert.wy-alert-warning {
- background: var(--color-warning-body);
-}
-
-.rst-content .admonition-todo .admonition-title,
-.rst-content .admonition-todo .wy-alert-title,
-.rst-content .attention .admonition-title,
-.rst-content .attention .wy-alert-title,
-.rst-content .caution .admonition-title,
-.rst-content .caution .wy-alert-title,
-.rst-content .warning .admonition-title,
-.rst-content .warning .wy-alert-title,
-.rst-content .wy-alert-warning .admonition-title,
-.rst-content .wy-alert-warning .wy-alert-title,
-.rst-content .wy-alert.wy-alert-warning .admonition-title,
-.wy-alert.wy-alert-warning .rst-content .admonition-title,
-.wy-alert.wy-alert-warning .wy-alert-title {
- background: var(--color-warning-title);
-}
-
-.rst-content .danger,
-.rst-content .error,
-.rst-content .wy-alert-danger,
-.wy-alert.wy-alert-danger {
- background: var(--color-danger-body);
-}
-
-.rst-content .danger .admonition-title,
-.rst-content .danger .wy-alert-title,
-.rst-content .error .admonition-title,
-.rst-content .error .wy-alert-title,
-.rst-content .wy-alert-danger .admonition-title,
-.rst-content .wy-alert-danger .wy-alert-title,
-.wy-alert.wy-alert-danger .rst-content .admonition-title,
-.wy-alert.wy-alert-danger .wy-alert-title {
- background: var(--color-danger-title);
-}
-
-.rst-content .note,
-.rst-content .seealso,
-.rst-content .wy-alert-info,
-.wy-alert.wy-alert-info {
- background: var(--color-info-body);
-}
-
-.rst-content .note .admonition-title,
-.rst-content .note .wy-alert-title,
-.rst-content .seealso .admonition-title,
-.rst-content .seealso .wy-alert-title,
-.rst-content .wy-alert-info .admonition-title,
-.rst-content .wy-alert-info .wy-alert-title,
-.wy-alert.wy-alert-info .rst-content .admonition-title,
-.wy-alert.wy-alert-info .wy-alert-title {
- background: var(--color-info-title);
-}
-
-
-
-/* Links */
-a, a:visited,
-.wy-menu-vertical a,
-a.icon.icon-home,
-.wy-menu-vertical li.toctree-l1.current > a.current {
- color: var(--color-text-anchor);
- text-decoration: none;
-}
-
-a:hover, .wy-breadcrumbs-aside a {
- color: var(--color-text-anchor); /* reset */
-}
-
-.rst-versions a, .rst-versions .rst-current-version {
- color: #var(--color-text-anchor);
-}
-
-.wy-nav-content a.reference, .wy-nav-content a:not([class]) {
- background-image: linear-gradient(var(--color-border) 0%, var(--color-border) 100%);
- background-repeat: repeat-x;
- background-position: 0 100%;
- background-size: 1px 1px;
-}
-
-.wy-nav-content a.reference:hover, .wy-nav-content a:not([class]):hover {
- background-image: linear-gradient(rgba(114,83,237,0.45) 0%, rgba(114,83,237,0.45) 100%);
- background-size: 1px 1px;
-}
-
-.wy-menu-vertical a:hover,
-.wy-menu-vertical li.current a:hover,
-.wy-menu-vertical a:active {
- background: var(--color-bg-side-nav-hover) !important;
- color: var(--color-text-body);
-}
-
-.wy-menu-vertical li.toctree-l1.current>a,
-.wy-menu-vertical li.current>a,
-.wy-menu-vertical li.on a {
- background-color: var(--color-bg-side-nav-hover);
- border: none;
- font-weight: normal;
-}
-
-.wy-menu-vertical li.current {
- background-color: inherit;
-}
-
-.wy-menu-vertical li.current a {
- border-right: none;
-}
-
-.wy-menu-vertical li.toctree-l2 a,
-.wy-menu-vertical li.toctree-l3 a,
-.wy-menu-vertical li.toctree-l4 a,
-.wy-menu-vertical li.toctree-l5 a,
-.wy-menu-vertical li.toctree-l6 a,
-.wy-menu-vertical li.toctree-l7 a,
-.wy-menu-vertical li.toctree-l8 a,
-.wy-menu-vertical li.toctree-l9 a,
-.wy-menu-vertical li.toctree-l10 a {
- color: var(--color-text-body);
-}
-
-a.image-reference, a.image-reference:hover {
- background: none !important;
-}
-
-a.image-reference img {
- cursor: zoom-in;
-}
-
-
-/* Code blocks */
-.rst-content code, .rst-content tt, code {
- padding: 0.25em;
- font-weight: 400;
- background-color: var(--color-bg-code-block);
- border: 1px solid var(--color-border);
- border-radius: 4px;
-}
-
-.rst-content div[class^=highlight], .rst-content pre.literal-block {
- padding: 0.7rem;
- margin-top: 0;
- margin-bottom: 0.75rem;
- overflow-x: auto;
- background-color: var(--color-bg-side-nav);
- border-color: var(--color-border);
- border-radius: 4px;
- box-shadow: none;
-}
-
-.rst-content .admonition-title,
-.rst-content div.admonition,
-.wy-alert-title {
- padding: 10px 12px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-
-.highlight .go {
- color: inherit;
-}
-
-.highlight .nt {
- color: var(--color-text-code-nt);
-}
-
-.rst-content code.literal,
-.rst-content tt.literal,
-html.writer-html5 .rst-content dl.footnote code {
- border-color: var(--color-border);
- background-color: var(--color-border);
- color: var(--color-text-code-inline)
-}
-
-
-/* Search */
-.wy-side-nav-search input[type=text] {
- border: none;
- border-radius: 0;
- background-color: transparent;
- font-family: inherit;
- font-size: .85rem;
- box-shadow: none;
- padding: .7rem 1rem .7rem 2.8rem;
- margin: 0;
-}
-
-#rtd-search-form {
- position: relative;
-}
-
-#rtd-search-form:before {
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f002";
- color: var(--color-text-alt);
- position: absolute;
- left: 1.5rem;
- top: .7rem;
-}
-
-/* Side nav */
-.wy-side-nav-search {
- padding: 1rem 0 0 0;
-}
-
-.wy-menu-vertical li a button.toctree-expand {
- float: right;
- margin-right: -1.5em;
- padding: 0 .5em;
-}
-
-.wy-menu-vertical a,
-.wy-menu-vertical li.current>a,
-.wy-menu-vertical li.current li>a {
- padding-right: 1.5em !important;
-}
-
-.wy-menu-vertical li.current li>a.current {
- font-weight: 600;
-}
-
-/* Misc spacing */
-.rst-content .admonition-title, .wy-alert-title {
- padding: 10px 12px;
-}
-
-/* Buttons */
-.btn {
- display: inline-block;
- box-sizing: border-box;
- padding: 0.3em 1em;
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- font-weight: 500;
- line-height: 1.5;
- color: #var(--color-text-anchor);
- text-decoration: none;
- vertical-align: baseline;
- background-color: #f7f7f7;
- border-width: 0;
- border-radius: 4px;
- box-shadow: 0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08);
- appearance: none;
-}
-
-.btn:active {
- padding: 0.3em 1em;
-}
-
-.rst-content .btn:focus {
- outline: 1px solid #ccc;
-}
-
-.rst-content .btn-neutral, .rst-content .btn span.fa {
- color: var(--color-text-body) !important;
-}
-
-.btn-neutral {
- background-color: var(--color-btn-neutral-bg) !important;
- color: var(--color-btn-neutral-text) !important;
- border: 1px solid var(--color-btn-neutral-bg);
-}
-
-.btn:hover, .btn-neutral:hover {
- background-color: var(--color-btn-neutral-bg-hover) !important;
-}
-
-
-/* Icon overrides */
-.wy-side-nav-search a.icon-home:before {
- display: none;
-}
-
-.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before {
- content: "\f106"; /* fa-angle-up */
-}
-
-.fa-plus-square-o:before, .wy-menu-vertical li button.toctree-expand:before {
- content: "\f107"; /* fa-angle-down */
-}
-
-
-/* Misc */
-.wy-nav-top {
- line-height: 36px;
-}
-
-.wy-nav-top > i {
- font-size: 24px;
- padding: 8px 0 0 2px;
- color:#var(--color-text-anchor);
-}
-
-.rst-content table.docutils td,
-.rst-content table.docutils th,
-.rst-content table.field-list td,
-.rst-content table.field-list th,
-.wy-table td,
-.wy-table th {
- padding: 8px 14px;
-}
-
-.dark-mode-toggle {
- position: absolute;
- top: 14px;
- right: 12px;
- height: 20px;
- width: 24px;
- z-index: 10;
- border: none;
- background-color: transparent;
- color: inherit;
- opacity: 0.7;
-}
-
-.wy-nav-content-wrap {
- z-index: 20;
-}
+++ /dev/null
-let toggleButton
-let icon
-
-function load() {
- 'use strict'
-
- toggleButton = document.createElement('button')
- toggleButton.setAttribute('title', 'Toggle dark mode')
- toggleButton.classList.add('dark-mode-toggle')
- icon = document.createElement('i')
- icon.classList.add('fa', darkModeState ? 'fa-sun-o' : 'fa-moon-o')
- toggleButton.appendChild(icon)
- document.body.prepend(toggleButton)
-
- // Listen for changes in the OS settings
- // addListener is used because older versions of Safari don't support addEventListener
- // prefersDarkQuery set in <head>
- if (prefersDarkQuery) {
- prefersDarkQuery.addListener(function (evt) {
- toggleDarkMode(evt.matches)
- })
- }
-
- // Initial setting depending on the prefers-color-mode or localstorage
- // darkModeState should be set in the document <head> to prevent flash
- if (darkModeState == undefined) darkModeState = false
- toggleDarkMode(darkModeState)
-
- // Toggles the "dark-mode" class on click and sets localStorage state
- toggleButton.addEventListener('click', () => {
- darkModeState = !darkModeState
-
- toggleDarkMode(darkModeState)
- localStorage.setItem('dark-mode', darkModeState)
- })
-}
-
-function toggleDarkMode(state) {
- document.documentElement.classList.toggle('dark-mode', state)
- document.documentElement.classList.toggle('light-mode', !state)
- icon.classList.remove('fa-sun-o')
- icon.classList.remove('fa-moon-o')
- icon.classList.add(state ? 'fa-sun-o' : 'fa-moon-o')
- darkModeState = state
-}
-
-document.addEventListener('DOMContentLoaded', load)
+++ /dev/null
-{% extends "!layout.html" %}
-{% block extrahead %}
- <script>
- // MediaQueryList object
- const prefersDarkQuery = window.matchMedia("(prefers-color-scheme: dark)");
- const lsDark = localStorage.getItem("dark-mode");
- let darkModeState = lsDark !== null ? lsDark == "true" : prefersDarkQuery.matches;
-
- document.documentElement.classList.toggle("dark-mode", darkModeState);
- document.documentElement.classList.toggle("light-mode", !darkModeState);
- </script>
- {{ super() }}
-{% endblock %}
--- /dev/null
+# Administration
+
+## Making backups {#backup}
+
+Multiple options exist for making backups of your paperless instance,
+depending on how you installed paperless.
+
+Before making backups, make sure that paperless is not running.
+
+Options available to any installation of paperless:
+
+- Use the [document exporter](administration#exporter). The document exporter exports all your documents,
+ thumbnails and metadata to a specific folder. You may import your
+ documents into a fresh instance of paperless again or store your
+ documents in another DMS with this export.
+- The document exporter is also able to update an already existing
+ export. Therefore, incremental backups with `rsync` are entirely
+ possible.
+
+!!! caution
+
+ You cannot import the export generated with one version of paperless in
+ a different version of paperless. The export contains an exact image of
+ the database, and migrations may change the database layout.
+
+Options available to docker installations:
+
+- Backup the docker volumes. These usually reside within
+ `/var/lib/docker/volumes` on the host and you need to be root in
+ order to access them.
+
+ Paperless uses 4 volumes:
+
+ - `paperless_media`: This is where your documents are stored.
+ - `paperless_data`: This is where auxillary data is stored. This
+ folder also contains the SQLite database, if you use it.
+ - `paperless_pgdata`: Exists only if you use PostgreSQL and
+ contains the database.
+ - `paperless_dbdata`: Exists only if you use MariaDB and contains
+ the database.
+
+Options available to bare-metal and non-docker installations:
+
+- Backup the entire paperless folder. This ensures that if your
+ paperless instance crashes at some point or your disk fails, you can
+ simply copy the folder back into place and it works.
+
+ When using PostgreSQL or MariaDB, you'll also have to backup the
+ database.
+
+### Restoring {#migrating-restoring}
+
+## Updating Paperless {#updating}
+
+### Docker Route
+
+If a new release of paperless-ngx is available, upgrading depends on how
+you installed paperless-ngx in the first place. The releases are
+available at the [release
+page](https://github.com/paperless-ngx/paperless-ngx/releases).
+
+First of all, ensure that paperless is stopped.
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose down
+```
+
+After that, [make a backup](#backup).
+
+A. If you pull the image from the docker hub, all you need to do is:
+
+ ``` shell-session
+ $ docker-compose pull
+ $ docker-compose up
+ ```
+
+ The docker-compose files refer to the `latest` version, which is
+ always the latest stable release.
+
+B. If you built the image yourself, do the following:
+
+ ``` shell-session
+ $ git pull
+ $ docker-compose build
+ $ docker-compose up
+ ```
+
+Running `docker-compose up` will also apply any new database migrations.
+If you see everything working, press CTRL+C once to gracefully stop
+paperless. Then you can start paperless-ngx with `-d` to have it run in
+the background.
+
+!!! note
+
+ In version 0.9.14, the update process was changed. In 0.9.13 and
+ earlier, the docker-compose files specified exact versions and pull
+ won't automatically update to newer versions. In order to enable
+ updates as described above, either get the new `docker-compose.yml`
+ file from
+ [here](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+ or edit the `docker-compose.yml` file, find the line that says
+
+ ```
+ image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x
+ ```
+
+ and replace the version with `latest`:
+
+ ```
+ image: ghcr.io/paperless-ngx/paperless-ngx:latest
+ ```
+
+!!! note
+
+ In version 1.7.1 and onwards, the Docker image can now be pinned to a
+ release series. This is often combined with automatic updaters such as
+ Watchtower to allow safer unattended upgrading to new bugfix releases
+ only. It is still recommended to always review release notes before
+ upgrading. To pin your install to a release series, edit the
+ `docker-compose.yml` find the line that says
+
+ ```
+ image: ghcr.io/paperless-ngx/paperless-ngx:latest
+ ```
+
+ and replace the version with the series you want to track, for
+ example:
+
+ ```
+ image: ghcr.io/paperless-ngx/paperless-ngx:1.7
+ ```
+
+### Bare Metal Route
+
+After grabbing the new release and unpacking the contents, do the
+following:
+
+1. Update dependencies. New paperless version may require additional
+ dependencies. The dependencies required are listed in the section
+ about
+ [bare metal installations](/setup#bare_metal).
+
+2. Update python requirements. Keep in mind to activate your virtual
+ environment before that, if you use one.
+
+ ```shell-session
+ $ pip install -r requirements.txt
+ ```
+
+3. Migrate the database.
+
+ ```shell-session
+ $ cd src
+ $ python3 manage.py migrate
+ ```
+
+ This might not actually do anything. Not every new paperless version
+ comes with new database migrations.
+
+## Downgrading Paperless
+
+Downgrades are possible. However, some updates also contain database
+migrations (these change the layout of the database and may move data).
+In order to move back from a version that applied database migrations,
+you'll have to revert the database migration _before_ downgrading, and
+then downgrade paperless.
+
+This table lists the compatible versions for each database migration
+number.
+
+| Migration number | Version range |
+| ---------------- | --------------- |
+| 1011 | 1.0.0 |
+| 1012 | 1.1.0 - 1.2.1 |
+| 1014 | 1.3.0 - 1.3.1 |
+| 1016 | 1.3.2 - current |
+
+Execute the following management command to migrate your database:
+
+```shell-session
+$ python3 manage.py migrate documents <migration number>
+```
+
+!!! note
+
+ Some migrations cannot be undone. The command will issue errors if that
+ happens.
+
+## Management utilities {#management-commands}
+
+Paperless comes with some management commands that perform various
+maintenance tasks on your paperless instance. You can invoke these
+commands in the following way:
+
+With docker-compose, while paperless is running:
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose exec webserver <command> <arguments>
+```
+
+With docker, while paperless is running:
+
+```shell-session
+$ docker exec -it <container-name> <command> <arguments>
+```
+
+Bare metal:
+
+```shell-session
+$ cd /path/to/paperless/src
+$ python3 manage.py <command> <arguments>
+```
+
+All commands have built-in help, which can be accessed by executing them
+with the argument `--help`.
+
+### Document exporter {#exporter}
+
+The document exporter exports all your data from paperless into a folder
+for backup or migration to another DMS.
+
+If you use the document exporter within a cronjob to backup your data
+you might use the `-T` flag behind exec to suppress "The input device
+is not a TTY" errors. For example:
+`docker-compose exec -T webserver document_exporter ../export`
+
+```
+document_exporter target [-c] [-f] [-d]
+
+optional arguments:
+-c, --compare-checksums
+-f, --use-filename-format
+-d, --delete
+```
+
+`target` is a folder to which the data gets written. This includes
+documents, thumbnails and a `manifest.json` file. The manifest contains
+all metadata from the database (correspondents, tags, etc).
+
+When you use the provided docker compose script, specify `../export` as
+the target. This path inside the container is automatically mounted on
+your host on the folder `export`.
+
+If the target directory already exists and contains files, paperless
+will assume that the contents of the export directory are a previous
+export and will attempt to update the previous export. Paperless will
+only export changed and added files. Paperless determines whether a file
+has changed by inspecting the file attributes "date/time modified" and
+"size". If that does not work out for you, specify
+`--compare-checksums` and paperless will attempt to compare file
+checksums instead. This is slower.
+
+Paperless will not remove any existing files in the export directory. If
+you want paperless to also remove files that do not belong to the
+current export such as files from deleted documents, specify `--delete`.
+Be careful when pointing paperless to a directory that already contains
+other files.
+
+The filenames generated by this command follow the format
+`[date created] [correspondent] [title].[extension]`. If you want
+paperless to use `PAPERLESS_FILENAME_FORMAT` for exported filenames
+instead, specify `--use-filename-format`.
+
+### Document importer {#importer}
+
+The document importer takes the export produced by the [Document
+exporter](#document-exporter) and imports it into paperless.
+
+The importer works just like the exporter. You point it at a directory,
+and the script does the rest of the work:
+
+```
+document_importer source
+```
+
+When you use the provided docker compose script, put the export inside
+the `export` folder in your paperless source directory. Specify
+`../export` as the `source`.
+
+!!! note
+
+ Importing from a previous version of Paperless may work, but for best
+ results it is suggested to match the versions.
+
+### Document retagger {#retagger}
+
+Say you've imported a few hundred documents and now want to introduce a
+tag or set up a new correspondent, and apply its matching to all of the
+currently-imported docs. This problem is common enough that there are
+tools for it.
+
+```
+document_retagger [-h] [-c] [-T] [-t] [-i] [--use-first] [-f]
+
+optional arguments:
+-c, --correspondent
+-T, --tags
+-t, --document_type
+-s, --storage_path
+-i, --inbox-only
+--use-first
+-f, --overwrite
+```
+
+Run this after changing or adding matching rules. It'll loop over all
+of the documents in your database and attempt to match documents
+according to the new rules.
+
+Specify any combination of `-c`, `-T`, `-t` and `-s` to have the
+retagger perform matching of the specified metadata type. If you don't
+specify any of these options, the document retagger won't do anything.
+
+Specify `-i` to have the document retagger work on documents tagged with
+inbox tags only. This is useful when you don't want to mess with your
+already processed documents.
+
+When multiple document types or correspondents match a single document,
+the retagger won't assign these to the document. Specify `--use-first`
+to override this behavior and just use the first correspondent or type
+it finds. This option does not apply to tags, since any amount of tags
+can be applied to a document.
+
+Finally, `-f` specifies that you wish to overwrite already assigned
+correspondents, types and/or tags. The default behavior is to not assign
+correspondents and types to documents that have this data already
+assigned. `-f` works differently for tags: By default, only additional
+tags get added to documents, no tags will be removed. With `-f`, tags
+that don't match a document anymore get removed as well.
+
+### Managing the Automatic matching algorithm
+
+The _Auto_ matching algorithm requires a trained neural network to work.
+This network needs to be updated whenever somethings in your data
+changes. The docker image takes care of that automatically with the task
+scheduler. You can manually renew the classifier by invoking the
+following management command:
+
+```
+document_create_classifier
+```
+
+This command takes no arguments.
+
+### Managing the document search index {#index}
+
+The document search index is responsible for delivering search results
+for the website. The document index is automatically updated whenever
+documents get added to, changed, or removed from paperless. However, if
+the search yields non-existing documents or won't find anything, you
+may need to recreate the index manually.
+
+```
+document_index {reindex,optimize}
+```
+
+Specify `reindex` to have the index created from scratch. This may take
+some time.
+
+Specify `optimize` to optimize the index. This updates certain aspects
+of the index and usually makes queries faster and also ensures that the
+autocompletion works properly. This command is regularly invoked by the
+task scheduler.
+
+### Managing filenames {#renamer}
+
+If you use paperless' feature to
+[assign custom filenames to your documents](/advanced_usage#file_name_handling), you can use this command to move all your files after
+changing the naming scheme.
+
+!!! warning
+
+ Since this command moves your documents, it is advised to do a backup
+ beforehand. The renaming logic is robust and will never overwrite or
+ delete a file, but you can't ever be careful enough.
+
+```
+document_renamer
+```
+
+The command takes no arguments and processes all your documents at once.
+
+Learn how to use
+[Management Utilities](#management-commands).
+
+### Sanity checker {#sanity-checker}
+
+Paperless has a built-in sanity checker that inspects your document
+collection for issues.
+
+The issues detected by the sanity checker are as follows:
+
+- Missing original files.
+- Missing archive files.
+- Inaccessible original files due to improper permissions.
+- Inaccessible archive files due to improper permissions.
+- Corrupted original documents by comparing their checksum against
+ what is stored in the database.
+- Corrupted archive documents by comparing their checksum against what
+ is stored in the database.
+- Missing thumbnails.
+- Inaccessible thumbnails due to improper permissions.
+- Documents without any content (warning).
+- Orphaned files in the media directory (warning). These are files
+ that are not referenced by any document im paperless.
+
+```
+document_sanity_checker
+```
+
+The command takes no arguments. Depending on the size of your document
+archive, this may take some time.
+
+### Fetching e-mail
+
+Paperless automatically fetches your e-mail every 10 minutes by default.
+If you want to invoke the email consumer manually, call the following
+management command:
+
+```
+mail_fetcher
+```
+
+The command takes no arguments and processes all your mail accounts and
+rules.
+
+!!! note
+
+ As of October 2022 Microsoft no longer supports IMAP authentication
+ for Exchange servers, thus Exchange is no longer supported until a
+ solution is implemented in the Python IMAP library used by Paperless.
+ See
+
+[learn.microsoft.com](https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/deprecation-of-basic-authentication-exchange-online)
+
+### Creating archived documents {#archiver}
+
+Paperless stores archived PDF/A documents alongside your original
+documents. These archived documents will also contain selectable text
+for image-only originals. These documents are derived from the
+originals, which are always stored unmodified. If coming from an earlier
+version of paperless, your documents won't have archived versions.
+
+This command creates PDF/A documents for your documents.
+
+```
+document_archiver --overwrite --document <id>
+```
+
+This command will only attempt to create archived documents when no
+archived document exists yet, unless `--overwrite` is specified. If
+`--document <id>` is specified, the archiver will only process that
+document.
+
+!!! note
+
+ This command essentially performs OCR on all your documents again,
+ according to your settings. If you run this with
+ `PAPERLESS_OCR_MODE=redo`, it will potentially run for a very long time.
+ You can cancel the command at any time, since this command will skip
+ already archived versions the next time it is run.
+
+!!! note
+
+ Some documents will cause errors and cannot be converted into PDF/A
+ documents, such as encrypted PDF documents. The archiver will skip over
+ these documents each time it sees them.
+
+### Managing encryption {#encyption}
+
+Documents can be stored in Paperless using GnuPG encryption.
+
+!!! warning
+
+ Encryption is deprecated since paperless-ngx 0.9 and doesn't really
+ provide any additional security, since you have to store the passphrase
+ in a configuration file on the same system as the encrypted documents
+ for paperless to work. Furthermore, the entire text content of the
+ documents is stored plain in the database, even if your documents are
+ encrypted. Filenames are not encrypted as well.
+
+ Also, the web server provides transparent access to your encrypted
+ documents.
+
+ Consider running paperless on an encrypted filesystem instead, which
+ will then at least provide security against physical hardware theft.
+
+#### Enabling encryption
+
+Enabling encryption is no longer supported.
+
+#### Disabling encryption
+
+Basic usage to disable encryption of your document store:
+
+(Note: If `PAPERLESS_PASSPHRASE` isn't set already, you need to specify
+it here)
+
+```
+decrypt_documents [--passphrase SECR3TP4SSPHRA$E]
+```
+++ /dev/null
-
-**************
-Administration
-**************
-
-.. _administration-backup:
-
-Making backups
-##############
-
-Multiple options exist for making backups of your paperless instance,
-depending on how you installed paperless.
-
-Before making backups, make sure that paperless is not running.
-
-Options available to any installation of paperless:
-
-* Use the :ref:`document exporter <utilities-exporter>`.
- The document exporter exports all your documents, thumbnails and
- metadata to a specific folder. You may import your documents into a
- fresh instance of paperless again or store your documents in another
- DMS with this export.
-* The document exporter is also able to update an already existing export.
- Therefore, incremental backups with ``rsync`` are entirely possible.
-
-.. caution::
-
- You cannot import the export generated with one version of paperless in a
- different version of paperless. The export contains an exact image of the
- database, and migrations may change the database layout.
-
-Options available to docker installations:
-
-* Backup the docker volumes. These usually reside within
- ``/var/lib/docker/volumes`` on the host and you need to be root in order
- to access them.
-
- Paperless uses 4 volumes:
-
- * ``paperless_media``: This is where your documents are stored.
- * ``paperless_data``: This is where auxillary data is stored. This
- folder also contains the SQLite database, if you use it.
- * ``paperless_pgdata``: Exists only if you use PostgreSQL and contains
- the database.
- * ``paperless_dbdata``: Exists only if you use MariaDB and contains
- the database.
-
-Options available to bare-metal and non-docker installations:
-
-* Backup the entire paperless folder. This ensures that if your paperless instance
- crashes at some point or your disk fails, you can simply copy the folder back
- into place and it works.
-
- When using PostgreSQL or MariaDB, you'll also have to backup the database.
-
-.. _migrating-restoring:
-
-Restoring
-=========
-
-.. _administration-updating:
-
-Updating Paperless
-##################
-
-Docker Route
-============
-
-If a new release of paperless-ngx is available, upgrading depends on how you
-installed paperless-ngx in the first place. The releases are available at the
-`release page <https://github.com/paperless-ngx/paperless-ngx/releases>`_.
-
-First of all, ensure that paperless is stopped.
-
-.. code:: shell-session
-
- $ cd /path/to/paperless
- $ docker-compose down
-
-After that, :ref:`make a backup <administration-backup>`.
-
-A. If you pull the image from the docker hub, all you need to do is:
-
- .. code:: shell-session
-
- $ docker-compose pull
- $ docker-compose up
-
- The docker-compose files refer to the ``latest`` version, which is always the latest
- stable release.
-
-B. If you built the image yourself, do the following:
-
- .. code:: shell-session
-
- $ git pull
- $ docker-compose build
- $ docker-compose up
-
-Running ``docker-compose up`` will also apply any new database migrations.
-If you see everything working, press CTRL+C once to gracefully stop paperless.
-Then you can start paperless-ngx with ``-d`` to have it run in the background.
-
- .. note::
-
- In version 0.9.14, the update process was changed. In 0.9.13 and earlier, the
- docker-compose files specified exact versions and pull won't automatically
- update to newer versions. In order to enable updates as described above, either
- get the new ``docker-compose.yml`` file from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
- or edit the ``docker-compose.yml`` file, find the line that says
-
- .. code::
-
- image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x
-
- and replace the version with ``latest``:
-
- .. code::
-
- image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
- .. note::
- In version 1.7.1 and onwards, the Docker image can now be pinned to a release series.
- This is often combined with automatic updaters such as Watchtower to allow safer
- unattended upgrading to new bugfix releases only. It is still recommended to always
- review release notes before upgrading. To pin your install to a release series, edit
- the ``docker-compose.yml`` find the line that says
-
- .. code::
-
- image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
- and replace the version with the series you want to track, for example:
-
- .. code::
-
- image: ghcr.io/paperless-ngx/paperless-ngx:1.7
-
-Bare Metal Route
-================
-
-After grabbing the new release and unpacking the contents, do the following:
-
-1. Update dependencies. New paperless version may require additional
- dependencies. The dependencies required are listed in the section about
- :ref:`bare metal installations <setup-bare_metal>`.
-
-2. Update python requirements. Keep in mind to activate your virtual environment
- before that, if you use one.
-
- .. code:: shell-session
-
- $ pip install -r requirements.txt
-
-3. Migrate the database.
-
- .. code:: shell-session
-
- $ cd src
- $ python3 manage.py migrate
-
- This might not actually do anything. Not every new paperless version comes with new
- database migrations.
-
-Downgrading Paperless
-#####################
-
-Downgrades are possible. However, some updates also contain database migrations (these change the layout of the database and may move data).
-In order to move back from a version that applied database migrations, you'll have to revert the database migration *before* downgrading,
-and then downgrade paperless.
-
-This table lists the compatible versions for each database migration number.
-
-+------------------+-----------------+
-| Migration number | Version range |
-+------------------+-----------------+
-| 1011 | 1.0.0 |
-+------------------+-----------------+
-| 1012 | 1.1.0 - 1.2.1 |
-+------------------+-----------------+
-| 1014 | 1.3.0 - 1.3.1 |
-+------------------+-----------------+
-| 1016 | 1.3.2 - current |
-+------------------+-----------------+
-
-Execute the following management command to migrate your database:
-
-.. code:: shell-session
-
- $ python3 manage.py migrate documents <migration number>
-
-.. note::
-
- Some migrations cannot be undone. The command will issue errors if that happens.
-
-.. _utilities-management-commands:
-
-Management utilities
-####################
-
-Paperless comes with some management commands that perform various maintenance
-tasks on your paperless instance. You can invoke these commands in the following way:
-
-With docker-compose, while paperless is running:
-
-.. code:: shell-session
-
- $ cd /path/to/paperless
- $ docker-compose exec webserver <command> <arguments>
-
-With docker, while paperless is running:
-
-.. code:: shell-session
-
- $ docker exec -it <container-name> <command> <arguments>
-
-Bare metal:
-
-.. code:: shell-session
-
- $ cd /path/to/paperless/src
- $ python3 manage.py <command> <arguments>
-
-All commands have built-in help, which can be accessed by executing them with
-the argument ``--help``.
-
-.. _utilities-exporter:
-
-Document exporter
-=================
-
-The document exporter exports all your data from paperless into a folder for
-backup or migration to another DMS.
-
-If you use the document exporter within a cronjob to backup your data you might use the ``-T`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -T webserver document_exporter ../export``
-
-.. code::
-
- document_exporter target [-c] [-f] [-d]
-
- optional arguments:
- -c, --compare-checksums
- -f, --use-filename-format
- -d, --delete
-
-``target`` is a folder to which the data gets written. This includes documents,
-thumbnails and a ``manifest.json`` file. The manifest contains all metadata from
-the database (correspondents, tags, etc).
-
-When you use the provided docker compose script, specify ``../export`` as the
-target. This path inside the container is automatically mounted on your host on
-the folder ``export``.
-
-If the target directory already exists and contains files, paperless will assume
-that the contents of the export directory are a previous export and will attempt
-to update the previous export. Paperless will only export changed and added files.
-Paperless determines whether a file has changed by inspecting the file attributes
-"date/time modified" and "size". If that does not work out for you, specify
-``--compare-checksums`` and paperless will attempt to compare file checksums instead.
-This is slower.
-
-Paperless will not remove any existing files in the export directory. If you want
-paperless to also remove files that do not belong to the current export such as files
-from deleted documents, specify ``--delete``. Be careful when pointing paperless to
-a directory that already contains other files.
-
-The filenames generated by this command follow the format
-``[date created] [correspondent] [title].[extension]``.
-If you want paperless to use ``PAPERLESS_FILENAME_FORMAT`` for exported filenames
-instead, specify ``--use-filename-format``.
-
-
-.. _utilities-importer:
-
-Document importer
-=================
-
-The document importer takes the export produced by the `Document exporter`_ and
-imports it into paperless.
-
-The importer works just like the exporter. You point it at a directory, and
-the script does the rest of the work:
-
-.. code::
-
- document_importer source
-
-When you use the provided docker compose script, put the export inside the
-``export`` folder in your paperless source directory. Specify ``../export``
-as the ``source``.
-
-.. note::
-
- Importing from a previous version of Paperless may work, but for best results
- it is suggested to match the versions.
-
-.. _utilities-retagger:
-
-Document retagger
-=================
-
-Say you've imported a few hundred documents and now want to introduce
-a tag or set up a new correspondent, and apply its matching to all of
-the currently-imported docs. This problem is common enough that
-there are tools for it.
-
-.. code::
-
- document_retagger [-h] [-c] [-T] [-t] [-i] [--use-first] [-f]
-
- optional arguments:
- -c, --correspondent
- -T, --tags
- -t, --document_type
- -s, --storage_path
- -i, --inbox-only
- --use-first
- -f, --overwrite
-
-Run this after changing or adding matching rules. It'll loop over all
-of the documents in your database and attempt to match documents
-according to the new rules.
-
-Specify any combination of ``-c``, ``-T``, ``-t`` and ``-s`` to have the
-retagger perform matching of the specified metadata type. If you don't
-specify any of these options, the document retagger won't do anything.
-
-Specify ``-i`` to have the document retagger work on documents tagged
-with inbox tags only. This is useful when you don't want to mess with
-your already processed documents.
-
-When multiple document types or correspondents match a single document,
-the retagger won't assign these to the document. Specify ``--use-first``
-to override this behavior and just use the first correspondent or type
-it finds. This option does not apply to tags, since any amount of tags
-can be applied to a document.
-
-Finally, ``-f`` specifies that you wish to overwrite already assigned
-correspondents, types and/or tags. The default behavior is to not
-assign correspondents and types to documents that have this data already
-assigned. ``-f`` works differently for tags: By default, only additional tags get
-added to documents, no tags will be removed. With ``-f``, tags that don't
-match a document anymore get removed as well.
-
-
-Managing the Automatic matching algorithm
-=========================================
-
-The *Auto* matching algorithm requires a trained neural network to work.
-This network needs to be updated whenever somethings in your data
-changes. The docker image takes care of that automatically with the task
-scheduler. You can manually renew the classifier by invoking the following
-management command:
-
-.. code::
-
- document_create_classifier
-
-This command takes no arguments.
-
-.. _`administration-index`:
-
-Managing the document search index
-==================================
-
-The document search index is responsible for delivering search results for the
-website. The document index is automatically updated whenever documents get
-added to, changed, or removed from paperless. However, if the search yields
-non-existing documents or won't find anything, you may need to recreate the
-index manually.
-
-.. code::
-
- document_index {reindex,optimize}
-
-Specify ``reindex`` to have the index created from scratch. This may take some
-time.
-
-Specify ``optimize`` to optimize the index. This updates certain aspects of
-the index and usually makes queries faster and also ensures that the
-autocompletion works properly. This command is regularly invoked by the task
-scheduler.
-
-.. _utilities-renamer:
-
-Managing filenames
-==================
-
-If you use paperless' feature to
-:ref:`assign custom filenames to your documents <advanced-file_name_handling>`,
-you can use this command to move all your files after changing
-the naming scheme.
-
-.. warning::
-
- Since this command moves your documents, it is advised to do
- a backup beforehand. The renaming logic is robust and will never overwrite
- or delete a file, but you can't ever be careful enough.
-
-.. code::
-
- document_renamer
-
-The command takes no arguments and processes all your documents at once.
-
-Learn how to use :ref:`Management Utilities<utilities-management-commands>`.
-
-
-.. _utilities-sanity-checker:
-
-Sanity checker
-==============
-
-Paperless has a built-in sanity checker that inspects your document collection for issues.
-
-The issues detected by the sanity checker are as follows:
-
-* Missing original files.
-* Missing archive files.
-* Inaccessible original files due to improper permissions.
-* Inaccessible archive files due to improper permissions.
-* Corrupted original documents by comparing their checksum against what is stored in the database.
-* Corrupted archive documents by comparing their checksum against what is stored in the database.
-* Missing thumbnails.
-* Inaccessible thumbnails due to improper permissions.
-* Documents without any content (warning).
-* Orphaned files in the media directory (warning). These are files that are not referenced by any document im paperless.
-
-
-.. code::
-
- document_sanity_checker
-
-The command takes no arguments. Depending on the size of your document archive, this may take some time.
-
-
-Fetching e-mail
-===============
-
-Paperless automatically fetches your e-mail every 10 minutes by default. If
-you want to invoke the email consumer manually, call the following management
-command:
-
-.. code::
-
- mail_fetcher
-
-The command takes no arguments and processes all your mail accounts and rules.
-
-.. _utilities-archiver:
-
-Creating archived documents
-===========================
-
-Paperless stores archived PDF/A documents alongside your original documents.
-These archived documents will also contain selectable text for image-only
-originals.
-These documents are derived from the originals, which are always stored
-unmodified. If coming from an earlier version of paperless, your documents
-won't have archived versions.
-
-This command creates PDF/A documents for your documents.
-
-.. code::
-
- document_archiver --overwrite --document <id>
-
-This command will only attempt to create archived documents when no archived
-document exists yet, unless ``--overwrite`` is specified. If ``--document <id>``
-is specified, the archiver will only process that document.
-
-.. note::
-
- This command essentially performs OCR on all your documents again,
- according to your settings. If you run this with ``PAPERLESS_OCR_MODE=redo``,
- it will potentially run for a very long time. You can cancel the command
- at any time, since this command will skip already archived versions the next time
- it is run.
-
-.. note::
-
- Some documents will cause errors and cannot be converted into PDF/A documents,
- such as encrypted PDF documents. The archiver will skip over these documents
- each time it sees them.
-
-.. _utilities-encyption:
-
-Managing encryption
-===================
-
-Documents can be stored in Paperless using GnuPG encryption.
-
-.. danger::
-
- Encryption is deprecated since paperless-ngx 0.9 and doesn't really provide any
- additional security, since you have to store the passphrase in a configuration
- file on the same system as the encrypted documents for paperless to work.
- Furthermore, the entire text content of the documents is stored plain in the
- database, even if your documents are encrypted. Filenames are not encrypted as
- well.
-
- Also, the web server provides transparent access to your encrypted documents.
-
- Consider running paperless on an encrypted filesystem instead, which will then
- at least provide security against physical hardware theft.
-
-
-Enabling encryption
--------------------
-
-Enabling encryption is no longer supported.
-
-
-Disabling encryption
---------------------
-
-Basic usage to disable encryption of your document store:
-
-(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)
-
-.. code::
-
- decrypt_documents [--passphrase SECR3TP4SSPHRA$E]
--- /dev/null
+# Advanced Topics
+
+Paperless offers a couple features that automate certain tasks and make
+your life easier.
+
+## Matching tags, correspondents, document types, and storage paths {#matching}
+
+Paperless will compare the matching algorithms defined by every tag,
+correspondent, document type, and storage path in your database to see
+if they apply to the text in a document. In other words, if you define a
+tag called `Home Utility` that had a `match` property of `bc hydro` and
+a `matching_algorithm` of `literal`, Paperless will automatically tag
+your newly-consumed document with your `Home Utility` tag so long as the
+text `bc hydro` appears in the body of the document somewhere.
+
+The matching logic is quite powerful. It supports searching the text of
+your document with different algorithms, and as such, some
+experimentation may be necessary to get things right.
+
+In order to have a tag, correspondent, document type, or storage path
+assigned automatically to newly consumed documents, assign a match and
+matching algorithm using the web interface. These settings define when
+to assign tags, correspondents, document types, and storage paths to
+documents.
+
+The following algorithms are available:
+
+- **Any:** Looks for any occurrence of any word provided in match in
+ the PDF. If you define the match as `Bank1 Bank2`, it will match
+ documents containing either of these terms.
+- **All:** Requires that every word provided appears in the PDF,
+ albeit not in the order provided.
+- **Literal:** Matches only if the match appears exactly as provided
+ (i.e. preserve ordering) in the PDF.
+- **Regular expression:** Parses the match as a regular expression and
+ tries to find a match within the document.
+- **Fuzzy match:** I don't know. Look at the source.
+- **Auto:** Tries to automatically match new documents. This does not
+ require you to set a match. See the notes below.
+
+When using the _any_ or _all_ matching algorithms, you can search for
+terms that consist of multiple words by enclosing them in double quotes.
+For example, defining a match text of `"Bank of America" BofA` using the
+_any_ algorithm, will match documents that contain either "Bank of
+America" or "BofA", but will not match documents containing "Bank of
+South America".
+
+Then just save your tag, correspondent, document type, or storage path
+and run another document through the consumer. Once complete, you should
+see the newly-created document, automatically tagged with the
+appropriate data.
+
+### Automatic matching {#automatic_matching}
+
+Paperless-ngx comes with a new matching algorithm called _Auto_. This
+matching algorithm tries to assign tags, correspondents, document types,
+and storage paths to your documents based on how you have already
+assigned these on existing documents. It uses a neural network under the
+hood.
+
+If, for example, all your bank statements of your account 123 at the
+Bank of America are tagged with the tag "bofa*123" and the matching
+algorithm of this tag is set to \_Auto*, this neural network will examine
+your documents and automatically learn when to assign this tag.
+
+Paperless tries to hide much of the involved complexity with this
+approach. However, there are a couple caveats you need to keep in mind
+when using this feature:
+
+- Changes to your documents are not immediately reflected by the
+ matching algorithm. The neural network needs to be _trained_ on your
+ documents after changes. Paperless periodically (default: once each
+ hour) checks for changes and does this automatically for you.
+- The Auto matching algorithm only takes documents into account which
+ are NOT placed in your inbox (i.e. have any inbox tags assigned to
+ them). This ensures that the neural network only learns from
+ documents which you have correctly tagged before.
+- The matching algorithm can only work if there is a correlation
+ between the tag, correspondent, document type, or storage path and
+ the document itself. Your bank statements usually contain your bank
+ account number and the name of the bank, so this works reasonably
+ well, However, tags such as "TODO" cannot be automatically
+ assigned.
+- The matching algorithm needs a reasonable number of documents to
+ identify when to assign tags, correspondents, storage paths, and
+ types. If one out of a thousand documents has the correspondent
+ "Very obscure web shop I bought something five years ago", it will
+ probably not assign this correspondent automatically if you buy
+ something from them again. The more documents, the better.
+- Paperless also needs a reasonable amount of negative examples to
+ decide when not to assign a certain tag, correspondent, document
+ type, or storage path. This will usually be the case as you start
+ filling up paperless with documents. Example: If all your documents
+ are either from "Webshop" and "Bank", paperless will assign one
+ of these correspondents to ANY new document, if both are set to
+ automatic matching.
+
+## Hooking into the consumption process
+
+Sometimes you may want to do something arbitrary whenever a document is
+consumed. Rather than try to predict what you may want to do, Paperless
+lets you execute scripts of your own choosing just before or after a
+document is consumed using a couple simple hooks.
+
+Just write a script, put it somewhere that Paperless can read & execute,
+and then put the path to that script in `paperless.conf` or
+`docker-compose.env` with the variable name of either
+`PAPERLESS_PRE_CONSUME_SCRIPT` or `PAPERLESS_POST_CONSUME_SCRIPT`.
+
+!!! info
+
+ These scripts are executed in a **blocking** process, which means that
+ if a script takes a long time to run, it can significantly slow down
+ your document consumption flow. If you want things to run
+ asynchronously, you'll have to fork the process in your script and
+ exit.
+
+### Pre-consumption script
+
+Executed after the consumer sees a new document in the consumption
+folder, but before any processing of the document is performed. This
+script can access the following relevant environment variables set:
+
+- `DOCUMENT_SOURCE_PATH`
+
+A simple but common example for this would be creating a simple script
+like this:
+
+`/usr/local/bin/ocr-pdf`
+
+```bash
+#!/usr/bin/env bash
+pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
+```
+
+`/etc/paperless.conf`
+
+```bash
+...
+PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf"
+...
+```
+
+This will pass the path to the document about to be consumed to
+`/usr/local/bin/ocr-pdf`, which will in turn call
+[pdf2pdfocr.py](https://github.com/LeoFCardoso/pdf2pdfocr) on your
+document, which will then overwrite the file with an OCR'd version of
+the file and exit. At which point, the consumption process will begin
+with the newly modified file.
+
+The script's stdout and stderr will be logged line by line to the
+webserver log, along with the exit code of the script.
+
+### Post-consumption script {#post_consume_script}
+
+Executed after the consumer has successfully processed a document and
+has moved it into paperless. It receives the following environment
+variables:
+
+- `DOCUMENT_ID`
+- `DOCUMENT_FILE_NAME`
+- `DOCUMENT_CREATED`
+- `DOCUMENT_MODIFIED`
+- `DOCUMENT_ADDED`
+- `DOCUMENT_SOURCE_PATH`
+- `DOCUMENT_ARCHIVE_PATH`
+- `DOCUMENT_THUMBNAIL_PATH`
+- `DOCUMENT_DOWNLOAD_URL`
+- `DOCUMENT_THUMBNAIL_URL`
+- `DOCUMENT_CORRESPONDENT`
+- `DOCUMENT_TAGS`
+- `DOCUMENT_ORIGINAL_FILENAME`
+
+The script can be in any language, but for a simple shell script
+example, you can take a look at
+[post-consumption-example.sh](https://github.com/paperless-ngx/paperless-ngx/blob/main/scripts/post-consumption-example.sh)
+in this project.
+
+The post consumption script cannot cancel the consumption process.
+
+The script's stdout and stderr will be logged line by line to the
+webserver log, along with the exit code of the script.
+
+#### Docker
+
+Assumed you have
+`/home/foo/paperless-ngx/scripts/post-consumption-example.sh`.
+
+You can pass that script into the consumer container via a host mount in
+your `docker-compose.yml`.
+
+```bash
+...
+consumer:
+ ...
+ volumes:
+ ...
+ - /home/paperless-ngx/scripts:/path/in/container/scripts/
+...
+```
+
+Example (docker-compose.yml):
+`- /home/foo/paperless-ngx/scripts:/usr/src/paperless/scripts`
+
+which in turn requires the variable `PAPERLESS_POST_CONSUME_SCRIPT` in
+`docker-compose.env` to point to
+`/path/in/container/scripts/post-consumption-example.sh`.
+
+Example (docker-compose.env):
+`PAPERLESS_POST_CONSUME_SCRIPT=/usr/src/paperless/scripts/post-consumption-example.sh`
+
+Troubleshooting:
+
+- Monitor the docker-compose log
+ `cd ~/paperless-ngx; docker-compose logs -f`
+- Check your script's permission e.g. in case of permission error
+ `sudo chmod 755 post-consumption-example.sh`
+- Pipe your scripts's output to a log file e.g.
+ `echo "${DOCUMENT_ID}" | tee --append /usr/src/paperless/scripts/post-consumption-example.log`
+
+## File name handling {#file_name_handling}
+
+By default, paperless stores your documents in the media directory and
+renames them using the identifier which it has assigned to each
+document. You will end up getting files like `0000123.pdf` in your media
+directory. This isn't necessarily a bad thing, because you normally
+don't have to access these files manually. However, if you wish to name
+your files differently, you can do that by adjusting the
+`PAPERLESS_FILENAME_FORMAT` configuration option. Paperless adds the
+correct file extension e.g. `.pdf`, `.jpg` automatically.
+
+This variable allows you to configure the filename (folders are allowed)
+using placeholders. For example, configuring this to
+
+```bash
+PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title}
+```
+
+will create a directory structure as follows:
+
+```
+2019/
+ My bank/
+ Statement January.pdf
+ Statement February.pdf
+2020/
+ My bank/
+ Statement January.pdf
+ Letter.pdf
+ Letter_01.pdf
+ Shoe store/
+ My new shoes.pdf
+```
+
+!!! warning
+
+ Do not manually move your files in the media folder. Paperless remembers
+ the last filename a document was stored as. If you do rename a file,
+ paperless will report your files as missing and won't be able to find
+ them.
+
+Paperless provides the following placeholders within filenames:
+
+- `{asn}`: The archive serial number of the document, or "none".
+- `{correspondent}`: The name of the correspondent, or "none".
+- `{document_type}`: The name of the document type, or "none".
+- `{tag_list}`: A comma separated list of all tags assigned to the
+ document.
+- `{title}`: The title of the document.
+- `{created}`: The full date (ISO format) the document was created.
+- `{created_year}`: Year created only, formatted as the year with
+ century.
+- `{created_year_short}`: Year created only, formatted as the year
+ without century, zero padded.
+- `{created_month}`: Month created only (number 01-12).
+- `{created_month_name}`: Month created name, as per locale
+- `{created_month_name_short}`: Month created abbreviated name, as per
+ locale
+- `{created_day}`: Day created only (number 01-31).
+- `{added}`: The full date (ISO format) the document was added to
+ paperless.
+- `{added_year}`: Year added only.
+- `{added_year_short}`: Year added only, formatted as the year without
+ century, zero padded.
+- `{added_month}`: Month added only (number 01-12).
+- `{added_month_name}`: Month added name, as per locale
+- `{added_month_name_short}`: Month added abbreviated name, as per
+ locale
+- `{added_day}`: Day added only (number 01-31).
+
+Paperless will try to conserve the information from your database as
+much as possible. However, some characters that you can use in document
+titles and correspondent names (such as `: \ /` and a couple more) are
+not allowed in filenames and will be replaced with dashes.
+
+If paperless detects that two documents share the same filename,
+paperless will automatically append `_01`, `_02`, etc to the filename.
+This happens if all the placeholders in a filename evaluate to the same
+value.
+
+!!! tip
+
+ You can affect how empty placeholders are treated by changing the
+ following setting to [true]{.title-ref}.
+
+ ```
+ PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=True
+ ```
+
+ Doing this results in all empty placeholders resolving to "" instead
+ of "none" as stated above. Spaces before empty placeholders are
+ removed as well, empty directories are omitted.
+
+!!! tip
+
+ Paperless checks the filename of a document whenever it is saved.
+ Therefore, you need to update the filenames of your documents and move
+ them after altering this setting by invoking the
+ [`document renamer <utilities-renamer>`]().
+
+!!! warning
+
+ Make absolutely sure you get the spelling of the placeholders right, or
+ else paperless will use the default naming scheme instead.
+
+!!! caution
+
+ As of now, you could totally tell paperless to store your files anywhere
+ outside the media directory by setting
+
+ ```
+ PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}
+ ```
+
+ However, keep in mind that inside docker, if files get stored outside of
+ the predefined volumes, they will be lost after a restart of paperless.
+
+## Storage paths
+
+One of the best things in Paperless is that you can not only access the
+documents via the web interface, but also via the file system.
+
+When as single storage layout is not sufficient for your use case,
+storage paths come to the rescue. Storage paths allow you to configure
+more precisely where each document is stored in the file system.
+
+- Each storage path is a [PAPERLESS_FILENAME_FORMAT]{.title-ref} and
+ follows the rules described above
+- Each document is assigned a storage path using the matching
+ algorithms described above, but can be overwritten at any time
+
+For example, you could define the following two storage paths:
+
+1. Normal communications are put into a folder structure sorted by
+ [year/correspondent]{.title-ref}
+2. Communications with insurance companies are stored in a flat
+ structure with longer file names, but containing the full date of
+ the correspondence.
+
+```
+By Year = {created_year}/{correspondent}/{title}
+Insurances = Insurances/{correspondent}/{created_year}-{created_month}-{created_day} {title}
+```
+
+If you then map these storage paths to the documents, you might get the
+following result. For simplicity, [By Year]{.title-ref} defines the same
+structure as in the previous example above.
+
+```text
+2019/ # By Year
+ My bank/
+ Statement January.pdf
+ Statement February.pdf
+
+ Insurances/ # Insurances
+ Healthcare 123/
+ 2022-01-01 Statement January.pdf
+ 2022-02-02 Letter.pdf
+ 2022-02-03 Letter.pdf
+ Dental 456/
+ 2021-12-01 New Conditions.pdf
+```
+
+!!! tip
+
+ Defining a storage path is optional. If no storage path is defined for a
+ document, the global [PAPERLESS_FILENAME_FORMAT]{.title-ref} is applied.
+
+!!! warning
+
+ If you adjust the format of an existing storage path, old documents
+ don't get relocated automatically. You need to run the
+ [document renamer](/administration#renamer) to
+ adjust their pathes.
+
+## Celery Monitoring {#celery-monitoring}
+
+The monitoring tool
+[Flower](https://flower.readthedocs.io/en/latest/index.html) can be used
+to view more detailed information about the health of the celery workers
+used for asynchronous tasks. This includes details on currently running,
+queued and completed tasks, timing and more. Flower can also be used
+with Prometheus, as it exports metrics. For details on its capabilities,
+refer to the Flower documentation.
+
+To configure Flower further, create a [flowerconfig.py]{.title-ref} and
+place it into the [src/paperless]{.title-ref} directory. For a Docker
+installation, you can use volumes to accomplish this:
+
+```yaml
+services:
+ # ...
+ webserver:
+ # ...
+ volumes:
+ - /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro
+```
+
+## Custom Container Initialization
+
+The Docker image includes the ability to run custom user scripts during
+startup. This could be utilized for installing additional tools or
+Python packages, for example.
+
+To utilize this, mount a folder containing your scripts to the custom
+initialization directory, [/custom-cont-init.d]{.title-ref} and place
+scripts you wish to run inside. For security, the folder must be owned
+by `root` and should have permissions of `a=rx`. Additionally, scripts
+must only be writable by `root`.
+
+Your scripts will be run directly before the webserver completes
+startup. Scripts will be run by the [root]{.title-ref} user.
+If you would like to switch users, the utility `gosu` is available and
+preferred over `sudo`.
+
+This is an advanced functionality with which you could break functionality
+or lose data. If you experience issues, please disable any custom scripts
+and try again before reporting an issue.
+
+For example, using Docker Compose:
+
+```yaml
+services:
+ # ...
+ webserver:
+ # ...
+ volumes:
+ - /path/to/my/scripts:/custom-cont-init.d:ro
+```
+
+## MySQL Caveats {#mysql-caveats}
+
+### Case Sensitivity
+
+The database interface does not provide a method to configure a MySQL
+database to be case sensitive. This would prevent a user from creating a
+tag `Name` and `NAME` as they are considered the same.
+
+Per Django documentation, to enable this requires manual intervention.
+To enable case sensetive tables, you can execute the following command
+against each table:
+
+`ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;`
+
+You can also set the default for new tables (this does NOT affect
+existing tables) with:
+
+`ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;`
+++ /dev/null
-***************
-Advanced topics
-***************
-
-Paperless offers a couple features that automate certain tasks and make your life
-easier.
-
-.. _advanced-matching:
-
-Matching tags, correspondents, document types, and storage paths
-################################################################
-
-Paperless will compare the matching algorithms defined by every tag, correspondent,
-document type, and storage path in your database to see if they apply to the text
-in a document. In other words, if you define a tag called ``Home Utility``
-that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of
-``literal``, Paperless will automatically tag your newly-consumed document with
-your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body
-of the document somewhere.
-
-The matching logic is quite powerful. It supports searching the text of your
-document with different algorithms, and as such, some experimentation may be
-necessary to get things right.
-
-In order to have a tag, correspondent, document type, or storage path assigned
-automatically to newly consumed documents, assign a match and matching algorithm
-using the web interface. These settings define when to assign tags, correspondents,
-document types, and storage paths to documents.
-
-The following algorithms are available:
-
-* **Any:** Looks for any occurrence of any word provided in match in the PDF.
- If you define the match as ``Bank1 Bank2``, it will match documents containing
- either of these terms.
-* **All:** Requires that every word provided appears in the PDF, albeit not in the
- order provided.
-* **Literal:** Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF.
-* **Regular expression:** Parses the match as a regular expression and tries to
- find a match within the document.
-* **Fuzzy match:** I don't know. Look at the source.
-* **Auto:** Tries to automatically match new documents. This does not require you
- to set a match. See the notes below.
-
-When using the *any* or *all* matching algorithms, you can search for terms
-that consist of multiple words by enclosing them in double quotes. For example,
-defining a match text of ``"Bank of America" BofA`` using the *any* algorithm,
-will match documents that contain either "Bank of America" or "BofA", but will
-not match documents containing "Bank of South America".
-
-Then just save your tag, correspondent, document type, or storage path and run
-another document through the consumer. Once complete, you should see the
-newly-created document, automatically tagged with the appropriate data.
-
-
-.. _advanced-automatic_matching:
-
-Automatic matching
-==================
-
-Paperless-ngx comes with a new matching algorithm called *Auto*. This matching
-algorithm tries to assign tags, correspondents, document types, and storage paths
-to your documents based on how you have already assigned these on existing documents.
-It uses a neural network under the hood.
-
-If, for example, all your bank statements of your account 123 at the Bank of
-America are tagged with the tag "bofa_123" and the matching algorithm of this
-tag is set to *Auto*, this neural network will examine your documents and
-automatically learn when to assign this tag.
-
-Paperless tries to hide much of the involved complexity with this approach.
-However, there are a couple caveats you need to keep in mind when using this
-feature:
-
-* Changes to your documents are not immediately reflected by the matching
- algorithm. The neural network needs to be *trained* on your documents after
- changes. Paperless periodically (default: once each hour) checks for changes
- and does this automatically for you.
-* The Auto matching algorithm only takes documents into account which are NOT
- placed in your inbox (i.e. have any inbox tags assigned to them). This ensures
- that the neural network only learns from documents which you have correctly
- tagged before.
-* The matching algorithm can only work if there is a correlation between the
- tag, correspondent, document type, or storage path and the document itself.
- Your bank statements usually contain your bank account number and the name
- of the bank, so this works reasonably well, However, tags such as "TODO"
- cannot be automatically assigned.
-* The matching algorithm needs a reasonable number of documents to identify when
- to assign tags, correspondents, storage paths, and types. If one out of a
- thousand documents has the correspondent "Very obscure web shop I bought
- something five years ago", it will probably not assign this correspondent
- automatically if you buy something from them again. The more documents, the better.
-* Paperless also needs a reasonable amount of negative examples to decide when
- not to assign a certain tag, correspondent, document type, or storage path. This will
- usually be the case as you start filling up paperless with documents.
- Example: If all your documents are either from "Webshop" and "Bank", paperless
- will assign one of these correspondents to ANY new document, if both are set
- to automatic matching.
-
-Hooking into the consumption process
-####################################
-
-Sometimes you may want to do something arbitrary whenever a document is
-consumed. Rather than try to predict what you may want to do, Paperless lets
-you execute scripts of your own choosing just before or after a document is
-consumed using a couple simple hooks.
-
-Just write a script, put it somewhere that Paperless can read & execute, and
-then put the path to that script in ``paperless.conf`` or ``docker-compose.env`` with the variable name
-of either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or
-``PAPERLESS_POST_CONSUME_SCRIPT``.
-
-.. important::
-
- These scripts are executed in a **blocking** process, which means that if
- a script takes a long time to run, it can significantly slow down your
- document consumption flow. If you want things to run asynchronously,
- you'll have to fork the process in your script and exit.
-
-
-Pre-consumption script
-======================
-
-Executed after the consumer sees a new document in the consumption folder, but
-before any processing of the document is performed. This script can access the
-following relevant environment variables set:
-
-* ``DOCUMENT_SOURCE_PATH``
-
-A simple but common example for this would be creating a simple script like
-this:
-
-``/usr/local/bin/ocr-pdf``
-
-.. code:: bash
-
- #!/usr/bin/env bash
- pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
-
-``/etc/paperless.conf``
-
-.. code:: bash
-
- ...
- PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf"
- ...
-
-This will pass the path to the document about to be consumed to ``/usr/local/bin/ocr-pdf``,
-which will in turn call `pdf2pdfocr.py`_ on your document, which will then
-overwrite the file with an OCR'd version of the file and exit. At which point,
-the consumption process will begin with the newly modified file.
-
-.. _pdf2pdfocr.py: https://github.com/LeoFCardoso/pdf2pdfocr
-
-.. _advanced-post_consume_script:
-
-Post-consumption script
-=======================
-
-Executed after the consumer has successfully processed a document and has moved it
-into paperless. It receives the following environment variables:
-
-* ``DOCUMENT_ID``
-* ``DOCUMENT_FILE_NAME``
-* ``DOCUMENT_CREATED``
-* ``DOCUMENT_MODIFIED``
-* ``DOCUMENT_ADDED``
-* ``DOCUMENT_SOURCE_PATH``
-* ``DOCUMENT_ARCHIVE_PATH``
-* ``DOCUMENT_THUMBNAIL_PATH``
-* ``DOCUMENT_DOWNLOAD_URL``
-* ``DOCUMENT_THUMBNAIL_URL``
-* ``DOCUMENT_CORRESPONDENT``
-* ``DOCUMENT_TAGS``
-* ``DOCUMENT_ORIGINAL_FILENAME``
-
-The script can be in any language, but for a simple shell script
-example, you can take a look at `post-consumption-example.sh`_ in this project.
-
-The post consumption script cannot cancel the consumption process.
-
-Docker
-------
-Assumed you have ``/home/foo/paperless-ngx/scripts/post-consumption-example.sh``.
-
-You can pass that script into the consumer container via a host mount in your ``docker-compose.yml``.
-
-.. code:: bash
-
- ...
- consumer:
- ...
- volumes:
- ...
- - /home/paperless-ngx/scripts:/path/in/container/scripts/
- ...
-
-Example (docker-compose.yml): ``- /home/foo/paperless-ngx/scripts:/usr/src/paperless/scripts``
-
-which in turn requires the variable ``PAPERLESS_POST_CONSUME_SCRIPT`` in ``docker-compose.env`` to point to ``/path/in/container/scripts/post-consumption-example.sh``.
-
-Example (docker-compose.env): ``PAPERLESS_POST_CONSUME_SCRIPT=/usr/src/paperless/scripts/post-consumption-example.sh``
-
-Troubleshooting:
-
-- Monitor the docker-compose log ``cd ~/paperless-ngx; docker-compose logs -f``
-- Check your script's permission e.g. in case of permission error ``sudo chmod 755 post-consumption-example.sh``
-- Pipe your scripts's output to a log file e.g. ``echo "${DOCUMENT_ID}" | tee --append /usr/src/paperless/scripts/post-consumption-example.log``
-
-.. _post-consumption-example.sh: https://github.com/paperless-ngx/paperless-ngx/blob/main/scripts/post-consumption-example.sh
-
-.. _advanced-file_name_handling:
-
-File name handling
-##################
-
-By default, paperless stores your documents in the media directory and renames them
-using the identifier which it has assigned to each document. You will end up getting
-files like ``0000123.pdf`` in your media directory. This isn't necessarily a bad
-thing, because you normally don't have to access these files manually. However, if
-you wish to name your files differently, you can do that by adjusting the
-``PAPERLESS_FILENAME_FORMAT`` configuration option. Paperless adds the correct
-file extension e.g. ``.pdf``, ``.jpg`` automatically.
-
-This variable allows you to configure the filename (folders are allowed) using
-placeholders. For example, configuring this to
-
-.. code:: bash
-
- PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title}
-
-will create a directory structure as follows:
-
-.. code::
-
- 2019/
- My bank/
- Statement January.pdf
- Statement February.pdf
- 2020/
- My bank/
- Statement January.pdf
- Letter.pdf
- Letter_01.pdf
- Shoe store/
- My new shoes.pdf
-
-.. danger::
-
- Do not manually move your files in the media folder. Paperless remembers the
- last filename a document was stored as. If you do rename a file, paperless will
- report your files as missing and won't be able to find them.
-
-Paperless provides the following placeholders within filenames:
-
-* ``{asn}``: The archive serial number of the document, or "none".
-* ``{correspondent}``: The name of the correspondent, or "none".
-* ``{document_type}``: The name of the document type, or "none".
-* ``{tag_list}``: A comma separated list of all tags assigned to the document.
-* ``{title}``: The title of the document.
-* ``{created}``: The full date (ISO format) the document was created.
-* ``{created_year}``: Year created only, formatted as the year with century.
-* ``{created_year_short}``: Year created only, formatted as the year without century, zero padded.
-* ``{created_month}``: Month created only (number 01-12).
-* ``{created_month_name}``: Month created name, as per locale
-* ``{created_month_name_short}``: Month created abbreviated name, as per locale
-* ``{created_day}``: Day created only (number 01-31).
-* ``{added}``: The full date (ISO format) the document was added to paperless.
-* ``{added_year}``: Year added only.
-* ``{added_year_short}``: Year added only, formatted as the year without century, zero padded.
-* ``{added_month}``: Month added only (number 01-12).
-* ``{added_month_name}``: Month added name, as per locale
-* ``{added_month_name_short}``: Month added abbreviated name, as per locale
-* ``{added_day}``: Day added only (number 01-31).
-
-
-Paperless will try to conserve the information from your database as much as possible.
-However, some characters that you can use in document titles and correspondent names (such
-as ``: \ /`` and a couple more) are not allowed in filenames and will be replaced with dashes.
-
-If paperless detects that two documents share the same filename, paperless will automatically
-append ``_01``, ``_02``, etc to the filename. This happens if all the placeholders in a filename
-evaluate to the same value.
-
-.. hint::
- You can affect how empty placeholders are treated by changing the following setting to
- `true`.
-
- .. code::
-
- PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=True
-
- Doing this results in all empty placeholders resolving to "" instead of "none" as stated above.
- Spaces before empty placeholders are removed as well, empty directories are omitted.
-
-.. hint::
-
- Paperless checks the filename of a document whenever it is saved. Therefore,
- you need to update the filenames of your documents and move them after altering
- this setting by invoking the :ref:`document renamer <utilities-renamer>`.
-
-.. warning::
-
- Make absolutely sure you get the spelling of the placeholders right, or else
- paperless will use the default naming scheme instead.
-
-.. caution::
-
- As of now, you could totally tell paperless to store your files anywhere outside
- the media directory by setting
-
- .. code::
-
- PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}
-
- However, keep in mind that inside docker, if files get stored outside of the
- predefined volumes, they will be lost after a restart of paperless.
-
-
-Storage paths
-#############
-
-One of the best things in Paperless is that you can not only access the documents via the
-web interface, but also via the file system.
-
-When as single storage layout is not sufficient for your use case, storage paths come to
-the rescue. Storage paths allow you to configure more precisely where each document is stored
-in the file system.
-
-- Each storage path is a `PAPERLESS_FILENAME_FORMAT` and follows the rules described above
-- Each document is assigned a storage path using the matching algorithms described above, but
- can be overwritten at any time
-
-For example, you could define the following two storage paths:
-
-1. Normal communications are put into a folder structure sorted by `year/correspondent`
-2. Communications with insurance companies are stored in a flat structure with longer file names,
- but containing the full date of the correspondence.
-
-.. code::
-
- By Year = {created_year}/{correspondent}/{title}
- Insurances = Insurances/{correspondent}/{created_year}-{created_month}-{created_day} {title}
-
-
-If you then map these storage paths to the documents, you might get the following result.
-For simplicity, `By Year` defines the same structure as in the previous example above.
-
-.. code:: text
-
- 2019/ # By Year
- My bank/
- Statement January.pdf
- Statement February.pdf
-
- Insurances/ # Insurances
- Healthcare 123/
- 2022-01-01 Statement January.pdf
- 2022-02-02 Letter.pdf
- 2022-02-03 Letter.pdf
- Dental 456/
- 2021-12-01 New Conditions.pdf
-
-
-.. hint::
-
- Defining a storage path is optional. If no storage path is defined for a document, the global
- `PAPERLESS_FILENAME_FORMAT` is applied.
-
-.. caution::
-
- If you adjust the format of an existing storage path, old documents don't get relocated automatically.
- You need to run the :ref:`document renamer <utilities-renamer>` to adjust their pathes.
-
-.. _advanced-celery-monitoring:
-
-Celery Monitoring
-#################
-
-The monitoring tool `Flower <https://flower.readthedocs.io/en/latest/index.html>`_ can be used to view more
-detailed information about the health of the celery workers used for asynchronous tasks. This includes details
-on currently running, queued and completed tasks, timing and more. Flower can also be used with Prometheus, as it
-exports metrics. For details on its capabilities, refer to the Flower documentation.
-
-To configure Flower further, create a `flowerconfig.py` and place it into the `src/paperless` directory. For
-a Docker installation, you can use volumes to accomplish this:
-
-.. code:: yaml
-
- services:
- # ...
- webserver:
- # ...
- volumes:
- - /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro
-
-Custom Container Initialization
-###############################
-
-The Docker image includes the ability to run custom user scripts during startup. This could be
-utilized for installing additional tools or Python packages, for example.
-
-To utilize this, mount a folder containing your scripts to the custom initialization directory, `/custom-cont-init.d`
-and place scripts you wish to run inside. For security, the folder and its contents must be owned by `root`.
-Additionally, scripts must only be writable by `root`.
-
-Your scripts will be run directly before the webserver completes startup. Scripts will be run by the `root` user.
-This is an advanced functionality with which you could break functionality or lose data.
-
-For example, using Docker Compose:
-
-
-.. code:: yaml
-
- services:
- # ...
- webserver:
- # ...
- volumes:
- - /path/to/my/scripts:/custom-cont-init.d:ro
--- /dev/null
+# The REST API
+
+Paperless makes use of the [Django REST
+Framework](http://django-rest-framework.org/) standard API interface. It
+provides a browsable API for most of its endpoints, which you can
+inspect at `http://<paperless-host>:<port>/api/`. This also documents
+most of the available filters and ordering fields.
+
+The API provides 5 main endpoints:
+
+- `/api/documents/`: Full CRUD support, except POSTing new documents.
+ See below.
+- `/api/correspondents/`: Full CRUD support.
+- `/api/document_types/`: Full CRUD support.
+- `/api/logs/`: Read-Only.
+- `/api/tags/`: Full CRUD support.
+- `/api/mail_accounts/`: Full CRUD support.
+- `/api/mail_rules/`: Full CRUD support.
+
+All of these endpoints except for the logging endpoint allow you to
+fetch, edit and delete individual objects by appending their primary key
+to the path, for example `/api/documents/454/`.
+
+The objects served by the document endpoint contain the following
+fields:
+
+- `id`: ID of the document. Read-only.
+- `title`: Title of the document.
+- `content`: Plain text content of the document.
+- `tags`: List of IDs of tags assigned to this document, or empty
+ list.
+- `document_type`: Document type of this document, or null.
+- `correspondent`: Correspondent of this document or null.
+- `created`: The date time at which this document was created.
+- `created_date`: The date (YYYY-MM-DD) at which this document was
+ created. Optional. If also passed with created, this is ignored.
+- `modified`: The date at which this document was last edited in
+ paperless. Read-only.
+- `added`: The date at which this document was added to paperless.
+ Read-only.
+- `archive_serial_number`: The identifier of this document in a
+ physical document archive.
+- `original_file_name`: Verbose filename of the original document.
+ Read-only.
+- `archived_file_name`: Verbose filename of the archived document.
+ Read-only. Null if no archived document is available.
+
+## Downloading documents
+
+In addition to that, the document endpoint offers these additional
+actions on individual documents:
+
+- `/api/documents/<pk>/download/`: Download the document.
+- `/api/documents/<pk>/preview/`: Display the document inline, without
+ downloading it.
+- `/api/documents/<pk>/thumb/`: Download the PNG thumbnail of a
+ document.
+
+Paperless generates archived PDF/A documents from consumed files and
+stores both the original files as well as the archived files. By
+default, the endpoints for previews and downloads serve the archived
+file, if it is available. Otherwise, the original file is served. Some
+document cannot be archived.
+
+The endpoints correctly serve the response header fields
+`Content-Disposition` and `Content-Type` to indicate the filename for
+download and the type of content of the document.
+
+In order to download or preview the original document when an archived
+document is available, supply the query parameter `original=true`.
+
+!!! tip
+
+ Paperless used to provide these functionality at `/fetch/<pk>/preview`,
+ `/fetch/<pk>/thumb` and `/fetch/<pk>/doc`. Redirects to the new URLs are
+ in place. However, if you use these old URLs to access documents, you
+ should update your app or script to use the new URLs.
+
+## Getting document metadata
+
+The api also has an endpoint to retrieve read-only metadata about
+specific documents. this information is not served along with the
+document objects, since it requires reading files and would therefore
+slow down document lists considerably.
+
+Access the metadata of a document with an ID `id` at
+`/api/documents/<id>/metadata/`.
+
+The endpoint reports the following data:
+
+- `original_checksum`: MD5 checksum of the original document.
+- `original_size`: Size of the original document, in bytes.
+- `original_mime_type`: Mime type of the original document.
+- `media_filename`: Current filename of the document, under which it
+ is stored inside the media directory.
+- `has_archive_version`: True, if this document is archived, false
+ otherwise.
+- `original_metadata`: A list of metadata associated with the original
+ document. See below.
+- `archive_checksum`: MD5 checksum of the archived document, or null.
+- `archive_size`: Size of the archived document in bytes, or null.
+- `archive_metadata`: Metadata associated with the archived document,
+ or null. See below.
+
+File metadata is reported as a list of objects in the following form:
+
+```json
+[
+ {
+ "namespace": "http://ns.adobe.com/pdf/1.3/",
+ "prefix": "pdf",
+ "key": "Producer",
+ "value": "SparklePDF, Fancy edition"
+ }
+]
+```
+
+`namespace` and `prefix` can be null. The actual metadata reported
+depends on the file type and the metadata available in that specific
+document. Paperless only reports PDF metadata at this point.
+
+## Authorization
+
+The REST api provides three different forms of authentication.
+
+1. Basic authentication
+
+ Authorize by providing a HTTP header in the form
+
+ ```
+ Authorization: Basic <credentials>
+ ```
+
+ where `credentials` is a base64-encoded string of
+ `<username>:<password>`
+
+2. Session authentication
+
+ When you're logged into paperless in your browser, you're
+ automatically logged into the API as well and don't need to provide
+ any authorization headers.
+
+3. Token authentication
+
+ Paperless also offers an endpoint to acquire authentication tokens.
+
+ POST a username and password as a form or json string to
+ `/api/token/` and paperless will respond with a token, if the login
+ data is correct. This token can be used to authenticate other
+ requests with the following HTTP header:
+
+ ```
+ Authorization: Token <token>
+ ```
+
+ Tokens can be managed and revoked in the paperless admin.
+
+## Searching for documents
+
+Full text searching is available on the `/api/documents/` endpoint. Two
+specific query parameters cause the API to return full text search
+results:
+
+- `/api/documents/?query=your%20search%20query`: Search for a document
+ using a full text query. For details on the syntax, see [Basic Usage - Searching](usage#basic-usage_searching).
+- `/api/documents/?more_like=1234`: Search for documents similar to
+ the document with id 1234.
+
+Pagination works exactly the same as it does for normal requests on this
+endpoint.
+
+Certain limitations apply to full text queries:
+
+- Results are always sorted by search score. The results matching the
+ query best will show up first.
+- Only a small subset of filtering parameters are supported.
+
+Furthermore, each returned document has an additional `__search_hit__`
+attribute with various information about the search results:
+
+```
+{
+ "count": 31,
+ "next": "http://localhost:8000/api/documents/?page=2&query=test",
+ "previous": null,
+ "results": [
+
+ ...
+
+ {
+ "id": 123,
+ "title": "title",
+ "content": "content",
+
+ ...
+
+ "__search_hit__": {
+ "score": 0.343,
+ "highlights": "text <span class="match">Test</span> text",
+ "rank": 23
+ }
+ },
+
+ ...
+
+ ]
+}
+```
+
+- `score` is an indication how well this document matches the query
+ relative to the other search results.
+- `highlights` is an excerpt from the document content and highlights
+ the search terms with `<span>` tags as shown above.
+- `rank` is the index of the search results. The first result will
+ have rank 0.
+
+### `/api/search/autocomplete/`
+
+Get auto completions for a partial search term.
+
+Query parameters:
+
+- `term`: The incomplete term.
+- `limit`: Amount of results. Defaults to 10.
+
+Results returned by the endpoint are ordered by importance of the term
+in the document index. The first result is the term that has the highest
+Tf/Idf score in the index.
+
+```json
+["term1", "term3", "term6", "term4"]
+```
+
+## POSTing documents {#file-uploads}
+
+The API provides a special endpoint for file uploads:
+
+`/api/documents/post_document/`
+
+POST a multipart form to this endpoint, where the form field `document`
+contains the document that you want to upload to paperless. The filename
+is sanitized and then used to store the document in a temporary
+directory, and the consumer will be instructed to consume the document
+from there.
+
+The endpoint supports the following optional form fields:
+
+- `title`: Specify a title that the consumer should use for the
+ document.
+- `created`: Specify a DateTime where the document was created (e.g.
+ "2016-04-19" or "2016-04-19 06:15:00+02:00").
+- `correspondent`: Specify the ID of a correspondent that the consumer
+ should use for the document.
+- `document_type`: Similar to correspondent.
+- `tags`: Similar to correspondent. Specify this multiple times to
+ have multiple tags added to the document.
+
+The endpoint will immediately return "OK" if the document consumption
+process was started successfully. No additional status information about
+the consumption process itself is available, since that happens in a
+different process.
+
+## API Versioning
+
+The REST API is versioned since Paperless-ngx 1.3.0.
+
+- Versioning ensures that changes to the API don't break older
+ clients.
+- Clients specify the specific version of the API they wish to use
+ with every request and Paperless will handle the request using the
+ specified API version.
+- Even if the underlying data model changes, older API versions will
+ always serve compatible data.
+- If no version is specified, Paperless will serve version 1 to ensure
+ compatibility with older clients that do not request a specific API
+ version.
+
+API versions are specified by submitting an additional HTTP `Accept`
+header with every request:
+
+```
+Accept: application/json; version=6
+```
+
+If an invalid version is specified, Paperless 1.3.0 will respond with
+"406 Not Acceptable" and an error message in the body. Earlier
+versions of Paperless will serve API version 1 regardless of whether a
+version is specified via the `Accept` header.
+
+If a client wishes to verify whether it is compatible with any given
+server, the following procedure should be performed:
+
+1. Perform an _authenticated_ request against any API endpoint. If the
+ server is on version 1.3.0 or newer, the server will add two custom
+ headers to the response:
+
+ ```
+ X-Api-Version: 2
+ X-Version: 1.3.0
+ ```
+
+2. Determine whether the client is compatible with this server based on
+ the presence/absence of these headers and their values if present.
+
+### API Changelog
+
+#### Version 1
+
+Initial API version.
+
+#### Version 2
+
+- Added field `Tag.color`. This read/write string field contains a hex
+ color such as `#a6cee3`.
+- Added read-only field `Tag.text_color`. This field contains the text
+ color to use for a specific tag, which is either black or white
+ depending on the brightness of `Tag.color`.
+- Removed field `Tag.colour`.
+++ /dev/null
-
-************
-The REST API
-************
-
-
-Paperless makes use of the `Django REST Framework`_ standard API interface.
-It provides a browsable API for most of its endpoints, which you can inspect
-at ``http://<paperless-host>:<port>/api/``. This also documents most of the
-available filters and ordering fields.
-
-.. _Django REST Framework: http://django-rest-framework.org/
-
-The API provides 5 main endpoints:
-
-* ``/api/documents/``: Full CRUD support, except POSTing new documents. See below.
-* ``/api/correspondents/``: Full CRUD support.
-* ``/api/document_types/``: Full CRUD support.
-* ``/api/logs/``: Read-Only.
-* ``/api/tags/``: Full CRUD support.
-
-All of these endpoints except for the logging endpoint
-allow you to fetch, edit and delete individual objects
-by appending their primary key to the path, for example ``/api/documents/454/``.
-
-The objects served by the document endpoint contain the following fields:
-
-* ``id``: ID of the document. Read-only.
-* ``title``: Title of the document.
-* ``content``: Plain text content of the document.
-* ``tags``: List of IDs of tags assigned to this document, or empty list.
-* ``document_type``: Document type of this document, or null.
-* ``correspondent``: Correspondent of this document or null.
-* ``created``: The date time at which this document was created.
-* ``created_date``: The date (YYYY-MM-DD) at which this document was created. Optional. If also passed with created, this is ignored.
-* ``modified``: The date at which this document was last edited in paperless. Read-only.
-* ``added``: The date at which this document was added to paperless. Read-only.
-* ``archive_serial_number``: The identifier of this document in a physical document archive.
-* ``original_file_name``: Verbose filename of the original document. Read-only.
-* ``archived_file_name``: Verbose filename of the archived document. Read-only. Null if no archived document is available.
-
-
-Downloading documents
-#####################
-
-In addition to that, the document endpoint offers these additional actions on
-individual documents:
-
-* ``/api/documents/<pk>/download/``: Download the document.
-* ``/api/documents/<pk>/preview/``: Display the document inline,
- without downloading it.
-* ``/api/documents/<pk>/thumb/``: Download the PNG thumbnail of a document.
-
-Paperless generates archived PDF/A documents from consumed files and stores both
-the original files as well as the archived files. By default, the endpoints
-for previews and downloads serve the archived file, if it is available.
-Otherwise, the original file is served.
-Some document cannot be archived.
-
-The endpoints correctly serve the response header fields ``Content-Disposition``
-and ``Content-Type`` to indicate the filename for download and the type of content of
-the document.
-
-In order to download or preview the original document when an archived document is available,
-supply the query parameter ``original=true``.
-
-.. hint::
-
- Paperless used to provide these functionality at ``/fetch/<pk>/preview``,
- ``/fetch/<pk>/thumb`` and ``/fetch/<pk>/doc``. Redirects to the new URLs
- are in place. However, if you use these old URLs to access documents, you
- should update your app or script to use the new URLs.
-
-
-Getting document metadata
-#########################
-
-The api also has an endpoint to retrieve read-only metadata about specific documents. this
-information is not served along with the document objects, since it requires reading
-files and would therefore slow down document lists considerably.
-
-Access the metadata of a document with an ID ``id`` at ``/api/documents/<id>/metadata/``.
-
-The endpoint reports the following data:
-
-* ``original_checksum``: MD5 checksum of the original document.
-* ``original_size``: Size of the original document, in bytes.
-* ``original_mime_type``: Mime type of the original document.
-* ``media_filename``: Current filename of the document, under which it is stored inside the media directory.
-* ``has_archive_version``: True, if this document is archived, false otherwise.
-* ``original_metadata``: A list of metadata associated with the original document. See below.
-* ``archive_checksum``: MD5 checksum of the archived document, or null.
-* ``archive_size``: Size of the archived document in bytes, or null.
-* ``archive_metadata``: Metadata associated with the archived document, or null. See below.
-
-File metadata is reported as a list of objects in the following form:
-
-.. code:: json
-
- [
- {
- "namespace": "http://ns.adobe.com/pdf/1.3/",
- "prefix": "pdf",
- "key": "Producer",
- "value": "SparklePDF, Fancy edition"
- },
- ]
-
-``namespace`` and ``prefix`` can be null. The actual metadata reported depends on the file type and the metadata
-available in that specific document. Paperless only reports PDF metadata at this point.
-
-Authorization
-#############
-
-The REST api provides three different forms of authentication.
-
-1. Basic authentication
-
- Authorize by providing a HTTP header in the form
-
- .. code::
-
- Authorization: Basic <credentials>
-
- where ``credentials`` is a base64-encoded string of ``<username>:<password>``
-
-2. Session authentication
-
- When you're logged into paperless in your browser, you're automatically
- logged into the API as well and don't need to provide any authorization
- headers.
-
-3. Token authentication
-
- Paperless also offers an endpoint to acquire authentication tokens.
-
- POST a username and password as a form or json string to ``/api/token/``
- and paperless will respond with a token, if the login data is correct.
- This token can be used to authenticate other requests with the
- following HTTP header:
-
- .. code::
-
- Authorization: Token <token>
-
- Tokens can be managed and revoked in the paperless admin.
-
-Searching for documents
-#######################
-
-Full text searching is available on the ``/api/documents/`` endpoint. Two specific
-query parameters cause the API to return full text search results:
-
-* ``/api/documents/?query=your%20search%20query``: Search for a document using a full text query.
- For details on the syntax, see :ref:`basic-usage_searching`.
-
-* ``/api/documents/?more_like=1234``: Search for documents similar to the document with id 1234.
-
-Pagination works exactly the same as it does for normal requests on this endpoint.
-
-Certain limitations apply to full text queries:
-
-* Results are always sorted by search score. The results matching the query best will show up first.
-
-* Only a small subset of filtering parameters are supported.
-
-Furthermore, each returned document has an additional ``__search_hit__`` attribute with various information
-about the search results:
-
-.. code::
-
- {
- "count": 31,
- "next": "http://localhost:8000/api/documents/?page=2&query=test",
- "previous": null,
- "results": [
-
- ...
-
- {
- "id": 123,
- "title": "title",
- "content": "content",
-
- ...
-
- "__search_hit__": {
- "score": 0.343,
- "highlights": "text <span class=\"match\">Test</span> text",
- "rank": 23
- }
- },
-
- ...
-
- ]
- }
-
-* ``score`` is an indication how well this document matches the query relative to the other search results.
-* ``highlights`` is an excerpt from the document content and highlights the search terms with ``<span>`` tags as shown above.
-* ``rank`` is the index of the search results. The first result will have rank 0.
-
-``/api/search/autocomplete/``
-=============================
-
-Get auto completions for a partial search term.
-
-Query parameters:
-
-* ``term``: The incomplete term.
-* ``limit``: Amount of results. Defaults to 10.
-
-Results returned by the endpoint are ordered by importance of the term in the
-document index. The first result is the term that has the highest Tf/Idf score
-in the index.
-
-.. code:: json
-
- [
- "term1",
- "term3",
- "term6",
- "term4"
- ]
-
-
-.. _api-file_uploads:
-
-POSTing documents
-#################
-
-The API provides a special endpoint for file uploads:
-
-``/api/documents/post_document/``
-
-POST a multipart form to this endpoint, where the form field ``document`` contains
-the document that you want to upload to paperless. The filename is sanitized and
-then used to store the document in a temporary directory, and the consumer will
-be instructed to consume the document from there.
-
-The endpoint supports the following optional form fields:
-
-* ``title``: Specify a title that the consumer should use for the document.
-* ``created``: Specify a DateTime where the document was created (e.g. "2016-04-19" or "2016-04-19 06:15:00+02:00").
-* ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
-* ``document_type``: Similar to correspondent.
-* ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
- to the document.
-
-
-The endpoint will immediately return "OK" if the document consumption process
-was started successfully. No additional status information about the consumption
-process itself is available, since that happens in a different process.
-
-
-.. _api-versioning:
-
-API Versioning
-##############
-
-The REST API is versioned since Paperless-ngx 1.3.0.
-
-* Versioning ensures that changes to the API don't break older clients.
-* Clients specify the specific version of the API they wish to use with every request and Paperless will handle the request using the specified API version.
-* Even if the underlying data model changes, older API versions will always serve compatible data.
-* If no version is specified, Paperless will serve version 1 to ensure compatibility with older clients that do not request a specific API version.
-
-API versions are specified by submitting an additional HTTP ``Accept`` header with every request:
-
-.. code::
-
- Accept: application/json; version=6
-
-If an invalid version is specified, Paperless 1.3.0 will respond with "406 Not Acceptable" and an error message in the body.
-Earlier versions of Paperless will serve API version 1 regardless of whether a version is specified via the ``Accept`` header.
-
-If a client wishes to verify whether it is compatible with any given server, the following procedure should be performed:
-
-1. Perform an *authenticated* request against any API endpoint. If the server is on version 1.3.0 or newer, the server will
- add two custom headers to the response:
-
- .. code::
-
- X-Api-Version: 2
- X-Version: 1.3.0
-
-2. Determine whether the client is compatible with this server based on the presence/absence of these headers and their values if present.
-
-
-API Changelog
-=============
-
-Version 1
----------
-
-Initial API version.
-
-Version 2
----------
-
-* Added field ``Tag.color``. This read/write string field contains a hex color such as ``#a6cee3``.
-* Added read-only field ``Tag.text_color``. This field contains the text color to use for a specific tag, which is either black or white depending on the brightness of ``Tag.color``.
-* Removed field ``Tag.colour``.
--- /dev/null
+:root > * {
+ --md-primary-fg-color: #17541f;
+ --md-primary-fg-color--dark: #17541f;
+ --md-primary-fg-color--light: #17541f;
+ --md-accent-fg-color: #2b8a38;
+ --md-typeset-a-color: #21652a;
+}
+
+[data-md-color-scheme="slate"] {
+ --md-hue: 222;
+}
+
+@media (min-width: 400px) {
+ .grid-left {
+ width: 33%;
+ float: left;
+ }
+ .grid-right {
+ width: 62%;
+ margin-left: 4%;
+ float: left;
+ }
+}
+
+.grid-left > p {
+ margin-bottom: 2rem;
+}
+
+
+.grid-right p {
+ margin: 0;
+}
+
+.index-callout {
+ margin-right: .5rem;
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+</style>
+<path class="st0" d="M299,891.7c-4.2-19.8-12.5-59.6-13.6-59.6c-176.7-105.7-155.8-288.7-97.3-393.4
+ c12.5,131.8,245.8,222.8,109.8,383.9c-1.1,2,6.2,27.2,12.5,50.2c27.2-46,68-101.4,65.8-106.7C208.9,358.2,731.9,326.9,840.6,73.7
+ c49.1,244.8-25.1,623.5-445.5,719.7c-2,1.1-76.3,131.8-79.5,132.9c0-2-31.4-1.1-27.2-11.5C290.7,908.4,294.8,900.1,299,891.7
+ L299,891.7z M293.8,793.4c53.3-61.8-9.4-167.4-47.1-201.9C310.5,701.3,306.3,765.1,293.8,793.4L293.8,793.4z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 2962.2 860.2" style="enable-background:new 0 0 2962.2 860.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#17541F;stroke:#000000;stroke-miterlimit:10;}
+</style>
+<path d="M1055.6,639.7v-20.6c-18,20-43.1,30.1-75.4,30.1c-22.4,0-42.8-5.8-61-17.5c-18.3-11.7-32.5-27.8-42.9-48.3
+ c-10.3-20.5-15.5-43.3-15.5-68.4c0-25.1,5.2-48,15.5-68.5s24.6-36.6,42.9-48.3s38.6-17.5,61-17.5c32.3,0,57.5,10,75.4,30.1v-20.6
+ h85.3v249.6L1055.6,639.7L1055.6,639.7z M1059.1,514.9c0-17.4-5.2-31.9-15.5-43.8c-10.3-11.8-23.9-17.7-40.6-17.7
+ c-16.8,0-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8c10.2,11.8,23.6,17.7,40.4,17.7
+ c16.8,0,30.3-5.9,40.6-17.7C1054,546.9,1059.1,532.3,1059.1,514.9z"/>
+<path d="M1417.8,398.2c18.3,11.7,32.5,27.8,42.9,48.3c10.3,20.5,15.5,43.3,15.5,68.5c0,25.1-5.2,48-15.5,68.4
+ c-10.3,20.5-24.6,36.6-42.9,48.3s-38.6,17.5-61,17.5c-32.3,0-57.5-10-75.4-30.1v165.6h-85.3V390.2h85.3v20.6
+ c18-20,43.1-30.1,75.4-30.1C1379.2,380.7,1399.5,386.6,1417.8,398.2z M1389.5,514.9c0-17.4-5.1-31.9-15.3-43.8
+ c-10.2-11.8-23.6-17.7-40.4-17.7s-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8
+ c10.2,11.8,23.6,17.7,40.4,17.7s30.2-5.9,40.4-17.7S1389.5,532.3,1389.5,514.9z"/>
+<path d="M1713.6,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+ c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68c11.8-20.5,28.1-36.7,48.7-48.5s43.5-17.7,68.7-17.7
+ c24.8,0,47.6,6.1,68.2,18.2s37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8c3.6,11.4,10.5,20.7,20.9,28.1
+ c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C1695.8,570.1,1704.9,563.7,1713.6,555.3z M1596.9,486.2h92.9
+ c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11S1599,473.9,1596.9,486.2z"/>
+<path d="M1908.8,418.4c7.8-10.8,17.2-19,28.3-24.7s22-8.5,32.8-8.5c11.4,0,20,1.6,26,4.9l-10.8,72.7c-8.4-2.1-15.7-3.1-22-3.1
+ c-17.1,0-30.4,4.3-39.9,12.8c-9.6,8.5-14.4,24.2-14.4,46.9v120.3h-85.3V390.2h85.3V418.4L1908.8,418.4z"/>
+<path d="M2113,258.2v381.5h-85.3V258.2H2113z"/>
+<path d="M2360.8,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+ c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68s28.1-36.7,48.7-48.5c20.6-11.8,43.5-17.7,68.7-17.7
+ c24.8,0,47.6,6.1,68.2,18.2c20.6,12.1,37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8
+ c3.6,11.4,10.5,20.7,20.9,28.1c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C2343.1,570.1,2352.1,563.7,2360.8,555.3z
+ M2244.1,486.2h92.9c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11C2251.7,464.1,2246.2,473.9,2244.1,486.2z"/>
+<path d="M2565.9,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+ c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+ c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+ c16.3,4.6,31.3,7,45.1,7c19.7,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+ c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+ c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+ C2590.5,448.7,2577.6,446.3,2565.9,446.3z"/>
+<path d="M2817.3,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+ c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+ c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+ c16.3,4.6,31.3,7,45.1,7c19.8,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+ c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+ c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+ C2841.8,448.7,2828.9,446.3,2817.3,446.3z"/>
+<g>
+ <path d="M2508,724h60.2v17.3H2508V724z"/>
+ <path d="M2629.2,694.4c4.9-2,10.2-3.1,16-3.1c10.9,0,19.5,3.4,25.9,10.2s9.6,16.7,9.6,29.6v57.3h-19.6v-52.6
+ c0-9.3-1.7-16.2-5.1-20.7c-3.4-4.5-9.1-6.7-17-6.7c-6.5,0-11.8,2.4-16.1,7.1c-4.3,4.8-6.4,11.5-6.4,20.2v52.6h-19.6v-94.6h19.6v9.5
+ C2620.2,699.4,2624.4,696.4,2629.2,694.4z"/>
+ <path d="M2790.3,833.2c-8.6,6.8-19.4,10.2-32.3,10.2c-7.9,0-15.2-1.4-21.9-4.1s-12.1-6.8-16.3-12.2s-6.6-11.9-7.1-19.6h19.6
+ c0.7,6.1,3.5,10.8,8.4,13.9c4.9,3.2,10.7,4.8,17.4,4.8c7,0,13.1-2,18.2-6c5.1-4,7.7-10.3,7.7-18.9v-24.7c-3.6,3.4-8,6.2-13.3,8.2
+ c-5.2,2.1-10.7,3.1-16.3,3.1c-8.7,0-16.6-2.1-23.7-6.4c-7.1-4.3-12.6-10-16.7-17.3c-4-7.3-6-15.5-6-24.6s2-17.3,6-24.7
+ s9.6-13.2,16.7-17.4c7.1-4.3,15-6.4,23.7-6.4c5.7,0,11.1,1,16.3,3.1s9.6,4.8,13.3,8.2v-8.8h19.4v107.8
+ C2803.2,815.9,2798.9,826.4,2790.3,833.2z M2782.2,755.7c2.6-4.7,3.8-10,3.8-15.9s-1.3-11.2-3.8-16c-2.6-4.8-6.1-8.5-10.5-11.1
+ c-4.5-2.7-9.5-4-15.1-4c-5.8,0-10.9,1.4-15.4,4.3c-4.5,2.8-7.9,6.6-10.3,11.4c-2.4,4.8-3.6,9.9-3.6,15.5c0,5.4,1.2,10.5,3.6,15.3
+ c2.4,4.8,5.8,8.6,10.3,11.5s9.6,4.3,15.4,4.3c5.6,0,10.6-1.4,15.1-4.1C2776.1,764.1,2779.6,760.4,2782.2,755.7z"/>
+ <path d="M2843.5,788.4h-21.6l37.9-48l-36.4-46.6h22.6l25.7,33.3l25.8-33.3h21.6l-36.2,45.9l37.9,48.6h-22.6l-27.4-35L2843.5,788.4z
+ "/>
+</g>
+<path d="M835.8,319.2c-11.5-18.9-27.4-33.7-47.6-44.7c-20.2-10.9-43-16.4-68.5-16.4h-90.6c-8.6,39.6-21.3,77.2-38,112.4
+ c-10,21-21.3,41-33.9,59.9v209.2H647v-135h72.7c25.4,0,48.3-5.5,68.5-16.4s36.1-25.8,47.6-44.7c11.5-18.9,17.3-39.5,17.3-61.9
+ C853.1,358.9,847.4,338.1,835.8,319.2z M747,416.6c-9.4,9-21.8,13.5-37,13.5l-62.8,0.4v-93.4l62.8-0.4c15.3,0,27.6,4.5,37,13.5
+ s14.1,20,14.1,33.2C761.1,396.6,756.4,407.7,747,416.6z"/>
+<path class="st0" d="M164.7,698.7c-3.5-16.5-10.4-49.6-11.3-49.6c-147.1-88-129.7-240.3-81-327.4C82.8,431.4,277,507.1,163.8,641.2
+ c-0.9,1.7,5.2,22.6,10.4,41.8c22.6-38.3,56.6-84.4,54.8-88.8C89.7,254.7,525,228.6,615.5,17.9c40.9,203.7-20.9,518.9-370.8,599
+ c-1.7,0.9-63.5,109.7-66.2,110.6c0-1.7-26.1-0.9-22.6-9.6C157.8,712.6,161.2,705.7,164.7,698.7L164.7,698.7z M160.4,616.9
+ c44.4-51.4-7.8-139.3-39.2-168C174.3,540.2,170.8,593.3,160.4,616.9L160.4,616.9z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 2962.2 860.2" style="enable-background:new 0 0 2962.2 860.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
+ .st1{fill:#17541F;stroke:#000000;stroke-miterlimit:10;}
+</style>
+<path class="st0" d="M1055.6,639.7v-20.6c-18,20-43.1,30.1-75.4,30.1c-22.4,0-42.8-5.8-61-17.5c-18.3-11.7-32.5-27.8-42.9-48.3
+ c-10.3-20.5-15.5-43.3-15.5-68.4c0-25.1,5.2-48,15.5-68.5s24.6-36.6,42.9-48.3s38.6-17.5,61-17.5c32.3,0,57.5,10,75.4,30.1v-20.6
+ h85.3v249.6L1055.6,639.7L1055.6,639.7z M1059.1,514.9c0-17.4-5.2-31.9-15.5-43.8c-10.3-11.8-23.9-17.7-40.6-17.7
+ c-16.8,0-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8c10.2,11.8,23.6,17.7,40.4,17.7
+ c16.8,0,30.3-5.9,40.6-17.7C1054,546.9,1059.1,532.3,1059.1,514.9z"/>
+<path class="st0" d="M1417.8,398.2c18.3,11.7,32.5,27.8,42.9,48.3c10.3,20.5,15.5,43.3,15.5,68.5c0,25.1-5.2,48-15.5,68.4
+ c-10.3,20.5-24.6,36.6-42.9,48.3s-38.6,17.5-61,17.5c-32.3,0-57.5-10-75.4-30.1v165.6h-85.3V390.2h85.3v20.6
+ c18-20,43.1-30.1,75.4-30.1C1379.2,380.7,1399.5,386.6,1417.8,398.2z M1389.5,514.9c0-17.4-5.1-31.9-15.3-43.8
+ c-10.2-11.8-23.6-17.7-40.4-17.7s-30.2,5.9-40.4,17.7c-10.2,11.8-15.3,26.4-15.3,43.8c0,17.4,5.1,31.9,15.3,43.8
+ c10.2,11.8,23.6,17.7,40.4,17.7s30.2-5.9,40.4-17.7S1389.5,532.3,1389.5,514.9z"/>
+<path class="st0" d="M1713.6,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+ c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68c11.8-20.5,28.1-36.7,48.7-48.5s43.5-17.7,68.7-17.7
+ c24.8,0,47.6,6.1,68.2,18.2s37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8c3.6,11.4,10.5,20.7,20.9,28.1
+ c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C1695.8,570.1,1704.9,563.7,1713.6,555.3z M1596.9,486.2h92.9
+ c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11S1599,473.9,1596.9,486.2z"/>
+<path class="st0" d="M1908.8,418.4c7.8-10.8,17.2-19,28.3-24.7s22-8.5,32.8-8.5c11.4,0,20,1.6,26,4.9l-10.8,72.7
+ c-8.4-2.1-15.7-3.1-22-3.1c-17.1,0-30.4,4.3-39.9,12.8c-9.6,8.5-14.4,24.2-14.4,46.9v120.3h-85.3V390.2h85.3V418.4L1908.8,418.4z"/>
+<path class="st0" d="M2113,258.2v381.5h-85.3V258.2H2113z"/>
+<path class="st0" d="M2360.8,555.3l53,49.4c-28.1,29.6-66.7,44.4-115.8,44.4c-28.1,0-53-5.8-74.5-17.5s-38.2-27.7-49.8-48
+ c-11.7-20.3-17.7-43.2-18-68.7c0-24.8,5.9-47.5,17.7-68s28.1-36.7,48.7-48.5c20.6-11.8,43.5-17.7,68.7-17.7
+ c24.8,0,47.6,6.1,68.2,18.2c20.6,12.1,37,29.5,49.1,52.3c12.1,22.7,18.2,49.1,18.2,79l-0.4,11.7h-181.8
+ c3.6,11.4,10.5,20.7,20.9,28.1c10.3,7.3,21.3,11,33,11c14.4,0,26.3-2.2,35.7-6.5C2343.1,570.1,2352.1,563.7,2360.8,555.3z
+ M2244.1,486.2h92.9c-2.1-12.3-7.5-22.1-16.2-29.4s-18.7-11-30.1-11s-21.5,3.7-30.3,11C2251.7,464.1,2246.2,473.9,2244.1,486.2z"/>
+<path class="st0" d="M2565.9,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+ c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+ c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+ c16.3,4.6,31.3,7,45.1,7c19.7,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+ c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+ c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+ C2590.5,448.7,2577.6,446.3,2565.9,446.3z"/>
+<path class="st0" d="M2817.3,446.3c-9.9,0-17.1,1.1-21.5,3.4c-4.5,2.2-6.7,5.9-6.7,11s3.4,8.8,10.3,11.2c6.9,2.4,18,4.9,33.2,7.6
+ c20,3,37,6.7,50.9,11.2s26,12.1,36.1,22.9c10.2,10.8,15.3,25.9,15.3,45.3c0,29.9-10.9,52.4-32.8,67.6
+ c-21.8,15.1-50.3,22.7-85.3,22.7c-25.7,0-49.5-3.7-71.4-11c-21.8-7.3-37.4-14.7-46.7-22.2l33.7-60.6c10.2,9,23.4,15.8,39.7,20.4
+ c16.3,4.6,31.3,7,45.1,7c19.8,0,29.6-5.2,29.6-15.7c0-5.4-3.3-9.4-9.9-11.9c-6.6-2.5-17.2-5.2-31.9-7.9c-18.9-3.3-34.9-7.2-48-11.7
+ c-13.2-4.5-24.6-12.2-34.3-23.1c-9.7-10.9-14.6-26-14.6-45.1c0-27.2,9.7-48.5,29-63.7c19.3-15.3,46-22.9,80.1-22.9
+ c23.3,0,44.4,3.6,63.3,10.8c18.9,7.2,34,14.5,45.3,22l-32.8,58.8c-10.8-7.5-23.2-13.7-37.3-18.6
+ C2841.8,448.7,2828.9,446.3,2817.3,446.3z"/>
+<g>
+ <path class="st0" d="M2508,724h60.2v17.3H2508V724z"/>
+ <path class="st0" d="M2629.2,694.4c4.9-2,10.2-3.1,16-3.1c10.9,0,19.5,3.4,25.9,10.2s9.6,16.7,9.6,29.6v57.3h-19.6v-52.6
+ c0-9.3-1.7-16.2-5.1-20.7c-3.4-4.5-9.1-6.7-17-6.7c-6.5,0-11.8,2.4-16.1,7.1c-4.3,4.8-6.4,11.5-6.4,20.2v52.6h-19.6v-94.6h19.6v9.5
+ C2620.2,699.4,2624.4,696.4,2629.2,694.4z"/>
+ <path class="st0" d="M2790.3,833.2c-8.6,6.8-19.4,10.2-32.3,10.2c-7.9,0-15.2-1.4-21.9-4.1s-12.1-6.8-16.3-12.2s-6.6-11.9-7.1-19.6
+ h19.6c0.7,6.1,3.5,10.8,8.4,13.9c4.9,3.2,10.7,4.8,17.4,4.8c7,0,13.1-2,18.2-6c5.1-4,7.7-10.3,7.7-18.9v-24.7
+ c-3.6,3.4-8,6.2-13.3,8.2c-5.2,2.1-10.7,3.1-16.3,3.1c-8.7,0-16.6-2.1-23.7-6.4c-7.1-4.3-12.6-10-16.7-17.3c-4-7.3-6-15.5-6-24.6
+ s2-17.3,6-24.7s9.6-13.2,16.7-17.4c7.1-4.3,15-6.4,23.7-6.4c5.7,0,11.1,1,16.3,3.1s9.6,4.8,13.3,8.2v-8.8h19.4v107.8
+ C2803.2,815.9,2798.9,826.4,2790.3,833.2z M2782.2,755.7c2.6-4.7,3.8-10,3.8-15.9s-1.3-11.2-3.8-16c-2.6-4.8-6.1-8.5-10.5-11.1
+ c-4.5-2.7-9.5-4-15.1-4c-5.8,0-10.9,1.4-15.4,4.3c-4.5,2.8-7.9,6.6-10.3,11.4c-2.4,4.8-3.6,9.9-3.6,15.5c0,5.4,1.2,10.5,3.6,15.3
+ c2.4,4.8,5.8,8.6,10.3,11.5s9.6,4.3,15.4,4.3c5.6,0,10.6-1.4,15.1-4.1C2776.1,764.1,2779.6,760.4,2782.2,755.7z"/>
+ <path class="st0" d="M2843.5,788.4h-21.6l37.9-48l-36.4-46.6h22.6l25.7,33.3l25.8-33.3h21.6l-36.2,45.9l37.9,48.6h-22.6l-27.4-35
+ L2843.5,788.4z"/>
+</g>
+<path class="st0" d="M835.8,319.2c-11.5-18.9-27.4-33.7-47.6-44.7c-20.2-10.9-43-16.4-68.5-16.4h-90.6c-8.6,39.6-21.3,77.2-38,112.4
+ c-10,21-21.3,41-33.9,59.9v209.2H647v-135h72.7c25.4,0,48.3-5.5,68.5-16.4s36.1-25.8,47.6-44.7c11.5-18.9,17.3-39.5,17.3-61.9
+ C853.1,358.9,847.4,338.1,835.8,319.2z M747,416.6c-9.4,9-21.8,13.5-37,13.5l-62.8,0.4v-93.4l62.8-0.4c15.3,0,27.6,4.5,37,13.5
+ s14.1,20,14.1,33.2C761.1,396.6,756.4,407.7,747,416.6z"/>
+<path class="st1" d="M164.7,698.7c-3.5-16.5-10.4-49.6-11.3-49.6c-147.1-88-129.7-240.3-81-327.4C82.8,431.4,277,507.1,163.8,641.2
+ c-0.9,1.7,5.2,22.6,10.4,41.8c22.6-38.3,56.6-84.4,54.8-88.8C89.7,254.7,525,228.6,615.5,17.9c40.9,203.7-20.9,518.9-370.8,599
+ c-1.7,0.9-63.5,109.7-66.2,110.6c0-1.7-26.1-0.9-22.6-9.6C157.8,712.6,161.2,705.7,164.7,698.7L164.7,698.7z M160.4,616.9
+ c44.4-51.4-7.8-139.3-39.2-168C174.3,540.2,170.8,593.3,160.4,616.9L160.4,616.9z"/>
+</svg>
# Changelog
+## paperless-ngx 1.10.1
+
+### Features
+
+- Feature: Allows documents in WebP format [@stumpylog](https://github.com/stumpylog) ([#1984](https://github.com/paperless-ngx/paperless-ngx/pull/1984))
+
+### Bug Fixes
+
+- Fix: frontend tasks display in 1.10.0 [@shamoon](https://github.com/shamoon) ([#2073](https://github.com/paperless-ngx/paperless-ngx/pull/2073))
+- Bugfix: Custom startup commands weren't run as root [@stumpylog](https://github.com/stumpylog) ([#2069](https://github.com/paperless-ngx/paperless-ngx/pull/2069))
+- Bugfix: Add libatomic for armv7 compatibility [@stumpylog](https://github.com/stumpylog) ([#2066](https://github.com/paperless-ngx/paperless-ngx/pull/2066))
+- Bugfix: Don't silence an exception when trying to handle file naming [@stumpylog](https://github.com/stumpylog) ([#2062](https://github.com/paperless-ngx/paperless-ngx/pull/2062))
+- Bugfix: Some tesseract languages aren't detected as installed. [@stumpylog](https://github.com/stumpylog) ([#2057](https://github.com/paperless-ngx/paperless-ngx/pull/2057))
+
+### Maintenance
+
+- Chore: Use a maintained upload-release-asset [@stumpylog](https://github.com/stumpylog) ([#2055](https://github.com/paperless-ngx/paperless-ngx/pull/2055))
+
+### Dependencies
+
+ <details>
+ <summary>5 changes</summary>
+
+- Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot ([#2076](https://github.com/paperless-ngx/paperless-ngx/pull/2076))
+- Bump @<!---->angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot ([#2079](https://github.com/paperless-ngx/paperless-ngx/pull/2079))
+- Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078))
+- Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080))
+- Bump @<!---->ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077))
+</details>
+
+### All App Changes
+
+- Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot ([#2076](https://github.com/paperless-ngx/paperless-ngx/pull/2076))
+- Bump @<!---->angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot ([#2079](https://github.com/paperless-ngx/paperless-ngx/pull/2079))
+- Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078))
+- Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080))
+- Bump @<!---->ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077))
+- Fix: frontend tasks display in 1.10.0 [@shamoon](https://github.com/shamoon) ([#2073](https://github.com/paperless-ngx/paperless-ngx/pull/2073))
+- Bugfix: Don't silence an exception when trying to handle file naming [@stumpylog](https://github.com/stumpylog) ([#2062](https://github.com/paperless-ngx/paperless-ngx/pull/2062))
+- Bugfix: Some tesseract languages aren't detected as installed. [@stumpylog](https://github.com/stumpylog) ([#2057](https://github.com/paperless-ngx/paperless-ngx/pull/2057))
+
+## paperless-ngx 1.10.0
+
+### Features
+
+- Feature: Capture stdout \& stderr of the pre/post consume scripts [@stumpylog](https://github.com/stumpylog) ([#1967](https://github.com/paperless-ngx/paperless-ngx/pull/1967))
+- Feature: Allow running custom container initialization scripts [@stumpylog](https://github.com/stumpylog) ([#1838](https://github.com/paperless-ngx/paperless-ngx/pull/1838))
+- Feature: Add more file name formatting options [@stumpylog](https://github.com/stumpylog) ([#1906](https://github.com/paperless-ngx/paperless-ngx/pull/1906))
+- Feature: 1.9.2 UI tweaks [@shamoon](https://github.com/shamoon) ([#1886](https://github.com/paperless-ngx/paperless-ngx/pull/1886))
+- Feature: Optional celery monitoring with Flower [@stumpylog](https://github.com/stumpylog) ([#1810](https://github.com/paperless-ngx/paperless-ngx/pull/1810))
+- Feature: Save pending tasks for frontend [@stumpylog](https://github.com/stumpylog) ([#1816](https://github.com/paperless-ngx/paperless-ngx/pull/1816))
+- Feature: Improved processing for automatic matching [@stumpylog](https://github.com/stumpylog) ([#1609](https://github.com/paperless-ngx/paperless-ngx/pull/1609))
+- Feature: Transition to celery for background tasks [@stumpylog](https://github.com/stumpylog) ([#1648](https://github.com/paperless-ngx/paperless-ngx/pull/1648))
+- Feature: UI Welcome Tour [@shamoon](https://github.com/shamoon) ([#1644](https://github.com/paperless-ngx/paperless-ngx/pull/1644))
+- Feature: slim sidebar [@shamoon](https://github.com/shamoon) ([#1641](https://github.com/paperless-ngx/paperless-ngx/pull/1641))
+- change default matching algo to auto and move to constant [@NiFNi](https://github.com/NiFNi) ([#1754](https://github.com/paperless-ngx/paperless-ngx/pull/1754))
+- Feature: Enable end to end Tika testing in CI [@stumpylog](https://github.com/stumpylog) ([#1757](https://github.com/paperless-ngx/paperless-ngx/pull/1757))
+- Feature: frontend update checking settings [@shamoon](https://github.com/shamoon) ([#1692](https://github.com/paperless-ngx/paperless-ngx/pull/1692))
+- Feature: Upgrade to qpdf 11, pikepdf 6 \& ocrmypdf 14 [@stumpylog](https://github.com/stumpylog) ([#1642](https://github.com/paperless-ngx/paperless-ngx/pull/1642))
+
+### Bug Fixes
+
+- Bugfix: Fix created_date being a string [@stumpylog](https://github.com/stumpylog) ([#2023](https://github.com/paperless-ngx/paperless-ngx/pull/2023))
+- Bugfix: Fixes an issue with mixed text and images when redoing OCR [@stumpylog](https://github.com/stumpylog) ([#2017](https://github.com/paperless-ngx/paperless-ngx/pull/2017))
+- Bugfix: Always re-try barcodes with pdf2image [@stumpylog](https://github.com/stumpylog) ([#1953](https://github.com/paperless-ngx/paperless-ngx/pull/1953))
+- Fix: using `CONSUMER_SUBDIRS_AS_TAGS` causes failure with Celery in `dev` [@shamoon](https://github.com/shamoon) ([#1942](https://github.com/paperless-ngx/paperless-ngx/pull/1942))
+- Fix mail consumption broken in `dev` after move to celery [@shamoon](https://github.com/shamoon) ([#1934](https://github.com/paperless-ngx/paperless-ngx/pull/1934))
+- Bugfix: Prevent file handling from running with stale data [@stumpylog](https://github.com/stumpylog) ([#1905](https://github.com/paperless-ngx/paperless-ngx/pull/1905))
+- Chore: Reduce nuisance CI test failures [@stumpylog](https://github.com/stumpylog) ([#1922](https://github.com/paperless-ngx/paperless-ngx/pull/1922))
+- Bugfix: Unintentional deletion of feature tagged Docker images [@stumpylog](https://github.com/stumpylog) ([#1896](https://github.com/paperless-ngx/paperless-ngx/pull/1896))
+- Fix: independent control of saved views [@shamoon](https://github.com/shamoon) ([#1868](https://github.com/paperless-ngx/paperless-ngx/pull/1868))
+- Fix: frontend relative date searches [@shamoon](https://github.com/shamoon) ([#1865](https://github.com/paperless-ngx/paperless-ngx/pull/1865))
+- Chore: Fixes pipenv issues [@stumpylog](https://github.com/stumpylog) ([#1873](https://github.com/paperless-ngx/paperless-ngx/pull/1873))
+- Bugfix: Handle password protected PDFs during barcode detection [@stumpylog](https://github.com/stumpylog) ([#1858](https://github.com/paperless-ngx/paperless-ngx/pull/1858))
+- Fix: Allows configuring barcodes with pdf2image instead of pikepdf [@stumpylog](https://github.com/stumpylog) ([#1857](https://github.com/paperless-ngx/paperless-ngx/pull/1857))
+- Bugfix: Reverts the change around skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1829](https://github.com/paperless-ngx/paperless-ngx/pull/1829))
+- Fix: missing loadViewConfig breaks loading saved view [@shamoon](https://github.com/shamoon) ([#1792](https://github.com/paperless-ngx/paperless-ngx/pull/1792))
+- Bugfix: Fallback to pdf2image if pikepdf fails [@stumpylog](https://github.com/stumpylog) ([#1745](https://github.com/paperless-ngx/paperless-ngx/pull/1745))
+- Fix: creating new storage path on document edit fails to update menu [@shamoon](https://github.com/shamoon) ([#1777](https://github.com/paperless-ngx/paperless-ngx/pull/1777))
+- Bugfix: Files containing barcodes uploaded via web are not consumed after splitting [@stumpylog](https://github.com/stumpylog) ([#1762](https://github.com/paperless-ngx/paperless-ngx/pull/1762))
+- Bugfix: Fix email labeling for non-Gmail servers [@stumpylog](https://github.com/stumpylog) ([#1755](https://github.com/paperless-ngx/paperless-ngx/pull/1755))
+- Fix: allow preview for .csv files [@shamoon](https://github.com/shamoon) ([#1744](https://github.com/paperless-ngx/paperless-ngx/pull/1744))
+- Bugfix: csv recognition by consumer [@bin101](https://github.com/bin101) ([#1726](https://github.com/paperless-ngx/paperless-ngx/pull/1726))
+- Bugfix: Include document title when a duplicate is detected [@stumpylog](https://github.com/stumpylog) ([#1696](https://github.com/paperless-ngx/paperless-ngx/pull/1696))
+- Bugfix: Set MySql charset [@stumpylog](https://github.com/stumpylog) ([#1687](https://github.com/paperless-ngx/paperless-ngx/pull/1687))
+- Mariadb compose files should use `PAPERLESS_DBPASS` [@shamoon](https://github.com/shamoon) ([#1683](https://github.com/paperless-ngx/paperless-ngx/pull/1683))
+
+### Documentation
+
+- Documentation: Update MariaDB docs to note some potential issues [@stumpylog](https://github.com/stumpylog) ([#2016](https://github.com/paperless-ngx/paperless-ngx/pull/2016))
+- Documentation: Add note re MS exchange servers [@shamoon](https://github.com/shamoon) ([#1780](https://github.com/paperless-ngx/paperless-ngx/pull/1780))
+- Chore: Updates Gotenberg versions [@stumpylog](https://github.com/stumpylog) ([#1768](https://github.com/paperless-ngx/paperless-ngx/pull/1768))
+- Documentation: Tweak LinuxServer [@stumpylog](https://github.com/stumpylog) ([#1761](https://github.com/paperless-ngx/paperless-ngx/pull/1761))
+- Documentation: Adds troubleshooting note about Kubernetes and ports [@stumpylog](https://github.com/stumpylog) ([#1731](https://github.com/paperless-ngx/paperless-ngx/pull/1731))
+- Documentation: LinuxServer.io Migration [@stumpylog](https://github.com/stumpylog) ([#1733](https://github.com/paperless-ngx/paperless-ngx/pull/1733))
+- [Documentation] Add v1.9.2 changelog [@github-actions](https://github.com/github-actions) ([#1671](https://github.com/paperless-ngx/paperless-ngx/pull/1671))
+
+### Maintenance
+
+- Bump tj-actions/changed-files from 32 to 34 [@dependabot](https://github.com/dependabot) ([#1915](https://github.com/paperless-ngx/paperless-ngx/pull/1915))
+- Chore: Fix `dev` trying to build Pillow or lxml [@stumpylog](https://github.com/stumpylog) ([#1909](https://github.com/paperless-ngx/paperless-ngx/pull/1909))
+- Chore: Fixes pipenv issues [@stumpylog](https://github.com/stumpylog) ([#1873](https://github.com/paperless-ngx/paperless-ngx/pull/1873))
+- Chore: Simplified registry cleanup [@stumpylog](https://github.com/stumpylog) ([#1812](https://github.com/paperless-ngx/paperless-ngx/pull/1812))
+- Chore: Fixing deprecated workflow commands [@stumpylog](https://github.com/stumpylog) ([#1786](https://github.com/paperless-ngx/paperless-ngx/pull/1786))
+- Chore: Python library update + test fixes [@stumpylog](https://github.com/stumpylog) ([#1773](https://github.com/paperless-ngx/paperless-ngx/pull/1773))
+- Chore: Updates Gotenberg versions [@stumpylog](https://github.com/stumpylog) ([#1768](https://github.com/paperless-ngx/paperless-ngx/pull/1768))
+- Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 [@dependabot](https://github.com/dependabot) ([#1703](https://github.com/paperless-ngx/paperless-ngx/pull/1703))
+- Bump tj-actions/changed-files from 29.0.2 to 31.0.2 [@dependabot](https://github.com/dependabot) ([#1702](https://github.com/paperless-ngx/paperless-ngx/pull/1702))
+- Bump actions/checkout from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1704](https://github.com/paperless-ngx/paperless-ngx/pull/1704))
+- Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1705](https://github.com/paperless-ngx/paperless-ngx/pull/1705))
+
+### Dependencies
+
+<details>
+<summary>31 changes</summary>
+
+- Bugfix: Downgrade cryptography for armv7 compatibility [@stumpylog](https://github.com/stumpylog) ([#1954](https://github.com/paperless-ngx/paperless-ngx/pull/1954))
+- Chore: Bulk library updates + loosen restrictions [@stumpylog](https://github.com/stumpylog) ([#1949](https://github.com/paperless-ngx/paperless-ngx/pull/1949))
+- Bump tj-actions/changed-files from 32 to 34 [@dependabot](https://github.com/dependabot) ([#1915](https://github.com/paperless-ngx/paperless-ngx/pull/1915))
+- Bump scikit-learn from 1.1.2 to 1.1.3 [@dependabot](https://github.com/dependabot) ([#1903](https://github.com/paperless-ngx/paperless-ngx/pull/1903))
+- Bump angular packages as bundle [@dependabot](https://github.com/dependabot) ([#1910](https://github.com/paperless-ngx/paperless-ngx/pull/1910))
+- Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1911](https://github.com/paperless-ngx/paperless-ngx/pull/1911))
+- Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1914](https://github.com/paperless-ngx/paperless-ngx/pull/1914))
+- Bump pillow from 9.2.0 to 9.3.0 [@dependabot](https://github.com/dependabot) ([#1904](https://github.com/paperless-ngx/paperless-ngx/pull/1904))
+- Bump pytest from 7.1.3 to 7.2.0 [@dependabot](https://github.com/dependabot) ([#1902](https://github.com/paperless-ngx/paperless-ngx/pull/1902))
+- Bump tox from 3.26.0 to 3.27.0 [@dependabot](https://github.com/dependabot) ([#1901](https://github.com/paperless-ngx/paperless-ngx/pull/1901))
+- Bump zipp from 3.9.0 to 3.10.0 [@dependabot](https://github.com/dependabot) ([#1860](https://github.com/paperless-ngx/paperless-ngx/pull/1860))
+- Bump pytest-env from 0.6.2 to 0.8.1 [@dependabot](https://github.com/dependabot) ([#1859](https://github.com/paperless-ngx/paperless-ngx/pull/1859))
+- Bump sphinx from 5.2.3 to 5.3.0 [@dependabot](https://github.com/dependabot) ([#1817](https://github.com/paperless-ngx/paperless-ngx/pull/1817))
+- Chore: downgrade channels-redis [@stumpylog](https://github.com/stumpylog) ([#1802](https://github.com/paperless-ngx/paperless-ngx/pull/1802))
+- Chore: Update to qpdf 11.1.1 and update backend libraries [@stumpylog](https://github.com/stumpylog) ([#1749](https://github.com/paperless-ngx/paperless-ngx/pull/1749))
+- Bump myst-parser from 0.18.0 to 0.18.1 [@dependabot](https://github.com/dependabot) ([#1738](https://github.com/paperless-ngx/paperless-ngx/pull/1738))
+- Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 [@dependabot](https://github.com/dependabot) ([#1703](https://github.com/paperless-ngx/paperless-ngx/pull/1703))
+- Bump tj-actions/changed-files from 29.0.2 to 31.0.2 [@dependabot](https://github.com/dependabot) ([#1702](https://github.com/paperless-ngx/paperless-ngx/pull/1702))
+- Bump actions/checkout from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1704](https://github.com/paperless-ngx/paperless-ngx/pull/1704))
+- Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1705](https://github.com/paperless-ngx/paperless-ngx/pull/1705))
+- Bump rxjs from 7.5.6 to 7.5.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#1720](https://github.com/paperless-ngx/paperless-ngx/pull/1720))
+- Bump uuid from 8.3.2 to 9.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1716](https://github.com/paperless-ngx/paperless-ngx/pull/1716))
+- Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1717](https://github.com/paperless-ngx/paperless-ngx/pull/1717))
+- Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1715](https://github.com/paperless-ngx/paperless-ngx/pull/1715))
+- Bump concurrently from 7.3.0 to 7.4.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1719](https://github.com/paperless-ngx/paperless-ngx/pull/1719))
+- Bump [@<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot) ([#1718](https://github.com/paperless-ngx/paperless-ngx/pull/1718))
+- Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1714](https://github.com/paperless-ngx/paperless-ngx/pull/1714))
+- Bump [@<!---->angular/cli @<!---->angular/core @dependabot](https://github.com/<!---->angular/cli @<!---->angular/core @dependabot) ([#1708](https://github.com/paperless-ngx/paperless-ngx/pull/1708))
+- Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707))
+- Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710))
+- Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706))
+</details>
+
+### All App Changes
+
+- Add info that re-do OCR doesnt automatically refresh content [@shamoon](https://github.com/shamoon) ([#2025](https://github.com/paperless-ngx/paperless-ngx/pull/2025))
+- Bugfix: Fix created_date being a string [@stumpylog](https://github.com/stumpylog) ([#2023](https://github.com/paperless-ngx/paperless-ngx/pull/2023))
+- Bugfix: Fixes an issue with mixed text and images when redoing OCR [@stumpylog](https://github.com/stumpylog) ([#2017](https://github.com/paperless-ngx/paperless-ngx/pull/2017))
+- Bugfix: Don't allow exceptions during date parsing to fail consume [@stumpylog](https://github.com/stumpylog) ([#1998](https://github.com/paperless-ngx/paperless-ngx/pull/1998))
+- Feature: Capture stdout \& stderr of the pre/post consume scripts [@stumpylog](https://github.com/stumpylog) ([#1967](https://github.com/paperless-ngx/paperless-ngx/pull/1967))
+- Bugfix: Always re-try barcodes with pdf2image [@stumpylog](https://github.com/stumpylog) ([#1953](https://github.com/paperless-ngx/paperless-ngx/pull/1953))
+- Fix: using `CONSUMER_SUBDIRS_AS_TAGS` causes failure with Celery in `dev` [@shamoon](https://github.com/shamoon) ([#1942](https://github.com/paperless-ngx/paperless-ngx/pull/1942))
+- Fix mail consumption broken in `dev` after move to celery [@shamoon](https://github.com/shamoon) ([#1934](https://github.com/paperless-ngx/paperless-ngx/pull/1934))
+- Bugfix: Prevent file handling from running with stale data [@stumpylog](https://github.com/stumpylog) ([#1905](https://github.com/paperless-ngx/paperless-ngx/pull/1905))
+- Chore: Reduce nuisance CI test failures [@stumpylog](https://github.com/stumpylog) ([#1922](https://github.com/paperless-ngx/paperless-ngx/pull/1922))
+- Bump scikit-learn from 1.1.2 to 1.1.3 [@dependabot](https://github.com/dependabot) ([#1903](https://github.com/paperless-ngx/paperless-ngx/pull/1903))
+- Bump angular packages as bundle [@dependabot](https://github.com/dependabot) ([#1910](https://github.com/paperless-ngx/paperless-ngx/pull/1910))
+- Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1911](https://github.com/paperless-ngx/paperless-ngx/pull/1911))
+- Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1914](https://github.com/paperless-ngx/paperless-ngx/pull/1914))
+- Feature: Add more file name formatting options [@stumpylog](https://github.com/stumpylog) ([#1906](https://github.com/paperless-ngx/paperless-ngx/pull/1906))
+- Bump pillow from 9.2.0 to 9.3.0 [@dependabot](https://github.com/dependabot) ([#1904](https://github.com/paperless-ngx/paperless-ngx/pull/1904))
+- Bump pytest from 7.1.3 to 7.2.0 [@dependabot](https://github.com/dependabot) ([#1902](https://github.com/paperless-ngx/paperless-ngx/pull/1902))
+- Bump tox from 3.26.0 to 3.27.0 [@dependabot](https://github.com/dependabot) ([#1901](https://github.com/paperless-ngx/paperless-ngx/pull/1901))
+- directly use rapidfuzz [@maxbachmann](https://github.com/maxbachmann) ([#1899](https://github.com/paperless-ngx/paperless-ngx/pull/1899))
+- Feature: 1.9.2 UI tweaks [@shamoon](https://github.com/shamoon) ([#1886](https://github.com/paperless-ngx/paperless-ngx/pull/1886))
+- Bump zipp from 3.9.0 to 3.10.0 [@dependabot](https://github.com/dependabot) ([#1860](https://github.com/paperless-ngx/paperless-ngx/pull/1860))
+- Fix: independent control of saved views [@shamoon](https://github.com/shamoon) ([#1868](https://github.com/paperless-ngx/paperless-ngx/pull/1868))
+- Fix: frontend relative date searches [@shamoon](https://github.com/shamoon) ([#1865](https://github.com/paperless-ngx/paperless-ngx/pull/1865))
+- Django error W003 - MariaDB may not allow unique CharFields to have a max_length > 255. [@Sblop](https://github.com/Sblop) ([#1881](https://github.com/paperless-ngx/paperless-ngx/pull/1881))
+- Bump pytest-env from 0.6.2 to 0.8.1 [@dependabot](https://github.com/dependabot) ([#1859](https://github.com/paperless-ngx/paperless-ngx/pull/1859))
+- Fix: Allows configuring barcodes with pdf2image instead of pikepdf [@stumpylog](https://github.com/stumpylog) ([#1857](https://github.com/paperless-ngx/paperless-ngx/pull/1857))
+- Feature: Save pending tasks for frontend [@stumpylog](https://github.com/stumpylog) ([#1816](https://github.com/paperless-ngx/paperless-ngx/pull/1816))
+- Bugfix: Reverts the change around skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1829](https://github.com/paperless-ngx/paperless-ngx/pull/1829))
+- Bump sphinx from 5.2.3 to 5.3.0 [@dependabot](https://github.com/dependabot) ([#1817](https://github.com/paperless-ngx/paperless-ngx/pull/1817))
+- Fix: missing loadViewConfig breaks loading saved view [@shamoon](https://github.com/shamoon) ([#1792](https://github.com/paperless-ngx/paperless-ngx/pull/1792))
+- Bugfix: Fallback to pdf2image if pikepdf fails [@stumpylog](https://github.com/stumpylog) ([#1745](https://github.com/paperless-ngx/paperless-ngx/pull/1745))
+- Fix: creating new storage path on document edit fails to update menu [@shamoon](https://github.com/shamoon) ([#1777](https://github.com/paperless-ngx/paperless-ngx/pull/1777))
+- Chore: Python library update + test fixes [@stumpylog](https://github.com/stumpylog) ([#1773](https://github.com/paperless-ngx/paperless-ngx/pull/1773))
+- Feature: Improved processing for automatic matching [@stumpylog](https://github.com/stumpylog) ([#1609](https://github.com/paperless-ngx/paperless-ngx/pull/1609))
+- Feature: Transition to celery for background tasks [@stumpylog](https://github.com/stumpylog) ([#1648](https://github.com/paperless-ngx/paperless-ngx/pull/1648))
+- Feature: UI Welcome Tour [@shamoon](https://github.com/shamoon) ([#1644](https://github.com/paperless-ngx/paperless-ngx/pull/1644))
+- Feature: slim sidebar [@shamoon](https://github.com/shamoon) ([#1641](https://github.com/paperless-ngx/paperless-ngx/pull/1641))
+- Bugfix: Files containing barcodes uploaded via web are not consumed after splitting [@stumpylog](https://github.com/stumpylog) ([#1762](https://github.com/paperless-ngx/paperless-ngx/pull/1762))
+- change default matching algo to auto and move to constant [@NiFNi](https://github.com/NiFNi) ([#1754](https://github.com/paperless-ngx/paperless-ngx/pull/1754))
+- Bugfix: Fix email labeling for non-Gmail servers [@stumpylog](https://github.com/stumpylog) ([#1755](https://github.com/paperless-ngx/paperless-ngx/pull/1755))
+- Feature: frontend update checking settings [@shamoon](https://github.com/shamoon) ([#1692](https://github.com/paperless-ngx/paperless-ngx/pull/1692))
+- Fix: allow preview for .csv files [@shamoon](https://github.com/shamoon) ([#1744](https://github.com/paperless-ngx/paperless-ngx/pull/1744))
+- Bump myst-parser from 0.18.0 to 0.18.1 [@dependabot](https://github.com/dependabot) ([#1738](https://github.com/paperless-ngx/paperless-ngx/pull/1738))
+- Bugfix: csv recognition by consumer [@bin101](https://github.com/bin101) ([#1726](https://github.com/paperless-ngx/paperless-ngx/pull/1726))
+- Bugfix: Include document title when a duplicate is detected [@stumpylog](https://github.com/stumpylog) ([#1696](https://github.com/paperless-ngx/paperless-ngx/pull/1696))
+- Bump rxjs from 7.5.6 to 7.5.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#1720](https://github.com/paperless-ngx/paperless-ngx/pull/1720))
+- Bump uuid from 8.3.2 to 9.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1716](https://github.com/paperless-ngx/paperless-ngx/pull/1716))
+- Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1717](https://github.com/paperless-ngx/paperless-ngx/pull/1717))
+- Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1715](https://github.com/paperless-ngx/paperless-ngx/pull/1715))
+- Bump concurrently from 7.3.0 to 7.4.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1719](https://github.com/paperless-ngx/paperless-ngx/pull/1719))
+- Bump [@<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot) ([#1718](https://github.com/paperless-ngx/paperless-ngx/pull/1718))
+- Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1714](https://github.com/paperless-ngx/paperless-ngx/pull/1714))
+- Bump [@<!---->angular/cli @<!---->angular/core @dependabot](https://github.com/<!---->angular/cli @<!---->angular/core @dependabot) ([#1708](https://github.com/paperless-ngx/paperless-ngx/pull/1708))
+- Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707))
+- Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710))
+- Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706))
+- Bugfix: Set MySql charset [@stumpylog](https://github.com/stumpylog) ([#1687](https://github.com/paperless-ngx/paperless-ngx/pull/1687))
+
+## paperless-ngx 1.9.2
+
+### Bug Fixes
+
+- Bugfix: Allow PAPERLESS_OCR_CLEAN=none [@shamoon](https://github.com/shamoon) ([#1670](https://github.com/paperless-ngx/paperless-ngx/pull/1670))
+
+### All App Changes
+
+- Chore: Bumps version numbers to 1.9.2 [@stumpylog](https://github.com/stumpylog) ([#1666](https://github.com/paperless-ngx/paperless-ngx/pull/1666))
+
## paperless-ngx 1.9.1
+### Notes
+
+- Version 1.9.1 incorrectly displays the version string as 1.9.0
+
### Bug Fixes
- Bugfix: Fixes missing OCR mode skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1645](https://github.com/paperless-ngx/paperless-ngx/pull/1645))
- Allow setting more than one tag in mail rules
[\@jonasc](https://github.com/jonasc) ([\#270](https://github.com/paperless-ngx/paperless-ngx/pull/270))
-- Global drag\'n\'drop [\@shamoon](https://github.com/shamoon)
+- Global drag'n'drop [\@shamoon](https://github.com/shamoon)
([\#283](https://github.com/paperless-ngx/paperless-ngx/pull/283))
- Fix: download buttons should disable while waiting
[\@shamoon](https://github.com/shamoon) ([\#630](https://github.com/paperless-ngx/paperless-ngx/pull/630))
### Bug Fixes
-- Add \"localhost\" to ALLOWED_HOSTS
+- Add "localhost" to ALLOWED_HOSTS
[\@gador](https://github.com/gador) ([\#700](https://github.com/paperless-ngx/paperless-ngx/pull/700))
- Fix: scanners table [\@qcasey](https://github.com/qcasey) ([\#690](https://github.com/paperless-ngx/paperless-ngx/pull/690))
- Adds wait for file before consuming
([\#393](https://github.com/paperless-ngx/paperless-ngx/pull/393))
- Fix filterable dropdown buttons arent translated
[\@shamoon](https://github.com/shamoon) ([\#366](https://github.com/paperless-ngx/paperless-ngx/pull/366))
-- Fix 224: \"Auto-detected date is day before receipt date\"
+- Fix 224: "Auto-detected date is day before receipt date"
[\@a17t](https://github.com/a17t) ([\#246](https://github.com/paperless-ngx/paperless-ngx/pull/246))
- Fix minor sphinx errors [\@shamoon](https://github.com/shamoon)
([\#322](https://github.com/paperless-ngx/paperless-ngx/pull/322))
you to everyone on the paperless-ngx team for your initiative and
excellent teamwork!
-Version 1.6.0 merges several pending PRs from jonaswinkler\'s repo and
+Version 1.6.0 merges several pending PRs from jonaswinkler's repo and
includes new feature updates and bug fixes. Major backend and UI changes
include:
when document list is reloading ([jonaswinkler\#1297](https://github.com/jonaswinkler/paperless-ng/pull/1297)).
- [\@shamoon](https://github.com/shamoon) improved the PDF viewer on
mobile ([\#2](https://github.com/paperless-ngx/paperless-ngx/pull/2)).
-- [\@shamoon](https://github.com/shamoon) added \'any\' / \'all\' and
- \'not\' filtering with tags ([\#10](https://github.com/paperless-ngx/paperless-ngx/pull/10)).
+- [\@shamoon](https://github.com/shamoon) added 'any' / 'all' and
+ 'not' filtering with tags ([\#10](https://github.com/paperless-ngx/paperless-ngx/pull/10)).
- [\@shamoon](https://github.com/shamoon) added warnings for unsaved
changes, with smart edit buttons ([\#13](https://github.com/paperless-ngx/paperless-ngx/pull/13)).
- [\@benjaminfrank](https://github.com/benjaminfrank) enabled a
non-root access to port 80 via systemd ([\#18](https://github.com/paperless-ngx/paperless-ngx/pull/18)).
-- [\@tribut](https://github.com/tribut) added simple \"delete to
- trash\" functionality ([\#24](https://github.com/paperless-ngx/paperless-ngx/pull/24)). See `PAPERLESS_TRASH_DIR`.
+- [\@tribut](https://github.com/tribut) added simple "delete to
+ trash" functionality ([\#24](https://github.com/paperless-ngx/paperless-ngx/pull/24)). See `PAPERLESS_TRASH_DIR`.
- [\@amenk](https://github.com/amenk) fixed the search box overlay
menu on mobile ([\#32](https://github.com/paperless-ngx/paperless-ngx/pull/32)).
- [\@dblitt](https://github.com/dblitt) updated the login form to not
- Changes
- Firefox only: Highlight search query in PDF previews.
- New URL pattern for accessing documents by ASN directly
- (<http://>\<paperless\>/asn/123)
+ (<http://><paperless>/asn/123)
- Added logging when executing pre\* and post-consume scripts.
- Better error logging during document consumption.
- Updated python dependencies.
- - Automatically inserts typed text when opening \"Create new\"
+ - Automatically inserts typed text when opening "Create new"
dialogs on the document details page.
- Fixes
- Fixed an issue with null characters in the document content.
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
The changed to the full text searching require you to reindex your
-documents. _The docker image does this automatically, you don\'t need to
+documents. _The docker image does this automatically, you don't need to
do anything._ To do this, execute the `document_index reindex`
management command (see `administration-index`{.interpreted-text
role="ref"}).
-:::
### paperless-ng 1.3.2
worker processes of the web server. See
`configuration-docker`{.interpreted-text role="ref"}.
- Some more memory usage optimizations.
-- Don\'t show inbox statistics if no inbox tag is defined.
+- Don't show inbox statistics if no inbox tag is defined.
### paperless-ng 1.1.2
This release contains new database migrations.
-- Fixed a bug in the sanity checker that would cause it to display \"x
- not in list\" errors instead of actual issues.
+- Fixed a bug in the sanity checker that would cause it to display "x
+ not in list" errors instead of actual issues.
- Fixed a bug with filename generation for archive filenames that
would cause the archive files of two documents to overlap.
- This happened when `PAPERLESS_FILENAME_FORMAT` is used and the
- Paperless will now store the archive filename in the database as
well instead of deriving it from the original filename, and use
the same logic for detecting and avoiding filename clashes
- that\'s also used for original filenames.
- - The migrations will repair any missing archive files. If you\'re
+ that's also used for original filenames.
+ - The migrations will repair any missing archive files. If you're
using tika, ensure that tika is running while performing the
migration. Docker-compose will take care of that.
- Fixed a bug with thumbnail regeneration when TIKA integration was
- Added ASN as a placeholder field to the filename format.
- The docker image now comes with built-in shortcuts for most
management commands. These are now the recommended way to execute
- management commands, since these also ensure that they\'re always
- executed as the paperless user and you\'re less likely to run into
+ management commands, since these also ensure that they're always
+ executed as the paperless user and you're less likely to run into
permission issues. See
`utilities-management-commands`{.interpreted-text role="ref"}.
- Live updates to document lists and saved views when new documents
are added.
- ::: {.hint}
- ::: {.title}
- Hint
- :::
+ !!! tip
For status notifications and live updates to work, paperless now
requires an [ASGI](https://asgi.readthedocs.io/en/latest/)-enabled
Apache `mod_wsgi` users, see
`this note <faq-mod_wsgi>`{.interpreted-text role="ref"}.
- :::
- Paperless now offers suggestions for tags, correspondents and types
on the document detail page.
- Better icon for document previews.
- Better info section in the side bar.
- Paperless no longer logs to the database. Instead, logs are
- written to rotating log files. This solves many \"database is
- locked\" issues on Raspberry Pi, especially when SQLite is used.
+ written to rotating log files. This solves many "database is
+ locked" issues on Raspberry Pi, especially when SQLite is used.
- By default, log files are written to `PAPERLESS_DATA_DIR/log/`.
Logging settings can be adjusted with `PAPERLESS_LOGGING_DIR`,
`PAPERLESS_LOGROTATE_MAX_SIZE` and
- Range selection with shift clicking is now possible in the
document list.
- Filtering correspondent, type and tag management pages by name.
- - Focus \"Name\" field in dialogs by default.
+ - Focus "Name" field in dialogs by default.
### paperless-ng 0.9.14
- Fixed an issue with filenames of downloaded files: Dates where
off by one day due to timezone issues.
- Searching will continue to work even when the index returns
- non-existing documents. This resulted in \"Document does not
- exist\" errors before. Instead, a warning is logged, indicating
+ non-existing documents. This resulted in "Document does not
+ exist" errors before. Instead, a warning is logged, indicating
the issue.
- An issue with the consumer crashing when invalid regular
expression were used was fixed.
new ASN to a document.
- Form field validation: When providing invalid input in a form
(such as a duplicate ASN or no name), paperless now has visual
- indicators and clearer error messages about what\'s wrong.
+ indicators and clearer error messages about what's wrong.
- Paperless disables buttons with network actions (such as save
and delete) when a network action is active. This indicates that
something is happening and prevents double clicking.
- - When using \"Save & next\", the title field is focussed
+ - When using "Save & next", the title field is focussed
automatically to better support keyboard editing.
- E-Mail: Added filter rule parameters to allow inline attachments
(watch out for mails with inlined images!) and attachment
Shamoon](https://github.com/shamoon). This is useful for hiding
Paperless behind single sign on applications such as
[authelia](https://www.authelia.com/).
- - \"Clear filters\" has been renamed to \"Reset filters\" and now
+ - "Clear filters" has been renamed to "Reset filters" and now
correctly restores the default filters on saved views. Thanks to
[Michael Shamoon](https://github.com/shamoon)
- Fixes
- - Paperless was unable to save views when \"Not assigned\" was
+ - Paperless was unable to save views when "Not assigned" was
chosen in one of the filter dropdowns.
- Clearer error messages when pre and post consumption scripts do
not exist.
### paperless-ng 0.9.10
- Bulk editing
- - Thanks to [Michael Shamoon](https://github.com/shamoon), we\'ve
+ - Thanks to [Michael Shamoon](https://github.com/shamoon), we've
got a new interface for the bulk editor.
- There are some configuration options in the settings to alter
the behavior.
publishes a webmanifest, which is useful for adding the
application to home screens on mobile devices.
- The Paperless-ng logo now navigates to the dashboard.
- - Filter for documents that don\'t have any correspondents, types
+ - Filter for documents that don't have any correspondents, types
or tags assigned.
- Tags, types and correspondents are now sorted case insensitive.
- Lots of preparation work for localization support.
- The consumer used to stop working when encountering an
incomplete classifier model file.
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
The bulk delete operations did not update the search index. Therefore,
documents that you deleted remained in the index and caused the search
of the bulk editor, you need to reindex your search index by
`running the management command document_index with the argument reindex <administration-index>`{.interpreted-text
role="ref"}.
-:::
### paperless-ng 0.9.9
- The following operations are available: Add and remove
correspondents, tags, document types from selected documents, as
well as mass-deleting documents.
- - We\'ve got a more fancy UI in the works that makes these
- features more accessible, but that\'s not quite ready yet.
+ - We've got a more fancy UI in the works that makes these
+ features more accessible, but that's not quite ready yet.
- Searching
- - Paperless now supports searching for similar documents (\"More
- like this\") both from the document detail page as well as from
+ - Paperless now supports searching for similar documents ("More
+ like this") both from the document detail page as well as from
individual search results.
- A search score indicates how well a document matches the search
query, or how similar a document is to a given reference
document.
- Other additions and changes
- - Clarification in the UI that the fields \"Match\" and \"Is
- insensitive\" are not relevant for the Auto matching algorithm.
+ - Clarification in the UI that the fields "Match" and "Is
+ insensitive" are not relevant for the Auto matching algorithm.
- New select interface for tags, types and correspondents allows
filtering. This also improves tag selection. Thanks again to
[Michael Shamoon](https://github.com/shamoon)!
- Paperless now has proper window titles.
- Fixed an issue with the small cards when more than 7 tags were
used.
- - Navigation of the \"Show all\" links adjusted. They navigate to
+ - Navigation of the "Show all" links adjusted. They navigate to
the saved view now, if available in the sidebar.
- Some indication on the document lists that a filter is active
was added.
- - There\'s a new filter to filter for documents that do _not_ have
+ - There's a new filter to filter for documents that do _not_ have
a certain tag.
- The file upload box now shows upload progress.
- The document edit page was reorganized.
filenames anymore. It will rather append `_01`, `_02`, etc when
it detects duplicate filenames.
-::: {.note}
-::: {.title}
-Note
-:::
+!!! note
The changes to the filename format will apply to newly added documents
and changed documents. If you want all files to reflect these changes,
execute the `document_renamer` management command.
-:::
### paperless-ng 0.9.5
need to do this once, since the schema of the search index
changed. Paperless keeps the index updated after that whenever
something changes.
- - Paperless now has spelling corrections (\"Did you mean\") for
+ - Paperless now has spelling corrections ("Did you mean") for
miss-typed queries.
- The documentation contains
`information about the query syntax <basic-searching>`{.interpreted-text
role="ref"} This features will most likely be removed in future
versions.
- **Added:** New frontend. Features:
- - Single page application: It\'s much more responsive than the
+ - Single page application: It's much more responsive than the
django admin pages.
- Dashboard. Shows recently scanned documents, or todo notes, or
other documents at wish. Allows uploading of documents. Shows
- **Added:** Archive serial numbers. Assign these to quickly find
documents stored in physical binders.
- **Added:** Enabled the internal user management of django. This
- isn\'t really a multi user solution, however, it allows more than
+ isn't really a multi user solution, however, it allows more than
one user to access the website and set some basic permissions /
renew passwords.
- **Modified \[breaking\]:** All new mail consumer with customizable
- **Settings:**
- `PAPERLESS_FORGIVING_OCR` is now default and gone. Reason: Even
if `langdetect` fails to detect a language, tesseract still does
- a very good job at ocr\'ing a document with the default
+ a very good job at ocr'ing a document with the default
language. Certain language specifics such as umlauts may not get
picked up properly.
- `PAPERLESS_DEBUG` defaults to `false`.
[\#442](https://github.com/the-paperless-project/paperless/pull/442).
- Added a `.editorconfig` file to better specify coding style.
- [Joshua Taillon](https://github.com/jat255) also added some logic to
- tie Paperless\' date guessing logic into how it parses file names on
+ tie Paperless' date guessing logic into how it parses file names on
import.
[\#440](https://github.com/the-paperless-project/paperless/pull/440)
### 2.5.0
- **New dependency**: Paperless now optimises thumbnail generation
- with [optipng](http://optipng.sourceforge.net/), so you\'ll need to
+ with [optipng](http://optipng.sourceforge.net/), so you'll need to
install that somewhere in your PATH or declare its location in
`PAPERLESS_OPTIPNG_BINARY`. The Docker image has already been
updated on the Docker Hub, so you just need to pull the latest one
- from there if you\'re a Docker user.
-- \"Login free\" instances of Paperless were breaking whenever you
+ from there if you're a Docker user.
+- "Login free" instances of Paperless were breaking whenever you
tried to edit objects in the admin: adding/deleting tags or
- correspondents, or even fixing spelling. This was due to the \"user
- hack\" we were applying to sessions that weren\'t using a login, as
- that hack user didn\'t have a valid id. The fix was to attribute the
+ correspondents, or even fixing spelling. This was due to the "user
+ hack" we were applying to sessions that weren't using a login, as
+ that hack user didn't have a valid id. The fix was to attribute the
first user id in the system to this hack user.
[\#394](https://github.com/the-paperless-project/paperless/issues/394)
- A problem in how we handle slug values on Tags and Correspondents
required a few changes to how we handle this field
[\#393](https://github.com/the-paperless-project/paperless/issues/393):
- 1. Slugs are no longer editable. They\'re derived from the name of
+ 1. Slugs are no longer editable. They're derived from the name of
the tag or correspondent at save time, so if you wanna change
- the slug, you have to change the name, and even then you\'re
+ the slug, you have to change the name, and even then you're
restricted to the rules of the `slugify()` function. The slug
value is still visible in the admin though.
- 2. I\'ve added a migration to go over all existing tags &
+ 2. I've added a migration to go over all existing tags &
correspondents and rewrite the `.slug` values to ones conforming
to the `slugify()` rules.
3. The consumption process now uses the same rules as `.save()` in
Thanks to [Andrew Peng](https://github.com/pengc99) for reporting
this.
[\#414](https://github.com/the-paperless-project/paperless/issues/414).
-- A bug in the Dockerfile meant that Tesseract language files weren\'t
+- A bug in the Dockerfile meant that Tesseract language files weren't
being installed correctly. [euri10](https://github.com/euri10) was
quick to provide a fix:
[\#406](https://github.com/the-paperless-project/paperless/issues/406),
### 2.4.0
- A new set of actions are now available thanks to
- [jonaswinkler](https://github.com/jonaswinkler)\'s very first pull
+ [jonaswinkler](https://github.com/jonaswinkler)'s very first pull
request! You can now do nifty things like tag documents in bulk, or
set correspondents in bulk.
[\#405](https://github.com/the-paperless-project/paperless/pull/405)
- The import/export system is now a little smarter. By default,
documents are tagged as `unencrypted`, since exports are by their
- nature unencrypted. It\'s now in the import step that we decide the
+ nature unencrypted. It's now in the import step that we decide the
storage type. This allows you to export from an encrypted system and
import into an unencrypted one, or vice-versa.
- The migration history has been slightly modified to accommodate
- Support for consuming plain text & markdown documents was added by
[Joshua Taillon](https://github.com/jat255)! This was a
- long-requested feature, and it\'s addition is likely to be greatly
+ long-requested feature, and it's addition is likely to be greatly
appreciated by the community:
[\#395](https://github.com/the-paperless-project/paperless/pull/395)
Thanks also to [David Martin](https://github.com/ddddavidmartin) for
lots of different tags:
[\#391](https://github.com/the-paperless-project/paperless/pull/391).
- [Kilian Koeltzsch](https://github.com/kiliankoe) noticed a bug in
- how we capture & automatically create tags, so that\'s fixed now
+ how we capture & automatically create tags, so that's fixed now
too:
[\#384](https://github.com/the-paperless-project/paperless/issues/384).
- [erikarvstedt](https://github.com/erikarvstedt) tweaked the
- [Enno Lohmeier](https://github.com/elohmeier) added three simple
features that make Paperless a lot more user (and developer)
friendly:
- 1. There\'s a new search box on the front page:
+ 1. There's a new search box on the front page:
[\#374](https://github.com/the-paperless-project/paperless/pull/374).
2. The correspondents & tags pages now have a column showing the
number of relevant documents:
environment:
[\#376](https://github.com/the-paperless-project/paperless/pull/376).
- You now also have the ability to customise the interface to your
- heart\'s content by creating a file called `overrides.css` and/or
+ heart's content by creating a file called `overrides.css` and/or
`overrides.js` in the root of your media directory. Thanks to [Mark
McFate](https://github.com/SummittDweller) for this idea:
[\#371](https://github.com/the-paperless-project/paperless/issues/371)
### 2.0.0
-This is a big release as we\'ve changed a core-functionality of
+This is a big release as we've changed a core-functionality of
Paperless: we no longer encrypt files with GPG by default.
The reasons for this are many, but it boils down to that the encryption
-wasn\'t really all that useful, as files on-disk were still accessible
+wasn't really all that useful, as files on-disk were still accessible
so long as you had the key, and the key was most typically stored in the
config file. In other words, your files are only as safe as the
`paperless` user is. In addition to that, _the contents of the documents
### Migrating from 1.x
-Encryption isn\'t gone, it\'s just off for new users. So long as you
+Encryption isn't gone, it's just off for new users. So long as you
have `PAPERLESS_PASSPHRASE` set in your config or your environment,
Paperless should continue to operate as it always has. If however, you
want to drop encryption too, you only need to do two things:
for more information.
- Refactor the use of travis/tox/pytest/coverage into two files:
`.travis.yml` and `setup.cfg`.
-- Start generating requirements.txt from a Pipfile. I\'ll probably
+- Start generating requirements.txt from a Pipfile. I'll probably
switch over to just using pipenv in the future.
- All for a alternative FreeBSD-friendly location for
`paperless.conf`. Thanks to [Martin
[\#253](https://github.com/the-paperless-project/paperless/issues/253)
and
[\#323](https://github.com/the-paperless-project/paperless/issues/323),
- we\'ve removed a few of the hardcoded URL values to make it easier
+ we've removed a few of the hardcoded URL values to make it easier
for people to host Paperless on a subdirectory. Thanks to [Quentin
Dawans](https://github.com/ovv) and [Kyle
Lucy](https://github.com/kmlucy) for helping to work this out.
very creating Bash skills:
[\#352](https://github.com/the-paperless-project/paperless/pull/352).
- You can now use the search field to find documents by tag thanks to
- [thinkjk](https://github.com/thinkjk)\'s _first ever issue_:
+ [thinkjk](https://github.com/thinkjk)'s _first ever issue_:
[\#354](https://github.com/the-paperless-project/paperless/issues/354).
- Inotify is now being used to detect additions to the consume
directory thanks to some excellent work from
### 1.3.0
-- You can now run Paperless without a login, though you\'ll still have
+- You can now run Paperless without a login, though you'll still have
to create at least one user. This is thanks to a pull-request from
[matthewmoto](https://github.com/matthewmoto):
[\#295](https://github.com/the-paperless-project/paperless/pull/295).
[\#312](https://github.com/the-paperless-project/paperless/pull/312)
to fix
[\#306](https://github.com/the-paperless-project/paperless/issues/306).
-- Patch the historical migrations to support MySQL\'s um,
+- Patch the historical migrations to support MySQL's um,
_interesting_ way of handing indexes
([\#308](https://github.com/the-paperless-project/paperless/issues/308)).
Thanks to [Simon Taddiken](https://github.com/skuzzle) for reporting
already contains text. This can be overridden by setting
`PAPERLESS_OCR_ALWAYS=YES` either in your `paperless.conf` or in the
environment. Note that this also means that Paperless now requires
- `libpoppler-cpp-dev` to be installed. **Important**: You\'ll need to
+ `libpoppler-cpp-dev` to be installed. **Important**: You'll need to
run `pip install -r requirements.txt` after the usual `git pull` to
properly update.
- [BastianPoe](https://github.com/BastianPoe) has also contributed a
### 1.0.0
-- Upgrade to Django 1.11. **You\'ll need to run \`\`pip install -r
+- Upgrade to Django 1.11. **You'll need to run \`\`pip install -r
requirements.txt\`\` after the usual \`\`git pull\`\` to properly
update**.
- Replace the templatetag-based hack we had for document listing in
[Pit](https://github.com/pitkley) on
[\#268](https://github.com/the-paperless-project/paperless/pull/268).
- Date fields in the admin are now expressed as HTML5 date fields
- thanks to [Lukas Winkler](https://github.com/Findus23)\'s issue
+ thanks to [Lukas Winkler](https://github.com/Findus23)'s issue
[\#278](https://github.com/the-paperless-project/paperless/issues/248)
### 0.8.0
- Paperless can now run in a subdirectory on a host (`/paperless`),
rather than always running in the root (`/`) thanks to
- [maphy-psd](https://github.com/maphy-psd)\'s work on
+ [maphy-psd](https://github.com/maphy-psd)'s work on
[\#255](https://github.com/the-paperless-project/paperless/pull/255).
### 0.7.0
[\#235](https://github.com/the-paperless-project/paperless/issues/235),
Paperless will no longer automatically delete documents attached to
correspondents when those correspondents are themselves deleted.
- This was Django\'s default behaviour, but didn\'t make much sense in
- Paperless\' case. Thanks to [Thomas
+ This was Django's default behaviour, but didn't make much sense in
+ Paperless' case. Thanks to [Thomas
Brueggemann](https://github.com/thomasbrueggemann) and [David
Martin](https://github.com/ddddavidmartin) for their input on this
one.
- Fix for
[\#232](https://github.com/the-paperless-project/paperless/issues/232)
- wherein Paperless wasn\'t recognising `.tif` files properly. Thanks
+ wherein Paperless wasn't recognising `.tif` files properly. Thanks
to [ayounggun](https://github.com/ayounggun) for reporting this one
and to [Kusti Skytén](https://github.com/kskyten) for posting the
correct solution in the Github issue.
favour of BasicAuth or Django session.
- Fix the POST API so it actually works.
[\#236](https://github.com/the-paperless-project/paperless/issues/236)
-- **Breaking change**: We\'ve dropped the use of
+- **Breaking change**: We've dropped the use of
`PAPERLESS_SHARED_SECRET` as it was being used both for the API (now
- replaced with a normal auth) and form email polling. Now that we\'re
+ replaced with a normal auth) and form email polling. Now that we're
only using it for email, this variable has been renamed to
`PAPERLESS_EMAIL_SECRET`. The old value will still work for a while,
- but you should change your config if you\'ve been using the email
+ but you should change your config if you've been using the email
polling feature. Thanks to [Joshua
Gilman](https://github.com/jmgilman) for all the help with this
feature.
### 0.5.0
- Support for fuzzy matching in the auto-tagger & auto-correspondent
- systems thanks to [Jake Gysland](https://github.com/jgysland)\'s
+ systems thanks to [Jake Gysland](https://github.com/jgysland)'s
patch
[\#220](https://github.com/the-paperless-project/paperless/pull/220).
- Modified the Dockerfile to prepare an export directory
- Fix for
[\#206](https://github.com/the-paperless-project/paperless/issues/206)
- wherein the pluggable parser didn\'t recognise files with all-caps
+ wherein the pluggable parser didn't recognise files with all-caps
suffixes like `.PDF`
### 0.4.0
for more information, but the short explanation is that you can now
attach simple notes & times to documents which are made available
via the API. Currently, the default API (basically just the Django
- admin) doesn\'t really make use of this, but [Thomas
+ admin) doesn't really make use of this, but [Thomas
Brueggemann](https://github.com/thomasbrueggemann) over at
[Paperless
Desktop](https://github.com/thomasbrueggemann/paperless-desktop) has
- Fix for
[\#200](https://github.com/the-paperless-project/paperless/issues/200)
- (!!) where the API wasn\'t configured to allow updating the
+ (!!) where the API wasn't configured to allow updating the
correspondent or the tags for a document.
- The `content` field is now optional, to allow for the edge case of a
purely graphical document.
- You can no longer add documents via the admin. This never worked in
- the first place, so all I\'ve done here is remove the link to the
+ the first place, so all I've done here is remove the link to the
broken form.
- The consumer code has been heavily refactored to support a pluggable
interface. Install a paperless consumer via pip and tell paperless
- about it with an environment variable, and you\'re good to go.
+ about it with an environment variable, and you're good to go.
Proper documentation is on its way.
### 0.3.5
- Removal of django-suit due to a licensing conflict I bumped into in
0.3.3. Note that you _can_ use Django Suit with Paperless, but only
in a non-profit situation as their free license prohibits for-profit
- use. As a result, I can\'t bundle Suit with Paperless without
+ use. As a result, I can't bundle Suit with Paperless without
conflicting with the GPL. Further development will be done against
the stock Django admin.
-- I shrunk the thumbnails a little \'cause they were too big for me,
+- I shrunk the thumbnails a little 'cause they were too big for me,
even on my high-DPI monitor.
- BasicAuth support for document and thumbnail downloads, as well as
the Push API thanks to \@thomasbrueggemann. See
### 0.3.0
- Updated to using django-filter 1.x
-- Added some system checks so new users aren\'t confused by
+- Added some system checks so new users aren't confused by
misconfigurations.
- Consumer loop time is now configurable for systems with slow writes.
Just set `PAPERLESS_CONSUMER_LOOP_TIME` to a number of seconds. The
default is 10.
- As per
[\#44](https://github.com/the-paperless-project/paperless/issues/44),
- we\'ve removed support for `PAPERLESS_CONVERT`, `PAPERLESS_CONSUME`,
+ we've removed support for `PAPERLESS_CONVERT`, `PAPERLESS_CONSUME`,
and `PAPERLESS_SECRET`. Please use `PAPERLESS_CONVERT_BINARY`,
`PAPERLESS_CONSUMPTION_DIR`, and `PAPERLESS_SHARED_SECRET`
respectively instead.
- [\#146](https://github.com/the-paperless-project/paperless/issues/146):
Fixed a bug that allowed unauthorised access to the `/fetch` URL.
- [\#131](https://github.com/the-paperless-project/paperless/issues/131):
- Document files are now automatically removed from disk when they\'re
+ Document files are now automatically removed from disk when they're
deleted in Paperless.
- [\#121](https://github.com/the-paperless-project/paperless/issues/121):
- Fixed a bug where Paperless wasn\'t setting document creation time
+ Fixed a bug where Paperless wasn't setting document creation time
based on the file naming scheme.
- [\#81](https://github.com/the-paperless-project/paperless/issues/81):
Added a hook to run an arbitrary script after every document is
consumed.
- [\#98](https://github.com/the-paperless-project/paperless/issues/98):
Added optional environment variables for ImageMagick so that it
- doesn\'t explode when handling Very Large Documents or when it\'s
+ doesn't explode when handling Very Large Documents or when it's
just running on a low-memory system. Thanks to [Florian
Harr](https://github.com/evils) for his help on this one.
- [\#89](https://github.com/the-paperless-project/paperless/issues/89)
### 0.1.1
-- Potentially **Breaking Change**: All references to \"sender\" in the
- code have been renamed to \"correspondent\" to better reflect the
+- Potentially **Breaking Change**: All references to "sender" in the
+ code have been renamed to "correspondent" to better reflect the
nature of the property (one could quite reasonably scan a document
before sending it to someone.)
- [\#67](https://github.com/the-paperless-project/paperless/issues/67):
contributing conversation that lead to this change.
- [\#20](https://github.com/the-paperless-project/paperless/issues/20):
Added _unpaper_ support to help in cleaning up the scanned image
- before it\'s OCR\'d. Thanks to [Pit](https://github.com/pitkley) for
+ before it's OCR'd. Thanks to [Pit](https://github.com/pitkley) for
this one.
- [\#71](https://github.com/the-paperless-project/paperless/issues/71)
Added (encrypted) thumbnails in anticipation of a proper UI.
+++ /dev/null
-import sphinx_rtd_theme
-
-
-__version__ = None
-__full_version_str__ = None
-__major_minor_version_str__ = None
-exec(open("../src/paperless/version.py").read())
-
-
-extensions = [
- "sphinx.ext.autodoc",
- "sphinx.ext.intersphinx",
- "sphinx.ext.todo",
- "sphinx.ext.imgmath",
- "sphinx.ext.viewcode",
- "sphinx_rtd_theme",
- "myst_parser",
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# The suffix of source filenames.
-source_suffix = {
- ".rst": "restructuredtext",
- ".md": "markdown",
-}
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = "index"
-
-# General information about the project.
-project = "Paperless-ngx"
-copyright = "2015-2022, Daniel Quinn, Jonas Winkler, and the paperless-ngx team"
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-
-#
-# If the build process ever explodes here, it's because you've set the version
-# number in paperless.version to a tuple with 3 numbers in it.
-#
-
-# The short X.Y version.
-version = __major_minor_version_str__
-# The full version, including alpha/beta/rc tags.
-release = __full_version_str__
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-# language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ["_build"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-
-# -- 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 = "sphinx_rtd_theme"
-
-# 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 = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# "<project> v<release> documentation".
-# html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-# html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# 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"]
-
-# These paths are either relative to html_static_path
-# or fully qualified paths (eg. https://...)
-html_css_files = [
- "css/custom.css",
-]
-
-html_js_files = [
- "js/darkmode.js",
-]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "paperless"
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #'papersize': 'letterpaper',
- # The font size ('10pt', '11pt' or '12pt').
- #'pointsize': '10pt',
- # Additional stuff for the LaTeX preamble.
- #'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- ("index", "paperless.tex", "Paperless Documentation", "Daniel Quinn", "manual"),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [("index", "paperless", "Paperless Documentation", ["Daniel Quinn"], 1)]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (
- "index",
- "Paperless",
- "Paperless Documentation",
- "Daniel Quinn",
- "paperless",
- "Scan, index, and archive all of your paper documents.",
- "Miscellaneous",
- ),
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-
-# -- Options for Epub output ----------------------------------------------
-
-# Bibliographic Dublin Core info.
-epub_title = "Paperless"
-epub_author = "Daniel Quinn"
-epub_publisher = "Daniel Quinn"
-epub_copyright = "2015, Daniel Quinn"
-
-# The basename for the epub file. It defaults to the project name.
-# epub_basename = u'Paperless'
-
-# The HTML theme for the epub output. Since the default themes are not optimized
-# for small screen space, using the same theme for HTML and epub output is
-# usually not wise. This defaults to 'epub', a theme designed to save visual
-# space.
-# epub_theme = 'epub'
-
-# The language of the text. It defaults to the language option
-# or en if the language is not set.
-# epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-# epub_scheme = ''
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-# epub_identifier = ''
-
-# A unique identification for the text.
-# epub_uid = ''
-
-# A tuple containing the cover image and cover page html template filenames.
-# epub_cover = ()
-
-# A sequence of (type, uri, title) tuples for the guide element of content.opf.
-# epub_guide = ()
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-# epub_pre_files = []
-
-# HTML files shat should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-# epub_post_files = []
-
-# A list of files that should not be packed into the epub file.
-epub_exclude_files = ["search.html"]
-
-# The depth of the table of contents in toc.ncx.
-# epub_tocdepth = 3
-
-# Allow duplicate toc entries.
-# epub_tocdup = True
-
-# Choose between 'default' and 'includehidden'.
-# epub_tocscope = 'default'
-
-# Fix unsupported image types using the PIL.
-# epub_fix_images = False
-
-# Scale large images.
-# epub_max_image_width = 0
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# epub_show_urls = 'inline'
-
-# If false, no index is generated.
-# epub_use_index = True
-
-
-# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {"http://docs.python.org/": None}
--- /dev/null
+# Configuration
+
+Paperless provides a wide range of customizations. Depending on how you
+run paperless, these settings have to be defined in different places.
+
+- If you run paperless on docker, `paperless.conf` is not used.
+ Rather, configure paperless by copying necessary options to
+ `docker-compose.env`.
+
+- If you are running paperless on anything else, paperless will search
+ for the configuration file in these locations and use the first one
+ it finds:
+
+ ```
+ /path/to/paperless/paperless.conf
+ /etc/paperless.conf
+ /usr/local/etc/paperless.conf
+ ```
+
+## Required services
+
+`PAPERLESS_REDIS=<url>`
+
+: This is required for processing scheduled tasks such as email
+fetching, index optimization and for training the automatic document
+matcher.
+
+ - If your Redis server needs login credentials PAPERLESS_REDIS =
+ `redis://<username>:<password>@<host>:<port>`
+ - With the requirepass option PAPERLESS_REDIS =
+ `redis://:<password>@<host>:<port>`
+
+ [More information on securing your Redis
+ Instance](https://redis.io/docs/getting-started/#securing-redis).
+
+ Defaults to <redis://localhost:6379>.
+
+`PAPERLESS_DBENGINE=<engine_name>`
+
+: Optional, gives the ability to choose Postgres or MariaDB for
+database engine. Available options are [postgresql]{.title-ref} and
+[mariadb]{.title-ref}.
+
+ Default is [postgresql]{.title-ref}.
+
+ !!! warning
+
+ Using MariaDB comes with some caveats. See [MySQL Caveats](advanced_usage#mysql-caveats).
+
+`PAPERLESS_DBHOST=<hostname>`
+
+: By default, sqlite is used as the database backend. This can be
+changed here.
+
+ Set PAPERLESS_DBHOST and another database will be used instead of
+ sqlite.
+
+`PAPERLESS_DBPORT=<port>`
+
+: Adjust port if necessary.
+
+ Default is 5432.
+
+`PAPERLESS_DBNAME=<name>`
+
+: Database name in PostgreSQL or MariaDB.
+
+ Defaults to "paperless".
+
+`PAPERLESS_DBUSER=<name>`
+
+: Database user in PostgreSQL or MariaDB.
+
+ Defaults to "paperless".
+
+`PAPERLESS_DBPASS=<password>`
+
+: Database password for PostgreSQL or MariaDB.
+
+ Defaults to "paperless".
+
+`PAPERLESS_DBSSLMODE=<mode>`
+
+: SSL mode to use when connecting to PostgreSQL.
+
+ See [the official documentation about
+ sslmode](https://www.postgresql.org/docs/current/libpq-ssl.html).
+
+ Default is `prefer`.
+
+`PAPERLESS_DB_TIMEOUT=<float>`
+
+: Amount of time for a database connection to wait for the database to
+unlock. Mostly applicable for an sqlite based installation, consider
+changing to postgresql if you need to increase this.
+
+ Defaults to unset, keeping the Django defaults.
+
+## Paths and folders
+
+`PAPERLESS_CONSUMPTION_DIR=<path>`
+
+: This where your documents should go to be consumed. Make sure that
+it exists and that the user running the paperless service can
+read/write its contents before you start Paperless.
+
+ Don't change this when using docker, as it only changes the path
+ within the container. Change the local consumption directory in the
+ docker-compose.yml file instead.
+
+ Defaults to "../consume/", relative to the "src" directory.
+
+`PAPERLESS_DATA_DIR=<path>`
+
+: This is where paperless stores all its data (search index, SQLite
+database, classification model, etc).
+
+ Defaults to "../data/", relative to the "src" directory.
+
+`PAPERLESS_TRASH_DIR=<path>`
+
+: Instead of removing deleted documents, they are moved to this
+directory.
+
+ This must be writeable by the user running paperless. When running
+ inside docker, ensure that this path is within a permanent volume
+ (such as "../media/trash") so it won't get lost on upgrades.
+
+ Defaults to empty (i.e. really delete documents).
+
+`PAPERLESS_MEDIA_ROOT=<path>`
+
+: This is where your documents and thumbnails are stored.
+
+ You can set this and PAPERLESS_DATA_DIR to the same folder to have
+ paperless store all its data within the same volume.
+
+ Defaults to "../media/", relative to the "src" directory.
+
+`PAPERLESS_STATICDIR=<path>`
+
+: Override the default STATIC_ROOT here. This is where all static
+files created using "collectstatic" manager command are stored.
+
+ Unless you're doing something fancy, there is no need to override
+ this.
+
+ Defaults to "../static/", relative to the "src" directory.
+
+`PAPERLESS_FILENAME_FORMAT=<format>`
+
+: Changes the filenames paperless uses to store documents in the media
+directory. See [File name handling](advanced_usage#file_name_handling) for details.
+
+ Default is none, which disables this feature.
+
+`PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>`
+
+: Tells paperless to replace placeholders in
+[PAPERLESS_FILENAME_FORMAT]{.title-ref} that would resolve to
+'none' to be omitted from the resulting filename. This also holds
+true for directory names. See [File name handling](advanced_usage#file_name_handling) for
+details.
+
+ Defaults to [false]{.title-ref} which disables this feature.
+
+`PAPERLESS_LOGGING_DIR=<path>`
+
+: This is where paperless will store log files.
+
+ Defaults to "`PAPERLESS_DATA_DIR`/log/".
+
+## Logging
+
+`PAPERLESS_LOGROTATE_MAX_SIZE=<num>`
+
+: Maximum file size for log files before they are rotated, in bytes.
+
+ Defaults to 1 MiB.
+
+`PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>`
+
+: Number of rotated log files to keep.
+
+ Defaults to 20.
+
+## Hosting & Security {#hosting-and-security}
+
+`PAPERLESS_SECRET_KEY=<key>`
+
+: Paperless uses this to make session tokens. If you expose paperless
+on the internet, you need to change this, since the default secret
+is well known.
+
+ Use any sequence of characters. The more, the better. You don't
+ need to remember this. Just face-roll your keyboard.
+
+ Default is listed in the file `src/paperless/settings.py`.
+
+`PAPERLESS_URL=<url>`
+
+: This setting can be used to set the three options below
+(ALLOWED_HOSTS, CORS_ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS). If the
+other options are set the values will be combined with this one. Do
+not include a trailing slash. E.g. <https://paperless.domain.com>
+
+ Defaults to empty string, leaving the other settings unaffected.
+
+`PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list>`
+
+: A list of trusted origins for unsafe requests (e.g. POST). As of
+Django 4.0 this is required to access the Django admin via the web.
+See
+<https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins>
+
+ Can also be set using PAPERLESS_URL (see above).
+
+ Defaults to empty string, which does not add any origins to the
+ trusted list.
+
+`PAPERLESS_ALLOWED_HOSTS=<comma-separated-list>`
+
+: If you're planning on putting Paperless on the open internet, then
+you really should set this value to the domain name you're using.
+Failing to do so leaves you open to HTTP host header attacks:
+<https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation>
+
+ Just remember that this is a comma-separated list, so
+ "example.com" is fine, as is "example.com,www.example.com", but
+ NOT " example.com" or "example.com,"
+
+ Can also be set using PAPERLESS_URL (see above).
+
+ If manually set, please remember to include "localhost". Otherwise
+ docker healthcheck will fail.
+
+ Defaults to "\*", which is all hosts.
+
+`PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list>`
+
+: You need to add your servers to the list of allowed hosts that can
+do CORS calls. Set this to your public domain name.
+
+ Can also be set using PAPERLESS_URL (see above).
+
+ Defaults to "<http://localhost:8000>".
+
+`PAPERLESS_FORCE_SCRIPT_NAME=<path>`
+
+: To host paperless under a subpath url like example.com/paperless you
+set this value to /paperless. No trailing slash!
+
+ Defaults to none, which hosts paperless at "/".
+
+`PAPERLESS_STATIC_URL=<path>`
+
+: Override the STATIC_URL here. Unless you're hosting Paperless off a
+subdomain like /paperless/, you probably don't need to change this.
+If you do change it, be sure to include the trailing slash.
+
+ Defaults to "/static/".
+
+ !!! note
+
+ When hosting paperless behind a reverse proxy like Traefik or Nginx
+ at a subpath e.g. example.com/paperlessngx you will also need to set
+ `PAPERLESS_FORCE_SCRIPT_NAME` (see above).
+
+`PAPERLESS_AUTO_LOGIN_USERNAME=<username>`
+
+: Specify a username here so that paperless will automatically perform
+login with the selected user.
+
+ !!! danger
+
+ Do not use this when exposing paperless on the internet. There are
+ no checks in place that would prevent you from doing this.
+
+ Defaults to none, which disables this feature.
+
+`PAPERLESS_ADMIN_USER=<username>`
+
+: If this environment variable is specified, Paperless automatically
+creates a superuser with the provided username at start. This is
+useful in cases where you can not run the
+[createsuperuser]{.title-ref} command separately, such as Kubernetes
+or AWS ECS.
+
+ Requires [PAPERLESS_ADMIN_PASSWORD]{.title-ref} to be set.
+
+ !!! note
+
+ This will not change an existing \[super\]user's password, nor will
+ it recreate a user that already exists. You can leave this
+ throughout the lifecycle of the containers.
+
+`PAPERLESS_ADMIN_MAIL=<email>`
+
+: (Optional) Specify superuser email address. Only used when
+[PAPERLESS_ADMIN_USER]{.title-ref} is set.
+
+ Defaults to `root@localhost`.
+
+`PAPERLESS_ADMIN_PASSWORD=<password>`
+
+: Only used when [PAPERLESS_ADMIN_USER]{.title-ref} is set. This will
+be the password of the automatically created superuser.
+
+`PAPERLESS_COOKIE_PREFIX=<str>`
+
+: Specify a prefix that is added to the cookies used by paperless to
+identify the currently logged in user. This is useful for when
+you're running two instances of paperless on the same host.
+
+ After changing this, you will have to login again.
+
+ Defaults to `""`, which does not alter the cookie names.
+
+`PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>`
+
+: Allows authentication via HTTP_REMOTE_USER which is used by some SSO
+applications.
+
+ !!! warning
+
+ This will allow authentication by simply adding a
+ `Remote-User: <username>` header to a request. Use with care! You
+ especially *must: ensure that any such header is not passed from
+ your proxy server to paperless.
+
+ If you're exposing paperless to the internet directly, do not use
+ this.
+
+ Also see the warning [in the official documentation
+ <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>]{.title-ref}.
+
+ Defaults to [false]{.title-ref} which disables this feature.
+
+`PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>`
+
+: If [PAPERLESS_ENABLE_HTTP_REMOTE_USER]{.title-ref} is enabled, this
+property allows to customize the name of the HTTP header from which
+the authenticated username is extracted. Values are in terms of
+\[HttpRequest.META\](<https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META>).
+Thus, the configured value must start with [HTTP\_]{.title-ref}
+followed by the normalized actual header name.
+
+ Defaults to [HTTP_REMOTE_USER]{.title-ref}.
+
+`PAPERLESS_LOGOUT_REDIRECT_URL=<str>`
+
+: URL to redirect the user to after a logout. This can be used
+together with [PAPERLESS_ENABLE_HTTP_REMOTE_USER]{.title-ref} to
+redirect the user back to the SSO application's logout page.
+
+ Defaults to None, which disables this feature.
+
+## OCR settings {#ocr}
+
+Paperless uses [OCRmyPDF](https://ocrmypdf.readthedocs.io/en/latest/)
+for performing OCR on documents and images. Paperless uses sensible
+defaults for most settings, but all of them can be configured to your
+needs.
+
+`PAPERLESS_OCR_LANGUAGE=<lang>`
+
+: Customize the language that paperless will attempt to use when
+parsing documents.
+
+ It should be a 3-letter language code consistent with ISO 639:
+ <https://www.loc.gov/standards/iso639-2/php/code_list.php>
+
+ Set this to the language most of your documents are written in.
+
+ This can be a combination of multiple languages such as `deu+eng`,
+ in which case tesseract will use whatever language matches best.
+ Keep in mind that tesseract uses much more cpu time with multiple
+ languages enabled.
+
+ Defaults to "eng".
+
+ !!! note
+
+ If your language contains a '-' such as chi-sim, you must use chi_sim
+
+`PAPERLESS_OCR_MODE=<mode>`
+
+: Tell paperless when and how to perform ocr on your documents. Four
+modes are available:
+
+ - `skip`: Paperless skips all pages and will perform ocr only on
+ pages where no text is present. This is the safest option.
+
+ - `skip_noarchive`: In addition to skip, paperless won't create
+ an archived version of your documents when it finds any text in
+ them. This is useful if you don't want to have two
+ almost-identical versions of your digital documents in the media
+ folder. This is the fastest option.
+
+ - `redo`: Paperless will OCR all pages of your documents and
+ attempt to replace any existing text layers with new text. This
+ will be useful for documents from scanners that already
+ performed OCR with insufficient results. It will also perform
+ OCR on purely digital documents.
+
+ This option may fail on some documents that have features that
+ cannot be removed, such as forms. In this case, the text from
+ the document is used instead.
+
+ - `force`: Paperless rasterizes your documents, converting any
+ text into images and puts the OCRed text on top. This works for
+ all documents, however, the resulting document may be
+ significantly larger and text won't appear as sharp when zoomed
+ in.
+
+ The default is `skip`, which only performs OCR when necessary and
+ always creates archived documents.
+
+ Read more about this in the [OCRmyPDF
+ documentation](https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped).
+
+`PAPERLESS_OCR_CLEAN=<mode>`
+
+: Tells paperless to use `unpaper` to clean any input document before
+sending it to tesseract. This uses more resources, but generally
+results in better OCR results. The following modes are available:
+
+ - `clean`: Apply unpaper.
+ - `clean-final`: Apply unpaper, and use the cleaned images to
+ build the output file instead of the original images.
+ - `none`: Do not apply unpaper.
+
+ Defaults to `clean`.
+
+ !!! note
+
+ `clean-final` is incompatible with ocr mode `redo`. When both
+ `clean-final` and the ocr mode `redo` is configured, `clean` is used
+ instead.
+
+`PAPERLESS_OCR_DESKEW=<bool>`
+
+: Tells paperless to correct skewing (slight rotation of input images
+mainly due to improper scanning)
+
+ Defaults to `true`, which enables this feature.
+
+ !!! note
+
+ Deskewing is incompatible with ocr mode `redo`. Deskewing will get
+ disabled automatically if `redo` is used as the ocr mode.
+
+`PAPERLESS_OCR_ROTATE_PAGES=<bool>`
+
+: Tells paperless to correct page rotation (90°, 180° and 270°
+rotation).
+
+ If you notice that paperless is not rotating incorrectly rotated
+ pages (or vice versa), try adjusting the threshold up or down (see
+ below).
+
+ Defaults to `true`, which enables this feature.
+
+`PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>`
+
+: Adjust the threshold for automatic page rotation by
+`PAPERLESS_OCR_ROTATE_PAGES`. This is an arbitrary value reported by
+tesseract. "15" is a very conservative value, whereas "2" is a
+very aggressive option and will often result in correctly rotated
+pages being rotated as well.
+
+ Defaults to "12".
+
+`PAPERLESS_OCR_OUTPUT_TYPE=<type>`
+
+: Specify the the type of PDF documents that paperless should produce.
+
+ - `pdf`: Modify the PDF document as little as possible.
+ - `pdfa`: Convert PDF documents into PDF/A-2b documents, which is
+ a subset of the entire PDF specification and meant for storing
+ documents long term.
+ - `pdfa-1`, `pdfa-2`, `pdfa-3` to specify the exact version of
+ PDF/A you wish to use.
+
+ If not specified, `pdfa` is used. Remember that paperless also keeps
+ the original input file as well as the archived version.
+
+`PAPERLESS_OCR_PAGES=<num>`
+
+: Tells paperless to use only the specified amount of pages for OCR.
+Documents with less than the specified amount of pages get OCR'ed
+completely.
+
+ Specifying 1 here will only use the first page.
+
+ When combined with `PAPERLESS_OCR_MODE=redo` or
+ `PAPERLESS_OCR_MODE=force`, paperless will not modify any text it
+ finds on excluded pages and copy it verbatim.
+
+ Defaults to 0, which disables this feature and always uses all
+ pages.
+
+`PAPERLESS_OCR_IMAGE_DPI=<num>`
+
+: Paperless will OCR any images you put into the system and convert
+them into PDF documents. This is useful if your scanner produces
+images. In order to do so, paperless needs to know the DPI of the
+image. Most images from scanners will have this information embedded
+and paperless will detect and use that information. In case this
+fails, it uses this value as a fallback.
+
+ Set this to the DPI your scanner produces images at.
+
+ Default is none, which will automatically calculate image DPI so
+ that the produced PDF documents are A4 sized.
+
+`PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>`
+
+: Paperless will raise a warning when OCRing images which are over
+this limit and will not OCR images which are more than twice this
+limit. Note this does not prevent the document from being consumed,
+but could result in missing text content.
+
+ If unset, will default to the value determined by
+ [Pillow](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.MAX_IMAGE_PIXELS).
+
+ !!! note
+
+ Increasing this limit could cause Paperless to consume additional
+ resources when consuming a file. Be sure you have sufficient system
+ resources.
+
+ !!! warning
+
+ The limit is intended to prevent malicious files from consuming
+ system resources and causing crashes and other errors. Only increase
+ this value if you are certain your documents are not malicious and
+ you need the text which was not OCRed
+
+`PAPERLESS_OCR_USER_ARGS=<json>`
+
+: OCRmyPDF offers many more options. Use this parameter to specify any
+additional arguments you wish to pass to OCRmyPDF. Since Paperless
+uses the API of OCRmyPDF, you have to specify these in a format that
+can be passed to the API. See [the API reference of
+OCRmyPDF](https://ocrmypdf.readthedocs.io/en/latest/api.html#reference)
+for valid parameters. All command line options are supported, but
+they use underscores instead of dashes.
+
+ !!! warning
+
+ Paperless has been tested to work with the OCR options provided
+ above. There are many options that are incompatible with each other,
+ so specifying invalid options may prevent paperless from consuming
+ any documents.
+
+ Specify arguments as a JSON dictionary. Keep note of lower case
+ booleans and double quoted parameter names and strings. Examples:
+
+ ``` json
+ {"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
+ ```
+
+## Tika settings {#tika}
+
+Paperless can make use of [Tika](https://tika.apache.org/) and
+[Gotenberg](https://gotenberg.dev/) for parsing and converting
+"Office" documents (such as ".doc", ".xlsx" and ".odt").
+Tika and Gotenberg are also needed to allow parsing of E-Mails (.eml).
+
+If you wish to use this, you must provide a Tika server and a Gotenberg server,
+configure their endpoints, and enable the feature.
+
+`PAPERLESS_TIKA_ENABLED=<bool>`
+
+: Enable (or disable) the Tika parser.
+
+ Defaults to false.
+
+`PAPERLESS_TIKA_ENDPOINT=<url>`
+
+: Set the endpoint URL were Paperless can reach your Tika server.
+
+ Defaults to "<http://localhost:9998>".
+
+`PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>`
+
+: Set the endpoint URL were Paperless can reach your Gotenberg server.
+
+ Defaults to "<http://localhost:3000>".
+
+If you run paperless on docker, you can add those services to the
+docker-compose file (see the provided `docker-compose.sqlite-tika.yml`
+file for reference). The changes requires are as follows:
+
+```yaml
+services:
+ # ...
+
+ webserver:
+ # ...
+
+ environment:
+ # ...
+
+ PAPERLESS_TIKA_ENABLED: 1
+ PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
+ PAPERLESS_TIKA_ENDPOINT: http://tika:9998
+
+ # ...
+
+ gotenberg:
+ image: gotenberg/gotenberg:7.6
+ restart: unless-stopped
+ # The gotenberg chromium route is used to convert .eml files. We do not
+ # want to allow external content like tracking pixels or even javascript.
+ command:
+ - 'gotenberg'
+ - '--chromium-disable-javascript=true'
+ - '--chromium-allow-list=file:///tmp/.*'
+
+ tika:
+ image: ghcr.io/paperless-ngx/tika:latest
+ restart: unless-stopped
+```
+
+Add the configuration variables to the environment of the webserver
+(alternatively put the configuration in the `docker-compose.env` file)
+and add the additional services below the webserver service. Watch out
+for indentation.
+
+Make sure to use the correct format [PAPERLESS_TIKA_ENABLED =
+1]{.title-ref} so python_dotenv can parse the statement correctly.
+
+## Software tweaks {#software_tweaks}
+
+`PAPERLESS_TASK_WORKERS=<num>`
+
+: Paperless does multiple things in the background: Maintain the
+search index, maintain the automatic matching algorithm, check
+emails, consume documents, etc. This variable specifies how many
+things it will do in parallel.
+
+ Defaults to 1
+
+`PAPERLESS_THREADS_PER_WORKER=<num>`
+
+: Furthermore, paperless uses multiple threads when consuming
+documents to speed up OCR. This variable specifies how many pages
+paperless will process in parallel on a single document.
+
+ !!! warning
+
+ Ensure that the product
+
+ `PAPERLESS_TASK_WORKERS \: PAPERLESS_THREADS_PER_WORKER`
+
+ does not exceed your CPU core count or else paperless will be
+ extremely slow. If you want paperless to process many documents in
+ parallel, choose a high worker count. If you want paperless to
+ process very large documents faster, use a higher thread per worker
+ count.
+
+ The default is a balance between the two, according to your CPU core
+ count, with a slight favor towards threads per worker:
+
+ | CPU core count | Workers | Threads |
+ |----------------|---------|---------|
+ | > 1 | > 1 | > 1 |
+ | > 2 | > 2 | > 1 |
+ | > 4 | > 2 | > 2 |
+ | > 6 | > 2 | > 3 |
+ | > 8 | > 2 | > 4 |
+ | > 12 | > 3 | > 4 |
+ | > 16 | > 4 | > 4 |
+
+ If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust
+ PAPERLESS_THREADS_PER_WORKER automatically.
+
+`PAPERLESS_WORKER_TIMEOUT=<num>`
+
+: Machines with few cores or weak ones might not be able to finish OCR
+on large documents within the default 1800 seconds. So extending
+this timeout may prove to be useful on weak hardware setups.
+
+`PAPERLESS_WORKER_RETRY=<num>`
+
+: If PAPERLESS_WORKER_TIMEOUT has been configured, the retry time for
+a task can also be configured. By default, this value will be set to
+10s more than the worker timeout. This value should never be set
+less than the worker timeout.
+
+`PAPERLESS_TIME_ZONE=<timezone>`
+
+: Set the time zone here. See
+<https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE>
+for details on how to set it.
+
+ Defaults to UTC.
+
+## Polling {#polling}
+
+`PAPERLESS_CONSUMER_POLLING=<num>`
+
+: If paperless won't find documents added to your consume folder, it
+might not be able to automatically detect filesystem changes. In
+that case, specify a polling interval in seconds here, which will
+then cause paperless to periodically check your consumption
+directory for changes. This will also disable listening for file
+system changes with `inotify`.
+
+ Defaults to 0, which disables polling and uses filesystem
+ notifications.
+
+`PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>`
+
+: If consumer polling is enabled, sets the number of times paperless
+will check for a file to remain unmodified.
+
+ Defaults to 5.
+
+`PAPERLESS_CONSUMER_POLLING_DELAY=<num>`
+
+: If consumer polling is enabled, sets the delay in seconds between
+each check (above) paperless will do while waiting for a file to
+remain unmodified.
+
+ Defaults to 5.
+
+## iNotify {#inotify}
+
+`PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>`
+
+: Sets the time in seconds the consumer will wait for additional
+events from inotify before the consumer will consider a file ready
+and begin consumption. Certain scanners or network setups may
+generate multiple events for a single file, leading to multiple
+consumers working on the same file. Configure this to prevent that.
+
+ Defaults to 0.5 seconds.
+
+`PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>`
+
+: When the consumer detects a duplicate document, it will not touch
+the original document. This default behavior can be changed here.
+
+ Defaults to false.
+
+`PAPERLESS_CONSUMER_RECURSIVE=<bool>`
+
+: Enable recursive watching of the consumption directory. Paperless
+will then pickup files from files in subdirectories within your
+consumption directory as well.
+
+ Defaults to false.
+
+`PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>`
+
+: Set the names of subdirectories as tags for consumed files. E.g.
+<CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags "foo" and
+"bar" to the consumed file. Paperless will create any tags that
+don't exist yet.
+
+ This is useful for sorting documents with certain tags such as `car`
+ or `todo` prior to consumption. These folders won't be deleted.
+
+ PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.
+
+ Defaults to false.
+
+`PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>`
+
+: Enables the scanning and page separation based on detected barcodes.
+This allows for scanning and adding multiple documents per uploaded
+file, which are separated by one or multiple barcode pages.
+
+ For ease of use, it is suggested to use a standardized separation
+ page, e.g. [here](https://www.alliancegroup.co.uk/patch-codes.htm).
+
+ If no barcodes are detected in the uploaded file, no page separation
+ will happen.
+
+ The original document will be removed and the separated pages will
+ be saved as pdf.
+
+ Defaults to false.
+
+`PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>`
+
+: Whether TIFF image files should be scanned for barcodes. This will
+automatically convert any TIFF image(s) to pdfs for later
+processing. This only has an effect, if
+PAPERLESS_CONSUMER_ENABLE_BARCODES has been enabled.
+
+ Defaults to false.
+
+PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
+
+: Defines the string to be detected as a separator barcode. If
+paperless is used with the PATCH-T separator pages, users shouldn't
+change this.
+
+ Defaults to "PATCHT"
+
+`PAPERLESS_CONVERT_MEMORY_LIMIT=<num>`
+
+: On smaller systems, or even in the case of Very Large Documents, the
+consumer may explode, complaining about how it's "unable to extend
+pixel cache". In such cases, try setting this to a reasonably low
+value, like 32. The default is to use whatever is necessary to do
+everything without writing to disk, and units are in megabytes.
+
+ For more information on how to use this value, you should search the
+ web for "MAGICK_MEMORY_LIMIT".
+
+ Defaults to 0, which disables the limit.
+
+`PAPERLESS_CONVERT_TMPDIR=<path>`
+
+: Similar to the memory limit, if you've got a small system and your
+OS mounts /tmp as tmpfs, you should set this to a path that's on a
+physical disk, like /home/your_user/tmp or something. ImageMagick
+will use this as scratch space when crunching through very large
+documents.
+
+ For more information on how to use this value, you should search the
+ web for "MAGICK_TMPDIR".
+
+ Default is none, which disables the temporary directory.
+
+`PAPERLESS_POST_CONSUME_SCRIPT=<filename>`
+
+: After a document is consumed, Paperless can trigger an arbitrary
+script if you like. This script will be passed a number of arguments
+for you to work with. For more information, take a look at [Post-consumption script](advanced_usage#post_consume_script).
+
+ The default is blank, which means nothing will be executed.
+
+`PAPERLESS_FILENAME_DATE_ORDER=<format>`
+
+: Paperless will check the document text for document date
+information. Use this setting to enable checking the document
+filename for date information. The date order can be set to any
+option as specified in
+<https://dateparser.readthedocs.io/en/latest/settings.html#date-order>.
+The filename will be checked first, and if nothing is found, the
+document text will be checked as normal.
+
+ A date in a filename must have some separators ([.]{.title-ref},
+ [-]{.title-ref}, [/]{.title-ref}, etc) for it to be parsed.
+
+ Defaults to none, which disables this feature.
+
+`PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>`
+
+: Paperless searches an entire document for dates. The first date
+found will be used as the initial value for the created date. When
+this variable is greater than 0 (or left to it's default value),
+paperless will also suggest other dates found in the document, up to
+a maximum of this setting. Note that duplicates will be removed,
+which can result in fewer dates displayed in the frontend than this
+setting value.
+
+ The task to find all dates can be time-consuming and increases with
+ a higher (maximum) number of suggested dates and slower hardware.
+
+ Defaults to 3. Set to 0 to disable this feature.
+
+`PAPERLESS_THUMBNAIL_FONT_NAME=<filename>`
+
+: Paperless creates thumbnails for plain text files by rendering the
+content of the file on an image and uses a predefined font for that.
+This font can be changed here.
+
+ Note that this won't have any effect on already generated
+ thumbnails.
+
+ Defaults to
+ `/usr/share/fonts/liberation/LiberationSerif-Regular.ttf`.
+
+`PAPERLESS_IGNORE_DATES=<string>`
+
+: Paperless parses a documents creation date from filename and file
+content. You may specify a comma separated list of dates that should
+be ignored during this process. This is useful for special dates
+(like date of birth) that appear in documents regularly but are very
+unlikely to be the documents creation date.
+
+ The date is parsed using the order specified in PAPERLESS_DATE_ORDER
+
+ Defaults to an empty string to not ignore any dates.
+
+`PAPERLESS_DATE_ORDER=<format>`
+
+: Paperless will try to determine the document creation date from its
+contents. Specify the date format Paperless should expect to see
+within your documents.
+
+ This option defaults to DMY which translates to day first, month
+ second, and year last order. Characters D, M, or Y can be shuffled
+ to meet the required order.
+
+`PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>`
+
+: By default, paperless ignores certain files and folders in the
+consumption directory, such as system files created by the Mac OS.
+
+ This can be adjusted by configuring a custom json array with
+ patterns to exclude.
+
+ Defaults to
+ `[".DS_STORE/*", "._*", ".stfolder/*", ".stversions/*", ".localized/*", "desktop.ini"]`.
+
+## Binaries
+
+There are a few external software packages that Paperless expects to
+find on your system when it starts up. Unless you've done something
+creative with their installation, you probably won't need to edit any
+of these. However, if you've installed these programs somewhere where
+simply typing the name of the program doesn't automatically execute it
+(ie. the program isn't in your \$PATH), then you'll need to specify
+the literal path for that program.
+
+`PAPERLESS_CONVERT_BINARY=<path>`
+
+: Defaults to "convert".
+
+`PAPERLESS_GS_BINARY=<path>`
+
+: Defaults to "gs".
+
+## Docker-specific options {#docker}
+
+These options don't have any effect in `paperless.conf`. These options
+adjust the behavior of the docker container. Configure these in
+[docker-compose.env]{.title-ref}.
+
+`PAPERLESS_WEBSERVER_WORKERS=<num>`
+
+: The number of worker processes the webserver should spawn. More
+worker processes usually result in the front end to load data much
+quicker. However, each worker process also loads the entire
+application into memory separately, so increasing this value will
+increase RAM usage.
+
+ Defaults to 1.
+
+`PAPERLESS_BIND_ADDR=<ip address>`
+
+: The IP address the webserver will listen on inside the container.
+There are special setups where you may need to configure this value
+to restrict the Ip address or interface the webserver listens on.
+
+ Defaults to \[::\], meaning all interfaces, including IPv6.
+
+`PAPERLESS_PORT=<port>`
+
+: The port number the webserver will listen on inside the container.
+There are special setups where you may need this to avoid collisions
+with other services (like using podman with multiple containers in
+one pod).
+
+ Don't change this when using Docker. To change the port the
+ webserver is reachable outside of the container, instead refer to
+ the "ports" key in `docker-compose.yml`.
+
+ Defaults to 8000.
+
+`USERMAP_UID=<uid>`
+
+: The ID of the paperless user in the container. Set this to your
+actual user ID on the host system, which you can get by executing
+
+ ``` shell-session
+ $ id -u
+ ```
+
+ Paperless will change ownership on its folders to this user, so you
+ need to get this right in order to be able to write to the
+ consumption directory.
+
+ Defaults to 1000.
+
+`USERMAP_GID=<gid>`
+
+: The ID of the paperless Group in the container. Set this to your
+actual group ID on the host system, which you can get by executing
+
+ ``` shell-session
+ $ id -g
+ ```
+
+ Paperless will change ownership on its folders to this group, so you
+ need to get this right in order to be able to write to the
+ consumption directory.
+
+ Defaults to 1000.
+
+`PAPERLESS_OCR_LANGUAGES=<list>`
+
+: Additional OCR languages to install. By default, paperless comes
+with English, German, Italian, Spanish and French. If your language
+is not in this list, install additional languages with this
+configuration option:
+
+ ``` bash
+ PAPERLESS_OCR_LANGUAGES=tur ces
+ ```
+
+ To actually use these languages, also set the default OCR language
+ of paperless:
+
+ ``` bash
+ PAPERLESS_OCR_LANGUAGE=tur
+ ```
+
+ Defaults to none, which does not install any additional languages.
+
+`PAPERLESS_ENABLE_FLOWER=<defined>`
+
+: If this environment variable is defined, the Celery monitoring tool
+[Flower](https://flower.readthedocs.io/en/latest/index.html) will be
+started by the container.
+
+ You can read more about this in the [advanced documentation](advanced#celery-monitoring).
+
+## Update Checking {#update-checking}
+
+`PAPERLESS_ENABLE_UPDATE_CHECK=<bool>`
+
+!!! note
+
+ This setting was deprecated in favor of a frontend setting after
+ v1.9.2. A one-time migration is performed for users who have this
+ setting set. This setting is always ignored if the corresponding
+ frontend setting has been set.
+++ /dev/null
-.. _configuration:
-
-*************
-Configuration
-*************
-
-Paperless provides a wide range of customizations.
-Depending on how you run paperless, these settings have to be defined in different
-places.
-
-* If you run paperless on docker, ``paperless.conf`` is not used. Rather, configure
- paperless by copying necessary options to ``docker-compose.env``.
-* If you are running paperless on anything else, paperless will search for the
- configuration file in these locations and use the first one it finds:
-
- .. code::
-
- /path/to/paperless/paperless.conf
- /etc/paperless.conf
- /usr/local/etc/paperless.conf
-
-
-Required services
-#################
-
-PAPERLESS_REDIS=<url>
- This is required for processing scheduled tasks such as email fetching, index
- optimization and for training the automatic document matcher.
-
- * If your Redis server needs login credentials PAPERLESS_REDIS = ``redis://<username>:<password>@<host>:<port>``
-
- * With the requirepass option PAPERLESS_REDIS = ``redis://:<password>@<host>:<port>``
-
- `More information on securing your Redis Instance <https://redis.io/docs/getting-started/#securing-redis>`_.
-
- Defaults to redis://localhost:6379.
-
-PAPERLESS_DBENGINE=<engine_name>
- Optional, gives the ability to choose Postgres or MariaDB for database engine.
- Available options are `postgresql` and `mariadb`.
- Default is `postgresql`.
-
-PAPERLESS_DBHOST=<hostname>
- By default, sqlite is used as the database backend. This can be changed here.
-
- Set PAPERLESS_DBHOST and another database will be used instead of sqlite.
-
-PAPERLESS_DBPORT=<port>
- Adjust port if necessary.
-
- Default is 5432.
-
-PAPERLESS_DBNAME=<name>
- Database name in PostgreSQL or MariaDB.
-
- Defaults to "paperless".
-
-PAPERLESS_DBUSER=<name>
- Database user in PostgreSQL or MariaDB.
-
- Defaults to "paperless".
-
-PAPERLESS_DBPASS=<password>
- Database password for PostgreSQL or MariaDB.
-
- Defaults to "paperless".
-
-PAPERLESS_DBSSLMODE=<mode>
- SSL mode to use when connecting to PostgreSQL.
-
- See `the official documentation about sslmode <https://www.postgresql.org/docs/current/libpq-ssl.html>`_.
-
- Default is ``prefer``.
-
-PAPERLESS_DB_TIMEOUT=<float>
- Amount of time for a database connection to wait for the database to unlock.
- Mostly applicable for an sqlite based installation, consider changing to postgresql
- if you need to increase this.
-
- Defaults to unset, keeping the Django defaults.
-
-Paths and folders
-#################
-
-PAPERLESS_CONSUMPTION_DIR=<path>
- This where your documents should go to be consumed. Make sure that it exists
- and that the user running the paperless service can read/write its contents
- before you start Paperless.
-
- Don't change this when using docker, as it only changes the path within the
- container. Change the local consumption directory in the docker-compose.yml
- file instead.
-
- Defaults to "../consume/", relative to the "src" directory.
-
-PAPERLESS_DATA_DIR=<path>
- This is where paperless stores all its data (search index, SQLite database,
- classification model, etc).
-
- Defaults to "../data/", relative to the "src" directory.
-
-PAPERLESS_TRASH_DIR=<path>
- Instead of removing deleted documents, they are moved to this directory.
-
- This must be writeable by the user running paperless. When running inside
- docker, ensure that this path is within a permanent volume (such as
- "../media/trash") so it won't get lost on upgrades.
-
- Defaults to empty (i.e. really delete documents).
-
-PAPERLESS_MEDIA_ROOT=<path>
- This is where your documents and thumbnails are stored.
-
- You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless
- store all its data within the same volume.
-
- Defaults to "../media/", relative to the "src" directory.
-
-PAPERLESS_STATICDIR=<path>
- Override the default STATIC_ROOT here. This is where all static files
- created using "collectstatic" manager command are stored.
-
- Unless you're doing something fancy, there is no need to override this.
-
- Defaults to "../static/", relative to the "src" directory.
-
-PAPERLESS_FILENAME_FORMAT=<format>
- Changes the filenames paperless uses to store documents in the media directory.
- See :ref:`advanced-file_name_handling` for details.
-
- Default is none, which disables this feature.
-
-PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>
- Tells paperless to replace placeholders in `PAPERLESS_FILENAME_FORMAT` that would resolve
- to 'none' to be omitted from the resulting filename. This also holds true for directory
- names.
- See :ref:`advanced-file_name_handling` for details.
-
- Defaults to `false` which disables this feature.
-
-PAPERLESS_LOGGING_DIR=<path>
- This is where paperless will store log files.
-
- Defaults to "``PAPERLESS_DATA_DIR``/log/".
-
-
-Logging
-#######
-
-PAPERLESS_LOGROTATE_MAX_SIZE=<num>
- Maximum file size for log files before they are rotated, in bytes.
-
- Defaults to 1 MiB.
-
-PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>
- Number of rotated log files to keep.
-
- Defaults to 20.
-
-.. _hosting-and-security:
-
-Hosting & Security
-##################
-
-PAPERLESS_SECRET_KEY=<key>
- Paperless uses this to make session tokens. If you expose paperless on the
- internet, you need to change this, since the default secret is well known.
-
- Use any sequence of characters. The more, the better. You don't need to
- remember this. Just face-roll your keyboard.
-
- Default is listed in the file ``src/paperless/settings.py``.
-
-PAPERLESS_URL=<url>
- This setting can be used to set the three options below (ALLOWED_HOSTS,
- CORS_ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS). If the other options are
- set the values will be combined with this one. Do not include a trailing
- slash. E.g. https://paperless.domain.com
-
- Defaults to empty string, leaving the other settings unaffected.
-
-PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list>
- A list of trusted origins for unsafe requests (e.g. POST). As of Django 4.0
- this is required to access the Django admin via the web.
- See https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins
-
- Can also be set using PAPERLESS_URL (see above).
-
- Defaults to empty string, which does not add any origins to the trusted list.
-
-PAPERLESS_ALLOWED_HOSTS=<comma-separated-list>
- If you're planning on putting Paperless on the open internet, then you
- really should set this value to the domain name you're using. Failing to do
- so leaves you open to HTTP host header attacks:
- https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation
-
- Just remember that this is a comma-separated list, so "example.com" is fine,
- as is "example.com,www.example.com", but NOT " example.com" or "example.com,"
-
- Can also be set using PAPERLESS_URL (see above).
-
- If manually set, please remember to include "localhost". Otherwise docker
- healthcheck will fail.
-
- Defaults to "*", which is all hosts.
-
-PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list>
- You need to add your servers to the list of allowed hosts that can do CORS
- calls. Set this to your public domain name.
-
- Can also be set using PAPERLESS_URL (see above).
-
- Defaults to "http://localhost:8000".
-
-PAPERLESS_FORCE_SCRIPT_NAME=<path>
- To host paperless under a subpath url like example.com/paperless you set
- this value to /paperless. No trailing slash!
-
- Defaults to none, which hosts paperless at "/".
-
-PAPERLESS_STATIC_URL=<path>
- Override the STATIC_URL here. Unless you're hosting Paperless off a
- subdomain like /paperless/, you probably don't need to change this.
- If you do change it, be sure to include the trailing slash.
-
- Defaults to "/static/".
-
- .. note::
-
- When hosting paperless behind a reverse proxy like Traefik or Nginx at a subpath e.g.
- example.com/paperlessngx you will also need to set ``PAPERLESS_FORCE_SCRIPT_NAME``
- (see above).
-
-PAPERLESS_AUTO_LOGIN_USERNAME=<username>
- Specify a username here so that paperless will automatically perform login
- with the selected user.
-
- .. danger::
-
- Do not use this when exposing paperless on the internet. There are no
- checks in place that would prevent you from doing this.
-
- Defaults to none, which disables this feature.
-
-PAPERLESS_ADMIN_USER=<username>
- If this environment variable is specified, Paperless automatically creates
- a superuser with the provided username at start. This is useful in cases
- where you can not run the `createsuperuser` command separately, such as Kubernetes
- or AWS ECS.
-
- Requires `PAPERLESS_ADMIN_PASSWORD` to be set.
-
- .. note::
-
- This will not change an existing [super]user's password, nor will
- it recreate a user that already exists. You can leave this throughout
- the lifecycle of the containers.
-
-PAPERLESS_ADMIN_MAIL=<email>
- (Optional) Specify superuser email address. Only used when
- `PAPERLESS_ADMIN_USER` is set.
-
- Defaults to ``root@localhost``.
-
-PAPERLESS_ADMIN_PASSWORD=<password>
- Only used when `PAPERLESS_ADMIN_USER` is set.
- This will be the password of the automatically created superuser.
-
-
-PAPERLESS_COOKIE_PREFIX=<str>
- Specify a prefix that is added to the cookies used by paperless to identify
- the currently logged in user. This is useful for when you're running two
- instances of paperless on the same host.
-
- After changing this, you will have to login again.
-
- Defaults to ``""``, which does not alter the cookie names.
-
-PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>
- Allows authentication via HTTP_REMOTE_USER which is used by some SSO
- applications.
-
- .. warning::
-
- This will allow authentication by simply adding a ``Remote-User: <username>`` header
- to a request. Use with care! You especially *must* ensure that any such header is not
- passed from your proxy server to paperless.
-
- If you're exposing paperless to the internet directly, do not use this.
-
- Also see the warning `in the official documentation <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>`.
-
- Defaults to `false` which disables this feature.
-
-PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>
- If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to
- customize the name of the HTTP header from which the authenticated username
- is extracted. Values are in terms of
- [HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META).
- Thus, the configured value must start with `HTTP_` followed by the
- normalized actual header name.
-
- Defaults to `HTTP_REMOTE_USER`.
-
-PAPERLESS_LOGOUT_REDIRECT_URL=<str>
- URL to redirect the user to after a logout. This can be used together with
- `PAPERLESS_ENABLE_HTTP_REMOTE_USER` to redirect the user back to the SSO
- application's logout page.
-
- Defaults to None, which disables this feature.
-
-.. _configuration-ocr:
-
-OCR settings
-############
-
-Paperless uses `OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/>`_ for
-performing OCR on documents and images. Paperless uses sensible defaults for
-most settings, but all of them can be configured to your needs.
-
-PAPERLESS_OCR_LANGUAGE=<lang>
- Customize the language that paperless will attempt to use when
- parsing documents.
-
- It should be a 3-letter language code consistent with ISO
- 639: https://www.loc.gov/standards/iso639-2/php/code_list.php
-
- Set this to the language most of your documents are written in.
-
- This can be a combination of multiple languages such as ``deu+eng``,
- in which case tesseract will use whatever language matches best.
- Keep in mind that tesseract uses much more cpu time with multiple
- languages enabled.
-
- Defaults to "eng".
-
- Note: If your language contains a '-' such as chi-sim, you must use chi_sim
-
-PAPERLESS_OCR_MODE=<mode>
- Tell paperless when and how to perform ocr on your documents. Four modes
- are available:
-
- * ``skip``: Paperless skips all pages and will perform ocr only on pages
- where no text is present. This is the safest option.
- * ``skip_noarchive``: In addition to skip, paperless won't create an
- archived version of your documents when it finds any text in them.
- This is useful if you don't want to have two almost-identical versions
- of your digital documents in the media folder. This is the fastest option.
- * ``redo``: Paperless will OCR all pages of your documents and attempt to
- replace any existing text layers with new text. This will be useful for
- documents from scanners that already performed OCR with insufficient
- results. It will also perform OCR on purely digital documents.
-
- This option may fail on some documents that have features that cannot
- be removed, such as forms. In this case, the text from the document is
- used instead.
- * ``force``: Paperless rasterizes your documents, converting any text
- into images and puts the OCRed text on top. This works for all documents,
- however, the resulting document may be significantly larger and text
- won't appear as sharp when zoomed in.
-
- The default is ``skip``, which only performs OCR when necessary and always
- creates archived documents.
-
- Read more about this in the `OCRmyPDF documentation <https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped>`_.
-
-PAPERLESS_OCR_CLEAN=<mode>
- Tells paperless to use ``unpaper`` to clean any input document before
- sending it to tesseract. This uses more resources, but generally results
- in better OCR results. The following modes are available:
-
- * ``clean``: Apply unpaper.
- * ``clean-final``: Apply unpaper, and use the cleaned images to build the
- output file instead of the original images.
- * ``none``: Do not apply unpaper.
-
- Defaults to ``clean``.
-
- .. note::
-
- ``clean-final`` is incompatible with ocr mode ``redo``. When both
- ``clean-final`` and the ocr mode ``redo`` is configured, ``clean``
- is used instead.
-
-PAPERLESS_OCR_DESKEW=<bool>
- Tells paperless to correct skewing (slight rotation of input images mainly
- due to improper scanning)
-
- Defaults to ``true``, which enables this feature.
-
- .. note::
-
- Deskewing is incompatible with ocr mode ``redo``. Deskewing will get
- disabled automatically if ``redo`` is used as the ocr mode.
-
-PAPERLESS_OCR_ROTATE_PAGES=<bool>
- Tells paperless to correct page rotation (90°, 180° and 270° rotation).
-
- If you notice that paperless is not rotating incorrectly rotated
- pages (or vice versa), try adjusting the threshold up or down (see below).
-
- Defaults to ``true``, which enables this feature.
-
-
-PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>
- Adjust the threshold for automatic page rotation by ``PAPERLESS_OCR_ROTATE_PAGES``.
- This is an arbitrary value reported by tesseract. "15" is a very conservative value,
- whereas "2" is a very aggressive option and will often result in correctly rotated pages
- being rotated as well.
-
- Defaults to "12".
-
-PAPERLESS_OCR_OUTPUT_TYPE=<type>
- Specify the the type of PDF documents that paperless should produce.
-
- * ``pdf``: Modify the PDF document as little as possible.
- * ``pdfa``: Convert PDF documents into PDF/A-2b documents, which is a
- subset of the entire PDF specification and meant for storing
- documents long term.
- * ``pdfa-1``, ``pdfa-2``, ``pdfa-3`` to specify the exact version of
- PDF/A you wish to use.
-
- If not specified, ``pdfa`` is used. Remember that paperless also keeps
- the original input file as well as the archived version.
-
-
-PAPERLESS_OCR_PAGES=<num>
- Tells paperless to use only the specified amount of pages for OCR. Documents
- with less than the specified amount of pages get OCR'ed completely.
-
- Specifying 1 here will only use the first page.
-
- When combined with ``PAPERLESS_OCR_MODE=redo`` or ``PAPERLESS_OCR_MODE=force``,
- paperless will not modify any text it finds on excluded pages and copy it
- verbatim.
-
- Defaults to 0, which disables this feature and always uses all pages.
-
-PAPERLESS_OCR_IMAGE_DPI=<num>
- Paperless will OCR any images you put into the system and convert them
- into PDF documents. This is useful if your scanner produces images.
- In order to do so, paperless needs to know the DPI of the image.
- Most images from scanners will have this information embedded and
- paperless will detect and use that information. In case this fails, it
- uses this value as a fallback.
-
- Set this to the DPI your scanner produces images at.
-
- Default is none, which will automatically calculate image DPI so that
- the produced PDF documents are A4 sized.
-
-PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>
- Paperless will raise a warning when OCRing images which are over this limit and
- will not OCR images which are more than twice this limit. Note this does not
- prevent the document from being consumed, but could result in missing text content.
-
- If unset, will default to the value determined by
- `Pillow <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.MAX_IMAGE_PIXELS>`_.
-
- .. note::
-
- Increasing this limit could cause Paperless to consume additional resources
- when consuming a file. Be sure you have sufficient system resources.
-
- .. caution::
-
- The limit is intended to prevent malicious files from consuming system resources
- and causing crashes and other errors. Only increase this value if you are certain
- your documents are not malicious and you need the text which was not OCRed
-
-PAPERLESS_OCR_USER_ARGS=<json>
- OCRmyPDF offers many more options. Use this parameter to specify any
- additional arguments you wish to pass to OCRmyPDF. Since Paperless uses
- the API of OCRmyPDF, you have to specify these in a format that can be
- passed to the API. See `the API reference of OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/api.html#reference>`_
- for valid parameters. All command line options are supported, but they
- use underscores instead of dashes.
-
- .. caution::
-
- Paperless has been tested to work with the OCR options provided
- above. There are many options that are incompatible with each other,
- so specifying invalid options may prevent paperless from consuming
- any documents.
-
- Specify arguments as a JSON dictionary. Keep note of lower case booleans
- and double quoted parameter names and strings. Examples:
-
- .. code:: json
-
- {"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
-
-.. _configuration-tika:
-
-Tika settings
-#############
-
-Paperless can make use of `Tika <https://tika.apache.org/>`_ and
-`Gotenberg <https://gotenberg.dev/>`_ for parsing and
-converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you
-wish to use this, you must provide a Tika server and a Gotenberg server,
-configure their endpoints, and enable the feature.
-
-PAPERLESS_TIKA_ENABLED=<bool>
- Enable (or disable) the Tika parser.
-
- Defaults to false.
-
-PAPERLESS_TIKA_ENDPOINT=<url>
- Set the endpoint URL were Paperless can reach your Tika server.
-
- Defaults to "http://localhost:9998".
-
-PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>
- Set the endpoint URL were Paperless can reach your Gotenberg server.
-
- Defaults to "http://localhost:3000".
-
-If you run paperless on docker, you can add those services to the docker-compose
-file (see the provided ``docker-compose.sqlite-tika.yml`` file for reference). The changes
-requires are as follows:
-
-.. code:: yaml
-
- services:
- # ...
-
- webserver:
- # ...
-
- environment:
- # ...
-
- PAPERLESS_TIKA_ENABLED: 1
- PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
- PAPERLESS_TIKA_ENDPOINT: http://tika:9998
-
- # ...
-
- gotenberg:
- image: gotenberg/gotenberg:7.6
- restart: unless-stopped
- command:
- - "gotenberg"
- - "--chromium-disable-routes=true"
-
- tika:
- image: ghcr.io/paperless-ngx/tika:latest
- restart: unless-stopped
-
-Add the configuration variables to the environment of the webserver (alternatively
-put the configuration in the ``docker-compose.env`` file) and add the additional
-services below the webserver service. Watch out for indentation.
-
-Make sure to use the correct format `PAPERLESS_TIKA_ENABLED = 1` so python_dotenv can parse the statement correctly.
-
-Software tweaks
-###############
-
-PAPERLESS_TASK_WORKERS=<num>
- Paperless does multiple things in the background: Maintain the search index,
- maintain the automatic matching algorithm, check emails, consume documents,
- etc. This variable specifies how many things it will do in parallel.
-
- Defaults to 1
-
-
-PAPERLESS_THREADS_PER_WORKER=<num>
- Furthermore, paperless uses multiple threads when consuming documents to
- speed up OCR. This variable specifies how many pages paperless will process
- in parallel on a single document.
-
- .. caution::
-
- Ensure that the product
-
- PAPERLESS_TASK_WORKERS * PAPERLESS_THREADS_PER_WORKER
-
- does not exceed your CPU core count or else paperless will be extremely slow.
- If you want paperless to process many documents in parallel, choose a high
- worker count. If you want paperless to process very large documents faster,
- use a higher thread per worker count.
-
- The default is a balance between the two, according to your CPU core count,
- with a slight favor towards threads per worker:
-
- +----------------+---------+---------+
- | CPU core count | Workers | Threads |
- +----------------+---------+---------+
- | 1 | 1 | 1 |
- +----------------+---------+---------+
- | 2 | 2 | 1 |
- +----------------+---------+---------+
- | 4 | 2 | 2 |
- +----------------+---------+---------+
- | 6 | 2 | 3 |
- +----------------+---------+---------+
- | 8 | 2 | 4 |
- +----------------+---------+---------+
- | 12 | 3 | 4 |
- +----------------+---------+---------+
- | 16 | 4 | 4 |
- +----------------+---------+---------+
-
- If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust
- PAPERLESS_THREADS_PER_WORKER automatically.
-
-
-PAPERLESS_WORKER_TIMEOUT=<num>
- Machines with few cores or weak ones might not be able to finish OCR on
- large documents within the default 1800 seconds. So extending this timeout
- may prove to be useful on weak hardware setups.
-
-PAPERLESS_WORKER_RETRY=<num>
- If PAPERLESS_WORKER_TIMEOUT has been configured, the retry time for a task can
- also be configured. By default, this value will be set to 10s more than the
- worker timeout. This value should never be set less than the worker timeout.
-
-PAPERLESS_TIME_ZONE=<timezone>
- Set the time zone here.
- See https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE
- for details on how to set it.
-
- Defaults to UTC.
-
-
-.. _configuration-polling:
-
-PAPERLESS_CONSUMER_POLLING=<num>
- If paperless won't find documents added to your consume folder, it might
- not be able to automatically detect filesystem changes. In that case,
- specify a polling interval in seconds here, which will then cause paperless
- to periodically check your consumption directory for changes. This will also
- disable listening for file system changes with ``inotify``.
-
- Defaults to 0, which disables polling and uses filesystem notifications.
-
-PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>
- If consumer polling is enabled, sets the number of times paperless will check for a
- file to remain unmodified.
-
- Defaults to 5.
-
-PAPERLESS_CONSUMER_POLLING_DELAY=<num>
- If consumer polling is enabled, sets the delay in seconds between each check (above) paperless
- will do while waiting for a file to remain unmodified.
-
- Defaults to 5.
-
-.. _configuration-inotify:
-
-PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>
- Sets the time in seconds the consumer will wait for additional events
- from inotify before the consumer will consider a file ready and begin consumption.
- Certain scanners or network setups may generate multiple events for a single file,
- leading to multiple consumers working on the same file. Configure this to
- prevent that.
-
- Defaults to 0.5 seconds.
-
-PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>
- When the consumer detects a duplicate document, it will not touch the
- original document. This default behavior can be changed here.
-
- Defaults to false.
-
-
-PAPERLESS_CONSUMER_RECURSIVE=<bool>
- Enable recursive watching of the consumption directory. Paperless will
- then pickup files from files in subdirectories within your consumption
- directory as well.
-
- Defaults to false.
-
-
-PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>
- Set the names of subdirectories as tags for consumed files.
- E.g. <CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags "foo" and "bar" to
- the consumed file. Paperless will create any tags that don't exist yet.
-
- This is useful for sorting documents with certain tags such as ``car`` or
- ``todo`` prior to consumption. These folders won't be deleted.
-
- PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.
-
- Defaults to false.
-
-PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>
- Enables the scanning and page separation based on detected barcodes.
- This allows for scanning and adding multiple documents per uploaded
- file, which are separated by one or multiple barcode pages.
-
- For ease of use, it is suggested to use a standardized separation page,
- e.g. `here <https://www.alliancegroup.co.uk/patch-codes.htm>`_.
-
- If no barcodes are detected in the uploaded file, no page separation
- will happen.
-
- The original document will be removed and the separated pages will be
- saved as pdf.
-
- Defaults to false.
-
-
-PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>
- Whether TIFF image files should be scanned for barcodes.
- This will automatically convert any TIFF image(s) to pdfs for later
- processing.
- This only has an effect, if PAPERLESS_CONSUMER_ENABLE_BARCODES has been
- enabled.
-
- Defaults to false.
-
-PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
- Defines the string to be detected as a separator barcode.
- If paperless is used with the PATCH-T separator pages, users
- shouldn't change this.
-
- Defaults to "PATCHT"
-
-PAPERLESS_CONVERT_MEMORY_LIMIT=<num>
- On smaller systems, or even in the case of Very Large Documents, the consumer
- may explode, complaining about how it's "unable to extend pixel cache". In
- such cases, try setting this to a reasonably low value, like 32. The
- default is to use whatever is necessary to do everything without writing to
- disk, and units are in megabytes.
-
- For more information on how to use this value, you should search
- the web for "MAGICK_MEMORY_LIMIT".
-
- Defaults to 0, which disables the limit.
-
-PAPERLESS_CONVERT_TMPDIR=<path>
- Similar to the memory limit, if you've got a small system and your OS mounts
- /tmp as tmpfs, you should set this to a path that's on a physical disk, like
- /home/your_user/tmp or something. ImageMagick will use this as scratch space
- when crunching through very large documents.
-
- For more information on how to use this value, you should search
- the web for "MAGICK_TMPDIR".
-
- Default is none, which disables the temporary directory.
-
-PAPERLESS_POST_CONSUME_SCRIPT=<filename>
- After a document is consumed, Paperless can trigger an arbitrary script if
- you like. This script will be passed a number of arguments for you to work
- with. For more information, take a look at :ref:`advanced-post_consume_script`.
-
- The default is blank, which means nothing will be executed.
-
-PAPERLESS_FILENAME_DATE_ORDER=<format>
- Paperless will check the document text for document date information.
- Use this setting to enable checking the document filename for date
- information. The date order can be set to any option as specified in
- https://dateparser.readthedocs.io/en/latest/settings.html#date-order.
- The filename will be checked first, and if nothing is found, the document
- text will be checked as normal.
-
- A date in a filename must have some separators (`.`, `-`, `/`, etc)
- for it to be parsed.
-
- Defaults to none, which disables this feature.
-
-PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>
- Paperless searches an entire document for dates. The first date found will
- be used as the initial value for the created date. When this variable is
- greater than 0 (or left to it's default value), paperless will also suggest
- other dates found in the document, up to a maximum of this setting. Note that
- duplicates will be removed, which can result in fewer dates displayed in the
- frontend than this setting value.
-
- The task to find all dates can be time-consuming and increases with a higher
- (maximum) number of suggested dates and slower hardware.
-
- Defaults to 3. Set to 0 to disable this feature.
-
-PAPERLESS_THUMBNAIL_FONT_NAME=<filename>
- Paperless creates thumbnails for plain text files by rendering the content
- of the file on an image and uses a predefined font for that. This
- font can be changed here.
-
- Note that this won't have any effect on already generated thumbnails.
-
- Defaults to ``/usr/share/fonts/liberation/LiberationSerif-Regular.ttf``.
-
-PAPERLESS_IGNORE_DATES=<string>
- Paperless parses a documents creation date from filename and file content.
- You may specify a comma separated list of dates that should be ignored during
- this process. This is useful for special dates (like date of birth) that appear
- in documents regularly but are very unlikely to be the documents creation date.
-
- The date is parsed using the order specified in PAPERLESS_DATE_ORDER
-
- Defaults to an empty string to not ignore any dates.
-
-PAPERLESS_DATE_ORDER=<format>
- Paperless will try to determine the document creation date from its contents.
- Specify the date format Paperless should expect to see within your documents.
-
- This option defaults to DMY which translates to day first, month second, and year
- last order. Characters D, M, or Y can be shuffled to meet the required order.
-
-PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>
- By default, paperless ignores certain files and folders in the consumption
- directory, such as system files created by the Mac OS.
-
- This can be adjusted by configuring a custom json array with patterns to exclude.
-
- Defaults to ``[".DS_STORE/*", "._*", ".stfolder/*", ".stversions/*", ".localized/*", "desktop.ini"]``.
-
-Binaries
-########
-
-There are a few external software packages that Paperless expects to find on
-your system when it starts up. Unless you've done something creative with
-their installation, you probably won't need to edit any of these. However,
-if you've installed these programs somewhere where simply typing the name of
-the program doesn't automatically execute it (ie. the program isn't in your
-$PATH), then you'll need to specify the literal path for that program.
-
-PAPERLESS_CONVERT_BINARY=<path>
- Defaults to "convert".
-
-PAPERLESS_GS_BINARY=<path>
- Defaults to "gs".
-
-
-.. _configuration-docker:
-
-Docker-specific options
-#######################
-
-These options don't have any effect in ``paperless.conf``. These options adjust
-the behavior of the docker container. Configure these in `docker-compose.env`.
-
-PAPERLESS_WEBSERVER_WORKERS=<num>
- The number of worker processes the webserver should spawn. More worker processes
- usually result in the front end to load data much quicker. However, each worker process
- also loads the entire application into memory separately, so increasing this value
- will increase RAM usage.
-
- Defaults to 1.
-
-PAPERLESS_BIND_ADDR=<ip address>
- The IP address the webserver will listen on inside the container. There are
- special setups where you may need to configure this value to restrict the
- Ip address or interface the webserver listens on.
-
- Defaults to [::], meaning all interfaces, including IPv6.
-
-PAPERLESS_PORT=<port>
- The port number the webserver will listen on inside the container. There are
- special setups where you may need this to avoid collisions with other
- services (like using podman with multiple containers in one pod).
-
- Don't change this when using Docker. To change the port the webserver is
- reachable outside of the container, instead refer to the "ports" key in
- ``docker-compose.yml``.
-
- Defaults to 8000.
-
-USERMAP_UID=<uid>
- The ID of the paperless user in the container. Set this to your actual user ID on the
- host system, which you can get by executing
-
- .. code:: shell-session
-
- $ id -u
-
- Paperless will change ownership on its folders to this user, so you need to get this right
- in order to be able to write to the consumption directory.
-
- Defaults to 1000.
-
-USERMAP_GID=<gid>
- The ID of the paperless Group in the container. Set this to your actual group ID on the
- host system, which you can get by executing
-
- .. code:: shell-session
-
- $ id -g
-
- Paperless will change ownership on its folders to this group, so you need to get this right
- in order to be able to write to the consumption directory.
-
- Defaults to 1000.
-
-PAPERLESS_OCR_LANGUAGES=<list>
- Additional OCR languages to install. By default, paperless comes with
- English, German, Italian, Spanish and French. If your language is not in this list, install
- additional languages with this configuration option:
-
- .. code:: bash
-
- PAPERLESS_OCR_LANGUAGES=tur ces
-
- To actually use these languages, also set the default OCR language of paperless:
-
- .. code:: bash
-
- PAPERLESS_OCR_LANGUAGE=tur
-
- Defaults to none, which does not install any additional languages.
-
-PAPERLESS_ENABLE_FLOWER=<defined>
- If this environment variable is defined, the Celery monitoring tool
- `Flower <https://flower.readthedocs.io/en/latest/index.html>`_ will
- be started by the container.
-
- You can read more about this in the :ref:`advanced setup <advanced-celery-monitoring>`
- documentation.
-
-
-.. _configuration-update-checking:
-
-Update Checking
-###############
-
-PAPERLESS_ENABLE_UPDATE_CHECK=<bool>
-
- .. note::
-
- This setting was deprecated in favor of a frontend setting after v1.9.2. A one-time
- migration is performed for users who have this setting set. This setting is always
- ignored if the corresponding frontend setting has been set.
--- /dev/null
+# Development
+
+This section describes the steps you need to take to start development
+on paperless-ngx.
+
+Check out the source from github. The repository is organized in the
+following way:
+
+- `main` always represents the latest release and will only see
+ changes when a new release is made.
+- `dev` contains the code that will be in the next release.
+- `feature-X` contain bigger changes that will be in some release, but
+ not necessarily the next one.
+
+When making functional changes to paperless, _always_ make your changes
+on the `dev` branch.
+
+Apart from that, the folder structure is as follows:
+
+- `docs/` - Documentation.
+- `src-ui/` - Code of the front end.
+- `src/` - Code of the back end.
+- `scripts/` - Various scripts that help with different parts of
+ development.
+- `docker/` - Files required to build the docker image.
+
+## Contributing to Paperless
+
+Maybe you've been using Paperless for a while and want to add a feature
+or two, or maybe you've come across a bug that you have some ideas how
+to solve. The beauty of open source software is that you can see what's
+wrong and help to get it fixed for everyone!
+
+Before contributing please review our [code of
+conduct](https://github.com/paperless-ngx/paperless-ngx/blob/main/CODE_OF_CONDUCT.md)
+and other important information in the [contributing
+guidelines](https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md).
+
+## Code formatting with pre-commit Hooks
+
+To ensure a consistent style and formatting across the project source,
+the project utilizes a Git [pre-commit]{.title-ref} hook to perform some
+formatting and linting before a commit is allowed. That way, everyone
+uses the same style and some common issues can be caught early on. See
+below for installation instructions.
+
+Once installed, hooks will run when you commit. If the formatting isn't
+quite right or a linter catches something, the commit will be rejected.
+You'll need to look at the output and fix the issue. Some hooks, such
+as the Python formatting tool [black]{.title-ref}, will format failing
+files, so all you need to do is [git add]{.title-ref} those files again
+and retry your commit.
+
+## Initial setup and first start
+
+After you forked and cloned the code from github you need to perform a
+first-time setup. To do the setup you need to perform the steps from the
+following chapters in a certain order:
+
+1. Install prerequisites + pipenv as mentioned in
+ `[Bare metal route](/setup#bare_metal)
+
+2. Copy `paperless.conf.example` to `paperless.conf` and enable debug
+ mode.
+
+3. Install the Angular CLI interface:
+
+ ```shell-session
+ $ npm install -g @angular/cli
+ ```
+
+4. Install pre-commit
+
+ ```shell-session
+ pre-commit install
+ ```
+
+5. Create `consume` and `media` folders in the cloned root folder.
+
+ ```shell-session
+ mkdir -p consume media
+ ```
+
+6. You can now either \...
+
+ - install redis or
+
+ - use the included scripts/start-services.sh to use docker to fire
+ up a redis instance (and some other services such as tika,
+ gotenberg and a database server) or
+
+ - spin up a bare redis container
+
+ > ```shell-session
+ > docker run -d -p 6379:6379 --restart unless-stopped redis:latest
+ > ```
+
+7. Install the python dependencies by performing in the src/ directory.
+
+ ```shell-session
+ pipenv install --dev
+ ```
+
+> - Make sure you're using python 3.9.x or lower. Otherwise you might
+> get issues with building dependencies. You can use
+> [pyenv](https://github.com/pyenv/pyenv) to install a specific
+> python version.
+
+8. Generate the static UI so you can perform a login to get session
+ that is required for frontend development (this needs to be done one
+ time only). From src-ui directory:
+
+ ```shell-session
+ npm install .
+ ./node_modules/.bin/ng build --configuration production
+ ```
+
+9. Apply migrations and create a superuser for your dev instance:
+
+ ```shell-session
+ python3 manage.py migrate
+ python3 manage.py createsuperuser
+ ```
+
+10. Now spin up the dev backend. Depending on which part of paperless
+ you're developing for, you need to have some or all of them
+ running.
+
+> ```shell-session
+> python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
+> ```
+
+11. Login with the superuser credentials provided in step 8 at
+ `http://localhost:8000` to create a session that enables you to use
+ the backend.
+
+Backend development environment is now ready, to start Frontend
+development go to `/src-ui` and run `ng serve`. From there you can use
+`http://localhost:4200` for a preview.
+
+## Back end development
+
+The backend is a django application. PyCharm works well for development,
+but you can use whatever you want.
+
+Configure the IDE to use the src/ folder as the base source folder.
+Configure the following launch configurations in your IDE:
+
+- python3 manage.py runserver
+- celery \--app paperless worker
+- python3 manage.py document_consumer
+
+To start them all:
+
+```shell-session
+python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
+```
+
+Testing and code style:
+
+- Run `pytest` in the src/ directory to execute all tests. This also
+ generates a HTML coverage report. When runnings test, paperless.conf
+ is loaded as well. However: the tests rely on the default
+ configuration. This is not ideal. But for now, make sure no settings
+ except for DEBUG are overridden when testing.
+
+- Coding style is enforced by the Git pre-commit hooks. These will
+ ensure your code is formatted and do some linting when you do a [git
+ commit]{.title-ref}.
+
+- You can also run `black` manually to format your code
+
+ !!! note
+
+ The line length rule E501 is generally useful for getting multiple
+ source files next to each other on the screen. However, in some
+ cases, its just not possible to make some lines fit, especially
+ complicated IF cases. Append `# NOQA: E501` to disable this check
+ for certain lines.
+
+## Front end development
+
+The front end is built using Angular. In order to get started, you need
+`npm`. Install the Angular CLI interface with
+
+```shell-session
+$ npm install -g @angular/cli
+```
+
+and make sure that it's on your path. Next, in the src-ui/ directory,
+install the required dependencies of the project.
+
+```shell-session
+$ npm install
+```
+
+You can launch a development server by running
+
+```shell-session
+$ ng serve
+```
+
+This will automatically update whenever you save. However, in-place
+compilation might fail on syntax errors, in which case you need to
+restart it.
+
+By default, the development server is available on
+`http://localhost:4200/` and is configured to access the API at
+`http://localhost:8000/api/`, which is the default of the backend. If
+you enabled DEBUG on the back end, several security overrides for
+allowed hosts, CORS and X-Frame-Options are in place so that the front
+end behaves exactly as in production. This also relies on you being
+logged into the back end. Without a valid session, The front end will
+simply not work.
+
+Testing and code style:
+
+- The frontend code (.ts, .html, .scss) use `prettier` for code
+ formatting via the Git `pre-commit` hooks which run automatically on
+ commit. See
+ [above](#code-formatting-with-pre-commit-hooks) for installation. You can also run this via cli with a
+ command such as
+
+ ```shell-session
+ $ git ls-files -- '*.ts' | xargs pre-commit run prettier --files
+ ```
+
+- Frontend testing uses jest and cypress. There is currently a need
+ for significantly more frontend tests. Unit tests and e2e tests,
+ respectively, can be run non-interactively with:
+
+ ```shell-session
+ $ ng test
+ $ npm run e2e:ci
+ ```
+
+ Cypress also includes a UI which can be run from within the `src-ui`
+ directory with
+
+ ```shell-session
+ $ ./node_modules/.bin/cypress open
+ ```
+
+In order to build the front end and serve it as part of django, execute
+
+```shell-session
+$ ng build --prod
+```
+
+This will build the front end and put it in a location from which the
+Django server will serve it as static content. This way, you can verify
+that authentication is working.
+
+## Localization
+
+Paperless is available in many different languages. Since paperless
+consists both of a django application and an Angular front end, both
+these parts have to be translated separately.
+
+### Front end localization
+
+- The Angular front end does localization according to the [Angular
+ documentation](https://angular.io/guide/i18n).
+- The source language of the project is "en_US".
+- The source strings end up in the file "src-ui/messages.xlf".
+- The translated strings need to be placed in the
+ "src-ui/src/locale/" folder.
+- In order to extract added or changed strings from the source files,
+ call `ng xi18n --ivy`.
+
+Adding new languages requires adding the translated files in the
+"src-ui/src/locale/" folder and adjusting a couple files.
+
+1. Adjust "src-ui/angular.json":
+
+ ```json
+ "i18n": {
+ "sourceLocale": "en-US",
+ "locales": {
+ "de": "src/locale/messages.de.xlf",
+ "nl-NL": "src/locale/messages.nl_NL.xlf",
+ "fr": "src/locale/messages.fr.xlf",
+ "en-GB": "src/locale/messages.en_GB.xlf",
+ "pt-BR": "src/locale/messages.pt_BR.xlf",
+ "language-code": "language-file"
+ }
+ }
+ ```
+
+2. Add the language to the available options in
+ "src-ui/src/app/services/settings.service.ts":
+
+ ```typescript
+ getLanguageOptions(): LanguageOption[] {
+ return [
+ {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"},
+ {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"},
+ {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"},
+ {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"},
+ {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"},
+ {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}
+ // Add your new language here
+ ]
+ }
+ ```
+
+ `dateInputFormat` is a special string that defines the behavior of
+ the date input fields and absolutely needs to contain "dd", "mm"
+ and "yyyy".
+
+3. Import and register the Angular data for this locale in
+ "src-ui/src/app/app.module.ts":
+
+ ```typescript
+ import localeDe from '@angular/common/locales/de'
+ registerLocaleData(localeDe)
+ ```
+
+### Back end localization
+
+A majority of the strings that appear in the back end appear only when
+the admin is used. However, some of these are still shown on the front
+end (such as error messages).
+
+- The django application does localization according to the [django
+ documentation](https://docs.djangoproject.com/en/3.1/topics/i18n/translation/).
+- The source language of the project is "en_US".
+- Localization files end up in the folder "src/locale/".
+- In order to extract strings from the application, call
+ `python3 manage.py makemessages -l en_US`. This is important after
+ making changes to translatable strings.
+- The message files need to be compiled for them to show up in the
+ application. Call `python3 manage.py compilemessages` to do this.
+ The generated files don't get committed into git, since these are
+ derived artifacts. The build pipeline takes care of executing this
+ command.
+
+Adding new languages requires adding the translated files in the
+"src/locale/" folder and adjusting the file
+"src/paperless/settings.py" to include the new language:
+
+```python
+LANGUAGES = [
+ ("en-us", _("English (US)")),
+ ("en-gb", _("English (GB)")),
+ ("de", _("German")),
+ ("nl-nl", _("Dutch")),
+ ("fr", _("French")),
+ ("pt-br", _("Portuguese (Brazil)")),
+ # Add language here.
+]
+```
+
+## Building the documentation
+
+The documentation is built using material-mkdocs, see their [documentation](https://squidfunk.github.io/mkdocs-material/reference/). If you want to build the documentation locally, this is how you do it:
+
+1. Install python dependencies.
+
+ ```shell-session
+ $ cd /path/to/paperless
+ $ pipenv install --dev
+ ```
+
+2. Build the documentation
+
+ ```shell-session
+ $ cd /path/to/paperless
+ $ pipenv mkdocs build
+ ```
+
+## Building the Docker image
+
+The docker image is primarily built by the GitHub actions workflow, but
+it can be faster when developing to build and tag an image locally.
+
+To provide the build arguments automatically, build the image using the
+helper script `build-docker-image.sh`.
+
+Building the docker image from source:
+
+> ```shell-session
+> ./build-docker-image.sh Dockerfile -t <your-tag>
+> ```
+
+## Extending Paperless
+
+Paperless does not have any fancy plugin systems and will probably never
+have. However, some parts of the application have been designed to allow
+easy integration of additional features without any modification to the
+base code.
+
+### Making custom parsers
+
+Paperless uses parsers to add documents to paperless. A parser is
+responsible for:
+
+- Retrieve the content from the original
+- Create a thumbnail
+- Optional: Retrieve a created date from the original
+- Optional: Create an archived document from the original
+
+Custom parsers can be added to paperless to support more file types. In
+order to do that, you need to write the parser itself and announce its
+existence to paperless.
+
+The parser itself must extend `documents.parsers.DocumentParser` and
+must implement the methods `parse` and `get_thumbnail`. You can provide
+your own implementation to `get_date` if you don't want to rely on
+paperless' default date guessing mechanisms.
+
+```python
+class MyCustomParser(DocumentParser):
+
+ def parse(self, document_path, mime_type):
+ # This method does not return anything. Rather, you should assign
+ # whatever you got from the document to the following fields:
+
+ # The content of the document.
+ self.text = "content"
+
+ # Optional: path to a PDF document that you created from the original.
+ self.archive_path = os.path.join(self.tempdir, "archived.pdf")
+
+ # Optional: "created" date of the document.
+ self.date = get_created_from_metadata(document_path)
+
+ def get_thumbnail(self, document_path, mime_type):
+ # This should return the path to a thumbnail you created for this
+ # document.
+ return os.path.join(self.tempdir, "thumb.png")
+```
+
+If you encounter any issues during parsing, raise a
+`documents.parsers.ParseError`.
+
+The `self.tempdir` directory is a temporary directory that is guaranteed
+to be empty and removed after consumption finished. You can use that
+directory to store any intermediate files and also use it to store the
+thumbnail / archived document.
+
+After that, you need to announce your parser to paperless. You need to
+connect a handler to the `document_consumer_declaration` signal. Have a
+look in the file `src/paperless_tesseract/apps.py` on how that's done.
+The handler is a method that returns information about your parser:
+
+```python
+def myparser_consumer_declaration(sender, **kwargs):
+ return {
+ "parser": MyCustomParser,
+ "weight": 0,
+ "mime_types": {
+ "application/pdf": ".pdf",
+ "image/jpeg": ".jpg",
+ }
+ }
+```
+
+- `parser` is a reference to a class that extends `DocumentParser`.
+- `weight` is used whenever two or more parsers are able to parse a
+ file: The parser with the higher weight wins. This can be used to
+ override the parsers provided by paperless.
+- `mime_types` is a dictionary. The keys are the mime types your
+ parser supports and the value is the default file extension that
+ paperless should use when storing files and serving them for
+ download. We could guess that from the file extensions, but some
+ mime types have many extensions associated with them and the python
+ methods responsible for guessing the extension do not always return
+ the same value.
+++ /dev/null
-.. _extending:
-
-Paperless-ngx Development
-#########################
-
-This section describes the steps you need to take to start development on paperless-ngx.
-
-Check out the source from github. The repository is organized in the following way:
-
-* ``main`` always represents the latest release and will only see changes
- when a new release is made.
-* ``dev`` contains the code that will be in the next release.
-* ``feature-X`` contain bigger changes that will be in some release, but not
- necessarily the next one.
-
-When making functional changes to paperless, *always* make your changes on the ``dev`` branch.
-
-Apart from that, the folder structure is as follows:
-
-* ``docs/`` - Documentation.
-* ``src-ui/`` - Code of the front end.
-* ``src/`` - Code of the back end.
-* ``scripts/`` - Various scripts that help with different parts of development.
-* ``docker/`` - Files required to build the docker image.
-
-Contributing to Paperless
-=========================
-
-Maybe you've been using Paperless for a while and want to add a feature or two,
-or maybe you've come across a bug that you have some ideas how to solve. The
-beauty of open source software is that you can see what's wrong and help to get
-it fixed for everyone!
-
-Before contributing please review our `code of conduct`_ and other important
-information in the `contributing guidelines`_.
-
-.. _code-formatting-with-pre-commit-hooks:
-
-Code formatting with pre-commit Hooks
-=====================================
-
-To ensure a consistent style and formatting across the project source, the project
-utilizes a Git `pre-commit` hook to perform some formatting and linting before a
-commit is allowed. That way, everyone uses the same style and some common issues
-can be caught early on. See below for installation instructions.
-
-Once installed, hooks will run when you commit. If the formatting isn't quite right
-or a linter catches something, the commit will be rejected. You'll need to look at the
-output and fix the issue. Some hooks, such as the Python formatting tool `black`,
-will format failing files, so all you need to do is `git add` those files again and
-retry your commit.
-
-Initial setup and first start
-=============================
-
-After you forked and cloned the code from github you need to perform a first-time setup.
-To do the setup you need to perform the steps from the following chapters in a certain order:
-
-1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>`
-2. Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode.
-3. Install the Angular CLI interface:
-
- .. code:: shell-session
-
- $ npm install -g @angular/cli
-
-4. Install pre-commit
-
- .. code:: shell-session
-
- pre-commit install
-
-5. Create ``consume`` and ``media`` folders in the cloned root folder.
-
- .. code:: shell-session
-
- mkdir -p consume media
-
-6. You can now either ...
-
- * install redis or
- * use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a database server) or
- * spin up a bare redis container
-
- .. code:: shell-session
-
- docker run -d -p 6379:6379 --restart unless-stopped redis:latest
-
-7. Install the python dependencies by performing in the src/ directory.
-
- .. code:: shell-session
-
- pipenv install --dev
-
- * Make sure you're using python 3.9.x or lower. Otherwise you might get issues with building dependencies. You can use `pyenv <https://github.com/pyenv/pyenv>`_ to install a specific python version.
-
-8. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From src-ui directory:
-
- .. code:: shell-session
-
- npm install .
- ./node_modules/.bin/ng build --configuration production
-
-9. Apply migrations and create a superuser for your dev instance:
-
- .. code:: shell-session
-
- python3 manage.py migrate
- python3 manage.py createsuperuser
-
-10. Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running.
-
- .. code:: shell-session
-
- python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
-
-11. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend.
-
-Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview.
-
-Back end development
-====================
-
-The backend is a django application. PyCharm works well for development, but you can use whatever
-you want.
-
-Configure the IDE to use the src/ folder as the base source folder. Configure the following
-launch configurations in your IDE:
-
-* python3 manage.py runserver
-* celery --app paperless worker
-* python3 manage.py document_consumer
-
-To start them all:
-
-.. code:: shell-session
-
- python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
-
-Testing and code style:
-
-* Run ``pytest`` in the src/ directory to execute all tests. This also generates a HTML coverage
- report. When runnings test, paperless.conf is loaded as well. However: the tests rely on the default
- configuration. This is not ideal. But for now, make sure no settings except for DEBUG are overridden when testing.
-* Coding style is enforced by the Git pre-commit hooks. These will ensure your code is formatted and do some
- linting when you do a `git commit`.
-* You can also run ``black`` manually to format your code
-
- .. note::
-
- The line length rule E501 is generally useful for getting multiple source files
- next to each other on the screen. However, in some cases, its just not possible
- to make some lines fit, especially complicated IF cases. Append ``# NOQA: E501``
- to disable this check for certain lines.
-
-Front end development
-=====================
-
-The front end is built using Angular. In order to get started, you need ``npm``.
-Install the Angular CLI interface with
-
-.. code:: shell-session
-
- $ npm install -g @angular/cli
-
-and make sure that it's on your path. Next, in the src-ui/ directory, install the
-required dependencies of the project.
-
-.. code:: shell-session
-
- $ npm install
-
-You can launch a development server by running
-
-.. code:: shell-session
-
- $ ng serve
-
-This will automatically update whenever you save. However, in-place compilation might fail
-on syntax errors, in which case you need to restart it.
-
-By default, the development server is available on ``http://localhost:4200/`` and is configured
-to access the API at ``http://localhost:8000/api/``, which is the default of the backend.
-If you enabled DEBUG on the back end, several security overrides for allowed hosts, CORS and
-X-Frame-Options are in place so that the front end behaves exactly as in production. This also
-relies on you being logged into the back end. Without a valid session, The front end will simply
-not work.
-
-Testing and code style:
-
-* The frontend code (.ts, .html, .scss) use ``prettier`` for code formatting via the Git
- ``pre-commit`` hooks which run automatically on commit. See
- :ref:`above <code-formatting-with-pre-commit-hooks>` for installation. You can also run this
- via cli with a command such as
-
- .. code:: shell-session
-
- $ git ls-files -- '*.ts' | xargs pre-commit run prettier --files
-
-* Frontend testing uses jest and cypress. There is currently a need for significantly more
- frontend tests. Unit tests and e2e tests, respectively, can be run non-interactively with:
-
- .. code:: shell-session
-
- $ ng test
- $ npm run e2e:ci
-
- Cypress also includes a UI which can be run from within the ``src-ui`` directory with
-
- .. code:: shell-session
-
- $ ./node_modules/.bin/cypress open
-
-In order to build the front end and serve it as part of django, execute
-
-.. code:: shell-session
-
- $ ng build --prod
-
-This will build the front end and put it in a location from which the Django server will serve
-it as static content. This way, you can verify that authentication is working.
-
-
-Localization
-============
-
-Paperless is available in many different languages. Since paperless consists both of a django
-application and an Angular front end, both these parts have to be translated separately.
-
-Front end localization
-----------------------
-
-* The Angular front end does localization according to the `Angular documentation <https://angular.io/guide/i18n>`_.
-* The source language of the project is "en_US".
-* The source strings end up in the file "src-ui/messages.xlf".
-* The translated strings need to be placed in the "src-ui/src/locale/" folder.
-* In order to extract added or changed strings from the source files, call ``ng xi18n --ivy``.
-
-Adding new languages requires adding the translated files in the "src-ui/src/locale/" folder and adjusting a couple files.
-
-1. Adjust "src-ui/angular.json":
-
- .. code:: json
-
- "i18n": {
- "sourceLocale": "en-US",
- "locales": {
- "de": "src/locale/messages.de.xlf",
- "nl-NL": "src/locale/messages.nl_NL.xlf",
- "fr": "src/locale/messages.fr.xlf",
- "en-GB": "src/locale/messages.en_GB.xlf",
- "pt-BR": "src/locale/messages.pt_BR.xlf",
- "language-code": "language-file"
- }
- }
-
-2. Add the language to the available options in "src-ui/src/app/services/settings.service.ts":
-
- .. code:: typescript
-
- getLanguageOptions(): LanguageOption[] {
- return [
- {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"},
- {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"},
- {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"},
- {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"},
- {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"},
- {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}
- // Add your new language here
- ]
- }
-
- ``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy".
-
-3. Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts":
-
- .. code:: typescript
-
- import localeDe from '@angular/common/locales/de';
- registerLocaleData(localeDe)
-
-Back end localization
----------------------
-
-A majority of the strings that appear in the back end appear only when the admin is used. However,
-some of these are still shown on the front end (such as error messages).
-
-* The django application does localization according to the `django documentation <https://docs.djangoproject.com/en/3.1/topics/i18n/translation/>`_.
-* The source language of the project is "en_US".
-* Localization files end up in the folder "src/locale/".
-* In order to extract strings from the application, call ``python3 manage.py makemessages -l en_US``. This is important after making changes to translatable strings.
-* The message files need to be compiled for them to show up in the application. Call ``python3 manage.py compilemessages`` to do this. The generated files don't get
- committed into git, since these are derived artifacts. The build pipeline takes care of executing this command.
-
-Adding new languages requires adding the translated files in the "src/locale/" folder and adjusting the file "src/paperless/settings.py" to include the new language:
-
-.. code:: python
-
- LANGUAGES = [
- ("en-us", _("English (US)")),
- ("en-gb", _("English (GB)")),
- ("de", _("German")),
- ("nl-nl", _("Dutch")),
- ("fr", _("French")),
- ("pt-br", _("Portuguese (Brazil)")),
- # Add language here.
- ]
-
-
-Building the documentation
-==========================
-
-The documentation is built using sphinx. I've configured ReadTheDocs to automatically build
-the documentation when changes are pushed. If you want to build the documentation locally,
-this is how you do it:
-
-1. Install python dependencies.
-
- .. code:: shell-session
-
- $ cd /path/to/paperless
- $ pipenv install --dev
-
-2. Build the documentation
-
- .. code:: shell-session
-
- $ cd /path/to/paperless/docs
- $ pipenv run make clean html
-
-This will build the HTML documentation, and put the resulting files in the ``_build/html``
-directory.
-
-Building the Docker image
-=========================
-
-The docker image is primarily built by the GitHub actions workflow, but it can be
-faster when developing to build and tag an image locally.
-
-To provide the build arguments automatically, build the image using the helper
-script ``build-docker-image.sh``.
-
-Building the docker image from source:
-
- .. code:: shell-session
-
- ./build-docker-image.sh Dockerfile -t <your-tag>
-
-Extending Paperless
-===================
-
-Paperless does not have any fancy plugin systems and will probably never have. However,
-some parts of the application have been designed to allow easy integration of additional
-features without any modification to the base code.
-
-Making custom parsers
----------------------
-
-Paperless uses parsers to add documents to paperless. A parser is responsible for:
-
-* Retrieve the content from the original
-* Create a thumbnail
-* Optional: Retrieve a created date from the original
-* Optional: Create an archived document from the original
-
-Custom parsers can be added to paperless to support more file types. In order to do that,
-you need to write the parser itself and announce its existence to paperless.
-
-The parser itself must extend ``documents.parsers.DocumentParser`` and must implement the
-methods ``parse`` and ``get_thumbnail``. You can provide your own implementation to
-``get_date`` if you don't want to rely on paperless' default date guessing mechanisms.
-
-.. code:: python
-
- class MyCustomParser(DocumentParser):
-
- def parse(self, document_path, mime_type):
- # This method does not return anything. Rather, you should assign
- # whatever you got from the document to the following fields:
-
- # The content of the document.
- self.text = "content"
-
- # Optional: path to a PDF document that you created from the original.
- self.archive_path = os.path.join(self.tempdir, "archived.pdf")
-
- # Optional: "created" date of the document.
- self.date = get_created_from_metadata(document_path)
-
- def get_thumbnail(self, document_path, mime_type):
- # This should return the path to a thumbnail you created for this
- # document.
- return os.path.join(self.tempdir, "thumb.png")
-
-If you encounter any issues during parsing, raise a ``documents.parsers.ParseError``.
-
-The ``self.tempdir`` directory is a temporary directory that is guaranteed to be empty
-and removed after consumption finished. You can use that directory to store any
-intermediate files and also use it to store the thumbnail / archived document.
-
-After that, you need to announce your parser to paperless. You need to connect a
-handler to the ``document_consumer_declaration`` signal. Have a look in the file
-``src/paperless_tesseract/apps.py`` on how that's done. The handler is a method
-that returns information about your parser:
-
-.. code:: python
-
- def myparser_consumer_declaration(sender, **kwargs):
- return {
- "parser": MyCustomParser,
- "weight": 0,
- "mime_types": {
- "application/pdf": ".pdf",
- "image/jpeg": ".jpg",
- }
- }
-
-* ``parser`` is a reference to a class that extends ``DocumentParser``.
-
-* ``weight`` is used whenever two or more parsers are able to parse a file: The parser with
- the higher weight wins. This can be used to override the parsers provided by
- paperless.
-
-* ``mime_types`` is a dictionary. The keys are the mime types your parser supports and the value
- is the default file extension that paperless should use when storing files and serving them for
- download. We could guess that from the file extensions, but some mime types have many extensions
- associated with them and the python methods responsible for guessing the extension do not always
- return the same value.
-
-.. _code of conduct: https://github.com/paperless-ngx/paperless-ngx/blob/main/CODE_OF_CONDUCT.md
-.. _contributing guidelines: https://github.com/paperless-ngx/paperless-ngx/blob/main/CONTRIBUTING.md
--- /dev/null
+# Frequently Asked Questions
+
+### _What's the general plan for Paperless-ngx?_
+
+**A:** While Paperless-ngx is already considered largely
+"feature-complete" it is a community-driven project and development
+will be guided in this way. New features can be submitted via GitHub
+discussions and "up-voted" by the community but this is not a
+guarantee the feature will be implemented. This project will always be
+open to collaboration in the form of PRs, ideas etc.
+
+### _I'm using docker. Where are my documents?_
+
+**A:** Your documents are stored inside the docker volume
+`paperless_media`. Docker manages this volume automatically for you. It
+is a persistent storage and will persist as long as you don't
+explicitly delete it. The actual location depends on your host operating
+system. On Linux, chances are high that this location is
+
+```
+/var/lib/docker/volumes/paperless_media/_data
+```
+
+!!! warning
+
+ Do not mess with this folder. Don't change permissions and don't move
+ files around manually. This folder is meant to be entirely managed by
+ docker and paperless.
+
+### Let's say I want to switch tools in a year. Can I easily move
+
+to other systems?\*
+
+**A:** Your documents are stored as plain files inside the media folder.
+You can always drag those files out of that folder to use them
+elsewhere. Here are a couple notes about that.
+
+- Paperless-ngx never modifies your original documents. It keeps
+ checksums of all documents and uses a scheduled sanity checker to
+ check that they remain the same.
+- By default, paperless uses the internal ID of each document as its
+ filename. This might not be very convenient for export. However, you
+ can adjust the way files are stored in paperless by
+ [configuring the filename format](advanced_usage#file_name_handling).
+- [The exporter](administration#exporter) is
+ another easy way to get your files out of paperless with reasonable
+ file names.
+
+### _What file types does paperless-ngx support?_
+
+**A:** Currently, the following files are supported:
+
+- PDF documents, PNG images, JPEG images, TIFF images and GIF images
+ are processed with OCR and converted into PDF documents.
+- Plain text documents are supported as well and are added verbatim to
+ paperless.
+- With the optional Tika integration enabled (see [Tika configuration](configuration#tika),
+ Paperless also supports various Office documents (.docx, .doc, odt,
+ .ppt, .pptx, .odp, .xls, .xlsx, .ods).
+
+Paperless-ngx determines the type of a file by inspecting its content.
+The file extensions do not matter.
+
+### _Will paperless-ngx run on Raspberry Pi?_
+
+**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
+The long answer is that certain parts of Paperless will run very slow,
+such as the OCR. On Raspberry Pi, try to OCR documents before feeding
+them into paperless so that paperless can reuse the text. The web
+interface is a lot snappier, since it runs in your browser and paperless
+has to do much less work to serve the data.
+
+!!! note
+
+ You can adjust some of the settings so that paperless uses less
+ processing power. See [setup](setup#less_powerful_devices) for details.
+
+### _How do I install paperless-ngx on Raspberry Pi?_
+
+**A:** Docker images are available for arm and arm64 hardware, so just
+follow the docker-compose instructions. Apart from more required disk
+space compared to a bare metal installation, docker comes with close to
+zero overhead, even on Raspberry Pi.
+
+If you decide to got with the bare metal route, be aware that some of
+the python requirements do not have precompiled packages for ARM /
+ARM64. Installation of these will require additional development
+libraries and compilation will take a long time.
+
+### _How do I run this on Unraid?_
+
+**A:** Paperless-ngx is available as [community
+app](https://unraid.net/community/apps?q=paperless-ngx) in Unraid. [Uli
+Fahrer](https://github.com/Tooa) created a container template for that.
+
+### _How do I run this on my toaster?_
+
+**A:** I honestly don't know! As for all other devices that might be
+able to run paperless, you're a bit on your own. If you can't run the
+docker image, the documentation has instructions for bare metal
+installs. I'm running paperless on an i3 processor from 2015 or so.
+This is also what I use to test new releases with. Apart from that, I
+also have a Raspberry Pi, which I occasionally build the image on and
+see if it works.
+
+### _How do I proxy this with NGINX?_
+
+**A:** See [here](setup#nginx).
+
+### _How do I get WebSocket support with Apache mod_wsgi_?
+
+**A:** `mod_wsgi` by itself does not support ASGI. Paperless will
+continue to work with WSGI, but certain features such as status
+notifications about document consumption won't be available.
+
+If you want to continue using `mod_wsgi`, you will have to run an
+ASGI-enabled web server as well that processes WebSocket connections,
+and configure Apache to redirect WebSocket connections to this server.
+Multiple options for ASGI servers exist:
+
+- `gunicorn` with `uvicorn` as the worker implementation (the default
+ of paperless)
+- `daphne` as a standalone server, which is the reference
+ implementation for ASGI.
+- `uvicorn` as a standalone server
+++ /dev/null
-
-**************************
-Frequently asked questions
-**************************
-
-**Q:** *What's the general plan for Paperless-ngx?*
-
-**A:** While Paperless-ngx is already considered largely "feature-complete" it is a community-driven
-project and development will be guided in this way. New features can be submitted via
-GitHub discussions and "up-voted" by the community but this is not a guarantee the feature
-will be implemented. This project will always be open to collaboration in the form of PRs,
-ideas etc.
-
-**Q:** *I'm using docker. Where are my documents?*
-
-**A:** Your documents are stored inside the docker volume ``paperless_media``.
-Docker manages this volume automatically for you. It is a persistent storage
-and will persist as long as you don't explicitly delete it. The actual location
-depends on your host operating system. On Linux, chances are high that this location
-is
-
-.. code::
-
- /var/lib/docker/volumes/paperless_media/_data
-
-.. caution::
-
- Do not mess with this folder. Don't change permissions and don't move
- files around manually. This folder is meant to be entirely managed by docker
- and paperless.
-
-**Q:** *Let's say I want to switch tools in a year. Can I easily move to other systems?*
-
-**A:** Your documents are stored as plain files inside the media folder. You can always drag those files
-out of that folder to use them elsewhere. Here are a couple notes about that.
-
-* Paperless-ngx never modifies your original documents. It keeps checksums of all documents and uses a
- scheduled sanity checker to check that they remain the same.
-* By default, paperless uses the internal ID of each document as its filename. This might not be very
- convenient for export. However, you can adjust the way files are stored in paperless by
- :ref:`configuring the filename format <advanced-file_name_handling>`.
-* :ref:`The exporter <utilities-exporter>` is another easy way to get your files out of paperless with reasonable file names.
-
-**Q:** *What file types does paperless-ngx support?*
-
-**A:** Currently, the following files are supported:
-
-* PDF documents, PNG images, JPEG images, TIFF images and GIF images are processed with OCR and converted into PDF documents.
-* Plain text documents are supported as well and are added verbatim
- to paperless.
-* With the optional Tika integration enabled (see :ref:`Configuration <configuration-tika>`), Paperless also supports various
- Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods).
-
-Paperless-ngx determines the type of a file by inspecting its content. The
-file extensions do not matter.
-
-**Q:** *Will paperless-ngx run on Raspberry Pi?*
-
-**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
-The long answer is that certain parts of
-Paperless will run very slow, such as the OCR. On Raspberry Pi,
-try to OCR documents before feeding them into paperless so that paperless can
-reuse the text. The web interface is a lot snappier, since it runs
-in your browser and paperless has to do much less work to serve the data.
-
-.. note::
-
- You can adjust some of the settings so that paperless uses less processing
- power. See :ref:`setup-less_powerful_devices` for details.
-
-
-**Q:** *How do I install paperless-ngx on Raspberry Pi?*
-
-**A:** Docker images are available for arm and arm64 hardware, so just follow
-the docker-compose instructions. Apart from more required disk space compared to
-a bare metal installation, docker comes with close to zero overhead, even on
-Raspberry Pi.
-
-If you decide to got with the bare metal route, be aware that some of the
-python requirements do not have precompiled packages for ARM / ARM64. Installation
-of these will require additional development libraries and compilation will take
-a long time.
-
-**Q:** *How do I run this on Unraid?*
-
-**A:** Paperless-ngx is available as `community app <https://unraid.net/community/apps?q=paperless-ngx>`_
-in Unraid. `Uli Fahrer <https://github.com/Tooa>`_ created a container template for that.
-
-**Q:** *How do I run this on my toaster?*
-
-**A:** I honestly don't know! As for all other devices that might be able
-to run paperless, you're a bit on your own. If you can't run the docker image,
-the documentation has instructions for bare metal installs. I'm running
-paperless on an i3 processor from 2015 or so. This is also what I use to test
-new releases with. Apart from that, I also have a Raspberry Pi, which I
-occasionally build the image on and see if it works.
-
-**Q:** *How do I proxy this with NGINX?*
-
-**A:** See :ref:`here <setup-nginx>`.
-
-.. _faq-mod_wsgi:
-
-**Q:** *How do I get WebSocket support with Apache mod_wsgi*?
-
-**A:** ``mod_wsgi`` by itself does not support ASGI. Paperless will continue
-to work with WSGI, but certain features such as status notifications about
-document consumption won't be available.
-
-If you want to continue using ``mod_wsgi``, you will have to run an ASGI-enabled
-web server as well that processes WebSocket connections, and configure Apache to
-redirect WebSocket connections to this server. Multiple options for ASGI servers
-exist:
-
-* ``gunicorn`` with ``uvicorn`` as the worker implementation (the default of paperless)
-* ``daphne`` as a standalone server, which is the reference implementation for ASGI.
-* ``uvicorn`` as a standalone server
--- /dev/null
+<div class="grid-left" markdown>
+{.index-logo}
+{.index-logo}
+
+**Paperless-ngx** is a _community-supported_ open-source document management system that transforms your
+physical documents into a searchable online archive so you can keep, well, _less paper_.
+
+[Get started](/setup/){ .md-button .md-button--primary .index-callout }
+[Demo](https://demo.paperless-ngx.com){ .md-button .md-button--secondary target=\_blank }
+
+</div>
+<div class="grid-right" markdown>
+{.index-screenshot}
+{.index-screenshot}
+</div>
+<div class="clear"></div>
+
+## Why This Exists
+
+Paper is a nightmare. Environmental issues aside, there's no excuse for
+it in the 21st century. It takes up space, collects dust, doesn't
+support any form of a search feature, indexing is tedious, it's heavy
+and prone to damage & loss.
+
+This software is designed to make "going paperless" easier. No more worrying
+about finding stuff again, feed documents right from the post box into
+the scanner and then shred them. Perhaps you might find it useful too.
+
+## Paperless, a history
+
+Paperless is a simple Django application running in two parts: a
+_Consumer_ (the thing that does the indexing) and the _Web server_ (the
+part that lets you search & download already-indexed documents). If you
+want to learn more about its functions keep on reading after the
+installation section.
+
+Paperless-ngx is a document management system that transforms your
+physical documents into a searchable online archive so you can keep,
+well, _less paper_.
+
+Paperless-ngx forked from paperless-ng to continue the great work and
+distribute responsibility of supporting and advancing the project among
+a team of people.
+
+NG stands for both Angular (the framework used for the Frontend) and
+next-gen. Publishing this project under a different name also avoids
+confusion between paperless and paperless-ngx.
+
+If you want to learn about what's different in paperless-ngx from
+Paperless, check out these resources in the documentation:
+
+- [Some screenshots](#screenshots) of the new UI are available.
+- Read [this section](/advanced_usage/#advanced-automatic_matching) if you want to learn about how paperless automates all
+ tagging using machine learning.
+- Paperless now comes with a [proper email consumer](/usage/#usage-email) that's fully tested and production ready.
+- Paperless creates searchable PDF/A documents from whatever you put into the consumption directory. This means
+ that you can select text in image-only documents coming from your scanner.
+- See [this note](/administration/#utilities-encyption) about GnuPG encryption in paperless-ngx.
+- Paperless is now integrated with a
+ [task processing queue](/setup#task_processor) that tells you at a glance when and why something is not working.
+- The [changelog](/changelog) contains a detailed list of all changes in paperless-ngx.
+
+## Screenshots
+
+This is what Paperless-ngx looks like.
+
+The dashboard shows customizable views on your document and allows
+document uploads:
+
+[](assets/screenshots/dashboard.png)
+
+The document list provides three different styles to scroll through your
+documents:
+
+[](assets/screenshots/documents-table.png)
+
+[](assets/screenshots/documents-smallcards.png)
+
+[](assets/screenshots/documents-largecards.png)
+
+Paperless-ngx also supports dark mode:
+
+[](assets/screenshots/documents-smallcards-dark.png)
+
+Extensive filtering mechanisms:
+
+[](assets/screenshots/documents-filter.png)
+
+Bulk editing of document tags, correspondents, etc.:
+
+[](assets/screenshots/bulk-edit.png)
+
+Side-by-side editing of documents:
+
+[](assets/screenshots/editing.png)
+
+Tag editing. This looks about the same for correspondents and document
+types.
+
+[](assets/screenshots/new-tag.png)
+
+Searching provides auto complete and highlights the results.
+
+[](assets/screenshots/search-preview.png)
+
+[](assets/screenshots/search-results.png)
+
+Fancy mail filters!
+
+[](assets/screenshots/mail-rules-edited.png)
+
+Mobile devices are supported.
+
+[](assets/screenshots/mobile.png)
+
+## Support
+
+Community support is available via [GitHub Discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/) and [the Matrix chat room](https://matrix.to/#/#paperless:matrix.org).
+
+### Feature Requests
+
+Feature requests can be submitted via [GitHub Discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests) where you can search for existing ideas, add your own and vote for the ones you care about.
+
+### Bugs
+
+For bugs please [open an issue](https://github.com/paperless-ngx/paperless-ngx/issues) or [start a discussion](https://github.com/paperless-ngx/paperless-ngx/discussions/categories/support) if you have questions.
+
+## Contributing
+
+People interested in continuing the work on paperless-ngx are encouraged to reach out on [GitHub](https://github.com/paperless-ngx/paperless-ngx) or [the Matrix chat room](https://matrix.to/#/#paperless:matrix.org). If you would like to contribute to the project on an ongoing basis there are multiple teams (frontend, ci/cd, etc) that could use your help so please reach out!
+
+### Translation
+
+Paperless-ngx is available in many languages that are coordinated on [Crowdin](https://crwd.in/paperless-ngx). If you want to help out by translating paperless-ngx into your language, please head over to https://crwd.in/paperless-ngx, and thank you!
+
+## Scanners & Software
+
+Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on [the wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations).
+++ /dev/null
-*********
-Paperless
-*********
-
-Paperless is a simple Django application running in two parts:
-a *Consumer* (the thing that does the indexing) and
-the *Web server* (the part that lets you search &
-download already-indexed documents). If you want to learn more about its
-functions keep on reading after the installation section.
-
-
-Why This Exists
-===============
-
-Paper is a nightmare. Environmental issues aside, there's no excuse for it in
-the 21st century. It takes up space, collects dust, doesn't support any form
-of a search feature, indexing is tedious, it's heavy and prone to damage &
-loss.
-
-I wrote this to make "going paperless" easier. I do not have to worry about
-finding stuff again. I feed documents right from the post box into the scanner
-and then shred them. Perhaps you might find it useful too.
-
-
-Paperless-ngx
-=============
-
-Paperless-ngx is a document management system that transforms your physical
-documents into a searchable online archive so you can keep, well, *less paper*.
-
-Paperless-ngx forked from paperless-ng to continue the great work and
-distribute responsibility of supporting and advancing the project among a team
-of people.
-
-NG stands for both Angular (the framework used for the
-Frontend) and next-gen. Publishing this project under a different name also
-avoids confusion between paperless and paperless-ngx.
-
-If you want to learn about what's different in paperless-ngx from Paperless, check out these
-resources in the documentation:
-
-* :ref:`Some screenshots <screenshots>` of the new UI are available.
-* Read :ref:`this section <advanced-automatic_matching>` if you want to
- learn about how paperless automates all tagging using machine learning.
-* Paperless now comes with a :ref:`proper email consumer <usage-email>`
- that's fully tested and production ready.
-* Paperless creates searchable PDF/A documents from whatever you put into
- the consumption directory. This means that you can select text in
- image-only documents coming from your scanner.
-* See :ref:`this note <utilities-encyption>` about GnuPG encryption in
- paperless-ngx.
-* Paperless is now integrated with a
- :ref:`task processing queue <setup-task_processor>` that tells you
- at a glance when and why something is not working.
-* The :doc:`changelog </changelog>` contains a detailed list of all changes
- in paperless-ngx.
-
-Contents
-========
-
-.. toctree::
- :maxdepth: 1
-
- setup
- usage_overview
- advanced_usage
- administration
- configuration
- api
- faq
- troubleshooting
- extending
- scanners
- screenshots
- changelog
+++ /dev/null
-myst-parser==0.18.1
+++ /dev/null
-
-.. _scanners:
-
-*******************
-Scanners & Software
-*******************
-
-Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on `the wiki <https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations>`_.
+++ /dev/null
-.. _screenshots:
-
-***********
-Screenshots
-***********
-
-This is what Paperless-ngx looks like.
-
-The dashboard shows customizable views on your document and allows document uploads:
-
-.. image:: _static/screenshots/dashboard.png
- :target: _static/screenshots/dashboard.png
-
-The document list provides three different styles to scroll through your documents:
-
-.. image:: _static/screenshots/documents-table.png
- :target: _static/screenshots/documents-table.png
-.. image:: _static/screenshots/documents-smallcards.png
- :target: _static/screenshots/documents-smallcards.png
-.. image:: _static/screenshots/documents-largecards.png
- :target: _static/screenshots/documents-largecards.png
-
-Paperless-ngx also supports "dark mode":
-
-.. image:: _static/screenshots/documents-smallcards-dark.png
- :target: _static/screenshots/documents-smallcards-dark.png
-
-Extensive filtering mechanisms:
-
-.. image:: _static/screenshots/documents-filter.png
- :target: _static/screenshots/documents-filter.png
-
-Bulk editing of document tags, correspondents, etc.:
-
-.. image:: _static/screenshots/bulk-edit.png
- :target: _static/screenshots/bulk-edit.png
-
-Side-by-side editing of documents:
-
-.. image:: _static/screenshots/editing.png
- :target: _static/screenshots/editing.png
-
-Tag editing. This looks about the same for correspondents and document types.
-
-.. image:: _static/screenshots/new-tag.png
- :target: _static/screenshots/new-tag.png
-
-Searching provides auto complete and highlights the results.
-
-.. image:: _static/screenshots/search-preview.png
- :target: _static/screenshots/search-preview.png
-.. image:: _static/screenshots/search-results.png
- :target: _static/screenshots/search-results.png
-
-Fancy mail filters!
-
-.. image:: _static/screenshots/mail-rules-edited.png
- :target: _static/screenshots/mail-rules-edited.png
-
-Mobile devices are supported.
-
-.. image:: _static/screenshots/mobile.png
- :target: _static/screenshots/mobile.png
--- /dev/null
+## Installation
+
+You can go multiple routes to setup and run Paperless:
+
+- [Use the easy install docker script](/setup#docker_script)
+- [Pull the image from Docker Hub](/setup#docker_hub)
+- [Build the Docker image yourself](/setup#docker_build)
+- [Install Paperless directly on your system manually (bare metal)](/setup#bare_metal)
+
+The Docker routes are quick & easy. These are the recommended routes.
+This configures all the stuff from the above automatically so that it
+just works and uses sensible defaults for all configuration options.
+Here you find a cheat-sheet for docker beginners: [CLI
+Basics](https://www.sehn.tech/refs/devops-with-docker/)
+
+The bare metal route is complicated to setup but makes it easier should
+you want to contribute some code back. You need to configure and run the
+above mentioned components yourself.
+
+### Docker using the Installation Script {#docker_script}
+
+Paperless provides an interactive installation script. This script will
+ask you for a couple configuration options, download and create the
+necessary configuration files, pull the docker image, start paperless
+and create your user account. This script essentially performs all the
+steps described in [Docker setup](#docker_hub) automatically.
+
+1. Make sure that docker and docker-compose are installed.
+
+2. Download and run the installation script:
+
+ ```shell-session
+ $ bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
+ ```
+
+### From GHCR / Docker Hub {#docker_hub}
+
+1. Login with your user and create a folder in your home-directory to have a place for your
+ configuration files and consumption directory.
+
+ ```shell-session
+ $ mkdir -v ~/paperless-ngx
+ ```
+
+2. Go to the [/docker/compose directory on the project
+ page](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+ and download one of the `docker-compose.*.yml` files,
+ depending on which database backend you want to use. Rename this
+ file to `docker-compose.*.yml`. If you want to enable
+ optional support for Office documents, download a file with
+ `-tika` in the file name. Download the
+ `docker-compose.env` file and the `.env` file as well and store them
+ in the same directory.
+
+ !!! tip
+
+ For new installations, it is recommended to use PostgreSQL as the
+ database backend.
+
+3. Install [Docker](https://www.docker.com/) and
+ [docker-compose](https://docs.docker.com/compose/install/).
+
+ !!! warning
+
+ If you want to use the included `docker-compose.*.yml` file, you
+ need to have at least Docker version **17.09.0** and docker-compose
+ version **1.17.0**. To check do: `docker-compose -v` or
+ `docker -v`
+
+ See the [Docker installation guide](https://docs.docker.com/engine/install/) on how to install the current
+ version of Docker for your operating system or Linux distribution of
+ choice. To get the latest version of docker-compose, follow the
+ [docker-compose installation guide](https://docs.docker.com/compose/install/linux/) if your package repository
+ doesn't include it.
+
+4. Modify `docker-compose.yml` to your preferences. You may want to
+ change the path to the consumption directory. Find the line that
+ specifies where to mount the consumption directory:
+
+ ```yaml
+ - ./consume:/usr/src/paperless/consume
+ ```
+
+ Replace the part BEFORE the colon with a local directory of your
+ choice:
+
+ ```yaml
+ - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume
+ ```
+
+ Don't change the part after the colon or paperless wont find your
+ documents.
+
+ You may also need to change the default port that the webserver will
+ use from the default (8000):
+
+ ```yaml
+ ports:
+ - 8000:8000
+ ```
+
+ Replace the part BEFORE the colon with a port of your choice:
+
+ ```yaml
+ ports:
+ - 8010:8000
+ ```
+
+ Don't change the part after the colon or edit other lines that
+ refer to port 8000. Modifying the part before the colon will map
+ requests on another port to the webserver running on the default
+ port.
+
+ **Rootless**
+
+ If you want to run Paperless as a rootless container, you will need
+ to do the following in your `docker-compose.yml`:
+
+ - set the `user` running the container to map to the `paperless`
+ user in the container. This value (`user_id` below), should be
+ the same id that `USERMAP_UID` and `USERMAP_GID` are set to in
+ the next step. See `USERMAP_UID` and `USERMAP_GID`
+ [here](/configuration#docker).
+
+ Your entry for Paperless should contain something like:
+
+ > ```
+ > webserver:
+ > image: ghcr.io/paperless-ngx/paperless-ngx:latest
+ > user: <user_id>
+ > ```
+
+5. Modify `docker-compose.env`, following the comments in the file. The
+ most important change is to set `USERMAP_UID` and `USERMAP_GID` to
+ the uid and gid of your user on the host system. Use `id -u` and
+ `id -g` to get these.
+
+ This ensures that both the docker container and you on the host
+ machine have write access to the consumption directory. If your UID
+ and GID on the host system is 1000 (the default for the first normal
+ user on most systems), it will work out of the box without any
+ modifications. `id "username"` to check.
+
+ !!! note
+
+ You can copy any setting from the file `paperless.conf.example` and
+ paste it here. Have a look at [configuration](/configuration] to see what's available.
+
+ !!! note
+
+ You can utilize Docker secrets for some configuration settings by
+ appending `_FILE` to some configuration values. This is
+ supported currently only by:
+
+ - PAPERLESS_DBUSER
+ - PAPERLESS_DBPASS
+ - PAPERLESS_SECRET_KEY
+ - PAPERLESS_AUTO_LOGIN_USERNAME
+ - PAPERLESS_ADMIN_USER
+ - PAPERLESS_ADMIN_MAIL
+ - PAPERLESS_ADMIN_PASSWORD
+
+ !!! warning
+
+ Some file systems such as NFS network shares don't support file
+ system notifications with `inotify`. When storing the consumption
+ directory on such a file system, paperless will not pick up new
+ files with the default configuration. You will need to use
+ `PAPERLESS_CONSUMER_POLLING`, which will disable inotify. See
+ [here](/configuration#polling).
+
+6. Run `docker-compose pull`, followed by `docker-compose up -d`. This
+ will pull the image, create and start the necessary containers.
+
+7. To be able to login, you will need a super user. To create it,
+ execute the following command:
+
+ ```shell-session
+ $ docker-compose run --rm webserver createsuperuser
+ ```
+
+ This will prompt you to set a username, an optional e-mail address
+ and finally a password (at least 8 characters).
+
+8. The default `docker-compose.yml` exports the webserver on your local
+ port
+
+ 8000\. If you did not change this, you should now be able to visit
+ your Paperless instance at `http://127.0.0.1:8000` or your servers
+ IP-Address:8000. Use the login credentials you have created with the
+ previous step.
+
+### Build the Docker image yourself {#docker_build}
+
+1. Clone the entire repository of paperless:
+
+ ```shell-session
+ git clone https://github.com/paperless-ngx/paperless-ngx
+ ```
+
+ The master branch always reflects the latest stable version.
+
+2. Copy one of the `docker/compose/docker-compose.*.yml` to
+ `docker-compose.yml` in the root folder, depending on which database
+ backend you want to use. Copy `docker-compose.env` into the project
+ root as well.
+
+3. In the `docker-compose.yml` file, find the line that instructs
+ docker-compose to pull the paperless image from Docker Hub:
+
+ ```yaml
+ webserver:
+ image: ghcr.io/paperless-ngx/paperless-ngx:latest
+ ```
+
+ and replace it with a line that instructs docker-compose to build
+ the image from the current working directory instead:
+
+ ```yaml
+ webserver:
+ build:
+ context: .
+ args:
+ QPDF_VERSION: x.y.x
+ PIKEPDF_VERSION: x.y.z
+ PSYCOPG2_VERSION: x.y.z
+ JBIG2ENC_VERSION: 0.29
+ ```
+
+ !!! note
+
+ You should match the build argument versions to the version for the
+ release you have checked out. These are pre-built images with
+ certain, more updated software. If you want to build these images
+ your self, that is possible, but beyond the scope of these steps.
+
+4. Follow steps 3 to 8 of [Docker Setup](setup#docker_hub)
+ role="ref"}. When asked to run `docker-compose pull` to pull the
+ image, do
+
+ ```shell-session
+ $ docker-compose build
+ ```
+
+ instead to build the image.
+
+### Bare Metal Route {#bare_metal}
+
+Paperless runs on linux only. The following procedure has been tested on
+a minimal installation of Debian/Buster, which is the current stable
+release at the time of writing. Windows is not and will never be
+supported.
+
+1. Install dependencies. Paperless requires the following packages.
+
+ - `python3` 3.8, 3.9
+ - `python3-pip`
+ - `python3-dev`
+ - `default-libmysqlclient-dev` for MariaDB
+ - `fonts-liberation` for generating thumbnails for plain text
+ files
+ - `imagemagick` >= 6 for PDF conversion
+ - `gnupg` for handling encrypted documents
+ - `libpq-dev` for PostgreSQL
+ - `libmagic-dev` for mime type detection
+ - `mariadb-client` for MariaDB compile time
+ - `mime-support` for mime type detection
+ - `libzbar0` for barcode detection
+ - `poppler-utils` for barcode detection
+
+ Use this list for your preferred package management:
+
+ ```
+ python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev libmagic-dev mime-support libzbar0 poppler-utils
+ ```
+
+ These dependencies are required for OCRmyPDF, which is used for text
+ recognition.
+
+ - `unpaper`
+ - `ghostscript`
+ - `icc-profiles-free`
+ - `qpdf`
+ - `liblept5`
+ - `libxml2`
+ - `pngquant` (suggested for certain PDF image optimizations)
+ - `zlib1g`
+ - `tesseract-ocr` >= 4.0.0 for OCR
+ - `tesseract-ocr` language packs (`tesseract-ocr-eng`,
+ `tesseract-ocr-deu`, etc)
+
+ Use this list for your preferred package management:
+
+ ```
+ unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr
+ ```
+
+ On Raspberry Pi, these libraries are required as well:
+
+ - `libatlas-base-dev`
+ - `libxslt1-dev`
+
+ You will also need `build-essential`, `python3-setuptools` and
+ `python3-wheel` for installing some of the python dependencies.
+
+2. Install `redis` >= 6.0 and configure it to start automatically.
+
+3. Optional. Install `postgresql` and configure a database, user and
+ password for paperless. If you do not wish to use PostgreSQL,
+ MariaDB and SQLite are available as well.
+
+ !!! note
+
+ On bare-metal installations using SQLite, ensure the [JSON1
+ extension](https://code.djangoproject.com/wiki/JSON1Extension) is
+ enabled. This is usually the case, but not always.
+
+4. Get the release archive from
+ <https://github.com/paperless-ngx/paperless-ngx/releases>. If you
+ clone the git repo as it is, you also have to compile the front end
+ by yourself. Extract the archive to a place from where you wish to
+ execute it, such as `/opt/paperless`.
+
+5. Configure paperless. See [configuration](configuration) for details.
+ Edit the included `paperless.conf` and adjust the settings to your
+ needs. Required settings for getting
+ paperless running are:
+
+ - `PAPERLESS_REDIS` should point to your redis server, such as
+ <redis://localhost:6379>.
+ - `PAPERLESS_DBENGINE` optional, and should be one of [postgres,
+ mariadb, or sqlite]{.title-ref}
+ - `PAPERLESS_DBHOST` should be the hostname on which your
+ PostgreSQL server is running. Do not configure this to use
+ SQLite instead. Also configure port, database name, user and
+ password as necessary.
+ - `PAPERLESS_CONSUMPTION_DIR` should point to a folder which
+ paperless should watch for documents. You might want to have
+ this somewhere else. Likewise, `PAPERLESS_DATA_DIR` and
+ `PAPERLESS_MEDIA_ROOT` define where paperless stores its data.
+ If you like, you can point both to the same directory.
+ - `PAPERLESS_SECRET_KEY` should be a random sequence of
+ characters. It's used for authentication. Failure to do so
+ allows third parties to forge authentication credentials.
+ - `PAPERLESS_URL` if you are behind a reverse proxy. This should
+ point to your domain. Please see
+ [configuration](configuration) for more
+ information.
+
+ Many more adjustments can be made to paperless, especially the OCR
+ part. The following options are recommended for everyone:
+
+ - Set `PAPERLESS_OCR_LANGUAGE` to the language most of your
+ documents are written in.
+ - Set `PAPERLESS_TIME_ZONE` to your local time zone.
+
+6. Create a system user under which you wish to run paperless.
+
+ ```shell-session
+ adduser paperless --system --home /opt/paperless --group
+ ```
+
+7. Ensure that these directories exist and that the paperless user has
+ write permissions to the following directories:
+
+ - `/opt/paperless/media`
+ - `/opt/paperless/data`
+ - `/opt/paperless/consume`
+
+ Adjust as necessary if you configured different folders.
+
+8. Install python requirements from the `requirements.txt` file. It is
+ up to you if you wish to use a virtual environment or not. First you
+ should update your pip, so it gets the actual packages.
+
+ ```shell-session
+ sudo -Hu paperless pip3 install --upgrade pip
+ ```
+
+ ```shell-session
+ sudo -Hu paperless pip3 install -r requirements.txt
+ ```
+
+ This will install all python dependencies in the home directory of
+ the new paperless user.
+
+9. Go to `/opt/paperless/src`, and execute the following commands:
+
+ ```bash
+ \# This creates the database schema.
+ sudo -Hu paperless python3 manage.py migrate
+
+ \# This creates your first paperless user
+ sudo -Hu paperless python3 manage.py createsuperuser
+ ```
+
+10. Optional: Test that paperless is working by executing
+
+ ```bash
+ \# This collects static files from paperless and django.
+ sudo -Hu paperless python3 manage.py runserver
+ ```
+
+ and pointing your browser to <http://localhost:8000/>.
+
+ !!! warning
+
+ This is a development server which should not be used in production.
+ It is not audited for security and performance is inferior to
+ production ready web servers.
+
+ !!! tip
+
+ This will not start the consumer. Paperless does this in a separate
+ process.
+
+11. Setup systemd services to run paperless automatically. You may use
+ the service definition files included in the `scripts` folder as a
+ starting point.
+
+ Paperless needs the `webserver` script to run the webserver, the
+ `consumer` script to watch the input folder, `taskqueue` for the
+ background workers used to handle things like document consumption
+ and the `scheduler` script to run tasks such as email checking at
+ certain times .
+
+ !!! note
+
+ The `socket` script enables `gunicorn` to run on port 80 without
+ root privileges. For this you need to uncomment the
+ `Require=paperless-webserver.socket` in the `webserver` script
+ and configure `gunicorn` to listen on port 80 (see
+ `paperless/gunicorn.conf.py`).
+
+ You may need to adjust the path to the `gunicorn` executable. This
+ will be installed as part of the python dependencies, and is either
+ located in the `bin` folder of your virtual environment, or in
+ `~/.local/bin/` if no virtual environment is used.
+
+ These services rely on redis and optionally the database server, but
+ don't need to be started in any particular order. The example files
+ depend on redis being started. If you use a database server, you
+ should add additional dependencies.
+
+ !!! warning
+
+ The included scripts run a `gunicorn` standalone server, which is
+ fine for running paperless. It does support SSL, however, the
+ documentation of GUnicorn states that you should use a proxy server
+ in front of gunicorn instead.
+
+ For instructions on how to use nginx for that,
+ [see the instructions below](/setup#nginx).
+
+12. Optional: Install a samba server and make the consumption folder
+ available as a network share.
+
+13. Configure ImageMagick to allow processing of PDF documents. Most
+ distributions have this disabled by default, since PDF documents can
+ contain malware. If you don't do this, paperless will fall back to
+ ghostscript for certain steps such as thumbnail generation.
+
+ Edit `/etc/ImageMagick-6/policy.xml` and adjust
+
+ ```
+ <policy domain="coder" rights="none" pattern="PDF" />
+ ```
+
+ to
+
+ ```
+ <policy domain="coder" rights="read|write" pattern="PDF" />
+ ```
+
+14. Optional: Install the
+ [jbig2enc](https://ocrmypdf.readthedocs.io/en/latest/jbig2.html)
+ encoder. This will reduce the size of generated PDF documents.
+ You'll most likely need to compile this by yourself, because this
+ software has been patented until around 2017 and binary packages are
+ not available for most distributions.
+
+15. Optional: If using the NLTK machine learning processing (see
+ `PAPERLESS_ENABLE_NLTK` in [configuration](configuration#software_tweaks) for details),
+ download the NLTK data for the Snowball
+ Stemmer, Stopwords and Punkt tokenizer to your
+ `PAPERLESS_DATA_DIR/nltk`. Refer to the [NLTK
+ instructions](https://www.nltk.org/data.html) for details on how to
+ download the data.
+
+# Migrating to Paperless-ngx
+
+Migration is possible both from Paperless-ng or directly from the
+'original' Paperless.
+
+## Migrating from Paperless-ng
+
+Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and
+thus upgrading should be trivial for most users, especially when using
+docker. However, as with any major change, it is recommended to take a
+full backup first. Once you are ready, simply change the docker image to
+point to the new source. E.g. if using Docker Compose, edit
+`docker-compose.yml` and change:
+
+```
+image: jonaswinkler/paperless-ng:latest
+```
+
+to
+
+```
+image: ghcr.io/paperless-ngx/paperless-ngx:latest
+```
+
+and then run `docker-compose up -d` which will pull the new image
+recreate the container. That's it!
+
+Users who installed with the bare-metal route should also update their
+Git clone to point to `https://github.com/paperless-ngx/paperless-ngx`,
+e.g. using the command
+`git remote set-url origin https://github.com/paperless-ngx/paperless-ngx`
+and then pull the lastest version.
+
+## Migrating from Paperless
+
+At its core, paperless-ngx is still paperless and fully compatible.
+However, some things have changed under the hood, so you need to adapt
+your setup depending on how you installed paperless.
+
+This setup describes how to update an existing paperless Docker
+installation. The important things to keep in mind are as follows:
+
+- Read the [changelog](/changelog) and
+ take note of breaking changes.
+- You should decide if you want to stick with SQLite or want to
+ migrate your database to PostgreSQL. See [documentation](#sqlite_to_psql)
+ for details on
+ how to move your data from SQLite to PostgreSQL. Both work fine with
+ paperless. However, if you already have a database server running
+ for other services, you might as well use it for paperless as well.
+- The task scheduler of paperless, which is used to execute periodic
+ tasks such as email checking and maintenance, requires a
+ [redis](https://redis.io/) message broker instance. The
+ docker-compose route takes care of that.
+- The layout of the folder structure for your documents and data
+ remains the same, so you can just plug your old docker volumes into
+ paperless-ngx and expect it to find everything where it should be.
+
+Migration to paperless-ngx is then performed in a few simple steps:
+
+1. Stop paperless.
+
+ ```bash
+ $ cd /path/to/current/paperless
+ $ docker-compose down
+ ```
+
+2. Do a backup for two purposes: If something goes wrong, you still
+ have your data. Second, if you don't like paperless-ngx, you can
+ switch back to paperless.
+
+3. Download the latest release of paperless-ngx. You can either go with
+ the docker-compose files from
+ [here](https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose)
+ or clone the repository to build the image yourself (see
+ [above](/setup#docker_build)). You can
+ either replace your current paperless folder or put paperless-ngx in
+ a different location.
+
+ !!! warning
+
+ Paperless-ngx includes a `.env` file. This will set the project name
+ for docker compose to `paperless`, which will also define the name
+ of the volumes by paperless-ngx. However, if you experience that
+ paperless-ngx is not using your old paperless volumes, verify the
+ names of your volumes with
+
+ ``` shell-session
+ $ docker volume ls | grep _data
+ ```
+
+ and adjust the project name in the `.env` file so that it matches
+ the name of the volumes before the `_data` part.
+
+4. Download the `docker-compose.sqlite.yml` file to
+ `docker-compose.yml`. If you want to switch to PostgreSQL, do that
+ after you migrated your existing SQLite database.
+
+5. Adjust `docker-compose.yml` and `docker-compose.env` to your needs.
+ See [Docker setup](setup#docker_hub) details on
+ which edits are advised.
+
+6. [Update paperless.](/administration#updating)
+
+7. In order to find your existing documents with the new search
+ feature, you need to invoke a one-time operation that will create
+ the search index:
+
+ ```shell-session
+ $ docker-compose run --rm webserver document_index reindex
+ ```
+
+ This will migrate your database and create the search index. After
+ that, paperless will take care of maintaining the index by itself.
+
+8. Start paperless-ngx.
+
+ ```bash
+ $ docker-compose up -d
+ ```
+
+ This will run paperless in the background and automatically start it
+ on system boot.
+
+9. Paperless installed a permanent redirect to `admin/` in your
+ browser. This redirect is still in place and prevents access to the
+ new UI. Clear your browsing cache in order to fix this.
+
+10. Optionally, follow the instructions below to migrate your existing
+ data to PostgreSQL.
+
+## Migrating from LinuxServer.io Docker Image
+
+As with any upgrades and large changes, it is highly recommended to
+create a backup before starting. This assumes the image was running
+using Docker Compose, but the instructions are translatable to Docker
+commands as well.
+
+1. Stop and remove the paperless container
+2. If using an external database, stop the container
+3. Update Redis configuration
+ a) If `REDIS_URL` is already set, change it to `PAPERLESS_REDIS`
+ and continue to step 4.
+ b) Otherwise, in the `docker-compose.yml` add a new service for
+ Redis, following [the example compose
+ files](https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose)
+ c) Set the environment variable `PAPERLESS_REDIS` so it points to
+ the new Redis container
+4. Update user mapping
+ a) If set, change the environment variable `PUID` to `USERMAP_UID`
+ b) If set, change the environment variable `PGID` to `USERMAP_GID`
+5. Update configuration paths
+ a) Set the environment variable `PAPERLESS_DATA_DIR` to `/config`
+6. Update media paths
+ a) Set the environment variable `PAPERLESS_MEDIA_ROOT` to
+ `/data/media`
+7. Update timezone
+ a) Set the environment variable `PAPERLESS_TIME_ZONE` to the same
+ value as `TZ`
+8. Modify the `image:` to point to
+ `ghcr.io/paperless-ngx/paperless-ngx:latest` or a specific version
+ if preferred.
+9. Start the containers as before, using `docker-compose`.
+
+## Moving data from SQLite to PostgreSQL or MySQL/MariaDB {#sqlite_to_psql}
+
+Moving your data from SQLite to PostgreSQL or MySQL/MariaDB is done via
+executing a series of django management commands as below. The commands
+below use PostgreSQL, but are applicable to MySQL/MariaDB with the
+
+!!! warning
+
+ Make sure that your SQLite database is migrated to the latest version.
+ Starting paperless will make sure that this is the case. If your try to
+ load data from an old database schema in SQLite into a newer database
+ schema in PostgreSQL, you will run into trouble.
+
+!!! warning
+
+ On some database fields, PostgreSQL enforces predefined limits on
+ maximum length, whereas SQLite does not. The fields in question are the
+ title of documents (128 characters), names of document types, tags and
+ correspondents (128 characters), and filenames (1024 characters). If you
+ have data in these fields that surpasses these limits, migration to
+ PostgreSQL is not possible and will fail with an error.
+
+!!! warning
+
+ MySQL is case insensitive by default, treating values like "Name" and
+ "NAME" as identical. See [MySQL caveats](advanced##mysql-caveats) for details.
+
+!!! warning
+
+ MySQL also enforces limits on maximum lengths, but does so differently than
+ PostgreSQL. It may not be possible to migrate to MySQL due to this.
+
+1. Stop paperless, if it is running.
+
+2. Tell paperless to use PostgreSQL:
+
+ a) With docker, copy the provided `docker-compose.postgres.yml`
+ file to `docker-compose.yml`. Remember to adjust the consumption
+ directory, if necessary.
+ b) Without docker, configure the database in your `paperless.conf`
+ file. See [configuration](configuration) for
+ details.
+
+3. Open a shell and initialize the database:
+
+ a) With docker, run the following command to open a shell within
+ the paperless container:
+
+ ``` shell-session
+ $ cd /path/to/paperless
+ $ docker-compose run --rm webserver /bin/bash
+ ```
+
+ This will launch the container and initialize the PostgreSQL
+ database.
+
+ b) Without docker, remember to activate any virtual environment,
+ switch to the `src` directory and create the database schema:
+
+ ``` shell-session
+ $ cd /path/to/paperless/src
+ $ python3 manage.py migrate
+ ```
+
+ This will not copy any data yet.
+
+4. Dump your data from SQLite:
+
+ ```shell-session
+ $ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
+ ```
+
+5. Load your data into PostgreSQL:
+
+ ```shell-session
+ $ python3 manage.py loaddata data.json
+ ```
+
+6. If operating inside Docker, you may exit the shell now.
+
+ ```shell-session
+ $ exit
+ ```
+
+7. Start paperless.
+
+## Moving back to Paperless
+
+Lets say you migrated to Paperless-ngx and used it for a while, but
+decided that you don't like it and want to move back (If you do, send
+me a mail about what part you didn't like!), you can totally do that
+with a few simple steps.
+
+Paperless-ngx modified the database schema slightly, however, these
+changes can be reverted while keeping your current data, so that your
+current data will be compatible with original Paperless.
+
+Execute this:
+
+```shell-session
+$ cd /path/to/paperless
+$ docker-compose run --rm webserver migrate documents 0023
+```
+
+Or without docker:
+
+```shell-session
+$ cd /path/to/paperless/src
+$ python3 manage.py migrate documents 0023
+```
+
+After that, you need to clear your cookies (Paperless-ngx comes with
+updated dependencies that do cookie-processing differently) and probably
+your cache as well.
+
+# Considerations for less powerful devices {#less_powerful_devices}
+
+Paperless runs on Raspberry Pi. However, some things are rather slow on
+the Pi and configuring some options in paperless can help improve
+performance immensely:
+
+- Stick with SQLite to save some resources.
+- Consider setting `PAPERLESS_OCR_PAGES` to 1, so that paperless will
+ only OCR the first page of your documents. In most cases, this page
+ contains enough information to be able to find it.
+- `PAPERLESS_TASK_WORKERS` and `PAPERLESS_THREADS_PER_WORKER` are
+ configured to use all cores. The Raspberry Pi models 3 and up have 4
+ cores, meaning that paperless will use 2 workers and 2 threads per
+ worker. This may result in sluggish response times during
+ consumption, so you might want to lower these settings (example: 2
+ workers and 1 thread to always have some computing power left for
+ other tasks).
+- Keep `PAPERLESS_OCR_MODE` at its default value `skip` and consider
+ OCR'ing your documents before feeding them into paperless. Some
+ scanners are able to do this! You might want to even specify
+ `skip_noarchive` to skip archive file generation for already ocr'ed
+ documents entirely.
+- If you want to perform OCR on the device, consider using
+ `PAPERLESS_OCR_CLEAN=none`. This will speed up OCR times and use
+ less memory at the expense of slightly worse OCR results.
+- If using docker, consider setting `PAPERLESS_WEBSERVER_WORKERS` to
+ 1. This will save some memory.
+- Consider setting `PAPERLESS_ENABLE_NLTK` to false, to disable the
+ more advanced language processing, which can take more memory and
+ processing time.
+
+For details, refer to [configuration](configuration).
+
+!!! note
+
+ Updating the
+ [automatic matching algorithm](/advanced_usage#automatic_matching) takes quite a bit of time. However, the update mechanism
+ checks if your data has changed before doing the heavy lifting. If you
+ experience the algorithm taking too much cpu time, consider changing the
+ schedule in the admin interface to daily. You can also manually invoke
+ the task by changing the date and time of the next run to today/now.
+
+ The actual matching of the algorithm is fast and works on Raspberry Pi
+ as well as on any other device.
+
+# Using nginx as a reverse proxy {#nginx}
+
+If you want to expose paperless to the internet, you should hide it
+behind a reverse proxy with SSL enabled.
+
+In addition to the usual configuration for SSL, the following
+configuration is required for paperless to operate:
+
+```nginx
+http {
+
+ # Adjust as required. This is the maximum size for file uploads.
+ # The default value 1M might be a little too small.
+ client_max_body_size 10M;
+
+ server {
+
+ location / {
+
+ # Adjust host and port as required.
+ proxy_pass http://localhost:8000/;
+
+ # These configuration options are required for WebSockets to work.
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ proxy_redirect off;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Host $server_name;
+ }
+ }
+}
+```
+
+The `PAPERLESS_URL` configuration variable is also required when using a
+reverse proxy. Please refer to the [hosting and security](configuration#hosting-and-security) docs.
+
+Also read
+[this](https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu),
+towards the end of the section.
+++ /dev/null
-
-*****
-Setup
-*****
-
-Overview of Paperless-ngx
-#########################
-
-Compared to paperless, paperless-ngx works a little different under the hood and has
-more moving parts that work together. While this increases the complexity of
-the system, it also brings many benefits.
-
-Paperless consists of the following components:
-
-* **The webserver:** This is pretty much the same as in paperless. It serves
- the administration pages, the API, and the new frontend. This is the main
- tool you'll be using to interact with paperless. You may start the webserver
- with
-
- .. code:: shell-session
-
- $ cd /path/to/paperless/src/
- $ gunicorn -c ../gunicorn.conf.py paperless.wsgi
-
- or by any other means such as Apache ``mod_wsgi``.
-
-* **The consumer:** This is what watches your consumption folder for documents.
- However, the consumer itself does not really consume your documents.
- Now it notifies a task processor that a new file is ready for consumption.
- I suppose it should be named differently.
- This was also used to check your emails, but that's now done elsewhere as well.
-
- Start the consumer with the management command ``document_consumer``:
-
- .. code:: shell-session
-
- $ cd /path/to/paperless/src/
- $ python3 manage.py document_consumer
-
- .. _setup-task_processor:
-
-* **The task processor:** Paperless relies on `Celery - Distributed Task Queue <https://docs.celeryq.dev/en/stable/index.html>`_
- for doing most of the heavy lifting. This is a task queue that accepts tasks from
- multiple sources and processes these in parallel. It also comes with a scheduler that executes
- certain commands periodically.
-
- This task processor is responsible for:
-
- * Consuming documents. When the consumer finds new documents, it notifies the task processor to
- start a consumption task.
- * The task processor also performs the consumption of any documents you upload through
- the web interface.
- * Consuming emails. It periodically checks your configured accounts for new emails and
- notifies the task processor to consume the attachment of an email.
- * Maintaining the search index and the automatic matching algorithm. These are things that paperless
- needs to do from time to time in order to operate properly.
-
- This allows paperless to process multiple documents from your consumption folder in parallel! On
- a modern multi core system, this makes the consumption process with full OCR blazingly fast.
-
- The task processor comes with a built-in admin interface that you can use to check whenever any of the
- tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific
- file, etc).
-
-* A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible
- for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different
- process (maybe even on different machines!), and therefore, this is necessary.
-
-* Optional: A database server. Paperless supports PostgreSQL, MariaDB and SQLite for storing its data.
-
-
-Installation
-############
-
-You can go multiple routes to setup and run Paperless:
-
-* :ref:`Use the easy install docker script <setup-docker_script>`
-* :ref:`Pull the image from Docker Hub <setup-docker_hub>`
-* :ref:`Build the Docker image yourself <setup-docker_build>`
-* :ref:`Install Paperless directly on your system manually (bare metal) <setup-bare_metal>`
-
-The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff
-from the above automatically so that it just works and uses sensible defaults for all configuration options.
-Here you find a cheat-sheet for docker beginners: `CLI Basics <https://www.sehn.tech/refs/devops-with-docker/>`_
-
-The bare metal route is complicated to setup but makes it easier
-should you want to contribute some code back. You need to configure and
-run the above mentioned components yourself.
-
-.. _CLI Basics: https://www.sehn.tech/refs/devops-with-docker/
-
-.. _setup-docker_script:
-
-Install Paperless from Docker Hub using the installation script
-===============================================================
-
-Paperless provides an interactive installation script. This script will ask you
-for a couple configuration options, download and create the necessary configuration files, pull the docker image, start paperless and create your user account. This script essentially
-performs all the steps described in :ref:`setup-docker_hub` automatically.
-
-1. Make sure that docker and docker-compose are installed.
-2. Download and run the installation script:
-
- .. code:: shell-session
-
- $ bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
-
-.. _setup-docker_hub:
-
-Install Paperless from Docker Hub
-=================================
-
-1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ngx` to have a place for your configuration files and consumption directory.
-
-2. Go to the `/docker/compose directory on the project page <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`_
- and download one of the `docker-compose.*.yml` files, depending on which database backend you
- want to use. Rename this file to `docker-compose.yml`.
- If you want to enable optional support for Office documents, download a file with `-tika` in the file name.
- Download the ``docker-compose.env`` file and the ``.env`` file as well and store them
- in the same directory.
-
- .. hint::
-
- For new installations, it is recommended to use PostgreSQL as the database
- backend.
-
-3. Install `Docker`_ and `docker-compose`_.
-
- .. caution::
-
- If you want to use the included ``docker-compose.*.yml`` file, you
- need to have at least Docker version **17.09.0** and docker-compose
- version **1.17.0**.
- To check do: `docker-compose -v` or `docker -v`
-
- See the `Docker installation guide`_ on how to install the current
- version of Docker for your operating system or Linux distribution of
- choice. To get the latest version of docker-compose, follow the
- `docker-compose installation guide`_ if your package repository doesn't
- include it.
-
- .. _Docker installation guide: https://docs.docker.com/engine/installation/
- .. _docker-compose installation guide: https://docs.docker.com/compose/install/
-
-4. Modify ``docker-compose.yml`` to your preferences. You may want to change the path
- to the consumption directory. Find the line that specifies where
- to mount the consumption directory:
-
- .. code::
-
- - ./consume:/usr/src/paperless/consume
-
- Replace the part BEFORE the colon with a local directory of your choice:
-
- .. code::
-
- - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume
-
- Don't change the part after the colon or paperless wont find your documents.
-
- You may also need to change the default port that the webserver will use
- from the default (8000):
-
- .. code::
-
- ports:
- - 8000:8000
-
- Replace the part BEFORE the colon with a port of your choice:
-
- .. code::
-
- ports:
- - 8010:8000
-
- Don't change the part after the colon or edit other lines that refer to
- port 8000. Modifying the part before the colon will map requests on another
- port to the webserver running on the default port.
-
- **Rootless**
-
- If you want to run Paperless as a rootless container, you will need to do the
- following in your ``docker-compose.yml``:
-
- - set the ``user`` running the container to map to the ``paperless`` user in the
- container.
- This value (``user_id`` below), should be the same id that ``USERMAP_UID`` and
- ``USERMAP_GID`` are set to in the next step.
- See ``USERMAP_UID`` and ``USERMAP_GID`` :ref:`here <configuration-docker>`.
-
- Your entry for Paperless should contain something like:
-
- .. code::
-
- webserver:
- image: ghcr.io/paperless-ngx/paperless-ngx:latest
- user: <user_id>
-
-5. Modify ``docker-compose.env``, following the comments in the file. The
- most important change is to set ``USERMAP_UID`` and ``USERMAP_GID``
- to the uid and gid of your user on the host system. Use ``id -u`` and
- ``id -g`` to get these.
-
- This ensures that
- both the docker container and you on the host machine have write access
- to the consumption directory. If your UID and GID on the host system is
- 1000 (the default for the first normal user on most systems), it will
- work out of the box without any modifications. `id "username"` to check.
-
- .. note::
-
- You can copy any setting from the file ``paperless.conf.example`` and paste it here.
- Have a look at :ref:`configuration` to see what's available.
-
- .. note::
-
- You can utilize Docker secrets for some configuration settings by
- appending `_FILE` to some configuration values. This is supported currently
- only by:
-
- * PAPERLESS_DBUSER
- * PAPERLESS_DBPASS
- * PAPERLESS_SECRET_KEY
- * PAPERLESS_AUTO_LOGIN_USERNAME
- * PAPERLESS_ADMIN_USER
- * PAPERLESS_ADMIN_MAIL
- * PAPERLESS_ADMIN_PASSWORD
-
- .. caution::
-
- Some file systems such as NFS network shares don't support file system
- notifications with ``inotify``. When storing the consumption directory
- on such a file system, paperless will not pick up new files
- with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``,
- which will disable inotify. See :ref:`here <configuration-polling>`.
-
-6. Run ``docker-compose pull``, followed by ``docker-compose up -d``.
- This will pull the image, create and start the necessary containers.
-
-7. To be able to login, you will need a super user. To create it, execute the
- following command:
-
- .. code-block:: shell-session
-
- $ docker-compose run --rm webserver createsuperuser
-
- This will prompt you to set a username, an optional e-mail address and
- finally a password (at least 8 characters).
-
-8. The default ``docker-compose.yml`` exports the webserver on your local port
- 8000. If you did not change this, you should now be able to visit your
- Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000.
- Use the login credentials you have created with the previous step.
-
-.. _Docker: https://www.docker.com/
-.. _docker-compose: https://docs.docker.com/compose/install/
-
-.. _setup-docker_build:
-
-Build the Docker image yourself
-===============================
-
-1. Clone the entire repository of paperless:
-
- .. code:: shell-session
-
- git clone https://github.com/paperless-ngx/paperless-ngx
-
- The master branch always reflects the latest stable version.
-
-2. Copy one of the ``docker/compose/docker-compose.*.yml`` to ``docker-compose.yml`` in the root folder,
- depending on which database backend you want to use. Copy
- ``docker-compose.env`` into the project root as well.
-
-3. In the ``docker-compose.yml`` file, find the line that instructs docker-compose to pull the paperless image from Docker Hub:
-
- .. code:: yaml
-
- webserver:
- image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
- and replace it with a line that instructs docker-compose to build the image from the current working directory instead:
-
- .. code:: yaml
-
- webserver:
- build:
- context: .
- args:
- QPDF_VERSION: x.y.x
- PIKEPDF_VERSION: x.y.z
- PSYCOPG2_VERSION: x.y.z
- JBIG2ENC_VERSION: 0.29
-
- .. note::
-
- You should match the build argument versions to the version for the release you have
- checked out. These are pre-built images with certain, more updated software.
- If you want to build these images your self, that is possible, but beyond
- the scope of these steps.
-
-4. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
- ``docker-compose pull`` to pull the image, do
-
- .. code:: shell-session
-
- $ docker-compose build
-
- instead to build the image.
-
-.. _setup-bare_metal:
-
-Bare Metal Route
-================
-
-Paperless runs on linux only. The following procedure has been tested on a minimal
-installation of Debian/Buster, which is the current stable release at the time of
-writing. Windows is not and will never be supported.
-
-1. Install dependencies. Paperless requires the following packages.
-
- * ``python3`` 3.8, 3.9
- * ``python3-pip``
- * ``python3-dev``
-
- * ``default-libmysqlclient-dev`` for MariaDB
- * ``fonts-liberation`` for generating thumbnails for plain text files
- * ``imagemagick`` >= 6 for PDF conversion
- * ``gnupg`` for handling encrypted documents
- * ``libpq-dev`` for PostgreSQL
- * ``libmagic-dev`` for mime type detection
- * ``mariadb-client`` for MariaDB compile time
- * ``mime-support`` for mime type detection
- * ``libzbar0`` for barcode detection
- * ``poppler-utils`` for barcode detection
-
- Use this list for your preferred package management:
-
- .. code::
-
- python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev libmagic-dev mime-support libzbar0 poppler-utils
-
- These dependencies are required for OCRmyPDF, which is used for text recognition.
-
- * ``unpaper``
- * ``ghostscript``
- * ``icc-profiles-free``
- * ``qpdf``
- * ``liblept5``
- * ``libxml2``
- * ``pngquant`` (suggested for certain PDF image optimizations)
- * ``zlib1g``
- * ``tesseract-ocr`` >= 4.0.0 for OCR
- * ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc)
-
- Use this list for your preferred package management:
-
- .. code::
-
- unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr
-
- On Raspberry Pi, these libraries are required as well:
-
- * ``libatlas-base-dev``
- * ``libxslt1-dev``
-
- You will also need ``build-essential``, ``python3-setuptools`` and ``python3-wheel``
- for installing some of the python dependencies.
-
-2. Install ``redis`` >= 6.0 and configure it to start automatically.
-
-3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish
- to use PostgreSQL, MariaDB and SQLite are available as well.
-
- .. note::
-
- On bare-metal installations using SQLite, ensure the
- `JSON1 extension <https://code.djangoproject.com/wiki/JSON1Extension>`_ is enabled. This is
- usually the case, but not always.
-
-4. Get the release archive from `<https://github.com/paperless-ngx/paperless-ngx/releases>`_.
- If you clone the git repo as it is, you also have to compile the front end by yourself.
- Extract the archive to a place from where you wish to execute it, such as ``/opt/paperless``.
-
-5. Configure paperless. See :ref:`configuration` for details. Edit the included ``paperless.conf`` and adjust the
- settings to your needs. Required settings for getting paperless running are:
-
- * ``PAPERLESS_REDIS`` should point to your redis server, such as redis://localhost:6379.
- * ``PAPERLESS_DBENGINE`` optional, and should be one of `postgres, mariadb, or sqlite`
- * ``PAPERLESS_DBHOST`` should be the hostname on which your PostgreSQL server is running. Do not configure this
- to use SQLite instead. Also configure port, database name, user and password as necessary.
- * ``PAPERLESS_CONSUMPTION_DIR`` should point to a folder which paperless should watch for documents. You might
- want to have this somewhere else. Likewise, ``PAPERLESS_DATA_DIR`` and ``PAPERLESS_MEDIA_ROOT`` define where
- paperless stores its data. If you like, you can point both to the same directory.
- * ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure
- to do so allows third parties to forge authentication credentials.
- * ``PAPERLESS_URL`` if you are behind a reverse proxy. This should point to your domain. Please see
- :ref:`configuration` for more information.
-
- Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended
- for everyone:
-
- * Set ``PAPERLESS_OCR_LANGUAGE`` to the language most of your documents are written in.
- * Set ``PAPERLESS_TIME_ZONE`` to your local time zone.
-
-6. Create a system user under which you wish to run paperless.
-
- .. code:: shell-session
-
- adduser paperless --system --home /opt/paperless --group
-
-7. Ensure that these directories exist
- and that the paperless user has write permissions to the following directories:
-
- * ``/opt/paperless/media``
- * ``/opt/paperless/data``
- * ``/opt/paperless/consume``
-
- Adjust as necessary if you configured different folders.
-
-8. Install python requirements from the ``requirements.txt`` file.
- It is up to you if you wish to use a virtual environment or not. First you should update your pip, so it gets the actual packages.
-
- .. code:: shell-session
-
- sudo -Hu paperless pip3 install --upgrade pip
-
- .. code:: shell-session
-
- sudo -Hu paperless pip3 install -r requirements.txt
-
- This will install all python dependencies in the home directory of
- the new paperless user.
-
-9. Go to ``/opt/paperless/src``, and execute the following commands:
-
- .. code:: bash
-
- # This creates the database schema.
- sudo -Hu paperless python3 manage.py migrate
-
- # This creates your first paperless user
- sudo -Hu paperless python3 manage.py createsuperuser
-
-10. Optional: Test that paperless is working by executing
-
- .. code:: bash
-
- # This collects static files from paperless and django.
- sudo -Hu paperless python3 manage.py runserver
-
- and pointing your browser to http://localhost:8000/.
-
- .. warning::
-
- This is a development server which should not be used in
- production. It is not audited for security and performance
- is inferior to production ready web servers.
-
- .. hint::
-
- This will not start the consumer. Paperless does this in a
- separate process.
-
-11. Setup systemd services to run paperless automatically. You may
- use the service definition files included in the ``scripts`` folder
- as a starting point.
-
- Paperless needs the ``webserver`` script to run the webserver, the
- ``consumer`` script to watch the input folder, ``taskqueue`` for the background workers
- used to handle things like document consumption and the ``scheduler`` script to run tasks such as
- email checking at certain times .
-
- The ``socket`` script enables ``gunicorn`` to run on port 80 without
- root privileges. For this you need to uncomment the ``Require=paperless-webserver.socket``
- in the ``webserver`` script and configure ``gunicorn`` to listen on port 80 (see ``paperless/gunicorn.conf.py``).
-
- You may need to adjust the path to the ``gunicorn`` executable. This
- will be installed as part of the python dependencies, and is either located
- in the ``bin`` folder of your virtual environment, or in ``~/.local/bin/`` if
- no virtual environment is used.
-
- These services rely on redis and optionally the database server, but
- don't need to be started in any particular order. The example files
- depend on redis being started. If you use a database server, you should
- add additional dependencies.
-
- .. caution::
-
- The included scripts run a ``gunicorn`` standalone server,
- which is fine for running paperless. It does support SSL,
- however, the documentation of GUnicorn states that you should
- use a proxy server in front of gunicorn instead.
-
- For instructions on how to use nginx for that,
- :ref:`see the instructions below <setup-nginx>`.
-
-12. Optional: Install a samba server and make the consumption folder
- available as a network share.
-
-13. Configure ImageMagick to allow processing of PDF documents. Most distributions have
- this disabled by default, since PDF documents can contain malware. If
- you don't do this, paperless will fall back to ghostscript for certain steps
- such as thumbnail generation.
-
- Edit ``/etc/ImageMagick-6/policy.xml`` and adjust
-
- .. code::
-
- <policy domain="coder" rights="none" pattern="PDF" />
-
- to
-
- .. code::
-
- <policy domain="coder" rights="read|write" pattern="PDF" />
-
-14. Optional: Install the `jbig2enc <https://ocrmypdf.readthedocs.io/en/latest/jbig2.html>`_
- encoder. This will reduce the size of generated PDF documents. You'll most likely need
- to compile this by yourself, because this software has been patented until around 2017 and
- binary packages are not available for most distributions.
-
-15. Optional: If using the NLTK machine learning processing (see ``PAPERLESS_ENABLE_NLTK`` in
- :ref:`configuration` for details), download the NLTK data for the Snowball Stemmer, Stopwords
- and Punkt tokenizer to your ``PAPERLESS_DATA_DIR/nltk``. Refer to
- the `NLTK instructions <https://www.nltk.org/data.html>`_ for details on how to
- download the data.
-
-
-Migrating to Paperless-ngx
-##########################
-
-Migration is possible both from Paperless-ng or directly from the 'original' Paperless.
-
-Migrating from Paperless-ng
-===========================
-
-Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and thus upgrading should be
-trivial for most users, especially when using docker. However, as with any major change, it is
-recommended to take a full backup first. Once you are ready, simply change the docker image to
-point to the new source. E.g. if using Docker Compose, edit ``docker-compose.yml`` and change:
-
-.. code::
-
- image: jonaswinkler/paperless-ng:latest
-
-to
-
-.. code::
-
- image: ghcr.io/paperless-ngx/paperless-ngx:latest
-
-and then run ``docker-compose up -d`` which will pull the new image recreate the container.
-That's it!
-
-Users who installed with the bare-metal route should also update their Git clone to point to
-``https://github.com/paperless-ngx/paperless-ngx``, e.g. using the command
-``git remote set-url origin https://github.com/paperless-ngx/paperless-ngx`` and then pull the
-lastest version.
-
-Migrating from Paperless
-========================
-
-At its core, paperless-ngx is still paperless and fully compatible. However, some
-things have changed under the hood, so you need to adapt your setup depending on
-how you installed paperless.
-
-This setup describes how to update an existing paperless Docker installation.
-The important things to keep in mind are as follows:
-
-* Read the :doc:`changelog </changelog>` and take note of breaking changes.
-* You should decide if you want to stick with SQLite or want to migrate your database
- to PostgreSQL. See :ref:`setup-sqlite_to_psql` for details on how to move your data from
- SQLite to PostgreSQL. Both work fine with paperless. However, if you already have a
- database server running for other services, you might as well use it for paperless as well.
-* The task scheduler of paperless, which is used to execute periodic tasks
- such as email checking and maintenance, requires a `redis`_ message broker
- instance. The docker-compose route takes care of that.
-* The layout of the folder structure for your documents and data remains the
- same, so you can just plug your old docker volumes into paperless-ngx and
- expect it to find everything where it should be.
-
-Migration to paperless-ngx is then performed in a few simple steps:
-
-1. Stop paperless.
-
- .. code:: bash
-
- $ cd /path/to/current/paperless
- $ docker-compose down
-
-2. Do a backup for two purposes: If something goes wrong, you still have your
- data. Second, if you don't like paperless-ngx, you can switch back to
- paperless.
-
-3. Download the latest release of paperless-ngx. You can either go with the
- docker-compose files from `here <https://github.com/paperless-ngx/paperless-ngx/tree/master/docker/compose>`__
- or clone the repository to build the image yourself (see :ref:`above <setup-docker_build>`).
- You can either replace your current paperless folder or put paperless-ngx
- in a different location.
-
- .. caution::
-
- Paperless-ngx includes a ``.env`` file. This will set the
- project name for docker compose to ``paperless``, which will also define the name
- of the volumes by paperless-ngx. However, if you experience that paperless-ngx
- is not using your old paperless volumes, verify the names of your volumes with
-
- .. code:: shell-session
-
- $ docker volume ls | grep _data
-
- and adjust the project name in the ``.env`` file so that it matches the name
- of the volumes before the ``_data`` part.
-
-
-4. Download the ``docker-compose.sqlite.yml`` file to ``docker-compose.yml``.
- If you want to switch to PostgreSQL, do that after you migrated your existing
- SQLite database.
-
-5. Adjust ``docker-compose.yml`` and ``docker-compose.env`` to your needs.
- See :ref:`setup-docker_hub` for details on which edits are advised.
-
-6. :ref:`Update paperless. <administration-updating>`
-
-7. In order to find your existing documents with the new search feature, you need
- to invoke a one-time operation that will create the search index:
-
- .. code:: shell-session
-
- $ docker-compose run --rm webserver document_index reindex
-
- This will migrate your database and create the search index. After that,
- paperless will take care of maintaining the index by itself.
-
-8. Start paperless-ngx.
-
- .. code:: bash
-
- $ docker-compose up -d
-
- This will run paperless in the background and automatically start it on system boot.
-
-9. Paperless installed a permanent redirect to ``admin/`` in your browser. This
- redirect is still in place and prevents access to the new UI. Clear your
- browsing cache in order to fix this.
-
-10. Optionally, follow the instructions below to migrate your existing data to PostgreSQL.
-
-
-.. _setup-sqlite_to_psql:
-
-Moving data from SQLite to PostgreSQL
-=====================================
-
-Moving your data from SQLite to PostgreSQL is done via executing a series of django
-management commands as below.
-
-.. caution::
-
- Make sure that your SQLite database is migrated to the latest version.
- Starting paperless will make sure that this is the case. If your try to
- load data from an old database schema in SQLite into a newer database
- schema in PostgreSQL, you will run into trouble.
-
-.. warning::
-
- On some database fields, PostgreSQL enforces predefined limits on maximum
- length, whereas SQLite does not. The fields in question are the title of documents
- (128 characters), names of document types, tags and correspondents (128 characters),
- and filenames (1024 characters). If you have data in these fields that surpasses these
- limits, migration to PostgreSQL is not possible and will fail with an error.
-
-
-1. Stop paperless, if it is running.
-2. Tell paperless to use PostgreSQL:
-
- a) With docker, copy the provided ``docker-compose.postgres.yml`` file to
- ``docker-compose.yml``. Remember to adjust the consumption directory,
- if necessary.
- b) Without docker, configure the database in your ``paperless.conf`` file.
- See :ref:`configuration` for details.
-
-3. Open a shell and initialize the database:
-
- a) With docker, run the following command to open a shell within the paperless
- container:
-
- .. code:: shell-session
-
- $ cd /path/to/paperless
- $ docker-compose run --rm webserver /bin/bash
-
- This will launch the container and initialize the PostgreSQL database.
-
- b) Without docker, remember to activate any virtual environment, switch to
- the ``src`` directory and create the database schema:
-
- .. code:: shell-session
-
- $ cd /path/to/paperless/src
- $ python3 manage.py migrate
-
- This will not copy any data yet.
-
-4. Dump your data from SQLite:
-
- .. code:: shell-session
-
- $ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
-
-5. Load your data into PostgreSQL:
-
- .. code:: shell-session
-
- $ python3 manage.py loaddata data.json
-
-6. If operating inside Docker, you may exit the shell now.
-
- .. code:: shell-session
-
- $ exit
-
-7. Start paperless.
-
-
-Moving back to Paperless
-========================
-
-Lets say you migrated to Paperless-ngx and used it for a while, but decided that
-you don't like it and want to move back (If you do, send me a mail about what
-part you didn't like!), you can totally do that with a few simple steps.
-
-Paperless-ngx modified the database schema slightly, however, these changes can
-be reverted while keeping your current data, so that your current data will
-be compatible with original Paperless.
-
-Execute this:
-
-.. code:: shell-session
-
- $ cd /path/to/paperless
- $ docker-compose run --rm webserver migrate documents 0023
-
-Or without docker:
-
-.. code:: shell-session
-
- $ cd /path/to/paperless/src
- $ python3 manage.py migrate documents 0023
-
-After that, you need to clear your cookies (Paperless-ngx comes with updated
-dependencies that do cookie-processing differently) and probably your cache
-as well.
-
-.. _setup-less_powerful_devices:
-
-
-Considerations for less powerful devices
-########################################
-
-Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and
-configuring some options in paperless can help improve performance immensely:
-
-* Stick with SQLite to save some resources.
-* Consider setting ``PAPERLESS_OCR_PAGES`` to 1, so that paperless will only OCR
- the first page of your documents. In most cases, this page contains enough
- information to be able to find it.
-* ``PAPERLESS_TASK_WORKERS`` and ``PAPERLESS_THREADS_PER_WORKER`` are configured
- to use all cores. The Raspberry Pi models 3 and up have 4 cores, meaning that
- paperless will use 2 workers and 2 threads per worker. This may result in
- sluggish response times during consumption, so you might want to lower these
- settings (example: 2 workers and 1 thread to always have some computing power
- left for other tasks).
-* Keep ``PAPERLESS_OCR_MODE`` at its default value ``skip`` and consider OCR'ing
- your documents before feeding them into paperless. Some scanners are able to
- do this! You might want to even specify ``skip_noarchive`` to skip archive
- file generation for already ocr'ed documents entirely.
-* If you want to perform OCR on the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
- This will speed up OCR times and use less memory at the expense of slightly worse
- OCR results.
-* If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to
- 1. This will save some memory.
-* Consider setting ``PAPERLESS_ENABLE_NLTK`` to false, to disable the more
- advanced language processing, which can take more memory and processing time.
-
-For details, refer to :ref:`configuration`.
-
-.. note::
-
- Updating the :ref:`automatic matching algorithm <advanced-automatic_matching>`
- takes quite a bit of time. However, the update mechanism checks if your
- data has changed before doing the heavy lifting. If you experience the
- algorithm taking too much cpu time, consider changing the schedule in the
- admin interface to daily. You can also manually invoke the task
- by changing the date and time of the next run to today/now.
-
- The actual matching of the algorithm is fast and works on Raspberry Pi as
- well as on any other device.
-
-.. _redis: https://redis.io/
-
-
-.. _setup-nginx:
-
-Using nginx as a reverse proxy
-##############################
-
-If you want to expose paperless to the internet, you should hide it behind a
-reverse proxy with SSL enabled.
-
-In addition to the usual configuration for SSL,
-the following configuration is required for paperless to operate:
-
-.. code:: nginx
-
- http {
-
- # Adjust as required. This is the maximum size for file uploads.
- # The default value 1M might be a little too small.
- client_max_body_size 10M;
-
- server {
-
- location / {
-
- # Adjust host and port as required.
- proxy_pass http://localhost:8000/;
-
- # These configuration options are required for WebSockets to work.
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
-
- proxy_redirect off;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Host $server_name;
- }
- }
- }
-
-The ``PAPERLESS_URL`` configuration variable is also required when using a reverse proxy. Please refer to the :ref:`hosting-and-security` docs.
-
-Also read `this <https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu>`__, towards the end of the section.
--- /dev/null
+# Troubleshooting
+
+## No files are added by the consumer
+
+Check for the following issues:
+
+- Ensure that the directory you're putting your documents in is the
+ folder paperless is watching. With docker, this setting is performed
+ in the `docker-compose.yml` file. Without docker, look at the
+ `CONSUMPTION_DIR` setting. Don't adjust this setting if you're
+ using docker.
+
+- Ensure that redis is up and running. Paperless does its task
+ processing asynchronously, and for documents to arrive at the task
+ processor, it needs redis to run.
+
+- Ensure that the task processor is running. Docker does this
+ automatically. Manually invoke the task processor by executing
+
+ ```shell-session
+ $ celery --app paperless worker
+ ```
+
+- Look at the output of paperless and inspect it for any errors.
+
+- Go to the admin interface, and check if there are failed tasks. If
+ so, the tasks will contain an error message.
+
+## Consumer warns `OCR for XX failed`
+
+If you find the OCR accuracy to be too low, and/or the document consumer
+warns that
+`OCR for XX failed, but we're going to stick with what we've got since FORGIVING_OCR is enabled`,
+then you might need to install the [Tesseract language
+files](http://packages.ubuntu.com/search?keywords=tesseract-ocr)
+marching your document's languages.
+
+As an example, if you are running Paperless-ngx from any Ubuntu or
+Debian box, and your documents are written in Spanish you may need to
+run:
+
+ apt-get install -y tesseract-ocr-spa
+
+## Consumer fails to pickup any new files
+
+If you notice that the consumer will only pickup files in the
+consumption directory at startup, but won't find any other files added
+later, you will need to enable filesystem polling with the configuration
+option `PAPERLESS_CONSUMER_POLLING`, see
+`[here](/configuration#polling).
+
+This will disable listening to filesystem changes with inotify and
+paperless will manually check the consumption directory for changes
+instead.
+
+## Paperless always redirects to /admin
+
+You probably had the old paperless installed at some point. Paperless
+installed a permanent redirect to /admin in your browser, and you need
+to clear your browsing data / cache to fix that.
+
+## Operation not permitted
+
+You might see errors such as:
+
+```shell-session
+chown: changing ownership of '../export': Operation not permitted
+```
+
+The container tries to set file ownership on the listed directories.
+This is required so that the user running paperless inside docker has
+write permissions to these folders. This happens when pointing these
+directories to NFS shares, for example.
+
+Ensure that `chown` is possible on these directories.
+
+## Classifier error: No training data available
+
+This indicates that the Auto matching algorithm found no documents to
+learn from. This may have two reasons:
+
+- You don't use the Auto matching algorithm: The error can be safely
+ ignored in this case.
+- You are using the Auto matching algorithm: The classifier explicitly
+ excludes documents with Inbox tags. Verify that there are documents
+ in your archive without inbox tags. The algorithm will only learn
+ from documents not in your inbox.
+
+## UserWarning in sklearn on every single document
+
+You may encounter warnings like this:
+
+```
+/usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
+UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
+This might lead to breaking code or invalid results. Use at your own risk.
+```
+
+This happens when certain dependencies of paperless that are responsible
+for the auto matching algorithm are updated. After updating these, your
+current training data _might_ not be compatible anymore. This can be
+ignored in most cases. This warning will disappear automatically when
+paperless updates the training data.
+
+If you want to get rid of the warning or actually experience issues with
+automatic matching, delete the file `classification_model.pickle` in the
+data directory and let paperless recreate it.
+
+## 504 Server Error: Gateway Timeout when adding Office documents
+
+You may experience these errors when using the optional TIKA
+integration:
+
+```
+requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert
+```
+
+Gotenberg is a server that converts Office documents into PDF documents
+and has a default timeout of 30 seconds. When conversion takes longer,
+Gotenberg raises this error.
+
+You can increase the timeout by configuring a command flag for Gotenberg
+(see also [here](https://gotenberg.dev/docs/modules/api#properties)). If
+using docker-compose, this is achieved by the following configuration
+change in the `docker-compose.yml` file:
+
+```yaml
+# The gotenberg chromium route is used to convert .eml files. We do not
+# want to allow external content like tracking pixels or even javascript.
+command:
+ - 'gotenberg'
+ - '--chromium-disable-javascript=true'
+ - '--chromium-allow-list=file:///tmp/.*'
+ - '--api-timeout=60'
+```
+
+## Permission denied errors in the consumption directory
+
+You might encounter errors such as:
+
+```shell-session
+The following error occured while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'
+```
+
+This happens when paperless does not have permission to delete files
+inside the consumption directory. Ensure that `USERMAP_UID` and
+`USERMAP_GID` are set to the user id and group id you use on the host
+operating system, if these are different from `1000`. See [Docker setup](setup#docker_hub).
+
+Also ensure that you are able to read and write to the consumption
+directory on the host.
+
+## OSError: \[Errno 19\] No such device when consuming files
+
+If you experience errors such as:
+
+```shell-session
+File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file
+return CompoundStorage(dbfile, use_mmap=storage.supports_mmap)
+File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__
+self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)
+OSError: [Errno 19] No such device
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker
+res = f(*task["args"], **task["kwargs"])
+File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file
+override_tag_ids=override_tag_ids)
+File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file
+raise ConsumerError(e)
+```
+
+Paperless uses a search index to provide better and faster full text
+searching. This search index is stored inside the `data` folder. The
+search index uses memory-mapped files (mmap). The above error indicates
+that paperless was unable to create and open these files.
+
+This happens when you're trying to store the data directory on certain
+file systems (mostly network shares) that don't support memory-mapped
+files.
+
+## Web-UI stuck at "Loading\..."
+
+This might have multiple reasons.
+
+1. If you built the docker image yourself or deployed using the bare
+ metal route, make sure that there are files in
+ `<paperless-root>/static/frontend/<lang-code>/`. If there are no
+ files, make sure that you executed `collectstatic` successfully,
+ either manually or as part of the docker image build.
+
+ If the front end is still missing, make sure that the front end is
+ compiled (files present in `src/documents/static/frontend`). If it
+ is not, you need to compile the front end yourself or download the
+ release archive instead of cloning the repository.
+
+2. Check the output of the web server. You might see errors like this:
+
+ ```
+ [2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request.
+ Traceback (most recent call last):
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
+ self.handle_request(listener, req, client, addr)
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
+ util.reraise(*sys.exc_info())
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
+ raise value
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request
+ resp.write_file(respiter)
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file
+ if not self.sendfile(respiter):
+ File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
+ sent += os.sendfile(sockno, fileno, offset + sent, count)
+ OSError: [Errno 22] Invalid argument
+ ```
+
+ To fix this issue, add
+
+ ```
+ SENDFILE=0
+ ```
+
+ to your [docker-compose.env]{.title-ref} file.
+
+## Error while reading metadata
+
+You might find messages like these in your log files:
+
+```
+[WARNING] [paperless.parsing.tesseract] Error while reading metadata
+```
+
+This indicates that paperless failed to read PDF metadata from one of
+your documents. This happens when you open the affected documents in
+paperless for editing. Paperless will continue to work, and will simply
+not show the invalid metadata.
+
+## Consumer fails with a FileNotFoundError
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
+Traceback (most recent call last):
+ File "/app/paperless/src/paperless_tesseract/parsers.py", line 261, in parse
+ ocrmypdf.ocr(**args)
+ File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py", line 337, in ocr
+ return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
+ File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 385, in run_pipeline
+ exec_concurrent(context, executor)
+ File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 302, in exec_concurrent
+ pdf = post_process(pdf, context, executor)
+ File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 235, in post_process
+ pdf_out = metadata_fixup(pdf_out, context)
+ File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py", line 798, in metadata_fixup
+ with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:
+ File "/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py", line 923, in open
+ pdf = Pdf._open(
+FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
+```
+
+This probably indicates paperless tried to consume the same file twice.
+This can happen for a number of reasons, depending on how documents are
+placed into the consume folder. If paperless is using inotify (the
+default) to check for documents, try adjusting the
+[inotify configuration](/configuration#inotify). If polling is enabled, try adjusting the
+[polling configuration](/configuration#polling).
+
+## Consumer fails waiting for file to remain unmodified.
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.
+```
+
+This indicates paperless timed out while waiting for the file to be
+completely written to the consume folder. Adjusting
+[polling configuration](/configuration#polling) values should resolve the issue.
+
+!!! note
+
+ The user will need to manually move the file out of the consume folder
+ and back in, for the initial failing file to be consumed.
+
+## Consumer fails reporting "OS reports file as busy still".
+
+You might find messages like these in your log files:
+
+```
+[WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still
+```
+
+This indicates paperless was unable to open the file, as the OS reported
+the file as still being in use. To prevent a crash, paperless did not
+try to consume the file. If paperless is using inotify (the default) to
+check for documents, try adjusting the
+[inotify configuration](/configuration#inotify). If polling is enabled, try adjusting the
+[polling configuration](/configuration#polling).
+
+!!! note
+
+ The user will need to manually move the file out of the consume folder
+ and back in, for the initial failing file to be consumed.
+
+## Log reports "Creating PaperlessTask failed".
+
+You might find messages like these in your log files:
+
+```
+[ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked
+```
+
+You are likely using an sqlite based installation, with an increased
+number of workers and are running into sqlite's concurrency
+limitations. Uploading or consuming multiple files at once results in
+many workers attempting to access the database simultaneously.
+
+Consider changing to the PostgreSQL database if you will be processing
+many documents at once often. Otherwise, try tweaking the
+`PAPERLESS_DB_TIMEOUT` setting to allow more time for the database to
+unlock. This may have minor performance implications.
+
+## gunicorn fails to start with "is not a valid port number"
+
+You are likely running using Kubernetes, which automatically creates an
+environment variable named [\${serviceName}\_PORT]{.title-ref}. This is
+the same environment variable which is used by Paperless to optionally
+change the port gunicorn listens on.
+
+To fix this, set [PAPERLESS_PORT]{.title-ref} again to your desired
+port, or the default of 8000.
+++ /dev/null
-***************
-Troubleshooting
-***************
-
-No files are added by the consumer
-##################################
-
-Check for the following issues:
-
-* Ensure that the directory you're putting your documents in is the folder
- paperless is watching. With docker, this setting is performed in the
- ``docker-compose.yml`` file. Without docker, look at the ``CONSUMPTION_DIR``
- setting. Don't adjust this setting if you're using docker.
-* Ensure that redis is up and running. Paperless does its task processing
- asynchronously, and for documents to arrive at the task processor, it needs
- redis to run.
-* Ensure that the task processor is running. Docker does this automatically.
- Manually invoke the task processor by executing
-
- .. code:: shell-session
-
- $ celery --app paperless worker
-
-* Look at the output of paperless and inspect it for any errors.
-* Go to the admin interface, and check if there are failed tasks. If so, the
- tasks will contain an error message.
-
-Consumer warns ``OCR for XX failed``
-####################################
-
-If you find the OCR accuracy to be too low, and/or the document consumer warns
-that ``OCR for XX failed, but we're going to stick with what we've got since
-FORGIVING_OCR is enabled``, then you might need to install the
-`Tesseract language files <http://packages.ubuntu.com/search?keywords=tesseract-ocr>`_
-marching your document's languages.
-
-As an example, if you are running Paperless-ngx from any Ubuntu or Debian
-box, and your documents are written in Spanish you may need to run::
-
- apt-get install -y tesseract-ocr-spa
-
-Consumer fails to pickup any new files
-######################################
-
-If you notice that the consumer will only pickup files in the consumption
-directory at startup, but won't find any other files added later, you will need to
-enable filesystem polling with the configuration option
-``PAPERLESS_CONSUMER_POLLING``, see :ref:`here <configuration-polling>`.
-
-This will disable listening to filesystem changes with inotify and paperless will
-manually check the consumption directory for changes instead.
-
-
-Paperless always redirects to /admin
-####################################
-
-You probably had the old paperless installed at some point. Paperless installed
-a permanent redirect to /admin in your browser, and you need to clear your
-browsing data / cache to fix that.
-
-
-Operation not permitted
-#######################
-
-You might see errors such as:
-
-.. code:: shell-session
-
- chown: changing ownership of '../export': Operation not permitted
-
-The container tries to set file ownership on the listed directories. This is
-required so that the user running paperless inside docker has write permissions
-to these folders. This happens when pointing these directories to NFS shares,
-for example.
-
-Ensure that ``chown`` is possible on these directories.
-
-
-Classifier error: No training data available
-############################################
-
-This indicates that the Auto matching algorithm found no documents to learn from.
-This may have two reasons:
-
-* You don't use the Auto matching algorithm: The error can be safely ignored in this case.
-* You are using the Auto matching algorithm: The classifier explicitly excludes documents
- with Inbox tags. Verify that there are documents in your archive without inbox tags.
- The algorithm will only learn from documents not in your inbox.
-
-
-UserWarning in sklearn on every single document
-###############################################
-
-You may encounter warnings like this:
-
-.. code::
-
- /usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
- UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
- This might lead to breaking code or invalid results. Use at your own risk.
-
-This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are
-updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored
-in most cases. This warning will disappear automatically when paperless updates the training data.
-
-If you want to get rid of the warning or actually experience issues with automatic matching, delete
-the file ``classification_model.pickle`` in the data directory and let paperless recreate it.
-
-
-504 Server Error: Gateway Timeout when adding Office documents
-##############################################################
-
-You may experience these errors when using the optional TIKA integration:
-
-.. code::
-
- requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert
-
-Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 30 seconds.
-When conversion takes longer, Gotenberg raises this error.
-
-You can increase the timeout by configuring a command flag for Gotenberg (see also `here <https://gotenberg.dev/docs/modules/api#properties>`__).
-If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file:
-
-.. code:: yaml
-
- gotenberg:
- image: gotenberg/gotenberg:7.6
- restart: unless-stopped
- command:
- - "gotenberg"
- - "--chromium-disable-routes=true"
- - "--api-timeout=60"
-
-Permission denied errors in the consumption directory
-#####################################################
-
-You might encounter errors such as:
-
-.. code:: shell-session
-
- The following error occured while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'
-
-This happens when paperless does not have permission to delete files inside the consumption directory.
-Ensure that ``USERMAP_UID`` and ``USERMAP_GID`` are set to the user id and group id you use on the host operating system, if these are
-different from ``1000``. See :ref:`setup-docker_hub`.
-
-Also ensure that you are able to read and write to the consumption directory on the host.
-
-
-OSError: [Errno 19] No such device when consuming files
-#######################################################
-
-If you experience errors such as:
-
-.. code:: shell-session
-
- File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file
- return CompoundStorage(dbfile, use_mmap=storage.supports_mmap)
- File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__
- self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)
- OSError: [Errno 19] No such device
-
- During handling of the above exception, another exception occurred:
-
- Traceback (most recent call last):
- File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker
- res = f(*task["args"], **task["kwargs"])
- File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file
- override_tag_ids=override_tag_ids)
- File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file
- raise ConsumerError(e)
-
-Paperless uses a search index to provide better and faster full text searching. This search index is stored inside
-the ``data`` folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless
-was unable to create and open these files.
-
-This happens when you're trying to store the data directory on certain file systems (mostly network shares)
-that don't support memory-mapped files.
-
-
-Web-UI stuck at "Loading..."
-############################
-
-This might have multiple reasons.
-
-
-1. If you built the docker image yourself or deployed using the bare metal route,
- make sure that there are files in ``<paperless-root>/static/frontend/<lang-code>/``.
- If there are no files, make sure that you executed ``collectstatic`` successfully, either
- manually or as part of the docker image build.
-
- If the front end is still missing, make sure that the front end is compiled (files present in
- ``src/documents/static/frontend``). If it is not, you need to compile the front end yourself
- or download the release archive instead of cloning the repository.
-
-2. Check the output of the web server. You might see errors like this:
-
-
- .. code::
-
- [2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request.
- Traceback (most recent call last):
- File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
- self.handle_request(listener, req, client, addr)
- File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
- util.reraise(*sys.exc_info())
- File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
- raise value
- File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request
- resp.write_file(respiter)
- File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file
- if not self.sendfile(respiter):
- File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
- sent += os.sendfile(sockno, fileno, offset + sent, count)
- OSError: [Errno 22] Invalid argument
-
- To fix this issue, add
-
- .. code::
-
- SENDFILE=0
-
- to your `docker-compose.env` file.
-
-Error while reading metadata
-############################
-
-You might find messages like these in your log files:
-
-.. code::
-
- [WARNING] [paperless.parsing.tesseract] Error while reading metadata
-
-This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you
-open the affected documents in paperless for editing. Paperless will continue to work, and will simply not
-show the invalid metadata.
-
-Consumer fails with a FileNotFoundError
-#######################################
-
-You might find messages like these in your log files:
-
-.. code::
-
- [ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
- Traceback (most recent call last):
- File "/app/paperless/src/paperless_tesseract/parsers.py", line 261, in parse
- ocrmypdf.ocr(**args)
- File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py", line 337, in ocr
- return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
- File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 385, in run_pipeline
- exec_concurrent(context, executor)
- File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 302, in exec_concurrent
- pdf = post_process(pdf, context, executor)
- File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 235, in post_process
- pdf_out = metadata_fixup(pdf_out, context)
- File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py", line 798, in metadata_fixup
- with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:
- File "/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py", line 923, in open
- pdf = Pdf._open(
- FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
-
-This probably indicates paperless tried to consume the same file twice. This can happen for a number of reasons,
-depending on how documents are placed into the consume folder. If paperless is using inotify (the default) to
-check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`. If polling is enabled,
-try adjusting the :ref:`polling configuration <configuration-polling>`.
-
-Consumer fails waiting for file to remain unmodified.
-#####################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
- [ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.
-
-This indicates paperless timed out while waiting for the file to be completely written to the consume folder.
-Adjusting :ref:`polling configuration <configuration-polling>` values should resolve the issue.
-
-.. note::
-
- The user will need to manually move the file out of the consume folder and
- back in, for the initial failing file to be consumed.
-
-Consumer fails reporting "OS reports file as busy still".
-#########################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
- [WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still
-
-This indicates paperless was unable to open the file, as the OS reported the file as still being in use. To prevent a
-crash, paperless did not try to consume the file. If paperless is using inotify (the default) to
-check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`. If polling is enabled,
-try adjusting the :ref:`polling configuration <configuration-polling>`.
-
-.. note::
-
- The user will need to manually move the file out of the consume folder and
- back in, for the initial failing file to be consumed.
-
-Log reports "Creating PaperlessTask failed".
-#########################################################
-
-You might find messages like these in your log files:
-
-.. code::
-
- [ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked
-
-You are likely using an sqlite based installation, with an increased number of workers and are running into sqlite's concurrency limitations.
-Uploading or consuming multiple files at once results in many workers attempting to access the database simultaneously.
-
-Consider changing to the PostgreSQL database if you will be processing many documents at once often. Otherwise,
-try tweaking the ``PAPERLESS_DB_TIMEOUT`` setting to allow more time for the database to unlock. This may have
-minor performance implications.
--- /dev/null
+# Usage Overview
+
+Paperless is an application that manages your personal documents. With
+the help of a document scanner (see [the scanners wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations)), paperless transforms your wieldy physical document binders
+into a searchable archive and provides many utilities for finding and
+managing your documents.
+
+## Terms and definitions
+
+Paperless essentially consists of two different parts for managing your
+documents:
+
+- The _consumer_ watches a specified folder and adds all documents in
+ that folder to paperless.
+- The _web server_ provides a UI that you use to manage and search for
+ your scanned documents.
+
+Each document has a couple of fields that you can assign to them:
+
+- A _Document_ is a piece of paper that sometimes contains valuable
+ information.
+- The _correspondent_ of a document is the person, institution or
+ company that a document either originates from, or is sent to.
+- A _tag_ is a label that you can assign to documents. Think of labels
+ as more powerful folders: Multiple documents can be grouped together
+ with a single tag, however, a single document can also have multiple
+ tags. This is not possible with folders. The reason folders are not
+ implemented in paperless is simply that tags are much more versatile
+ than folders.
+- A _document type_ is used to demarcate the type of a document such
+ as letter, bank statement, invoice, contract, etc. It is used to
+ identify what a document is about.
+- The _date added_ of a document is the date the document was scanned
+ into paperless. You cannot and should not change this date.
+- The _date created_ of a document is the date the document was
+ initially issued. This can be the date you bought a product, the
+ date you signed a contract, or the date a letter was sent to you.
+- The _archive serial number_ (short: ASN) of a document is the
+ identifier of the document in your physical document binders. See
+ [recommended workflow](#usage-reccomended_workflow) below.
+- The _content_ of a document is the text that was OCR'ed from the
+ document. This text is fed into the search engine and is used for
+ matching tags, correspondents and document types.
+
+## Adding documents to paperless
+
+Once you've got Paperless setup, you need to start feeding documents
+into it. When adding documents to paperless, it will perform the
+following operations on your documents:
+
+1. OCR the document, if it has no text. Digital documents usually have
+ text, and this step will be skipped for those documents.
+2. Paperless will create an archivable PDF/A document from your
+ document. If this document is coming from your scanner, it will have
+ embedded selectable text.
+3. Paperless performs automatic matching of tags, correspondents and
+ types on the document before storing it in the database.
+
+!!! tip
+
+ This process can be configured to fit your needs. If you don't want
+ paperless to create archived versions for digital documents, you can
+ configure that by configuring `PAPERLESS_OCR_MODE=skip_noarchive`.
+ Please read the
+ [relevant section in the documentation](/configuration#ocr).
+
+!!! note
+
+ No matter which options you choose, Paperless will always store the
+ original document that it found in the consumption directory or in the
+ mail and will never overwrite that document. Archived versions are
+ stored alongside the original versions.
+
+### The consumption directory
+
+The primary method of getting documents into your database is by putting
+them in the consumption directory. The consumer runs in an infinite
+loop, looking for new additions to this directory. When it finds them,
+the consumer goes about the process of parsing them with the OCR,
+indexing what it finds, and storing it in the media directory.
+
+Getting stuff into this directory is up to you. If you're running
+Paperless on your local computer, you might just want to drag and drop
+files there, but if you're running this on a server and want your
+scanner to automatically push files to this directory, you'll need to
+setup some sort of service to accept the files from the scanner.
+Typically, you're looking at an FTP server like
+[Proftpd](http://www.proftpd.org/) or a Windows folder share with
+[Samba](http://www.samba.org/).
+
+### Web UI Upload
+
+The dashboard has a file drop field to upload documents to paperless.
+Simply drag a file onto this field or select a file with the file
+dialog. Multiple files are supported.
+
+You can also upload documents on any other page of the web UI by
+dragging-and-dropping files into your browser window.
+
+### Mobile upload {#usage-mobile_upload}
+
+The mobile app over at <https://github.com/qcasey/paperless_share>
+allows Android users to share any documents with paperless. This can be
+combined with any of the mobile scanning apps out there, such as Office
+Lens.
+
+Furthermore, there is the [Paperless
+App](https://github.com/bauerj/paperless_app) as well, which not only
+has document upload, but also document browsing and download features.
+
+### IMAP (Email) {#usage-email}
+
+You can tell paperless-ngx to consume documents from your email
+accounts. This is a very flexible and powerful feature, if you regularly
+received documents via mail that you need to archive. The mail consumer
+can be configured via the frontend settings (/settings/mail) in the following
+manner:
+
+1. Define e-mail accounts.
+2. Define mail rules for your account.
+
+These rules perform the following:
+
+1. Connect to the mail server.
+2. Fetch all matching mails (as defined by folder, maximum age and the
+ filters)
+3. Check if there are any consumable attachments.
+4. If so, instruct paperless to consume the attachments and optionally
+ use the metadata provided in the rule for the new document.
+5. If documents were consumed from a mail, the rule action is performed
+ on that mail.
+
+Paperless will completely ignore mails that do not match your filters.
+It will also only perform the action on mails that it has consumed
+documents from.
+
+The actions all ensure that the same mail is not consumed twice by
+different means. These are as follows:
+
+- **Delete:** Immediately deletes mail that paperless has consumed
+ documents from. Use with caution.
+- **Mark as read:** Mark consumed mail as read. Paperless will not
+ consume documents from already read mails. If you read a mail before
+ paperless sees it, it will be ignored.
+- **Flag:** Sets the 'important' flag on mails with consumed
+ documents. Paperless will not consume flagged mails.
+- **Move to folder:** Moves consumed mails out of the way so that
+ paperless wont consume them again.
+- **Add custom Tag:** Adds a custom tag to mails with consumed
+ documents (the IMAP standard calls these "keywords"). Paperless
+ will not consume mails already tagged. Not all mail servers support
+ this feature!
+
+!!! warning
+
+ The mail consumer will perform these actions on all mails it has
+ consumed documents from. Keep in mind that the actual consumption
+ process may fail for some reason, leaving you with missing documents in
+ paperless.
+
+!!! note
+
+ With the correct set of rules, you can completely automate your email
+ documents. Create rules for every correspondent you receive digital
+ documents from and paperless will read them automatically. The default
+ action "mark as read" is pretty tame and will not cause any damage or
+ data loss whatsoever.
+
+ You can also setup a special folder in your mail account for paperless
+ and use your favorite mail client to move to be consumed mails into that
+ folder automatically or manually and tell paperless to move them to yet
+ another folder after consumption. It's up to you.
+
+!!! note
+
+ When defining a mail rule with a folder, you may need to try different
+ characters to define how the sub-folders are separated. Common values
+ include ".", "/" or "\|", but this varies by the mail server.
+ Check the documentation for your mail server. In the event of an error
+ fetching mail from a certain folder, check the Paperless logs. When a
+ folder is not located, Paperless will attempt to list all folders found
+ in the account to the Paperless logs.
+
+!!! note
+
+ Paperless will process the rules in the order defined in the admin page.
+
+ You can define catch-all rules and have them executed last to consume
+ any documents not matched by previous rules. Such a rule may assign an
+ "Unknown mail document" tag to consumed documents so you can inspect
+ them further.
+
+Paperless is set up to check your mails every 10 minutes. This can be
+configured on the 'Scheduled tasks' page in the admin.
+
+### REST API
+
+You can also submit a document using the REST API, see [docs][api#file-uploads]
+for details.
+
+## Best practices {#basic-searching}
+
+Paperless offers a couple tools that help you organize your document
+collection. However, it is up to you to use them in a way that helps you
+organize documents and find specific documents when you need them. This
+section offers a couple ideas for managing your collection.
+
+Document types allow you to classify documents according to what they
+are. You can define types such as "Receipt", "Invoice", or
+"Contract". If you used to collect all your receipts in a single
+binder, you can recreate that system in paperless by defining a document
+type, assigning documents to that type and then filtering by that type
+to only see all receipts.
+
+Not all documents need document types. Sometimes its hard to determine
+what the type of a document is or it is hard to justify creating a
+document type that you only need once or twice. This is okay. As long as
+the types you define help you organize your collection in the way you
+want, paperless is doing its job.
+
+Tags can be used in many different ways. Think of tags are more
+versatile folders or binders. If you have a binder for documents related
+to university / your car or health care, you can create these binders in
+paperless by creating tags and assigning them to relevant documents.
+Just as with documents, you can filter the document list by tags and
+only see documents of a certain topic.
+
+With physical documents, you'll often need to decide which folder the
+document belongs to. The advantage of tags over folders and binders is
+that a single document can have multiple tags. A physical document
+cannot magically appear in two different folders, but with tags, this is
+entirely possible.
+
+!!! tip
+
+ This can be used in many different ways. One example: Imagine you're
+ working on a particular task, such as signing up for university. Usually
+ you'll need to collect a bunch of different documents that are already
+ sorted into various folders. With the tag system of paperless, you can
+ create a new group of documents that are relevant to this task without
+ destroying the already existing organization. When you're done with the
+ task, you could delete the tag again, which would be equal to sorting
+ documents back into the folder they belong into. Or keep the tag, up to
+ you.
+
+All of the logic above applies to correspondents as well. Attach them to
+documents if you feel that they help you organize your collection.
+
+When you've started organizing your documents, create a couple saved
+views for document collections you regularly access. This is equal to
+having labeled physical binders on your desk, except that these saved
+views are dynamic and simply update themselves as you add documents to
+the system.
+
+Here are a couple examples of tags and types that you could use in your
+collection.
+
+- An `inbox` tag for newly added documents that you haven't manually
+ edited yet.
+- A tag `car` for everything car related (repairs, registration,
+ insurance, etc)
+- A tag `todo` for documents that you still need to do something with,
+ such as reply, or perform some task online.
+- A tag `bank account x` for all bank statement related to that
+ account.
+- A tag `mail` for anything that you added to paperless via its mail
+ processing capabilities.
+- A tag `missing_metadata` when you still need to add some metadata to
+ a document, but can't or don't want to do this right now.
+
+## Searching {#basic-usage_searching}
+
+Paperless offers an extensive searching mechanism that is designed to
+allow you to quickly find a document you're looking for (for example,
+that thing that just broke and you bought a couple months ago, that
+contract you signed 8 years ago).
+
+When you search paperless for a document, it tries to match this query
+against your documents. Paperless will look for matching documents by
+inspecting their content, title, correspondent, type and tags. Paperless
+returns a scored list of results, so that documents matching your query
+better will appear further up in the search results.
+
+By default, paperless returns only documents which contain all words
+typed in the search bar. However, paperless also offers advanced search
+syntax if you want to drill down the results further.
+
+Matching documents with logical expressions:
+
+```
+shopname AND (product1 OR product2)
+```
+
+Matching specific tags, correspondents or types:
+
+```
+type:invoice tag:unpaid
+correspondent:university certificate
+```
+
+Matching dates:
+
+```
+created:[2005 to 2009]
+added:yesterday
+modified:today
+```
+
+Matching inexact words:
+
+```
+produ*name
+```
+
+!!! note
+
+ Inexact terms are hard for search indexes. These queries might take a
+ while to execute. That's why paperless offers auto complete and query
+ correction.
+
+All of these constructs can be combined as you see fit. If you want to
+learn more about the query language used by paperless, paperless uses
+Whoosh's default query language. Head over to [Whoosh query
+language](https://whoosh.readthedocs.io/en/latest/querylang.html). For
+details on what date parsing utilities are available, see [Date
+parsing](https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries).
+
+## The recommended workflow {#usage-recommended_workflow}
+
+Once you have familiarized yourself with paperless and are ready to use
+it for all your documents, the recommended workflow for managing your
+documents is as follows. This workflow also takes into account that some
+documents have to be kept in physical form, but still ensures that you
+get all the advantages for these documents as well.
+
+The following diagram shows how easy it is to manage your documents.
+
+{width=400}
+
+### Preparations in paperless
+
+- Create an inbox tag that gets assigned to all new documents.
+- Create a TODO tag.
+
+### Processing of the physical documents
+
+Keep a physical inbox. Whenever you receive a document that you need to
+archive, put it into your inbox. Regularly, do the following for all
+documents in your inbox:
+
+1. For each document, decide if you need to keep the document in
+ physical form. This applies to certain important documents, such as
+ contracts and certificates.
+2. If you need to keep the document, write a running number on the
+ document before scanning, starting at one and counting upwards. This
+ is the archive serial number, or ASN in short.
+3. Scan the document.
+4. If the document has an ASN assigned, store it in a _single_ binder,
+ sorted by ASN. Don't order this binder in any other way.
+5. If the document has no ASN, throw it away. Yay!
+
+Over time, you will notice that your physical binder will fill up. If it
+is full, label the binder with the range of ASNs in this binder (i.e.,
+"Documents 1 to 343"), store the binder in your cellar or elsewhere,
+and start a new binder.
+
+The idea behind this process is that you will never have to use the
+physical binders to find a document. If you need a specific physical
+document, you may find this document by:
+
+1. Searching in paperless for the document.
+2. Identify the ASN of the document, since it appears on the scan.
+3. Grab the relevant document binder and get the document. This is easy
+ since they are sorted by ASN.
+
+### Processing of documents in paperless
+
+Once you have scanned in a document, proceed in paperless as follows.
+
+1. If the document has an ASN, assign the ASN to the document.
+2. Assign a correspondent to the document (i.e., your employer, bank,
+ etc) This isn't strictly necessary but helps in finding a document
+ when you need it.
+3. Assign a document type (i.e., invoice, bank statement, etc) to the
+ document This isn't strictly necessary but helps in finding a
+ document when you need it.
+4. Assign a proper title to the document (the name of an item you
+ bought, the subject of the letter, etc)
+5. Check that the date of the document is correct. Paperless tries to
+ read the date from the content of the document, but this fails
+ sometimes if the OCR is bad or multiple dates appear on the
+ document.
+6. Remove inbox tags from the documents.
+
+!!! tip
+
+ You can setup manual matching rules for your correspondents and tags and
+ paperless will assign them automatically. After consuming a couple
+ documents, you can even ask paperless to *learn* when to assign tags and
+ correspondents by itself. For details on this feature, see
+ [advanced matching](advanced_usage#matching).
+
+### Task management
+
+Some documents require attention and require you to act on the document.
+You may take two different approaches to handle these documents based on
+how regularly you intend to scan documents and use paperless.
+
+- If you scan and process your documents in paperless regularly,
+ assign a TODO tag to all scanned documents that you need to process.
+ Create a saved view on the dashboard that shows all documents with
+ this tag.
+- If you do not scan documents regularly and use paperless solely for
+ archiving, create a physical todo box next to your physical inbox
+ and put documents you need to process in the TODO box. When you
+ performed the task associated with the document, move it to the
+ inbox.
+
+## Architectue
+
+Paperless-ngx consists of the following components:
+
+- **The webserver:** This serves the administration pages, the API,
+ and the new frontend. This is the main tool you'll be using to interact
+ with paperless. You may start the webserver directly with
+
+ ```shell-session
+ $ cd /path/to/paperless/src/
+ $ gunicorn -c ../gunicorn.conf.py paperless.wsgi
+ ```
+
+ or by any other means such as Apache `mod_wsgi`.
+
+- **The consumer:** This is what watches your consumption folder for
+ documents. However, the consumer itself does not really consume your
+ documents. Now it notifies a task processor that a new file is ready
+ for consumption. I suppose it should be named differently. This was
+ also used to check your emails, but that's now done elsewhere as
+ well.
+
+ Start the consumer with the management command `document_consumer`:
+
+ ```shell-session
+ $ cd /path/to/paperless/src/
+ $ python3 manage.py document_consumer
+ ```
+
+- **The task processor:** Paperless relies on [Celery - Distributed
+ Task Queue](https://docs.celeryq.dev/en/stable/index.html) for doing
+ most of the heavy lifting. This is a task queue that accepts tasks
+ from multiple sources and processes these in parallel. It also comes
+ with a scheduler that executes certain commands periodically.
+
+ This task processor is responsible for:
+
+ - Consuming documents. When the consumer finds new documents, it
+ notifies the task processor to start a consumption task.
+ - The task processor also performs the consumption of any
+ documents you upload through the web interface.
+ - Consuming emails. It periodically checks your configured
+ accounts for new emails and notifies the task processor to
+ consume the attachment of an email.
+ - Maintaining the search index and the automatic matching
+ algorithm. These are things that paperless needs to do from time
+ to time in order to operate properly.
+
+ This allows paperless to process multiple documents from your
+ consumption folder in parallel! On a modern multi core system, this
+ makes the consumption process with full OCR blazingly fast.
+
+ The task processor comes with a built-in admin interface that you
+ can use to check whenever any of the tasks fail and inspect the
+ errors (i.e., wrong email credentials, errors during consuming a
+ specific file, etc).
+
+- A [redis](https://redis.io/) message broker: This is a really
+ lightweight service that is responsible for getting the tasks from
+ the webserver and the consumer to the task scheduler. These run in a
+ different process (maybe even on different machines!), and
+ therefore, this is necessary.
+
+- Optional: A database server. Paperless supports PostgreSQL, MariaDB
+ and SQLite for storing its data.
+++ /dev/null
-**************
-Usage Overview
-**************
-
-Paperless is an application that manages your personal documents. With
-the help of a document scanner (see :ref:`scanners`), paperless transforms
-your wieldy physical document binders into a searchable archive and
-provides many utilities for finding and managing your documents.
-
-
-Terms and definitions
-#####################
-
-Paperless essentially consists of two different parts for managing your
-documents:
-
-* The *consumer* watches a specified folder and adds all documents in that
- folder to paperless.
-* The *web server* provides a UI that you use to manage and search for your
- scanned documents.
-
-Each document has a couple of fields that you can assign to them:
-
-* A *Document* is a piece of paper that sometimes contains valuable
- information.
-* The *correspondent* of a document is the person, institution or company that
- a document either originates from, or is sent to.
-* A *tag* is a label that you can assign to documents. Think of labels as more
- powerful folders: Multiple documents can be grouped together with a single
- tag, however, a single document can also have multiple tags. This is not
- possible with folders. The reason folders are not implemented in paperless
- is simply that tags are much more versatile than folders.
-* A *document type* is used to demarcate the type of a document such as letter,
- bank statement, invoice, contract, etc. It is used to identify what a document
- is about.
-* The *date added* of a document is the date the document was scanned into
- paperless. You cannot and should not change this date.
-* The *date created* of a document is the date the document was initially issued.
- This can be the date you bought a product, the date you signed a contract, or
- the date a letter was sent to you.
-* The *archive serial number* (short: ASN) of a document is the identifier of
- the document in your physical document binders. See
- :ref:`usage-recommended_workflow` below.
-* The *content* of a document is the text that was OCR'ed from the document.
- This text is fed into the search engine and is used for matching tags,
- correspondents and document types.
-
-
-Frontend overview
-#################
-
-.. warning::
-
- TBD. Add some fancy screenshots!
-
-Adding documents to paperless
-#############################
-
-Once you've got Paperless setup, you need to start feeding documents into it.
-When adding documents to paperless, it will perform the following operations on
-your documents:
-
-1. OCR the document, if it has no text. Digital documents usually have text,
- and this step will be skipped for those documents.
-2. Paperless will create an archivable PDF/A document from your document.
- If this document is coming from your scanner, it will have embedded selectable text.
-3. Paperless performs automatic matching of tags, correspondents and types on the
- document before storing it in the database.
-
-.. hint::
-
- This process can be configured to fit your needs. If you don't want paperless
- to create archived versions for digital documents, you can configure that by
- configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the
- :ref:`relevant section in the documentation <configuration-ocr>`.
-
-.. note::
-
- No matter which options you choose, Paperless will always store the original
- document that it found in the consumption directory or in the mail and
- will never overwrite that document. Archived versions are stored alongside the
- original versions.
-
-
-The consumption directory
-=========================
-
-The primary method of getting documents into your database is by putting them in
-the consumption directory. The consumer runs in an infinite loop, looking for new
-additions to this directory. When it finds them, the consumer goes about the process
-of parsing them with the OCR, indexing what it finds, and storing it in the media directory.
-
-Getting stuff into this directory is up to you. If you're running Paperless
-on your local computer, you might just want to drag and drop files there, but if
-you're running this on a server and want your scanner to automatically push
-files to this directory, you'll need to setup some sort of service to accept the
-files from the scanner. Typically, you're looking at an FTP server like
-`Proftpd`_ or a Windows folder share with `Samba`_.
-
-.. _Proftpd: http://www.proftpd.org/
-.. _Samba: http://www.samba.org/
-
-.. TODO: hyperref to configuration of the location of this magic folder.
-
-Web UI Upload
-=============
-
-The dashboard has a file drop field to upload documents to paperless. Simply drag a file
-onto this field or select a file with the file dialog. Multiple files are supported.
-
-You can also upload documents on any other page of the web UI by dragging-and-dropping
-files into your browser window.
-
-.. _usage-mobile_upload:
-
-Mobile upload
-=============
-
-The mobile app over at `<https://github.com/qcasey/paperless_share>`_ allows Android users
-to share any documents with paperless. This can be combined with any of the mobile
-scanning apps out there, such as Office Lens.
-
-Furthermore, there is the `Paperless App <https://github.com/bauerj/paperless_app>`_ as well,
-which not only has document upload, but also document browsing and download features.
-
-.. _usage-email:
-
-IMAP (Email)
-============
-
-You can tell paperless-ngx to consume documents from your email accounts.
-This is a very flexible and powerful feature, if you regularly received documents
-via mail that you need to archive. The mail consumer can be configured by using the
-admin interface in the following manner:
-
-1. Define e-mail accounts.
-2. Define mail rules for your account.
-
-These rules perform the following:
-
-1. Connect to the mail server.
-2. Fetch all matching mails (as defined by folder, maximum age and the filters)
-3. Check if there are any consumable attachments.
-4. If so, instruct paperless to consume the attachments and optionally
- use the metadata provided in the rule for the new document.
-5. If documents were consumed from a mail, the rule action is performed
- on that mail.
-
-Paperless will completely ignore mails that do not match your filters. It will also
-only perform the action on mails that it has consumed documents from.
-
-The actions all ensure that the same mail is not consumed twice by different means.
-These are as follows:
-
-* **Delete:** Immediately deletes mail that paperless has consumed documents from.
- Use with caution.
-* **Mark as read:** Mark consumed mail as read. Paperless will not consume documents
- from already read mails. If you read a mail before paperless sees it, it will be
- ignored.
-* **Flag:** Sets the 'important' flag on mails with consumed documents. Paperless
- will not consume flagged mails.
-* **Move to folder:** Moves consumed mails out of the way so that paperless wont
- consume them again.
-* **Add custom Tag:** Adds a custom tag to mails with consumed documents (the IMAP
- standard calls these "keywords"). Paperless will not consume mails already tagged.
- Not all mail servers support this feature!
-
-.. caution::
-
- The mail consumer will perform these actions on all mails it has consumed
- documents from. Keep in mind that the actual consumption process may fail
- for some reason, leaving you with missing documents in paperless.
-
-.. note::
-
- With the correct set of rules, you can completely automate your email documents.
- Create rules for every correspondent you receive digital documents from and
- paperless will read them automatically. The default action "mark as read" is
- pretty tame and will not cause any damage or data loss whatsoever.
-
- You can also setup a special folder in your mail account for paperless and use
- your favorite mail client to move to be consumed mails into that folder
- automatically or manually and tell paperless to move them to yet another folder
- after consumption. It's up to you.
-
-.. note::
-
- When defining a mail rule with a folder, you may need to try different characters to
- define how the sub-folders are separated. Common values include ".", "/" or "|", but
- this varies by the mail server. Check the documentation for your mail server. In the
- event of an error fetching mail from a certain folder, check the Paperless logs. When
- a folder is not located, Paperless will attempt to list all folders found in the account
- to the Paperless logs.
-
-.. note::
-
- Paperless will process the rules in the order defined in the admin page.
-
- You can define catch-all rules and have them executed last to consume
- any documents not matched by previous rules. Such a rule may assign an "Unknown
- mail document" tag to consumed documents so you can inspect them further.
-
-Paperless is set up to check your mails every 10 minutes. This can be configured on the
-'Scheduled tasks' page in the admin.
-
-
-REST API
-========
-
-You can also submit a document using the REST API, see :ref:`api-file_uploads` for details.
-
-.. _basic-searching:
-
-
-Best practices
-##############
-
-Paperless offers a couple tools that help you organize your document collection. However,
-it is up to you to use them in a way that helps you organize documents and find specific
-documents when you need them. This section offers a couple ideas for managing your collection.
-
-Document types allow you to classify documents according to what they are. You can define
-types such as "Receipt", "Invoice", or "Contract". If you used to collect all your receipts
-in a single binder, you can recreate that system in paperless by defining a document type,
-assigning documents to that type and then filtering by that type to only see all receipts.
-
-Not all documents need document types. Sometimes its hard to determine what the type of a
-document is or it is hard to justify creating a document type that you only need once or twice.
-This is okay. As long as the types you define help you organize your collection in the way
-you want, paperless is doing its job.
-
-Tags can be used in many different ways. Think of tags are more versatile folders or binders.
-If you have a binder for documents related to university / your car or health care, you can
-create these binders in paperless by creating tags and assigning them to relevant documents.
-Just as with documents, you can filter the document list by tags and only see documents of
-a certain topic.
-
-With physical documents, you'll often need to decide which folder the document belongs to.
-The advantage of tags over folders and binders is that a single document can have multiple
-tags. A physical document cannot magically appear in two different folders, but with tags,
-this is entirely possible.
-
-.. hint::
-
- This can be used in many different ways. One example: Imagine you're working on a particular
- task, such as signing up for university. Usually you'll need to collect a bunch of different
- documents that are already sorted into various folders. With the tag system of paperless,
- you can create a new group of documents that are relevant to this task without destroying
- the already existing organization. When you're done with the task, you could delete the
- tag again, which would be equal to sorting documents back into the folder they belong into.
- Or keep the tag, up to you.
-
-All of the logic above applies to correspondents as well. Attach them to documents if you
-feel that they help you organize your collection.
-
-When you've started organizing your documents, create a couple saved views for document collections
-you regularly access. This is equal to having labeled physical binders on your desk, except
-that these saved views are dynamic and simply update themselves as you add documents to the system.
-
-Here are a couple examples of tags and types that you could use in your collection.
-
-* An ``inbox`` tag for newly added documents that you haven't manually edited yet.
-* A tag ``car`` for everything car related (repairs, registration, insurance, etc)
-* A tag ``todo`` for documents that you still need to do something with, such as reply, or
- perform some task online.
-* A tag ``bank account x`` for all bank statement related to that account.
-* A tag ``mail`` for anything that you added to paperless via its mail processing capabilities.
-* A tag ``missing_metadata`` when you still need to add some metadata to a document, but can't
- or don't want to do this right now.
-
-.. _basic-usage_searching:
-
-Searching
-#########
-
-Paperless offers an extensive searching mechanism that is designed to allow you to quickly
-find a document you're looking for (for example, that thing that just broke and you bought
-a couple months ago, that contract you signed 8 years ago).
-
-When you search paperless for a document, it tries to match this query against your documents.
-Paperless will look for matching documents by inspecting their content, title, correspondent,
-type and tags. Paperless returns a scored list of results, so that documents matching your query
-better will appear further up in the search results.
-
-By default, paperless returns only documents which contain all words typed in the search bar.
-However, paperless also offers advanced search syntax if you want to drill down the results
-further.
-
-Matching documents with logical expressions:
-
-.. code::
-
- shopname AND (product1 OR product2)
-
-Matching specific tags, correspondents or types:
-
-.. code::
-
- type:invoice tag:unpaid
- correspondent:university certificate
-
-Matching dates:
-
-.. code::
-
- created:[2005 to 2009]
- added:yesterday
- modified:today
-
-Matching inexact words:
-
-.. code::
-
- produ*name
-
-.. note::
-
- Inexact terms are hard for search indexes. These queries might take a while to execute. That's why paperless offers
- auto complete and query correction.
-
-All of these constructs can be combined as you see fit.
-If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language.
-Head over to `Whoosh query language <https://whoosh.readthedocs.io/en/latest/querylang.html>`_.
-For details on what date parsing utilities are available, see
-`Date parsing <https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries>`_.
-
-
-.. _usage-recommended_workflow:
-
-The recommended workflow
-########################
-
-Once you have familiarized yourself with paperless and are ready to use it
-for all your documents, the recommended workflow for managing your documents
-is as follows. This workflow also takes into account that some documents
-have to be kept in physical form, but still ensures that you get all the
-advantages for these documents as well.
-
-The following diagram shows how easy it is to manage your documents.
-
-.. image:: _static/recommended_workflow.png
-
-Preparations in paperless
-=========================
-
-* Create an inbox tag that gets assigned to all new documents.
-* Create a TODO tag.
-
-Processing of the physical documents
-====================================
-
-Keep a physical inbox. Whenever you receive a document that you need to
-archive, put it into your inbox. Regularly, do the following for all documents
-in your inbox:
-
-1. For each document, decide if you need to keep the document in physical
- form. This applies to certain important documents, such as contracts and
- certificates.
-2. If you need to keep the document, write a running number on the document
- before scanning, starting at one and counting upwards. This is the archive
- serial number, or ASN in short.
-3. Scan the document.
-4. If the document has an ASN assigned, store it in a *single* binder, sorted
- by ASN. Don't order this binder in any other way.
-5. If the document has no ASN, throw it away. Yay!
-
-Over time, you will notice that your physical binder will fill up. If it is
-full, label the binder with the range of ASNs in this binder (i.e., "Documents
-1 to 343"), store the binder in your cellar or elsewhere, and start a new
-binder.
-
-The idea behind this process is that you will never have to use the physical
-binders to find a document. If you need a specific physical document, you
-may find this document by:
-
-1. Searching in paperless for the document.
-2. Identify the ASN of the document, since it appears on the scan.
-3. Grab the relevant document binder and get the document. This is easy since
- they are sorted by ASN.
-
-Processing of documents in paperless
-====================================
-
-Once you have scanned in a document, proceed in paperless as follows.
-
-1. If the document has an ASN, assign the ASN to the document.
-2. Assign a correspondent to the document (i.e., your employer, bank, etc)
- This isn't strictly necessary but helps in finding a document when you need
- it.
-3. Assign a document type (i.e., invoice, bank statement, etc) to the document
- This isn't strictly necessary but helps in finding a document when you need
- it.
-4. Assign a proper title to the document (the name of an item you bought, the
- subject of the letter, etc)
-5. Check that the date of the document is correct. Paperless tries to read
- the date from the content of the document, but this fails sometimes if the
- OCR is bad or multiple dates appear on the document.
-6. Remove inbox tags from the documents.
-
-.. hint::
-
- You can setup manual matching rules for your correspondents and tags and
- paperless will assign them automatically. After consuming a couple documents,
- you can even ask paperless to *learn* when to assign tags and correspondents
- by itself. For details on this feature, see :ref:`advanced-matching`.
-
-Task management
-===============
-
-Some documents require attention and require you to act on the document. You
-may take two different approaches to handle these documents based on how
-regularly you intend to scan documents and use paperless.
-
-* If you scan and process your documents in paperless regularly, assign a
- TODO tag to all scanned documents that you need to process. Create a saved
- view on the dashboard that shows all documents with this tag.
-* If you do not scan documents regularly and use paperless solely for archiving,
- create a physical todo box next to your physical inbox and put documents you
- need to process in the TODO box. When you performed the task associated with
- the document, move it to the inbox.
echo ""
echo "The URL paperless will be available at. This is required if the"
echo "installation will be accessible via the web, otherwise can be left blank."
+echo "Example: https://paperless.example.com"
echo ""
ask "URL" ""
echo "Paperless requires you to configure the current time zone correctly."
echo "Otherwise, the dates of your documents may appear off by one day,"
echo "depending on where you are on earth."
+echo "Example: Europe/Berlin"
+echo "See here for a list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"
echo ""
ask "Current time zone" "$default_time_zone"
--- /dev/null
+site_name: Paperless-ngx
+theme:
+ name: material
+ logo: assets/logo.svg
+ font:
+ text: Roboto
+ code: Roboto Mono
+ palette:
+ # Palette toggle for light mode
+ - media: "(prefers-color-scheme: light)"
+ scheme: default
+ toggle:
+ icon: material/brightness-7
+ name: Switch to dark mode
+
+ # Palette toggle for dark mode
+ - media: "(prefers-color-scheme: dark)"
+ scheme: slate
+ toggle:
+ icon: material/brightness-4
+ name: Switch to light mode
+ features:
+ - navigation.tabs
+ - navigation.top
+ - toc.integrate
+ icon:
+ repo: fontawesome/brands/github
+ favicon: assets/favicon.png
+repo_url: https://github.com/paperless-ngx/paperless-ngx
+edit_uri: blob/main/docs/
+extra_css:
+ - assets/extra.css
+markdown_extensions:
+ - attr_list
+ - md_in_html
+ - def_list
+ - admonition
+ - tables
+ - pymdownx.highlight:
+ anchor_linenums: true
+ - pymdownx.superfences
+nav:
+ - index.md
+ - setup.md
+ - 'Basic Usage': usage.md
+ - configuration.md
+ - administration.md
+ - advanced_usage.md
+ - 'REST API': api.md
+ - development.md
+ - 'FAQs': faq.md
+ - troubleshooting.md
+ - changelog.md
+copyright: Copyright © 2016 - 2022 Daniel Quinn, Jonas Winkler, and the Paperless-ngx team
+extra:
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/paperless-ngx/paperless-ngx
+ - icon: fontawesome/brands/docker
+ link: https://hub.docker.com/r/paperlessngx/paperless-ngx
+ - icon: material/chat
+ link: https://matrix.to/#/#paperless:matrix.org
# Have a look at the docs for documentation.
-# https://paperless-ngx.readthedocs.io/en/latest/configuration.html
+# https://docs.paperless-ngx.com/configuration/
# Debug. Only enable this for development.
docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13
docker run -d -p 6379:6379 redis:latest
-docker run -p 3000:3000 -d gotenberg/gotenberg:7.6
+docker run -p 3000:3000 -d gotenberg/gotenberg:7.6 gotenberg --chromium-disable-javascript=true --chromium-allow-list="file:///tmp/.*"
docker run -p 9998:9998 -d ghcr.io/paperless-ngx/tika:latest
req.reply(response)
}
).as('savedViews')
+
+ cy.intercept('http://localhost:8000/api/mail_accounts/*', {
+ fixture: 'mail_accounts/mail_accounts.json',
+ })
+ cy.intercept('http://localhost:8000/api/mail_rules/*', {
+ fixture: 'mail_rules/mail_rules.json',
+ }).as('mailRules')
+ cy.intercept('http://localhost:8000/api/tasks/', {
+ fixture: 'tasks/tasks.json',
+ })
})
cy.fixture('documents/documents.json').then((documentsJson) => {
cy.viewport(1024, 1600)
cy.visit('/settings')
- cy.wait('@savedViews')
})
it('should activate / deactivate save button when settings change and are saved', () => {
})
it('should remove saved view from sidebar when unset', () => {
- cy.contains('a', 'Saved views').click()
+ cy.contains('a', 'Saved views').click().wait(2000)
cy.get('#show_in_sidebar_1').click()
- cy.contains('button', 'Save').click().wait('@savedViews')
+ cy.contains('button', 'Save').click().wait('@savedViews').wait(2000)
cy.contains('li', 'Inbox').should('not.exist')
})
it('should remove saved view from dashboard when unset', () => {
cy.contains('a', 'Saved views').click()
cy.get('#show_on_dashboard_1').click()
- cy.contains('button', 'Save').click().wait('@savedViews')
+ cy.contains('button', 'Save').click().wait('@savedViews').wait(2000)
cy.visit('/dashboard')
cy.get('app-saved-view-widget').contains('Inbox').should('not.exist')
})
})
})
+ it('should correctly switch between task tabs', () => {
+ cy.get('tbody').find('tr:visible').its('length').should('eq', 10) // double because collapsible result tr
+ cy.wait(500) // stabilizes the test, for some reason...
+ cy.get('app-tasks')
+ .find('a:visible')
+ .contains('Queued')
+ .first()
+ .click()
+ .wait(2000)
+ .then(() => {
+ cy.get('tbody').find('tr:visible').should('not.exist')
+ })
+ cy.get('app-tasks')
+ .find('a:visible')
+ .contains('Started')
+ .first()
+ .click()
+ .wait(2000)
+ .then(() => {
+ cy.get('tbody').find('tr:visible').its('length').should('eq', 2) // double because collapsible result tr
+ })
+ cy.get('app-tasks')
+ .find('a:visible')
+ .contains('Complete')
+ .first()
+ .click()
+ .wait('@tasks')
+ .wait(2000)
+ .then(() => {
+ cy.get('tbody').find('tr:visible').its('length').should('eq', 12) // double because collapsible result tr
+ })
+ })
+
it('should allow toggling all tasks in list and warn on dismiss', () => {
cy.get('thead').find('input[type="checkbox"]').first().click()
cy.get('body').find('button').contains('Dismiss selected').first().click()
--- /dev/null
+{
+ "count": 2,
+ "next": null,
+ "previous": null,
+ "results": [
+ {
+ "id": 1,
+ "name": "IMAP Server",
+ "imap_server": "imap.example.com",
+ "imap_port": 993,
+ "imap_security": 2,
+ "username": "inbox@example.com",
+ "password": "pass",
+ "character_set": "UTF-8"
+ },
+ {
+ "id": 2,
+ "name": "Gmail",
+ "imap_server": "imap.gmail.com",
+ "imap_port": 993,
+ "imap_security": 2,
+ "username": "user@gmail.com",
+ "password": "pass",
+ "character_set": "UTF-8"
+ }
+ ]
+}
--- /dev/null
+{
+ "count": 1,
+ "next": null,
+ "previous": null,
+ "results": [
+ {
+ "id": 1,
+ "name": "Gmail",
+ "account": 2,
+ "folder": "INBOX",
+ "filter_from": null,
+ "filter_subject": "[paperless]",
+ "filter_body": null,
+ "filter_attachment_filename": null,
+ "maximum_age": 30,
+ "action": 3,
+ "action_parameter": null,
+ "assign_title_from": 1,
+ "assign_tags": [
+ 9
+ ],
+ "assign_correspondent_from": 1,
+ "assign_correspondent": 2,
+ "assign_document_type": null,
+ "order": 0,
+ "attachment_type": 2
+ }
+ ]
+}
-{"count":3,"next":null,"previous":null,"results":[{"id":1,"name":"Inbox","show_on_dashboard":true,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"18"}]},{"id":2,"name":"Recently Added","show_on_dashboard":true,"show_in_sidebar":false,"sort_field":"created","sort_reverse":true,"filter_rules":[]},{"id":11,"name":"Taxes","show_on_dashboard":false,"show_in_sidebar":true,"sort_field":"created","sort_reverse":true,"filter_rules":[{"rule_type":6,"value":"39"}]}]}
+{
+ "count": 3,
+ "next": null,
+ "previous": null,
+ "results": [
+ {
+ "id": 1,
+ "name": "Inbox",
+ "show_on_dashboard": true,
+ "show_in_sidebar": true,
+ "sort_field": "created",
+ "sort_reverse": true,
+ "filter_rules": [
+ {
+ "rule_type": 6,
+ "value": "18"
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "name": "Recently Added",
+ "show_on_dashboard": true,
+ "show_in_sidebar": false,
+ "sort_field": "created",
+ "sort_reverse": true,
+ "filter_rules": []
+ },
+ {
+ "id": 11,
+ "name": "Taxes",
+ "show_on_dashboard": false,
+ "show_in_sidebar": true,
+ "sort_field": "created",
+ "sort_reverse": true,
+ "filter_rules": [
+ {
+ "rule_type": 6,
+ "value": "39"
+ }
+ ]
+ }
+ ]
+}
"result": "sample 2.pdf: Not consuming sample 2.pdf: It is a duplicate. : Traceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ngx.nosync-udqDZzaE/lib/python3.8/site-packages/django_q/cluster.py\", line 432, in worker\n res = f(*task[\"args\"], **task[\"kwargs\"])\n File \"/Users/admin/Documents/paperless-ngx/src/documents/tasks.py\", line 316, in consume_file\n document = Consumer().try_consume_file(\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 218, in try_consume_file\n self.pre_check_duplicate()\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 113, in pre_check_duplicate\n self._fail(\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 84, in _fail\n raise ConsumerError(f\"{self.filename}: {log_message or message}\")\ndocuments.consumer.ConsumerError: sample 2.pdf: Not consuming sample 2.pdf: It is a duplicate.\n",
"status": "FAILURE",
"task_id": "d8ddbe298a42427d82553206ddf0bc94",
- "name": "sample 2.pdf",
- "created": "2022-05-26T23:17:38.333474-07:00",
+ "task_file_name": "sample 2.pdf",
+ "date_created": "2022-05-26T23:17:38.333474-07:00",
+ "date_done": null,
"acknowledged": false,
- "attempted_task": {
- "id": "d8ddbe298a42427d82553206ddf0bc94",
- "name": "sample 2.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtanJxNGs1aHOUhZQu",
- "kwargs": "gAWVzQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMc2FtcGxlIDIucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDcyMGExYjI5LWI2OTYtNDY3My05Y2ZmLTJkY2ZiZWNmNWViMpSMEG92ZXJyaWRlX2NyZWF0ZWSUTnUu",
- "result": "gAWVMQQAAAAAAABYKgQAAHNhbXBsZSAyLnBkZjogTm90IGNvbnN1bWluZyBzYW1wbGUgMi5wZGY6IEl0IGlzIGEgZHVwbGljYXRlLiA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3Mtbmd4Lm5vc3luYy11ZHFEWnphRS9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDMyLCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDMxNiwgaW4gY29uc3VtZV9maWxlCiAgICBkb2N1bWVudCA9IENvbnN1bWVyKCkudHJ5X2NvbnN1bWVfZmlsZSgKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDIxOCwgaW4gdHJ5X2NvbnN1bWVfZmlsZQogICAgc2VsZi5wcmVfY2hlY2tfZHVwbGljYXRlKCkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDExMywgaW4gcHJlX2NoZWNrX2R1cGxpY2F0ZQogICAgc2VsZi5fZmFpbCgKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDg0LCBpbiBfZmFpbAogICAgcmFpc2UgQ29uc3VtZXJFcnJvcihmIntzZWxmLmZpbGVuYW1lfToge2xvZ19tZXNzYWdlIG9yIG1lc3NhZ2V9IikKZG9jdW1lbnRzLmNvbnN1bWVyLkNvbnN1bWVyRXJyb3I6IHNhbXBsZSAyLnBkZjogTm90IGNvbnN1bWluZyBzYW1wbGUgMi5wZGY6IEl0IGlzIGEgZHVwbGljYXRlLgqULg==",
- "group": null,
- "started": "2022-05-26T23:17:37.702432-07:00",
- "stopped": "2022-05-26T23:17:38.313306-07:00",
- "success": false,
- "attempt_count": 1
- }
+ "related_document": null
},
{
"id": 132,
"result": " : Traceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 131, in get_version\n env=env,\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 68, in run\n proc = subprocess_run(args, env=env, **kwargs)\n File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 423, in run\n with Popen(*popenargs, **kwargs) as process:\n File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 729, in __init__\n restore_signals, start_new_session)\n File \"/Users/admin/opt/anaconda3/envs/paperless-ng/lib/python3.6/subprocess.py\", line 1364, in _execute_child\n raise child_exception_type(errno_num, err_msg, err_filename)\nFileNotFoundError: [Errno 2] No such file or directory: 'unpaper': 'unpaper'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 287, in check_external_program\n found_version = version_checker()\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_exec/unpaper.py\", line 34, in version\n return get_version('unpaper')\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 137, in get_version\n ) from e\nocrmypdf.exceptions.MissingDependencyError: Could not find program 'unpaper' on the PATH\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_tesseract/parsers.py\", line 176, in parse\n ocrmypdf.ocr(**ocr_args)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/api.py\", line 315, in ocr\n check_options(options, plugin_manager)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 260, in check_options\n _check_options(options, plugin_manager, ocr_engine_languages)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 250, in _check_options\n check_options_preprocessing(options)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/_validation.py\", line 128, in check_options_preprocessing\n required_for=['--clean, --clean-final'],\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/ocrmypdf/subprocess.py\", line 293, in check_external_program\n raise MissingDependencyError()\nocrmypdf.exceptions.MissingDependencyError\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 179, in try_consume_file\n document_parser.parse(self.path, mime_type, self.filename)\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_tesseract/parsers.py\", line 197, in parse\n raise ParseError(e)\ndocuments.parsers.ParseError\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n res = f(*task[\"args\"], **task[\"kwargs\"])\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 73, in consume_file\n override_tag_ids=override_tag_ids)\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 196, in try_consume_file\n raise ConsumerError(e)\ndocuments.consumer.ConsumerError\n",
"status": "FAILURE",
"task_id": "4c554075552c4cc985abd76e6f274c90",
- "name": "pdf-sample 10.24.48 PM.pdf",
- "created": "2022-05-26T14:26:07.846365-07:00",
- "acknowledged": null,
- "attempted_task": {
- "id": "4c554075552c4cc985abd76e6f274c90",
- "name": "pdf-sample 10.24.48 PM.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVKwAAAAAAAACMJS4uL2NvbnN1bWUvcGRmLXNhbXBsZSAxMC4yNC40OCBQTS5wZGaUhZQu",
- "kwargs": "gAWVGAAAAAAAAAB9lIwQb3ZlcnJpZGVfdGFnX2lkc5ROcy4=",
- "result": "gAWVzA8AAAAAAABYxQ8AACA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL3N1YnByb2Nlc3MucHkiLCBsaW5lIDEzMSwgaW4gZ2V0X3ZlcnNpb24KICAgIGVudj1lbnYsCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSA2OCwgaW4gcnVuCiAgICBwcm9jID0gc3VicHJvY2Vzc19ydW4oYXJncywgZW52PWVudiwgKiprd2FyZ3MpCiAgRmlsZSAiL1VzZXJzL21vb25lci9vcHQvYW5hY29uZGEzL2VudnMvcGFwZXJsZXNzLW5nL2xpYi9weXRob24zLjYvc3VicHJvY2Vzcy5weSIsIGxpbmUgNDIzLCBpbiBydW4KICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgKiprd2FyZ3MpIGFzIHByb2Nlc3M6CiAgRmlsZSAiL1VzZXJzL21vb25lci9vcHQvYW5hY29uZGEzL2VudnMvcGFwZXJsZXNzLW5nL2xpYi9weXRob24zLjYvc3VicHJvY2Vzcy5weSIsIGxpbmUgNzI5LCBpbiBfX2luaXRfXwogICAgcmVzdG9yZV9zaWduYWxzLCBzdGFydF9uZXdfc2Vzc2lvbikKICBGaWxlICIvVXNlcnMvbW9vbmVyL29wdC9hbmFjb25kYTMvZW52cy9wYXBlcmxlc3MtbmcvbGliL3B5dGhvbjMuNi9zdWJwcm9jZXNzLnB5IiwgbGluZSAxMzY0LCBpbiBfZXhlY3V0ZV9jaGlsZAogICAgcmFpc2UgY2hpbGRfZXhjZXB0aW9uX3R5cGUoZXJybm9fbnVtLCBlcnJfbXNnLCBlcnJfZmlsZW5hbWUpCkZpbGVOb3RGb3VuZEVycm9yOiBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeTogJ3VucGFwZXInOiAndW5wYXBlcicKClRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSAyODcsIGluIGNoZWNrX2V4dGVybmFsX3Byb2dyYW0KICAgIGZvdW5kX3ZlcnNpb24gPSB2ZXJzaW9uX2NoZWNrZXIoKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvb2NybXlwZGYvX2V4ZWMvdW5wYXBlci5weSIsIGxpbmUgMzQsIGluIHZlcnNpb24KICAgIHJldHVybiBnZXRfdmVyc2lvbigndW5wYXBlcicpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9zdWJwcm9jZXNzLnB5IiwgbGluZSAxMzcsIGluIGdldF92ZXJzaW9uCiAgICApIGZyb20gZQpvY3JteXBkZi5leGNlcHRpb25zLk1pc3NpbmdEZXBlbmRlbmN5RXJyb3I6IENvdWxkIG5vdCBmaW5kIHByb2dyYW0gJ3VucGFwZXInIG9uIHRoZSBQQVRICgpEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6CgpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvcGFwZXJsZXNzX3Rlc3NlcmFjdC9wYXJzZXJzLnB5IiwgbGluZSAxNzYsIGluIHBhcnNlCiAgICBvY3JteXBkZi5vY3IoKipvY3JfYXJncykKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL2FwaS5weSIsIGxpbmUgMzE1LCBpbiBvY3IKICAgIGNoZWNrX29wdGlvbnMob3B0aW9ucywgcGx1Z2luX21hbmFnZXIpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMjYwLCBpbiBjaGVja19vcHRpb25zCiAgICBfY2hlY2tfb3B0aW9ucyhvcHRpb25zLCBwbHVnaW5fbWFuYWdlciwgb2NyX2VuZ2luZV9sYW5ndWFnZXMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMjUwLCBpbiBfY2hlY2tfb3B0aW9ucwogICAgY2hlY2tfb3B0aW9uc19wcmVwcm9jZXNzaW5nKG9wdGlvbnMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9vY3JteXBkZi9fdmFsaWRhdGlvbi5weSIsIGxpbmUgMTI4LCBpbiBjaGVja19vcHRpb25zX3ByZXByb2Nlc3NpbmcKICAgIHJlcXVpcmVkX2Zvcj1bJy0tY2xlYW4sIC0tY2xlYW4tZmluYWwnXSwKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL29jcm15cGRmL3N1YnByb2Nlc3MucHkiLCBsaW5lIDI5MywgaW4gY2hlY2tfZXh0ZXJuYWxfcHJvZ3JhbQogICAgcmFpc2UgTWlzc2luZ0RlcGVuZGVuY3lFcnJvcigpCm9jcm15cGRmLmV4Y2VwdGlvbnMuTWlzc2luZ0RlcGVuZGVuY3lFcnJvcgoKRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOgoKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMTc5LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBkb2N1bWVudF9wYXJzZXIucGFyc2Uoc2VsZi5wYXRoLCBtaW1lX3R5cGUsIHNlbGYuZmlsZW5hbWUpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvcGFwZXJsZXNzX3Rlc3NlcmFjdC9wYXJzZXJzLnB5IiwgbGluZSAxOTcsIGluIHBhcnNlCiAgICByYWlzZSBQYXJzZUVycm9yKGUpCmRvY3VtZW50cy5wYXJzZXJzLlBhcnNlRXJyb3IKCkR1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCBhbm90aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZDoKClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL2RqYW5nb19xL2NsdXN0ZXIucHkiLCBsaW5lIDQzNiwgaW4gd29ya2VyCiAgICByZXMgPSBmKCp0YXNrWyJhcmdzIl0sICoqdGFza1sia3dhcmdzIl0pCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL3Rhc2tzLnB5IiwgbGluZSA3MywgaW4gY29uc3VtZV9maWxlCiAgICBvdmVycmlkZV90YWdfaWRzPW92ZXJyaWRlX3RhZ19pZHMpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSAxOTYsIGluIHRyeV9jb25zdW1lX2ZpbGUKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZSkKZG9jdW1lbnRzLmNvbnN1bWVyLkNvbnN1bWVyRXJyb3IKlC4=",
- "group": null,
- "started": "2021-01-20T10:47:34.535478-08:00",
- "stopped": "2021-01-20T10:49:55.568010-08:00",
- "success": false,
- "attempt_count": 1
- }
+ "task_file_name": "pdf-sample 10.24.48 PM.pdf",
+ "date_created": "2022-05-26T14:26:07.846365-07:00",
+ "date_done": null,
+ "acknowledged": null
},
{
"id": 115,
"result": "2021-01-24 2021-01-20 sample_wide_orange.pdf: Document is a duplicate : Traceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n res = f(*task[\"args\"], **task[\"kwargs\"])\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 75, in consume_file\n task_id=task_id\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 168, in try_consume_file\n self.pre_check_duplicate()\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 85, in pre_check_duplicate\n self._fail(\"Document is a duplicate\")\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 53, in _fail\n raise ConsumerError(f\"{self.filename}: {message}\")\ndocuments.consumer.ConsumerError: 2021-01-24 2021-01-20 sample_wide_orange.pdf: Document is a duplicate\n",
"status": "FAILURE",
"task_id": "86494713646a4364b01da17aadca071d",
- "name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
- "created": "2022-05-26T14:26:07.817608-07:00",
- "acknowledged": null,
- "attempted_task": {
- "id": "86494713646a4364b01da17aadca071d",
- "name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtcTJ6NDlnbzaUhZQu",
- "kwargs": "gAWV2QAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwsMjAyMS0wMS0yNCAyMDIxLTAxLTIwIHNhbXBsZV93aWRlX29yYW5nZS5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkN2MwZTY1MmQtZDhkYy00OWU4LWI1ZmUtOGM3ZTkyZDlmOTI0lHUu",
- "result": "gAWV/AMAAAAAAABY9QMAADIwMjEtMDEtMjQgMjAyMS0wMS0yMCBzYW1wbGVfd2lkZV9vcmFuZ2UucGRmOiBEb2N1bWVudCBpcyBhIGR1cGxpY2F0ZSA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL2RqYW5nb19xL2NsdXN0ZXIucHkiLCBsaW5lIDQzNiwgaW4gd29ya2VyCiAgICByZXMgPSBmKCp0YXNrWyJhcmdzIl0sICoqdGFza1sia3dhcmdzIl0pCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL3Rhc2tzLnB5IiwgbGluZSA3NSwgaW4gY29uc3VtZV9maWxlCiAgICB0YXNrX2lkPXRhc2tfaWQKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDE2OCwgaW4gdHJ5X2NvbnN1bWVfZmlsZQogICAgc2VsZi5wcmVfY2hlY2tfZHVwbGljYXRlKCkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvY29uc3VtZXIucHkiLCBsaW5lIDg1LCBpbiBwcmVfY2hlY2tfZHVwbGljYXRlCiAgICBzZWxmLl9mYWlsKCJEb2N1bWVudCBpcyBhIGR1cGxpY2F0ZSIpCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZy9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSA1MywgaW4gX2ZhaWwKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZiJ7c2VsZi5maWxlbmFtZX06IHttZXNzYWdlfSIpCmRvY3VtZW50cy5jb25zdW1lci5Db25zdW1lckVycm9yOiAyMDIxLTAxLTI0IDIwMjEtMDEtMjAgc2FtcGxlX3dpZGVfb3JhbmdlLnBkZjogRG9jdW1lbnQgaXMgYSBkdXBsaWNhdGUKlC4=",
- "group": null,
- "started": "2021-01-26T00:21:05.379583-08:00",
- "stopped": "2021-01-26T00:21:06.449626-08:00",
- "success": false,
- "attempt_count": 1
- }
+ "task_file_name": "2021-01-24 2021-01-20 sample_wide_orange.pdf",
+ "date_created": "2022-05-26T14:26:07.817608-07:00",
+ "date_done": null,
+ "acknowledged": null
},
{
"id": 85,
"result": "cannot open resource : Traceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/django_q/cluster.py\", line 436, in worker\n res = f(*task[\"args\"], **task[\"kwargs\"])\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/tasks.py\", line 81, in consume_file\n task_id=task_id\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/consumer.py\", line 244, in try_consume_file\n self.path, mime_type, self.filename)\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/documents/parsers.py\", line 302, in get_optimised_thumbnail\n thumbnail = self.get_thumbnail(document_path, mime_type, file_name)\n File \"/Users/admin/Documents/Work/Contributions/paperless-ng/src/paperless_text/parsers.py\", line 29, in get_thumbnail\n layout_engine=ImageFont.LAYOUT_BASIC)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 852, in truetype\n return freetype(font)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 849, in freetype\n return FreeTypeFont(font, size, index, encoding, layout_engine)\n File \"/Users/admin/.local/share/virtualenvs/paperless-ng/lib/python3.6/site-packages/PIL/ImageFont.py\", line 210, in __init__\n font, size, index, encoding, layout_engine=layout_engine\nOSError: cannot open resource\n",
"status": "FAILURE",
"task_id": "abca803fa46342e1ac81f3d3f2080e79",
- "name": "simple.txt",
- "created": "2022-05-26T14:26:07.771541-07:00",
- "acknowledged": null,
- "attempted_task": {
- "id": "abca803fa46342e1ac81f3d3f2080e79",
- "name": "simple.txt",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtd2RhbnB5NnGUhZQu",
- "kwargs": "gAWVtwAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwKc2ltcGxlLnR4dJSMDm92ZXJyaWRlX3RpdGxllE6MGW92ZXJyaWRlX2NvcnJlc3BvbmRlbnRfaWSUTowZb3ZlcnJpZGVfZG9jdW1lbnRfdHlwZV9pZJROjBBvdmVycmlkZV90YWdfaWRzlE6MB3Rhc2tfaWSUjCQ3ZGE0OTU4ZC0zM2UwLTQ1OGMtYTE0ZC1kMmU0NmE0NWY4Y2SUdS4=",
- "result": "gAWV5QUAAAAAAABY3gUAAGNhbm5vdCBvcGVuIHJlc291cmNlIDogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDM2LCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDgxLCBpbiBjb25zdW1lX2ZpbGUKICAgIHRhc2tfaWQ9dGFza19pZAogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMjQ0LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBzZWxmLnBhdGgsIG1pbWVfdHlwZSwgc2VsZi5maWxlbmFtZSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5nL3NyYy9kb2N1bWVudHMvcGFyc2Vycy5weSIsIGxpbmUgMzAyLCBpbiBnZXRfb3B0aW1pc2VkX3RodW1ibmFpbAogICAgdGh1bWJuYWlsID0gc2VsZi5nZXRfdGh1bWJuYWlsKGRvY3VtZW50X3BhdGgsIG1pbWVfdHlwZSwgZmlsZV9uYW1lKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmcvc3JjL3BhcGVybGVzc190ZXh0L3BhcnNlcnMucHkiLCBsaW5lIDI5LCBpbiBnZXRfdGh1bWJuYWlsCiAgICBsYXlvdXRfZW5naW5lPUltYWdlRm9udC5MQVlPVVRfQkFTSUMpCiAgRmlsZSAiL1VzZXJzL21vb25lci8ubG9jYWwvc2hhcmUvdmlydHVhbGVudnMvcGFwZXJsZXNzLW5nLTc2QnVKbEVJL2xpYi9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9QSUwvSW1hZ2VGb250LnB5IiwgbGluZSA4NTIsIGluIHRydWV0eXBlCiAgICByZXR1cm4gZnJlZXR5cGUoZm9udCkKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3MtbmctNzZCdUpsRUkvbGliL3B5dGhvbjMuNi9zaXRlLXBhY2thZ2VzL1BJTC9JbWFnZUZvbnQucHkiLCBsaW5lIDg0OSwgaW4gZnJlZXR5cGUKICAgIHJldHVybiBGcmVlVHlwZUZvbnQoZm9udCwgc2l6ZSwgaW5kZXgsIGVuY29kaW5nLCBsYXlvdXRfZW5naW5lKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvLmxvY2FsL3NoYXJlL3ZpcnR1YWxlbnZzL3BhcGVybGVzcy1uZy03NkJ1SmxFSS9saWIvcHl0aG9uMy42L3NpdGUtcGFja2FnZXMvUElML0ltYWdlRm9udC5weSIsIGxpbmUgMjEwLCBpbiBfX2luaXRfXwogICAgZm9udCwgc2l6ZSwgaW5kZXgsIGVuY29kaW5nLCBsYXlvdXRfZW5naW5lPWxheW91dF9lbmdpbmUKT1NFcnJvcjogY2Fubm90IG9wZW4gcmVzb3VyY2UKlC4=",
- "group": null,
- "started": "2021-03-06T14:23:56.974715-08:00",
- "stopped": "2021-03-06T14:24:28.011772-08:00",
- "success": false,
- "attempt_count": 1
- }
+ "task_file_name": "simple.txt",
+ "date_created": "2022-05-26T14:26:07.771541-07:00",
+ "date_done": null,
+ "acknowledged": null
},
{
"id": 41,
"result": "commands.txt: Not consuming commands.txt: It is a duplicate. : Traceback (most recent call last):\n File \"/Users/admin/.local/share/virtualenvs/paperless-ngx.nosync-udqDZzaE/lib/python3.8/site-packages/django_q/cluster.py\", line 432, in worker\n res = f(*task[\"args\"], **task[\"kwargs\"])\n File \"/Users/admin/Documents/paperless-ngx/src/documents/tasks.py\", line 70, in consume_file\n document = Consumer().try_consume_file(\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 199, in try_consume_file\n self.pre_check_duplicate()\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 97, in pre_check_duplicate\n self._fail(\n File \"/Users/admin/Documents/paperless-ngx/src/documents/consumer.py\", line 69, in _fail\n raise ConsumerError(f\"{self.filename}: {log_message or message}\")\ndocuments.consumer.ConsumerError: commands.txt: Not consuming commands.txt: It is a duplicate.\n",
"status": "FAILURE",
"task_id": "0af67672e8e14404b060d4cf8f69313d",
- "name": "commands.txt",
- "created": "2022-05-26T14:26:07.704247-07:00",
- "acknowledged": null,
- "attempted_task": {
- "id": "0af67672e8e14404b060d4cf8f69313d",
- "name": "commands.txt",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtZ3h4YjNxODaUhZQu",
- "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMY29tbWFuZHMudHh0lIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDRkMjhmMmJiLTJkMzAtNGQzNi1iNjM5LWU2YzQ5OTU3OGVlY5R1Lg==",
- "result": "gAWVLwQAAAAAAABYKAQAAGNvbW1hbmRzLnR4dDogTm90IGNvbnN1bWluZyBjb21tYW5kcy50eHQ6IEl0IGlzIGEgZHVwbGljYXRlLiA6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICIvVXNlcnMvbW9vbmVyLy5sb2NhbC9zaGFyZS92aXJ0dWFsZW52cy9wYXBlcmxlc3Mtbmd4Lm5vc3luYy11ZHFEWnphRS9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvZGphbmdvX3EvY2x1c3Rlci5weSIsIGxpbmUgNDMyLCBpbiB3b3JrZXIKICAgIHJlcyA9IGYoKnRhc2tbImFyZ3MiXSwgKip0YXNrWyJrd2FyZ3MiXSkKICBGaWxlICIvVXNlcnMvbW9vbmVyL0RvY3VtZW50cy9Xb3JrL0Rldi5ub3N5bmMvQ29udHJpYnV0aW9ucy9wYXBlcmxlc3Mtbmd4L3NyYy9kb2N1bWVudHMvdGFza3MucHkiLCBsaW5lIDcwLCBpbiBjb25zdW1lX2ZpbGUKICAgIGRvY3VtZW50ID0gQ29uc3VtZXIoKS50cnlfY29uc3VtZV9maWxlKAogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvRGV2Lm5vc3luYy9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZ3gvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgMTk5LCBpbiB0cnlfY29uc3VtZV9maWxlCiAgICBzZWxmLnByZV9jaGVja19kdXBsaWNhdGUoKQogIEZpbGUgIi9Vc2Vycy9tb29uZXIvRG9jdW1lbnRzL1dvcmsvRGV2Lm5vc3luYy9Db250cmlidXRpb25zL3BhcGVybGVzcy1uZ3gvc3JjL2RvY3VtZW50cy9jb25zdW1lci5weSIsIGxpbmUgOTcsIGluIHByZV9jaGVja19kdXBsaWNhdGUKICAgIHNlbGYuX2ZhaWwoCiAgRmlsZSAiL1VzZXJzL21vb25lci9Eb2N1bWVudHMvV29yay9EZXYubm9zeW5jL0NvbnRyaWJ1dGlvbnMvcGFwZXJsZXNzLW5neC9zcmMvZG9jdW1lbnRzL2NvbnN1bWVyLnB5IiwgbGluZSA2OSwgaW4gX2ZhaWwKICAgIHJhaXNlIENvbnN1bWVyRXJyb3IoZiJ7c2VsZi5maWxlbmFtZX06IHtsb2dfbWVzc2FnZSBvciBtZXNzYWdlfSIpCmRvY3VtZW50cy5jb25zdW1lci5Db25zdW1lckVycm9yOiBjb21tYW5kcy50eHQ6IE5vdCBjb25zdW1pbmcgY29tbWFuZHMudHh0OiBJdCBpcyBhIGR1cGxpY2F0ZS4KlC4=",
- "group": null,
- "started": "2022-03-10T22:26:32.548772-08:00",
- "stopped": "2022-03-10T22:26:32.879916-08:00",
- "success": false,
- "attempt_count": 1
- }
+ "task_file_name": "commands.txt",
+ "date_created": "2022-05-26T14:26:07.704247-07:00",
+ "date_done": null,
+ "acknowledged": null
},
{
"id": 10,
"result": "Success. New document id 260 created",
"status": "SUCCESS",
"task_id": "b7629a0f41bd40c7a3ea4680341321b5",
- "name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
- "created": "2022-05-26T14:26:07.670577-07:00",
+ "task_file_name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
+ "date_created": "2022-05-26T14:26:07.670577-07:00",
+ "date_done": "2022-05-26T14:26:07.670577-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "b7629a0f41bd40c7a3ea4680341321b5",
- "name": "2022-03-24+Sonstige+ScanPC2022-03-24_081058.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtc25mOW11ZW+UhZQu",
- "kwargs": "gAWV3AAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwvMjAyMi0wMy0yNCtTb25zdGlnZStTY2FuUEMyMDIyLTAzLTI0XzA4MTA1OC5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkNTdmMmQwMGItY2Q0Ny00YzQ3LTlmOTctODFlOTllMTJhMjMylHUu",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjAgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-03-24T08:19:32.117861-07:00",
- "stopped": "2022-03-24T08:20:10.239201-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 260
},
{
"id": 9,
"result": "Success. New document id 261 created",
"status": "SUCCESS",
"task_id": "02e276a86a424ccfb83309df5d8594be",
- "name": "2sample-pdf-with-images.pdf",
- "created": "2022-05-26T14:26:07.668987-07:00",
+ "task_file_name": "2sample-pdf-with-images.pdf",
+ "date_created": "2022-05-26T14:26:07.668987-07:00",
+ "date_done": "2022-05-26T14:26:07.668987-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "02e276a86a424ccfb83309df5d8594be",
- "name": "2sample-pdf-with-images.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtaXJ3cjZzOGeUhZQu",
- "kwargs": "gAWVyAAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwbMnNhbXBsZS1wZGYtd2l0aC1pbWFnZXMucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDFlYTczMjhhLTk3MjctNDJiMC1iMTEyLTAzZjU3MzQ2MmRiNpR1Lg==",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjEgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-03-28T23:12:41.286318-07:00",
- "stopped": "2022-03-28T23:13:00.523505-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 261
},
{
"id": 8,
"result": "Success. New document id 262 created",
"status": "SUCCESS",
"task_id": "41229b8be9b445c0a523697d0f58f13e",
- "name": "2sample-pdf-with-images_pw.pdf",
- "created": "2022-05-26T14:26:07.667993-07:00",
+ "task_file_name": "2sample-pdf-with-images_pw.pdf",
+ "date_created": "2022-05-26T14:26:07.667993-07:00",
+ "date_done": "2022-05-26T14:26:07.667993-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "41229b8be9b445c0a523697d0f58f13e",
- "name": "2sample-pdf-with-images_pw.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtN2tfejA0MTGUhZQu",
- "kwargs": "gAWVywAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIweMnNhbXBsZS1wZGYtd2l0aC1pbWFnZXNfcHcucGRmlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDk5YTgyOTc3LWU1MWUtNGJjYS04MjM4LTNkNzdhZTJhNjZmYZR1Lg==",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjIgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-03-28T23:43:53.171963-07:00",
- "stopped": "2022-03-28T23:43:56.965257-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 262
},
{
"id": 6,
"result": "Success. New document id 264 created",
"status": "SUCCESS",
"task_id": "bbbca32d408c4619bd0b512a8327c773",
- "name": "homebridge.log",
- "created": "2022-05-26T14:26:07.665560-07:00",
+ "task_file_name": "homebridge.log",
+ "date_created": "2022-05-26T14:26:07.665560-07:00",
+ "date_done": "2022-05-26T14:26:07.665560-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "bbbca32d408c4619bd0b512a8327c773",
- "name": "homebridge.log",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQteGo4aW9zYXaUhZQu",
- "kwargs": "gAWVuwAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwOaG9tZWJyaWRnZS5sb2eUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkNzY0NzdhNWEtNzk0Ni00NWU0LWE3MDktNzQzNDg0ZDE2YTUxlHUu",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjQgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-03-29T22:56:16.053026-07:00",
- "stopped": "2022-03-29T22:56:21.196179-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 264
},
{
"id": 5,
"result": "Success. New document id 265 created",
"status": "SUCCESS",
"task_id": "00ab285ab4bf482ab30c7d580b252ecb",
- "name": "IMG_7459.PNG",
- "created": "2022-05-26T14:26:07.664506-07:00",
+ "task_file_name": "IMG_7459.PNG",
+ "date_created": "2022-05-26T14:26:07.664506-07:00",
+ "date_done": "2022-05-26T14:26:07.664506-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "00ab285ab4bf482ab30c7d580b252ecb",
- "name": "IMG_7459.PNG",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtOGF5NDNfZjeUhZQu",
- "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMSU1HXzc0NTkuUE5HlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJDYxMTNhNzRlLTAwOWMtNGJhYi1hMjk1LTFmNjMwMzZmMTc4ZpR1Lg==",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjUgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-04-05T13:19:47.490282-07:00",
- "stopped": "2022-04-05T13:21:36.782264-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 265
},
{
"id": 3,
"result": "Success. New document id 267 created",
"status": "SUCCESS",
"task_id": "289c5163cfec410db42948a0cacbeb9c",
- "name": "IMG_7459.PNG",
- "created": "2022-05-26T14:26:07.659661-07:00",
+ "task_file_name": "IMG_7459.PNG",
+ "date_created": "2022-05-26T14:26:07.659661-07:00",
+ "date_done": "2022-05-26T14:26:07.659661-07:00",
"acknowledged": false,
- "attempted_task": {
- "id": "289c5163cfec410db42948a0cacbeb9c",
- "name": "IMG_7459.PNG",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtNzRuY2p2aXGUhZQu",
- "kwargs": "gAWVuQAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwMSU1HXzc0NTkuUE5HlIwOb3ZlcnJpZGVfdGl0bGWUTowZb3ZlcnJpZGVfY29ycmVzcG9uZGVudF9pZJROjBlvdmVycmlkZV9kb2N1bWVudF90eXBlX2lklE6MEG92ZXJyaWRlX3RhZ19pZHOUTowHdGFza19pZJSMJGZjZDljMmFlLWFhZmEtNGJmMC05M2Y5LWE3ZGQxYmEzYWM1NZR1Lg==",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjcgY3JlYXRlZJQu",
- "group": null,
- "started": "2022-04-05T13:29:59.264441-07:00",
- "stopped": "2022-04-05T13:30:28.336185-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": 267
},
{
"id": 1,
"type": "file",
- "result": "Success. New document id 268 created",
- "status": "SUCCESS",
+ "result": null,
+ "status": "STARTED",
"task_id": "7a4ebdb2bde04311935284027ef8ca65",
- "name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
- "created": "2022-05-26T14:26:07.655276-07:00",
+ "task_file_name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
+ "date_created": "2022-05-26T14:26:07.655276-07:00",
+ "date_done": null,
"acknowledged": false,
- "attempted_task": {
- "id": "7a4ebdb2bde04311935284027ef8ca65",
- "name": "2019-08-04 DSA Questionnaire - 5-8-19.pdf",
- "func": "documents.tasks.consume_file",
- "hook": null,
- "args": "gAWVLgAAAAAAAACMKC90bXAvcGFwZXJsZXNzL3BhcGVybGVzcy11cGxvYWQtdXpscHl2NnmUhZQu",
- "kwargs": "gAWV1gAAAAAAAAB9lCiMEW92ZXJyaWRlX2ZpbGVuYW1llIwpMjAxOS0wOC0wNCBEU0EgUXVlc3Rpb25uYWlyZSAtIDUtOC0xOS5wZGaUjA5vdmVycmlkZV90aXRsZZROjBlvdmVycmlkZV9jb3JyZXNwb25kZW50X2lklE6MGW92ZXJyaWRlX2RvY3VtZW50X3R5cGVfaWSUTowQb3ZlcnJpZGVfdGFnX2lkc5ROjAd0YXNrX2lklIwkY2Q3YzBhZjgtN2Q4Ni00OGM0LTliNjgtNDQwMmQ4ZDZlOTNmlHUu",
- "result": "gAWVKAAAAAAAAACMJFN1Y2Nlc3MuIE5ldyBkb2N1bWVudCBpZCAyNjggY3JlYXRlZJQu",
- "group": null,
- "started": "2022-04-28T21:01:04.275850-07:00",
- "stopped": "2022-04-28T21:01:10.136884-07:00",
- "success": true,
- "attempt_count": 1
- }
+ "related_document": null
}
]
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e.
- *
- * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.carousel.next" datatype="html">
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.datepicker.select-month" datatype="html">
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.datepicker.select-year" datatype="html">
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.datepicker.previous-month" datatype="html">
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.datepicker.next-month" datatype="html">
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.first" datatype="html">
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.previous" datatype="html">
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.next" datatype="html">
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.last" datatype="html">
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.first-aria" datatype="html">
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.previous-aria" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.next-aria" datatype="html">
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.pagination.last-aria" datatype="html">
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
- <source><x id="INTERPOLATION" equiv-text="* The maxim"/></source>
+ <source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.hours" datatype="html">
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.MM" datatype="html">
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.minutes" datatype="html">
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.increment-hours" datatype="html">
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.SS" datatype="html">
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.seconds" datatype="html">
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.increment-seconds" datatype="html">
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.decrement-seconds" datatype="html">
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.PM" datatype="html">
<source><x id="INTERPOLATION"/></source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
<source><x id="INTERPOLATION"/></source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
</trans-unit>
<trans-unit id="7103632680753685326" datatype="html">
<context context-type="linenumber">114</context>
</context-group>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
</trans-unit>
<trans-unit id="9075755296812854717" datatype="html">
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
</trans-unit>
<trans-unit id="7495498057594070122" datatype="html">
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
</trans-unit>
<trans-unit id="1334220418719920556" datatype="html">
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
</trans-unit>
<trans-unit id="5427326625898532358" datatype="html">
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
</trans-unit>
<trans-unit id="2804886236408698479" datatype="html">
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
</trans-unit>
<trans-unit id="4680387114119209483" datatype="html">
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
- </context-group>
- </trans-unit>
- <trans-unit id="8625288184670954104" datatype="html">
- <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">185</context>
</context-group>
</trans-unit>
- <trans-unit id="7643249460591212914" datatype="html">
- <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
+ <trans-unit id="8116994662047019809" datatype="html">
+ <source>Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">194</context>
</context-group>
</trans-unit>
<trans-unit id="7172877665285340082" datatype="html">
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">203</context>
</context-group>
</trans-unit>
<trans-unit id="7354947513482088740" datatype="html">
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">205</context>
</context-group>
</trans-unit>
<trans-unit id="4270528545616947218" datatype="html">
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">207</context>
</context-group>
</trans-unit>
<trans-unit id="5749300816154614125" datatype="html">
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">256</context>
</context-group>
</trans-unit>
<trans-unit id="2173456130768795374" datatype="html">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">189</context>
</context-group>
</trans-unit>
<trans-unit id="6988090220128974198" datatype="html">
<context context-type="linenumber">1</context>
</context-group>
</trans-unit>
- <trans-unit id="5041354590769758251" datatype="html">
- <source>Admin</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">178</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">181</context>
- </context-group>
- </trans-unit>
<trans-unit id="314315645942131479" datatype="html">
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">187</context>
+ <context context-type="linenumber">180</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">191</context>
+ <context context-type="linenumber">184</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">187</context>
</context-group>
</trans-unit>
<trans-unit id="1534029177398918729" datatype="html">
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">192</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">195</context>
</context-group>
</trans-unit>
<trans-unit id="5612903193691847840" datatype="html">
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">204</context>
+ <context context-type="linenumber">197</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">208</context>
+ <context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="4112664765954374539" datatype="html">
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">217</context>
+ <context context-type="linenumber">210</context>
</context-group>
</trans-unit>
<trans-unit id="1175891574282637937" datatype="html">
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">217</context>
+ <context context-type="linenumber">210</context>
</context-group>
</trans-unit>
<trans-unit id="9811291095862612" datatype="html">
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">221</context>
+ <context context-type="linenumber">214</context>
</context-group>
</trans-unit>
<trans-unit id="894819944961861800" datatype="html">
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">228,230</context>
+ <context context-type="linenumber">221,223</context>
</context-group>
</trans-unit>
<trans-unit id="509090351011426949" datatype="html">
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">239</context>
+ <context context-type="linenumber">232</context>
</context-group>
</trans-unit>
<trans-unit id="3011185103048412841" datatype="html">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">326</context>
+ <context context-type="linenumber">476</context>
</context-group>
</trans-unit>
<trans-unit id="2526035785704676448" datatype="html">
<context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">13</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">191</context>
+ <context context-type="linenumber">196</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">248</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">283</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
<context context-type="linenumber">16</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">21</context>
<context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">36</context>
+ </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">223</context>
+ <context context-type="linenumber">317</context>
</context-group>
</trans-unit>
<trans-unit id="6457471243969293847" datatype="html">
<source>Create new correspondent</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
- <context context-type="linenumber">25</context>
+ <context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="2059822531169388684" datatype="html">
<source>Edit correspondent</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
- <context context-type="linenumber">29</context>
+ <context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="6672809941092516947" datatype="html">
<source>Create new document type</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
- <context context-type="linenumber">25</context>
+ <context context-type="linenumber">20</context>
</context-group>
</trans-unit>
<trans-unit id="36335016091244220" datatype="html">
<source>Edit document type</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
- <context context-type="linenumber">29</context>
+ <context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="4561076822163447092" datatype="html">
<source>Create new item</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
- <context context-type="linenumber">52</context>
+ <context context-type="linenumber">49</context>
</context-group>
</trans-unit>
<trans-unit id="5324147361912094446" datatype="html">
<source>Edit item</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
- <context context-type="linenumber">56</context>
+ <context context-type="linenumber">53</context>
</context-group>
</trans-unit>
<trans-unit id="1699589597032579396" datatype="html">
<source>Could not save element: <x id="PH" equiv-text="error"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">57</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1505107477868159986" datatype="html">
+ <source>IMAP Server</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6575044156016560168" datatype="html">
+ <source>IMAP Port</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5418425343712813426" datatype="html">
+ <source>IMAP Security</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5248717555542428023" datatype="html">
+ <source>Username</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1431416938026210429" datatype="html">
+ <source>Password</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6124167940736826613" datatype="html">
+ <source>Character Set</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="8758081884575368561" datatype="html">
+ <source>Create new mail account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5559445021532852612" datatype="html">
+ <source>Edit mail account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="451418349275958054" datatype="html">
+ <source>No encryption</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3719080555538542367" datatype="html">
+ <source>SSL</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2620794666957669114" datatype="html">
+ <source>STARTTLS</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4086606389696938932" datatype="html">
+ <source>Account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">284</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="7046259383943324039" datatype="html">
+ <source>Folder</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1391527525114848695" datatype="html">
+ <source>Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="101686279614365671" datatype="html">
+ <source>Maximum age (days)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="7093509971705471817" datatype="html">
+ <source>Attachment type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5488632521862493221" datatype="html">
+ <source>Paperless will only process mails that match <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>all<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> of the filters specified below.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6925928412364847639" datatype="html">
+ <source>Filter from</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="8497813481090627874" datatype="html">
+ <source>Filter subject</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="7314357616097563149" datatype="html">
+ <source>Filter body</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5031687746498952417" datatype="html">
+ <source>Filter attachment filename</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4245210767172267486" datatype="html">
+ <source>Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="9216117865911519658" datatype="html">
+ <source>Action</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4274038999388817994" datatype="html">
+ <source>Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1261794314435932203" datatype="html">
+ <source>Action parameter</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6093797930511670257" datatype="html">
+ <source>Assign title from</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6695990587380209737" datatype="html">
+ <source>Assign document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">28</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4754802869258527587" datatype="html">
+ <source>Assign correspondent from</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">29</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4875491778188965469" datatype="html">
+ <source>Assign correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3147349817770432927" datatype="html">
+ <source>Create new mail rule</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">57</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3374331029704382439" datatype="html">
+ <source>Edit mail rule</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">61</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6233529027580744166" datatype="html">
+ <source>Only process attachments.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">98</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3860563069570088911" datatype="html">
+ <source>Process all files, including 'inline' attachments.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">102</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="7022070615528435141" datatype="html">
+ <source>Delete</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">111</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">97</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">181</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">214</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">261</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">296</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2784260611081866636" datatype="html">
+ <source>Move to specified folder</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">115</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4593278936733161020" datatype="html">
+ <source>Mark as read, don't process read mails</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2378921144019636516" datatype="html">
+ <source>Flag the mail, don't process flagged mails</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">123</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6457024618858980302" datatype="html">
+ <source>Tag the mail with specified tag, don't process tagged mails</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">127</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4673329664686432878" datatype="html">
+ <source>Use subject as title</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">136</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="8645471396972938185" datatype="html">
+ <source>Use attachment filename as title</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">140</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1568902914205618549" datatype="html">
+ <source>Do not assign a correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">149</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3567746385454588269" datatype="html">
+ <source>Use mail address</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">153</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="445154175758965852" datatype="html">
+ <source>Use name (or mail address if not available)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">157</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1258862217749148424" datatype="html">
+ <source>Use correspondent selected below</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts</context>
+ <context context-type="linenumber">161</context>
</context-group>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
<source>e.g.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
- <context context-type="linenumber">26</context>
+ <context context-type="linenumber">21</context>
</context-group>
</trans-unit>
<trans-unit id="1918584360573970155" datatype="html">
<source>or use slashes to add directories e.g.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
- <context context-type="linenumber">28</context>
+ <context context-type="linenumber">23</context>
</context-group>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
- <context context-type="linenumber">35</context>
+ <context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="3754859110054016570" datatype="html">
<source>Edit storage path</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
- <context context-type="linenumber">39</context>
+ <context context-type="linenumber">34</context>
</context-group>
</trans-unit>
<trans-unit id="9011959596901584887" datatype="html">
<source>Create new tag</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
- <context context-type="linenumber">26</context>
+ <context context-type="linenumber">21</context>
</context-group>
</trans-unit>
<trans-unit id="5872175735754226507" datatype="html">
<source>Edit tag</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">25</context>
</context-group>
</trans-unit>
<trans-unit id="1616102757855967475" datatype="html">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">93</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">222</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">308</context>
+ </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">19</context>
</context-group>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
<trans-unit id="4025397324401332794" datatype="html">
<source> Please enter a comment. </source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
- <context context-type="linenumber">5,7</context>
- </context-group>
- </trans-unit>
- <trans-unit id="2337485514607640701" datatype="html">
- <source>Add comment</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
- <context context-type="linenumber">11</context>
- </context-group>
- </trans-unit>
- <trans-unit id="5438997040668245251" datatype="html">
- <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
- <context context-type="linenumber">68</context>
- </context-group>
- </trans-unit>
- <trans-unit id="7593210124183303626" datatype="html">
- <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
- <context context-type="linenumber">83</context>
- </context-group>
- </trans-unit>
- <trans-unit id="1407560924967345762" datatype="html">
- <source>Page</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">3</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
- <context context-type="linenumber">15</context>
- </context-group>
- </trans-unit>
- <trans-unit id="2266163016683537825" datatype="html">
- <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">5</context>
- </context-group>
- </trans-unit>
- <trans-unit id="7022070615528435141" datatype="html">
- <source>Delete</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">11</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
- <context context-type="linenumber">97</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">46</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">46</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">46</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">46</context>
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+ <context context-type="linenumber">5,7</context>
</context-group>
+ </trans-unit>
+ <trans-unit id="2337485514607640701" datatype="html">
+ <source>Add comment</source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">65</context>
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+ <context context-type="linenumber">11</context>
</context-group>
+ </trans-unit>
+ <trans-unit id="5438997040668245251" datatype="html">
+ <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">65</context>
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+ <context context-type="linenumber">68</context>
</context-group>
+ </trans-unit>
+ <trans-unit id="7593210124183303626" datatype="html">
+ <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">65</context>
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+ <context context-type="linenumber">83</context>
</context-group>
+ </trans-unit>
+ <trans-unit id="1407560924967345762" datatype="html">
+ <source>Page</source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
- <context context-type="linenumber">65</context>
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">3</context>
</context-group>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">15</context>
</context-group>
+ </trans-unit>
+ <trans-unit id="2266163016683537825" datatype="html">
+ <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
<context-group purpose="location">
- <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">209</context>
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">5</context>
</context-group>
</trans-unit>
<trans-unit id="3099741642167775297" datatype="html">
<context context-type="linenumber">50</context>
</context-group>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">154</context>
+ <context context-type="linenumber">159</context>
</context-group>
</trans-unit>
<trans-unit id="3823219296477075982" datatype="html">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
- <context context-type="linenumber">153</context>
+ <context context-type="linenumber">177</context>
</context-group>
</trans-unit>
<trans-unit id="5382975254277698192" datatype="html">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
<context context-type="linenumber">389</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">560</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">619</context>
+ </context-group>
</trans-unit>
<trans-unit id="1181910457994920507" datatype="html">
<source>Proceed</source>
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
<context context-type="linenumber">391</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">562</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">621</context>
+ </context-group>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">208</context>
+ <context context-type="linenumber">213</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">250</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">285</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
<context context-type="linenumber">59</context>
</context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">260</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">295</context>
+ </context-group>
</trans-unit>
<trans-unit id="2509141182388535183" datatype="html">
<source>View</source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
</trans-unit>
<trans-unit id="4104807402967139762" datatype="html">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
</trans-unit>
<trans-unit id="6965614903949668392" datatype="html">
<context context-type="linenumber">39</context>
</context-group>
</trans-unit>
+ <trans-unit id="211408744872436427" datatype="html">
+ <source>Successfully created <x id="PH" equiv-text="this.typeName"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">127</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6328828522970676938" datatype="html">
+ <source>Error occurred while creating <x id="PH" equiv-text="this.typeName"/> : <x id="PH_1" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">132,134</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2541368547549828690" datatype="html">
+ <source>Successfully updated <x id="PH" equiv-text="this.typeName"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">150</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6151710751857751783" datatype="html">
+ <source>Error occurred while saving <x id="PH" equiv-text="this.typeName"/> : <x id="PH_1" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">155,157</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="4012132330507560812" datatype="html">
<source>Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">164</context>
</context-group>
</trans-unit>
<trans-unit id="8371896857609524947" datatype="html">
<source>Associated documents will not be deleted.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="5467489005440577210" datatype="html">
)"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
- <context context-type="linenumber">168,170</context>
+ <context context-type="linenumber">192,194</context>
</context-group>
</trans-unit>
<trans-unit id="1685061484835793745" datatype="html">
<context context-type="linenumber">2</context>
</context-group>
</trans-unit>
+ <trans-unit id="4798013226763881638" datatype="html">
+ <source>Open Django Admin</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">4</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
<source>General</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">10</context>
+ <context context-type="linenumber">15</context>
</context-group>
</trans-unit>
<trans-unit id="8671234314555525900" datatype="html">
<source>Appearance</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">13</context>
+ <context context-type="linenumber">18</context>
</context-group>
</trans-unit>
<trans-unit id="3777637051272512093" datatype="html">
<source>Display language</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">17</context>
+ <context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="53523152145406584" datatype="html">
<source>You need to reload the page after applying a new language.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">25</context>
+ <context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="3766032098416558788" datatype="html">
<source>Date display</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">32</context>
+ <context context-type="linenumber">37</context>
</context-group>
</trans-unit>
<trans-unit id="3733378544613473393" datatype="html">
<source>Date format</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
</trans-unit>
<trans-unit id="3407788781115661841" datatype="html">
<source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">51</context>
+ <context context-type="linenumber">56</context>
</context-group>
</trans-unit>
<trans-unit id="6290748171049664628" datatype="html">
<source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">55</context>
+ <context context-type="linenumber">60</context>
</context-group>
</trans-unit>
<trans-unit id="7189855711197998347" datatype="html">
<source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">59</context>
+ <context context-type="linenumber">64</context>
</context-group>
</trans-unit>
<trans-unit id="8939587804990976924" datatype="html">
<source>Items per page</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="8028535997917730106" datatype="html">
<source>Document editor</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">83</context>
+ <context context-type="linenumber">88</context>
</context-group>
</trans-unit>
<trans-unit id="6708098108196142028" datatype="html">
<source>Use PDF viewer provided by the browser</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">87</context>
+ <context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="9003921625412907981" datatype="html">
<source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">87</context>
+ <context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="3982403428275430291" datatype="html">
<source>Sidebar</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
</trans-unit>
<trans-unit id="4608457133854405683" datatype="html">
<source>Use 'slim' sidebar (icons only)</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">98</context>
+ <context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="1356890996281769972" datatype="html">
<source>Dark mode</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">105</context>
+ <context context-type="linenumber">110</context>
</context-group>
</trans-unit>
<trans-unit id="4913823100518391922" datatype="html">
<source>Use system settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">108</context>
+ <context context-type="linenumber">113</context>
</context-group>
</trans-unit>
<trans-unit id="5782828784040423650" datatype="html">
<source>Enable dark mode</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">109</context>
+ <context context-type="linenumber">114</context>
</context-group>
</trans-unit>
<trans-unit id="6336642923114460405" datatype="html">
<source>Invert thumbnails in dark mode</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
</trans-unit>
<trans-unit id="7983234071833154796" datatype="html">
<source>Theme Color</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">116</context>
+ <context context-type="linenumber">121</context>
</context-group>
</trans-unit>
<trans-unit id="7808756054397155068" datatype="html">
<source>Reset</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">125</context>
+ <context context-type="linenumber">130</context>
</context-group>
</trans-unit>
<trans-unit id="8901931207592071833" datatype="html">
<source>Update checking</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
</trans-unit>
<trans-unit id="7890007688616707209" datatype="html">
<source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Actual updating of the app must still be performed manually. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">134,137</context>
+ <context context-type="linenumber">139,142</context>
</context-group>
</trans-unit>
<trans-unit id="5489945693955857309" datatype="html">
<source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">139</context>
+ <context context-type="linenumber">144</context>
</context-group>
</trans-unit>
<trans-unit id="5070799004079086984" datatype="html">
<source>Enable update checking</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">141</context>
+ <context context-type="linenumber">146</context>
</context-group>
</trans-unit>
<trans-unit id="5478370193831195440" datatype="html">
<source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">141</context>
+ <context context-type="linenumber">146</context>
</context-group>
</trans-unit>
<trans-unit id="8508424367627989968" datatype="html">
<source>Bulk editing</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">145</context>
+ <context context-type="linenumber">150</context>
</context-group>
</trans-unit>
<trans-unit id="8158899674926420054" datatype="html">
<source>Show confirmation dialogs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">149</context>
+ <context context-type="linenumber">154</context>
</context-group>
</trans-unit>
<trans-unit id="6906812245033969309" datatype="html">
<source>Deleting documents will always ask for confirmation.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">149</context>
+ <context context-type="linenumber">154</context>
</context-group>
</trans-unit>
<trans-unit id="290238406234356122" datatype="html">
<source>Apply on close</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">150</context>
+ <context context-type="linenumber">155</context>
</context-group>
</trans-unit>
<trans-unit id="4666858503087488647" datatype="html">
<source>Enable comments</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">158</context>
+ <context context-type="linenumber">163</context>
</context-group>
</trans-unit>
<trans-unit id="5851560788527570644" datatype="html">
<source>Notifications</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
</trans-unit>
<trans-unit id="8545554728558600606" datatype="html">
<source>Document processing</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
</trans-unit>
<trans-unit id="3656786776644872398" datatype="html">
<source>Show notifications when new documents are detected</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
</trans-unit>
<trans-unit id="6057053428592387613" datatype="html">
<source>Show notifications when document processing completes successfully</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">174</context>
+ <context context-type="linenumber">179</context>
</context-group>
</trans-unit>
<trans-unit id="370315664367425513" datatype="html">
<source>Show notifications when document processing fails</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">180</context>
</context-group>
</trans-unit>
<trans-unit id="6838309441164918531" datatype="html">
<source>Suppress notifications on dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
</trans-unit>
<trans-unit id="2741919327232918179" datatype="html">
<source>This will suppress all messages about document processing status on the dashboard.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
</trans-unit>
<trans-unit id="6925788033494878061" datatype="html">
<source>Appears on</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">196</context>
+ <context context-type="linenumber">201</context>
</context-group>
</trans-unit>
<trans-unit id="7877440816920439876" datatype="html">
<source>No saved views defined.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
- <context context-type="linenumber">213</context>
+ <context context-type="linenumber">218</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1292737233370901804" datatype="html">
+ <source>Mail</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">231</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="8913167930428886792" datatype="html">
+ <source>Mail accounts</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">236</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1259421956660976189" datatype="html">
+ <source>Add Account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">241</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2188854519574316630" datatype="html">
+ <source>Server</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">249</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6235247415162820954" datatype="html">
+ <source>No mail accounts defined.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">267</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5364020217520256833" datatype="html">
+ <source>Mail rules</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">271</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="1372022816709469401" datatype="html">
+ <source>Add Rule</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">276</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6751234988479444294" datatype="html">
+ <source>No mail rules defined.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">302</context>
</context-group>
</trans-unit>
<trans-unit id="5610279464668232148" datatype="html">
<source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">217</context>
+ <context context-type="linenumber">367</context>
</context-group>
</trans-unit>
<trans-unit id="3891152409365583719" datatype="html">
<source>Settings saved</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">310</context>
+ <context context-type="linenumber">460</context>
</context-group>
</trans-unit>
<trans-unit id="7217000812750597833" datatype="html">
<source>Settings were saved successfully.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">311</context>
+ <context context-type="linenumber">461</context>
</context-group>
</trans-unit>
<trans-unit id="525012668859298131" datatype="html">
<source>Settings were saved successfully. Reload is required to apply some changes.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">315</context>
+ <context context-type="linenumber">465</context>
</context-group>
</trans-unit>
<trans-unit id="8491974984518503778" datatype="html">
<source>Reload now</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">316</context>
+ <context context-type="linenumber">466</context>
</context-group>
</trans-unit>
<trans-unit id="6839066544204061364" datatype="html">
<source>Use system language</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">334</context>
+ <context context-type="linenumber">484</context>
</context-group>
</trans-unit>
<trans-unit id="7729897675462249787" datatype="html">
<source>Use date format of display language</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">341</context>
+ <context context-type="linenumber">491</context>
</context-group>
</trans-unit>
<trans-unit id="8488620293789898901" datatype="html">
)"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
- <context context-type="linenumber">361,363</context>
+ <context context-type="linenumber">511,513</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6327501535846658797" datatype="html">
+ <source>Saved account "<x id="PH" equiv-text="newMailAccount.name"/>".</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">538</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6428427497555765743" datatype="html">
+ <source>Error saving account: <x id="PH" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">548</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="5641934153807844674" datatype="html">
+ <source>Confirm delete mail account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">558</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="2105352414355663637" datatype="html">
+ <source>This operation will permanently this mail account.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">559</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4233826387148482123" datatype="html">
+ <source>Deleted mail account</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">568</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="7443801450153832973" datatype="html">
+ <source>Error deleting mail account: <x id="PH" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">577</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="123368655395433699" datatype="html">
+ <source>Saved rule "<x id="PH" equiv-text="newMailRule.name"/>".</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">596</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4741216051394823471" datatype="html">
+ <source>Error saving rule: <x id="PH" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">607</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="3896080636020672118" datatype="html">
+ <source>Confirm delete mail rule</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">617</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="6183247517597275616" datatype="html">
+ <source>This operation will permanently this mail rule.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">618</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="9077981247971516916" datatype="html">
+ <source>Deleted mail rule</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">627</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="4740074357089345173" datatype="html">
+ <source>Error deleting mail rule: <x id="PH" equiv-text="e.toString()"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">636</context>
</context-group>
</trans-unit>
<trans-unit id="5101757640976222639" datatype="html">
"@angular/router": "~14.2.8",
"@ng-bootstrap/ng-bootstrap": "^13.0.0",
"@ng-select/ng-select": "^9.0.2",
- "@ngneat/dirty-check-forms": "^3.0.2",
+ "@ngneat/dirty-check-forms": "^3.0.3",
"@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.1",
"file-saver": "^2.0.5",
"ng2-pdf-viewer": "^9.1.2",
"ngx-color": "^8.0.3",
"ngx-cookie-service": "^14.0.1",
- "ngx-file-drop": "^14.0.1",
+ "ngx-file-drop": "^14.0.2",
"ngx-ui-tour-ng-bootstrap": "^11.1.0",
"rxjs": "~7.5.7",
- "tslib": "^2.3.1",
+ "tslib": "^2.4.1",
"uuid": "^9.0.0",
"zone.js": "~0.11.8"
},
"devDependencies": {
- "@angular-builders/jest": "14.0.1",
+ "@angular-builders/jest": "14.1.0",
"@angular-devkit/build-angular": "~14.2.7",
"@angular/cli": "~14.2.7",
"@angular/compiler-cli": "~14.2.8",
"concurrently": "7.4.0",
"jest": "28.1.3",
"jest-environment-jsdom": "^29.2.2",
- "jest-preset-angular": "^12.2.2",
+ "jest-preset-angular": "^12.2.3",
"ts-node": "~10.9.1",
"tslint": "~6.1.3",
"typescript": "~4.8.4",
}
},
"node_modules/@angular-builders/jest": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.0.1.tgz",
- "integrity": "sha512-ol+/u6KD7kX0AyQ8Mr6pPmsptNh89p+PJtXhcU9epzjJw1y1Y+SlXHGVWg8JseaGRfxo3FVshS/ZvTxoGsstTA==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.1.0.tgz",
+ "integrity": "sha512-uGXyJ40F7HXfoWwW1EK5U75sUUQ4zVireLYPUYWT1/t1vqizss0mIPR026bMWwScWJhetdopxlWcql4wfNuXyQ==",
"dev": true,
"dependencies": {
"@angular-devkit/architect": ">=0.1400.0 < 0.1500.0",
"@angular-devkit/core": "^14.0.0",
- "jest-preset-angular": "12.2.0",
+ "jest-preset-angular": "12.2.2",
"lodash": "^4.17.15"
},
"engines": {
"@types/tough-cookie": "*"
}
},
+ "node_modules/@angular-builders/jest/node_modules/acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ }
+ },
+ "node_modules/@angular-builders/jest/node_modules/acorn-globals/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/@angular-builders/jest/node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/@angular-builders/jest/node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
}
},
"node_modules/@angular-builders/jest/node_modules/jest-preset-angular": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.0.tgz",
- "integrity": "sha512-dXnPdcglVcJeXdnxrws3M/gxLlYWaZGU7JS+ffuiCfMzG0AO3EDo/wpsPsxvnjCZiov1uV7g7UD1dHtmOW/sEw==",
+ "version": "12.2.2",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
+ "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
"dev": true,
"dependencies": {
"bs-logger": "^0.2.6",
"node": ">= 4.0.0"
}
},
+ "node_modules/@angular-builders/jest/node_modules/w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "dependencies": {
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@angular-builders/jest/node_modules/whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.1402.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.7.tgz",
- "integrity": "sha512-YZchteri2iUq5JICSH0BQjOU3ehE57+CMU8PBigcJZiaLa/GPiCuwD9QOsnwSzHJNYYx5C94uhtZUjPwUtIAIw==",
+ "version": "0.1402.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.10.tgz",
+ "integrity": "sha512-/6YmPrgataj1jD2Uqd1ED+CG4DaZGacoeZd/89hH7hF76Nno8K18DrSOqJAEmDnOWegpSRGVLd0qP09IHmaG5w==",
"devOptional": true,
"dependencies": {
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
"rxjs": "6.6.7"
},
"engines": {
"devOptional": true
},
"node_modules/@angular-devkit/build-angular": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.7.tgz",
- "integrity": "sha512-Y58kcEmy8bSFyODtUFQzkuoZHNCji3fzRwGCiQYdAh/mkBf53CuVWoT9q7MrvGOc7Nmo2JiuwR/b7c543eVgfw==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.10.tgz",
+ "integrity": "sha512-VCeZAyq4uPCJukKInaSiD4i/GgxgcU4jFlLFQtoYNmaBS4xbPOymL19forRIihiV0dwNEa2L694vRTAPMBxIfw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "2.2.0",
- "@angular-devkit/architect": "0.1402.7",
- "@angular-devkit/build-webpack": "0.1402.7",
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/architect": "0.1402.10",
+ "@angular-devkit/build-webpack": "0.1402.10",
+ "@angular-devkit/core": "14.2.10",
"@babel/core": "7.18.10",
"@babel/generator": "7.18.12",
"@babel/helper-annotate-as-pure": "7.18.6",
"@babel/runtime": "7.18.9",
"@babel/template": "7.18.10",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "14.2.7",
+ "@ngtools/webpack": "14.2.10",
"ansi-colors": "4.1.3",
"babel-loader": "8.2.5",
"babel-plugin-istanbul": "6.1.1",
"less": "4.1.3",
"less-loader": "11.0.0",
"license-webpack-plugin": "4.0.2",
- "loader-utils": "3.2.0",
+ "loader-utils": "3.2.1",
"mini-css-extract-plugin": "2.6.1",
"minimatch": "5.1.0",
"open": "8.4.0",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
+ "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
+ },
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1402.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.7.tgz",
- "integrity": "sha512-aDhS/ODt8BwgtnNN73R7SuMC1GgoT5Pajn1nnIWvvpGj8XchLUbguptyl2v7D2QeYXXsd34Gtx8cDOr9PxYFTA==",
+ "version": "0.1402.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.10.tgz",
+ "integrity": "sha512-h+2MaSY7QSvoJ3R+Hvin21jVCfPGOTLdASIUk4Jmq6J3y5BSku3KSSaV8dWoBOBkFCwQyPQMRjiHoHKLpC1K7g==",
"dev": true,
"dependencies": {
- "@angular-devkit/architect": "0.1402.7",
+ "@angular-devkit/architect": "0.1402.10",
"rxjs": "6.6.7"
},
"engines": {
"dev": true
},
"node_modules/@angular-devkit/core": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.7.tgz",
- "integrity": "sha512-83SCYP3h6fglWMgAXFDc8HfOxk9t3ugK0onATXchctvA7blW4Vx8BSg3/DgbqCv+fF380SN8bYqqLJl8fQFdzg==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.10.tgz",
+ "integrity": "sha512-K4AO7mROTdbhQ7chtyQd6oPwmuL+BPUh+wn6Aq1qrmYJK4UZYFOPp8fi/Ehs8meCEeywtrssOPfrOE4Gsre9dg==",
"devOptional": true,
"dependencies": {
"ajv": "8.11.0",
"devOptional": true
},
"node_modules/@angular-devkit/schematics": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.7.tgz",
- "integrity": "sha512-3e2dpFXWl2Z4Gfm+KgY3gAeqsyu8utJMcDIg5sWRAXDeJJdAPc5LweCa8YZEn33Zr9cl8oK+FxlOr15RCyWLcA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.10.tgz",
+ "integrity": "sha512-MMp31KpJTwKHisXOq+6VOXYApq97hZxFaFmZk396X5aIFTCELUwjcezQDk+u2nEs5iK/COUfnN3plGcfJxYhQA==",
"devOptional": true,
"dependencies": {
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
"jsonc-parser": "3.1.0",
"magic-string": "0.26.2",
"ora": "5.4.1",
"devOptional": true
},
"node_modules/@angular/cli": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.7.tgz",
- "integrity": "sha512-RM4CJwtqD7cKFQ7hNGJ56s9YMeJxYqCN5Ss0SzsKN1nXYqz8HykMW8fhUbZQ9HFVy/Ml3LGoh1yGo/tXywAWcA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz",
+ "integrity": "sha512-gX9sAKOwq4lKdPWeABB7TzKDHdjQXvkUU8NmPJA6mEAVXvm3lhQtFvHDalZstwK8au2LY0LaXTcEtcKYOt3AXQ==",
"devOptional": true,
"dependencies": {
- "@angular-devkit/architect": "0.1402.7",
- "@angular-devkit/core": "14.2.7",
- "@angular-devkit/schematics": "14.2.7",
- "@schematics/angular": "14.2.7",
+ "@angular-devkit/architect": "0.1402.10",
+ "@angular-devkit/core": "14.2.10",
+ "@angular-devkit/schematics": "14.2.10",
+ "@schematics/angular": "14.2.10",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"debug": "4.3.4",
}
},
"node_modules/@angular/common": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.8.tgz",
- "integrity": "sha512-JSPN2h1EcyWjHWtOzRQmoX48ZacTjLAYwW9ZRmBpYs6Ptw5xZ39ARTJfQNcNnJleqYju2E6BNkGnLpbtWQjNDA==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
+ "integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/core": "14.2.8",
+ "@angular/core": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.8.tgz",
- "integrity": "sha512-lKwp3B4ZKNLgk/25Iyur8bjAwRL20auRoB4EuHrBf+928ftsjYUXTgi+0++DUjPENbpi59k6GcvMCNa6qccvIw==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
+ "integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/core": "14.2.8"
+ "@angular/core": "14.2.12"
},
"peerDependenciesMeta": {
"@angular/core": {
}
},
"node_modules/@angular/compiler-cli": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.8.tgz",
- "integrity": "sha512-QTftNrAyXOWzKFGY6/i9jh0LB2cOxmykepG4c53wH9LblGvWFztlVOhcoU8tpQSSH8t3EYvGs2r8oUuxcYm5Cw==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
+ "integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
"dependencies": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/compiler": "14.2.8",
+ "@angular/compiler": "14.2.12",
"typescript": ">=4.6.2 <4.9"
}
},
"node_modules/@angular/core": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.8.tgz",
- "integrity": "sha512-cgnII9vJGJDLsfr7KsBfU2l+QQUmQIRIP3ImKhBxicw2IHKCSb2mYwoeLV46jaLyHyUMTLRHKUYUR4XtSPnb8A==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
+ "integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
"dependencies": {
"tslib": "^2.3.0"
},
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0",
- "zone.js": "~0.11.4"
+ "zone.js": "~0.11.4 || ~0.12.0"
}
},
"node_modules/@angular/forms": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.8.tgz",
- "integrity": "sha512-OaL7Gi6STxJza7yn0qgmh6+hV6NVbtGmunpzrn9cR1k5TeE4ZtXu1z7VZesbZ9kZ3F6U9CmygFt0csf7j1d+Ow==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
+ "integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/common": "14.2.8",
- "@angular/core": "14.2.8",
- "@angular/platform-browser": "14.2.8",
+ "@angular/common": "14.2.12",
+ "@angular/core": "14.2.12",
+ "@angular/platform-browser": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/localize": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.8.tgz",
- "integrity": "sha512-ph+ZLl1sXoNnw9AH4aHyI10T0sNCUTtZeGGDTPJnfOQgqfleOvgPxCNNNdi4z02XcLjVE9CKllcaOQY8zwKlZg==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
+ "integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
"dependencies": {
"@babel/core": "7.18.9",
"glob": "8.0.3",
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/compiler": "14.2.8",
- "@angular/compiler-cli": "14.2.8"
+ "@angular/compiler": "14.2.12",
+ "@angular/compiler-cli": "14.2.12"
}
},
"node_modules/@angular/localize/node_modules/@babel/core": {
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@angular/localize/node_modules/@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
- "dependencies": {
- "@babel/types": "^7.18.13",
- "@jridgewell/gen-mapping": "^0.3.2",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@angular/localize/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@angular/localize/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
}
},
"node_modules/@angular/platform-browser": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.8.tgz",
- "integrity": "sha512-tSASBLXoBE0/Gt6d2nC6BJ1DvbGY5wo2Lb+8WCLSvkfsgVqOh4uRuJ2a0wwjeLFd0ZNmpjG42Ijba4btmCpIjg==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
+ "integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/animations": "14.2.8",
- "@angular/common": "14.2.8",
- "@angular/core": "14.2.8"
+ "@angular/animations": "14.2.12",
+ "@angular/common": "14.2.12",
+ "@angular/core": "14.2.12"
},
"peerDependenciesMeta": {
"@angular/animations": {
}
},
"node_modules/@angular/platform-browser-dynamic": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.8.tgz",
- "integrity": "sha512-CPK8wHnKke8AUKR92XrFuanaKNXDzDm3uVI3DD0NxBo+fLAkiuVaDVIGgO6n6SxQVtwjXJtMXqQuNdzUg4Q9uQ==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
+ "integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/common": "14.2.8",
- "@angular/compiler": "14.2.8",
- "@angular/core": "14.2.8",
- "@angular/platform-browser": "14.2.8"
+ "@angular/common": "14.2.12",
+ "@angular/compiler": "14.2.12",
+ "@angular/core": "14.2.12",
+ "@angular/platform-browser": "14.2.12"
}
},
"node_modules/@angular/router": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.8.tgz",
- "integrity": "sha512-rbKLsa4/scPP8AxaDRQfkLqfg8CbZ163dPqHMixou90uK/dx00LjCyUeS38/otdAYNZhrD0i5nu+k65qwhLX8w==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
+ "integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
"dependencies": {
"tslib": "^2.3.0"
},
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
- "@angular/common": "14.2.8",
- "@angular/core": "14.2.8",
- "@angular/platform-browser": "14.2.8",
+ "@angular/common": "14.2.12",
+ "@angular/core": "14.2.12",
+ "@angular/platform-browser": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
}
},
"node_modules/@babel/compat-data": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
- "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+ "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
"engines": {
"node": ">=6.9.0"
}
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
- "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+ "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
"dependencies": {
- "@babel/compat-data": "^7.18.8",
+ "@babel/compat-data": "^7.20.0",
"@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
+ "browserslist": "^4.21.3",
"semver": "^6.3.0"
},
"engines": {
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz",
- "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6"
},
"engines": {
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
- "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
+ "regexpu-core": "^5.2.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
- "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+ "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.17.7",
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+ "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-simple-access": "^7.20.2",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.20.1",
+ "@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
- "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+ "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/traverse": "^7.19.1",
+ "@babel/types": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
- "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+ "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.20.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
"engines": {
"node": ">=6.9.0"
}
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.18.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz",
- "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+ "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
"dev": true,
"dependencies": {
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.18.11",
- "@babel/types": "^7.18.10"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
- "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+ "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
"bin": {
"parser": "bin/babel-parser.js"
},
}
},
"node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
- "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+ "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.18.8",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.8"
+ "@babel/plugin-transform-parameters": "^7.20.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+ "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+ "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
- "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
+ "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
- "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+ "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
- "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+ "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
},
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
- "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+ "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+ "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+ "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-simple-access": "^7.19.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
- "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+ "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
"dev": true,
"dependencies": {
"@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-validator-identifier": "^7.19.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
- "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+ "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
- "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+ "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+ "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "regenerator-transform": "^0.15.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
- "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+ "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.19.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
},
"engines": {
}
},
"node_modules/@babel/traverse": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+ "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"dependencies": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
+ "@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/parser": "^7.20.5",
+ "@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
}
},
"node_modules/@babel/traverse/node_modules/@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+ "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"dependencies": {
- "@babel/types": "^7.18.13",
+ "@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
}
},
"node_modules/@babel/types": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+ "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"dependencies": {
- "@babel/helper-string-parser": "^7.18.10",
- "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/helper-string-parser": "^7.19.4",
+ "@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
},
"engines": {
}
},
"node_modules/@csstools/postcss-cascade-layers": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz",
- "integrity": "sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
+ "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
"dev": true,
"dependencies": {
"@csstools/selector-specificity": "^2.0.2",
}
},
"node_modules/@cypress/schematic": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.1.1.tgz",
- "integrity": "sha512-Kf4QeNk8IVx3tdybls+xq8CbqsZwqR9dZjE3ELZhfG2rZeId9SSG6F2GpR4Xly5ROkX0BuQVeuIFNSkDxWAtPg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.3.0.tgz",
+ "integrity": "sha512-LBKX20MUUYF2Xu+1+KpVbLCoMvt2Osa80yQfonduVsLJ/p8JxtLHqufuf/ryJp9Gm9R5sDfk/YhHL+rB7a+gsg==",
"optional": true,
"dependencies": {
"@angular-devkit/architect": "^0.1402.1",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@leichtgewicht/ip-codec": {
"dev": true
},
"node_modules/@ng-bootstrap/ng-bootstrap": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.0.0.tgz",
- "integrity": "sha512-aumflJ24VVOQ6kIGmpaWmjqfreRsXOCf/l2nOxPO6Y+d7Pit6aZthyjO7F0bRMutv6n+B/ma18GKvhhBcMepUw==",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.1.1.tgz",
+ "integrity": "sha512-R6qnmFKT2EwwijBHw7rUXqyo5W90OImHOv7BlsxMNnZLIksWIhqwU00k4UBTfRTnd6JsTPuj/co3MaP61ajILA==",
"dependencies": {
"tslib": "^2.3.0"
},
}
},
"node_modules/@ng-select/ng-select": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.0.2.tgz",
- "integrity": "sha512-xdNiz/kgkMWYW1qFtk/337xDk/cmfEbSVtTFxWIM2OnIX1XsQOnTlGiBYces1TsMfqS68HjAvljEkj8QIGN2Lg==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.1.0.tgz",
+ "integrity": "sha512-vxSRD2d84H39eqtTJaethlpQ+xkJUU8epQNUr3yPiah23z8MBCqSDE1t0chxi+rXJz7+xoC9qFa1aYnUVFan4w==",
"dependencies": {
"tslib": "^2.3.1"
},
}
},
"node_modules/@ngneat/dirty-check-forms": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.2.tgz",
- "integrity": "sha512-SKl3f/SqIdBMle7QorO4T90TqaWAjLe0xtJrTrzCsjC4uQlsk+old1DugUF16FJxAikPcBMoUABHa2iT3Uh75g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.3.tgz",
+ "integrity": "sha512-YGlKrAaqTRO8lfT1xyN9LkYN0GH0crzdnXAxQFNEuNDQpCHv9cQ0j9XPDsonek6X4K7fLug84n0CQ42rSmGBqw==",
"dependencies": {
"tslib": ">=2.0.0"
},
"@angular/core": ">=13.0.0",
"@angular/forms": ">=13.0.0",
"@angular/router": ">=13.0.0",
+ "lodash-es": ">=4.17.0",
"rxjs": ">=6.0.0"
}
},
"node_modules/@ngtools/webpack": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.7.tgz",
- "integrity": "sha512-I47BdEybpzjfFFMFB691o9C+69RexLTgSm/VCyDn4M8DrGrZpgYNhxN+AEr1uA6Bi6MaPG6w+TMac5tNIaO4Yw==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.10.tgz",
+ "integrity": "sha512-sLHapZLVub6mEz5b19tf1VfIV1w3tYfg7FNPLeni79aldxu1FbP1v2WmiFAnMzrswqyK0bhTtxrl+Z/CLKqyoQ==",
"dev": true,
"engines": {
"node": "^14.15.0 || >=16.10.0",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
"integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
"devOptional": true,
"dependencies": {
"mkdirp": "^1.0.4",
}
},
"node_modules/@schematics/angular": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.7.tgz",
- "integrity": "sha512-ujtLu0gWARtJsRbN+P+McDO0Y0ygJjUN5016SdbmYDMcDJkwi+GYHU8Yvh/UONtmNor3JdV8AnZ8OmWTlswTDA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.10.tgz",
+ "integrity": "sha512-YFTc/9QJdx422XcApizEcVLKoyknu8b9zHIlAepZCu7WkV8GPT0hvVEHQ7KBWys5aQ7pPZMT0JpZLeAz0F2xYQ==",
"devOptional": true,
"dependencies": {
- "@angular-devkit/core": "14.2.7",
- "@angular-devkit/schematics": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
+ "@angular-devkit/schematics": "14.2.10",
"jsonc-parser": "3.1.0"
},
"engines": {
"dev": true
},
"node_modules/@sinclair/typebox": {
- "version": "0.24.34",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz",
- "integrity": "sha512-x3ejWKw7rpy30Bvm6U0AQMOHdjqe2E3YJrBHlTxH0KFsp77bBa+MH324nJxtXZFpnTy/JW2h5HPYVm0vG2WPnw==",
+ "version": "0.24.51",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
+ "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
"dev": true
},
"node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
"dev": true
},
"node_modules/@types/babel__core": {
- "version": "7.1.19",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
- "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
+ "version": "7.1.20",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
+ "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.18.1",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
- "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+ "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.3.0"
}
},
"node_modules/@types/eslint": {
- "version": "8.4.6",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
- "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+ "version": "8.4.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
+ "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
"dev": true,
"dependencies": {
"@types/estree": "*",
}
},
"node_modules/@types/jsdom": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
- "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
+ "version": "20.0.1",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
}
},
"node_modules/@types/jsdom/node_modules/parse5": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
- "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dev": true,
"dependencies": {
- "entities": "^4.3.0"
+ "entities": "^4.4.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
"dev": true
},
"node_modules/@types/node": {
- "version": "18.7.23",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
- "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+ "version": "18.11.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz",
+ "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==",
"devOptional": true
},
"node_modules/@types/parse-json": {
"dev": true
},
"node_modules/@types/prettier": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
- "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
"dev": true
},
"node_modules/@types/qs": {
}
},
"node_modules/@types/yargs": {
- "version": "17.0.12",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
- "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
+ "version": "17.0.15",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.15.tgz",
+ "integrity": "sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
}
},
"node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
"dev": true,
"dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
+ "acorn": "^8.1.0",
+ "acorn-walk": "^8.0.2"
}
},
"node_modules/acorn-import-assertions": {
}
},
"node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"dependencies": {
"big.js": "^5.2.2",
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"node_modules/autoprefixer": {
- "version": "10.4.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
- "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==",
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
"dev": true,
"funding": [
{
}
],
"dependencies": {
- "browserslist": "^4.21.3",
- "caniuse-lite": "^1.0.30001373",
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
}
},
"node_modules/babel-loader/node_modules/loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"dependencies": {
"big.js": "^5.2.2",
"node": ">=8.9.0"
}
},
- "node_modules/babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "dependencies": {
- "object.assign": "^4.1.0"
- }
- },
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
- "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+ "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.2",
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
"semver": "^6.1.1"
},
"peerDependencies": {
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz",
- "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+ "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.2"
+ "@babel/helper-define-polyfill-provider": "^0.3.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
"dev": true
},
"node_modules/bootstrap": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.1.tgz",
- "integrity": "sha512-UQi3v2NpVPEi1n35dmRRzBJFlgvWHYwyem6yHhuT6afYF+sziEt46McRbT//kVXZ7b1YUYEVGdXEH74Nx3xzGA==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
+ "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
"funding": [
{
"type": "github",
"dev": true
},
"node_modules/browserslist": {
- "version": "4.21.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
- "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
"funding": [
{
"type": "opencollective",
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001370",
- "electron-to-chromium": "^1.4.202",
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
"node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.5"
+ "update-browserslist-db": "^1.0.9"
},
"bin": {
"browserslist": "cli.js"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001388",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz",
- "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ==",
+ "version": "1.0.30001435",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
+ "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==",
"funding": [
{
"type": "opencollective",
}
},
"node_modules/ci-info": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
- "devOptional": true
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+ "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/cjs-module-lexer": {
"version": "1.2.2",
}
},
"node_modules/cli-table3": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
- "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
"optional": true,
"dependencies": {
"string-width": "^4.2.0"
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/compression/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"node": ">= 0.6"
}
},
- "node_modules/content-disposition/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
}
},
"node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
"node_modules/cookie": {
"version": "0.5.0",
}
},
"node_modules/core-js-compat": {
- "version": "3.25.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz",
- "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==",
+ "version": "3.26.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+ "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.3",
- "semver": "7.0.0"
+ "browserslist": "^4.21.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-js-compat/node_modules/semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"devOptional": true
},
"node_modules/cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
}
},
"node_modules/cssdb": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz",
- "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
+ "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
"dev": true,
"funding": {
"type": "opencollective",
}
},
"node_modules/cypress/node_modules/@types/node": {
- "version": "14.18.26",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz",
- "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==",
+ "version": "14.18.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.34.tgz",
+ "integrity": "sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA==",
"optional": true
},
"node_modules/cypress/node_modules/ansi-styles": {
}
},
"node_modules/date-fns": {
- "version": "2.29.2",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz",
- "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==",
+ "version": "2.29.3",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+ "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
"dev": true,
"engines": {
"node": ">=0.11"
}
},
"node_modules/dayjs": {
- "version": "1.11.5",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz",
- "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==",
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
+ "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==",
"optional": true
},
"node_modules/debug": {
}
},
"node_modules/decimal.js": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
- "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==",
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+ "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
"dev": true
},
"node_modules/dedent": {
}
},
"node_modules/defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"devOptional": true,
"dependencies": {
"clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/define-lazy-prop": {
"node": ">=8"
}
},
- "node_modules/define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "dev": true,
- "dependencies": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.240",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz",
- "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow=="
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
},
"node_modules/emittery": {
"version": "0.10.2",
}
},
"node_modules/enhanced-resolve": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
- "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/express/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"devOptional": true
},
"node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
}
},
"node_modules/fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"dependencies": {
"bser": "2.1.1"
}
},
"node_modules/follow-redirects": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
- "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"dev": true,
"funding": [
{
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"dev": true
},
"node_modules/global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
"optional": true,
"dependencies": {
"ini": "2.0.0"
"node": ">=4"
}
},
- "node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"dev": true
},
"node_modules/hosted-git-info": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz",
- "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+ "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
"devOptional": true,
"dependencies": {
"lru-cache": "^7.5.1"
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/hpack.js/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/hpack.js/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
]
},
"node_modules/ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
"dev": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"devOptional": true,
"dependencies": {
"has": "^1.0.3"
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
- "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.12.3",
}
},
"node_modules/jest-environment-jsdom": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.2.2.tgz",
- "integrity": "sha512-5mNtTcky1+RYv9kxkwMwt7fkzyX4EJUarV7iI+NQLigpV4Hz4sgfOdP4kOpCHXbkRWErV7tgXoXLm2CKtucr+A==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.3.1.tgz",
+ "integrity": "sha512-G46nKgiez2Gy4zvYNhayfMEAFlVHhWfncqvqS6yCd0i+a4NsSUD2WtrKSaYQrYiLQaupHXxCRi8xxVL2M9PbhA==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.2.2",
- "@jest/fake-timers": "^29.2.2",
- "@jest/types": "^29.2.1",
+ "@jest/environment": "^29.3.1",
+ "@jest/fake-timers": "^29.3.1",
+ "@jest/types": "^29.3.1",
"@types/jsdom": "^20.0.0",
"@types/node": "*",
- "jest-mock": "^29.2.2",
- "jest-util": "^29.2.1",
+ "jest-mock": "^29.3.1",
+ "jest-util": "^29.3.1",
"jsdom": "^20.0.0"
},
"engines": {
}
},
"node_modules/jest-environment-jsdom/node_modules/@jest/environment": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
- "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz",
+ "integrity": "sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^29.2.2",
- "@jest/types": "^29.2.1",
+ "@jest/fake-timers": "^29.3.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
- "jest-mock": "^29.2.2"
+ "jest-mock": "^29.3.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
- "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz",
+ "integrity": "sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^29.2.1",
- "jest-mock": "^29.2.2",
- "jest-util": "^29.2.1"
+ "jest-message-util": "^29.3.1",
+ "jest-mock": "^29.3.1",
+ "jest-util": "^29.3.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-jsdom/node_modules/@jest/types": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
- "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz",
+ "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==",
"dev": true,
"dependencies": {
"@jest/schemas": "^29.0.0",
}
},
"node_modules/jest-environment-jsdom/node_modules/jest-message-util": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
- "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz",
+ "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.2.1",
+ "pretty-format": "^29.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
}
},
"node_modules/jest-environment-jsdom/node_modules/jest-mock": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
- "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz",
+ "integrity": "sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
- "jest-util": "^29.2.1"
+ "jest-util": "^29.3.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-jsdom/node_modules/jest-util": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
- "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz",
+ "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
}
},
"node_modules/jest-environment-jsdom/node_modules/pretty-format": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
- "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
+ "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
"dev": true,
"dependencies": {
"@jest/schemas": "^29.0.0",
}
},
"node_modules/jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/jest-preset-angular": {
- "version": "12.2.2",
- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
- "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
+ "version": "12.2.3",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.3.tgz",
+ "integrity": "sha512-9vgawXuki/lg4IRPtl5k83krWLKADTal7BBm06xNAWOK09AbHK1foXqZdVOMObsWbaMDeQ1cjba60vS/aEVY4Q==",
"dev": true,
"dependencies": {
"bs-logger": "^0.2.6",
"esbuild": ">=0.13.8"
},
"peerDependencies": {
- "@angular-devkit/build-angular": ">=0.1102.19 <15.0.0",
- "@angular/compiler-cli": ">=11.2.14 <15.0.0",
- "@angular/core": ">=11.2.14 <15.0.0",
- "@angular/platform-browser-dynamic": ">=11.2.14 <15.0.0",
+ "@angular-devkit/build-angular": ">=12.2.18 <16.0.0",
+ "@angular/compiler-cli": ">=12.2.16 <16.0.0",
+ "@angular/core": ">=12.2.16 <16.0.0",
+ "@angular/platform-browser-dynamic": ">=12.2.16 <16.0.0",
"jest": "^28.0.0",
- "typescript": ">=4.3"
+ "typescript": ">=4.4"
}
},
"node_modules/jest-preset-angular/node_modules/@types/jsdom": {
"@types/tough-cookie": "*"
}
},
+ "node_modules/jest-preset-angular/node_modules/acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ }
+ },
+ "node_modules/jest-preset-angular/node_modules/acorn-globals/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/jest-preset-angular/node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/jest-preset-angular/node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"node": ">= 4.0.0"
}
},
+ "node_modules/jest-preset-angular/node_modules/w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "dependencies": {
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/jest-preset-angular/node_modules/whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
}
},
"node_modules/joi": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
- "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz",
+ "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==",
"dev": true,
"dependencies": {
"@hapi/hoek": "^9.0.0",
"optional": true
},
"node_modules/jsdom": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
- "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
+ "version": "20.0.3",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
"dev": true,
"dependencies": {
"abab": "^2.0.6",
- "acorn": "^8.7.1",
- "acorn-globals": "^6.0.0",
+ "acorn": "^8.8.1",
+ "acorn-globals": "^7.0.0",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
"data-urls": "^3.0.2",
- "decimal.js": "^10.3.1",
+ "decimal.js": "^10.4.2",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0",
"http-proxy-agent": "^5.0.0",
"https-proxy-agent": "^5.0.1",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "^7.0.0",
+ "nwsapi": "^2.2.2",
+ "parse5": "^7.1.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^3.0.0",
+ "tough-cookie": "^4.1.2",
+ "w3c-xmlserializer": "^4.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^11.0.0",
- "ws": "^8.8.0",
+ "ws": "^8.11.0",
"xml-name-validator": "^4.0.0"
},
"engines": {
}
},
"node_modules/jsdom/node_modules/parse5": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
- "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dev": true,
"dependencies": {
- "entities": "^4.3.0"
+ "entities": "^4.4.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/loader-utils": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz",
- "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
+ "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
"dev": true,
"engines": {
"node": ">= 12.13.0"
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"devOptional": true
},
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "peer": true
+ },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
}
},
"node_modules/lru-cache": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
- "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+ "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
"devOptional": true,
"engines": {
"node": ">=12"
}
},
"node_modules/memfs": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.9.tgz",
- "integrity": "sha512-3rm8kbrzpUGRyPKSGuk387NZOwQ90O4rI9tsWQkzNW7BLSnKGp23RsEsKK8N8QVCrtJoAMqy3spxHC4os4G6PQ==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
+ "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
"dev": true,
"dependencies": {
"fs-monkey": "^1.0.3"
}
},
"node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "devOptional": true
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "devOptional": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/minipass": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
- "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"devOptional": true,
"dependencies": {
"yallist": "^4.0.0"
"dev": true
},
"node_modules/needle": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
- "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
"dev": true,
"optional": true,
"dependencies": {
"dev": true
},
"node_modules/ng2-pdf-viewer": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.2.tgz",
- "integrity": "sha512-dVfrEOW0rusHjLGpGnkt2mDKdd3LKK9uXAbNxOCv94I2jS2QjciPHMELLKWCliBXiLNbDOTsQdCDQPvYT3vKgQ==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.3.tgz",
+ "integrity": "sha512-t2Gez92xPWPfY3qzzs+iLey5NUCYwJXIzv+dU4prY96aYdacsxuOpFjORW1+a330ryMkxYEJvEQ+mgbBJr77xw==",
"dependencies": {
"pdfjs-dist": "~2.14.305",
"tslib": "^2.3.1"
}
},
"node_modules/ngx-file-drop": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.1.tgz",
- "integrity": "sha512-OSsI1Qjs273Xi+tIkCoO/ciFx6gT9wwyZ1900O4ggniOiTNByNq+xBN8DASOcAqLxvkuri8en7MtZPu+jxX/6Q==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.2.tgz",
+ "integrity": "sha512-tIW+Ymd2IOjUQTqMb2NiuupeRPWwKe19kHmb13gf4Iw8rkvrO6PlqqZ3EqSGPIEJOmV836FZHpM4B1xXjVQLfA==",
"dependencies": {
"tslib": "^2.3.0"
},
"@angular/core": ">=14.0.0"
}
},
- "node_modules/ngx-ui-tour-ng-bootstrap": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.1.0.tgz",
- "integrity": "sha512-VQbQA+c4aYtUe/6yzY6BzawDHhIxwH0uck3SpJmlhhHLmydm1OCRjlmhVJHEIPggwxGOvO5h/Vs6iLmmwxn//g==",
+ "node_modules/ngx-ui-tour-core": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.2.1.tgz",
+ "integrity": "sha512-KpDSeNl69S1x+jUdREIkFgHGfpAyydxAt2aRUZ263kHZskME/CpaojEmjLCB+xUxEXij9Bq9tQxtGPm5IkJlPg==",
"dependencies": {
- "ngx-ui-tour-core": "9.1.0",
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^14.0.0",
"@angular/core": "^14.0.0",
- "@ng-bootstrap/ng-bootstrap": "^13.0.0",
+ "@angular/router": "^14.0.0",
+ "rxjs": ">=6.0.0",
"typescript": ">=3.8.0"
}
},
- "node_modules/ngx-ui-tour-ng-bootstrap/node_modules/ngx-ui-tour-core": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.1.0.tgz",
- "integrity": "sha512-9fSvSoh0wUpaVFNo/D0Vs9NreL0esFBY3MFycONZD8b5SE7nX2+CZLzPbIVnigmj/KH3op5Pw8Pzkg2VHmXTcg==",
+ "node_modules/ngx-ui-tour-ng-bootstrap": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.3.2.tgz",
+ "integrity": "sha512-DEQ8ek9AGIdIPM6pGZ1Z8b0qY1kwgTppA30432CBBip7UES0KJFoT9BVHG99pA7Lx07GT9okqYh0zR3jPQh7uA==",
"dependencies": {
+ "ngx-ui-tour-core": "9.2.1",
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^14.0.0",
"@angular/core": "^14.0.0",
- "@angular/router": "^14.0.0",
- "rxjs": ">=6.0.0",
+ "@ng-bootstrap/ng-bootstrap": "^13.0.0",
"typescript": ">=3.8.0"
}
},
}
},
"node_modules/node-gyp": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz",
- "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz",
+ "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==",
"devOptional": true,
"dependencies": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
"graceful-fs": "^4.2.6",
"make-fetch-happen": "^10.0.3",
- "nopt": "^5.0.0",
+ "nopt": "^6.0.0",
"npmlog": "^6.0.0",
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
},
"node_modules/nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
+ "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
"devOptional": true,
"dependencies": {
- "abbrev": "1"
+ "abbrev": "^1.0.0"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
- "node": ">=6"
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/normalize-package-data": {
}
},
"node_modules/nwsapi": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
- "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
"dev": true
},
"node_modules/object-inspect": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
}
},
"node_modules/postcss-custom-properties": {
- "version": "12.1.8",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz",
- "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==",
+ "version": "12.1.11",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
+ "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
- "postcss": "^8.4"
+ "postcss": "^8.2"
}
},
"node_modules/postcss-custom-selectors": {
}
},
"node_modules/postcss-nesting": {
- "version": "10.1.10",
- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz",
- "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz",
+ "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==",
"dev": true,
"dependencies": {
"@csstools/selector-specificity": "^2.0.0",
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"dev": true
},
"node_modules/regenerate-unicode-properties": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.2"
"dev": true
},
"node_modules/regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.8.4"
"dev": true
},
"node_modules/regexpu-core": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
- "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+ "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.0.1",
- "regjsgen": "^0.6.0",
- "regjsparser": "^0.8.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsgen": "^0.7.1",
+ "regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
+ "unicode-match-property-value-ecmascript": "^2.1.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regjsgen": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+ "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
"dev": true
},
"node_modules/regjsparser": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
"dependencies": {
"jsesc": "~0.5.0"
}
},
"node_modules/resolve-url-loader/node_modules/loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"dependencies": {
"big.js": "^5.2.2",
}
},
"node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
"node_modules/safer-buffer": {
"version": "2.1.2",
}
},
"node_modules/shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
- "dev": true
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/side-channel": {
"version": "1.0.4",
}
},
"node_modules/socks": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
- "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"devOptional": true,
"dependencies": {
"ip": "^2.0.0",
}
},
"node_modules/stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
"safe-buffer": "~5.2.0"
}
},
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "devOptional": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
}
},
"node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0",
}
},
"node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "version": "6.1.12",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+ "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
"devOptional": true,
"dependencies": {
"chownr": "^2.0.0",
"yallist": "^4.0.0"
},
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
"node_modules/terminal-link": {
}
}
},
- "node_modules/ts-node/node_modules/acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"node_modules/tslint": {
"version": "6.1.3",
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.6.tgz",
- "integrity": "sha512-We7BqM9XFlcW94Op93uW8+2LXvGezs7QA0WY+f1H7RR1q46B06W6hZF6LbmOlpCS1HU22q/6NOGTGW5sCm7NJQ==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"funding": [
{
"type": "opencollective",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
"dev": true,
"dependencies": {
"browser-process-hrtime": "^1.0.0"
}
},
"node_modules/w3c-xmlserializer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
- "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
"dev": true,
"dependencies": {
"xml-name-validator": "^4.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
}
},
"node_modules/wait-on": {
}
},
"node_modules/ws": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
- "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"dev": true,
"engines": {
"node": ">=10.0.0"
}
},
"@angular-builders/jest": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.0.1.tgz",
- "integrity": "sha512-ol+/u6KD7kX0AyQ8Mr6pPmsptNh89p+PJtXhcU9epzjJw1y1Y+SlXHGVWg8JseaGRfxo3FVshS/ZvTxoGsstTA==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-14.1.0.tgz",
+ "integrity": "sha512-uGXyJ40F7HXfoWwW1EK5U75sUUQ4zVireLYPUYWT1/t1vqizss0mIPR026bMWwScWJhetdopxlWcql4wfNuXyQ==",
"dev": true,
"requires": {
"@angular-devkit/architect": ">=0.1400.0 < 0.1500.0",
"@angular-devkit/core": "^14.0.0",
- "jest-preset-angular": "12.2.0",
+ "jest-preset-angular": "12.2.2",
"lodash": "^4.17.15"
},
"dependencies": {
"@types/tough-cookie": "*"
}
},
+ "acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
}
},
"jest-preset-angular": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.0.tgz",
- "integrity": "sha512-dXnPdcglVcJeXdnxrws3M/gxLlYWaZGU7JS+ffuiCfMzG0AO3EDo/wpsPsxvnjCZiov1uV7g7UD1dHtmOW/sEw==",
+ "version": "12.2.2",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
+ "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
"dev": true,
"requires": {
"bs-logger": "^0.2.6",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true
},
+ "w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "requires": {
+ "xml-name-validator": "^4.0.0"
+ }
+ },
"whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
}
},
"@angular-devkit/architect": {
- "version": "0.1402.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.7.tgz",
- "integrity": "sha512-YZchteri2iUq5JICSH0BQjOU3ehE57+CMU8PBigcJZiaLa/GPiCuwD9QOsnwSzHJNYYx5C94uhtZUjPwUtIAIw==",
+ "version": "0.1402.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.10.tgz",
+ "integrity": "sha512-/6YmPrgataj1jD2Uqd1ED+CG4DaZGacoeZd/89hH7hF76Nno8K18DrSOqJAEmDnOWegpSRGVLd0qP09IHmaG5w==",
"devOptional": true,
"requires": {
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
"rxjs": "6.6.7"
},
"dependencies": {
}
},
"@angular-devkit/build-angular": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.7.tgz",
- "integrity": "sha512-Y58kcEmy8bSFyODtUFQzkuoZHNCji3fzRwGCiQYdAh/mkBf53CuVWoT9q7MrvGOc7Nmo2JiuwR/b7c543eVgfw==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.10.tgz",
+ "integrity": "sha512-VCeZAyq4uPCJukKInaSiD4i/GgxgcU4jFlLFQtoYNmaBS4xbPOymL19forRIihiV0dwNEa2L694vRTAPMBxIfw==",
"dev": true,
"requires": {
"@ampproject/remapping": "2.2.0",
- "@angular-devkit/architect": "0.1402.7",
- "@angular-devkit/build-webpack": "0.1402.7",
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/architect": "0.1402.10",
+ "@angular-devkit/build-webpack": "0.1402.10",
+ "@angular-devkit/core": "14.2.10",
"@babel/core": "7.18.10",
"@babel/generator": "7.18.12",
"@babel/helper-annotate-as-pure": "7.18.6",
"@babel/runtime": "7.18.9",
"@babel/template": "7.18.10",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "14.2.7",
+ "@ngtools/webpack": "14.2.10",
"ansi-colors": "4.1.3",
"babel-loader": "8.2.5",
"babel-plugin-istanbul": "6.1.1",
"less": "4.1.3",
"less-loader": "11.0.0",
"license-webpack-plugin": "4.0.2",
- "loader-utils": "3.2.0",
+ "loader-utils": "3.2.1",
"mini-css-extract-plugin": "2.6.1",
"minimatch": "5.1.0",
"open": "8.4.0",
"dev": true
}
}
+ },
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "dev": true
}
}
},
"@angular-devkit/build-webpack": {
- "version": "0.1402.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.7.tgz",
- "integrity": "sha512-aDhS/ODt8BwgtnNN73R7SuMC1GgoT5Pajn1nnIWvvpGj8XchLUbguptyl2v7D2QeYXXsd34Gtx8cDOr9PxYFTA==",
+ "version": "0.1402.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.10.tgz",
+ "integrity": "sha512-h+2MaSY7QSvoJ3R+Hvin21jVCfPGOTLdASIUk4Jmq6J3y5BSku3KSSaV8dWoBOBkFCwQyPQMRjiHoHKLpC1K7g==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.1402.7",
+ "@angular-devkit/architect": "0.1402.10",
"rxjs": "6.6.7"
},
"dependencies": {
}
},
"@angular-devkit/core": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.7.tgz",
- "integrity": "sha512-83SCYP3h6fglWMgAXFDc8HfOxk9t3ugK0onATXchctvA7blW4Vx8BSg3/DgbqCv+fF380SN8bYqqLJl8fQFdzg==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.10.tgz",
+ "integrity": "sha512-K4AO7mROTdbhQ7chtyQd6oPwmuL+BPUh+wn6Aq1qrmYJK4UZYFOPp8fi/Ehs8meCEeywtrssOPfrOE4Gsre9dg==",
"devOptional": true,
"requires": {
"ajv": "8.11.0",
}
},
"@angular-devkit/schematics": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.7.tgz",
- "integrity": "sha512-3e2dpFXWl2Z4Gfm+KgY3gAeqsyu8utJMcDIg5sWRAXDeJJdAPc5LweCa8YZEn33Zr9cl8oK+FxlOr15RCyWLcA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.10.tgz",
+ "integrity": "sha512-MMp31KpJTwKHisXOq+6VOXYApq97hZxFaFmZk396X5aIFTCELUwjcezQDk+u2nEs5iK/COUfnN3plGcfJxYhQA==",
"devOptional": true,
"requires": {
- "@angular-devkit/core": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
"jsonc-parser": "3.1.0",
"magic-string": "0.26.2",
"ora": "5.4.1",
}
},
"@angular/cli": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.7.tgz",
- "integrity": "sha512-RM4CJwtqD7cKFQ7hNGJ56s9YMeJxYqCN5Ss0SzsKN1nXYqz8HykMW8fhUbZQ9HFVy/Ml3LGoh1yGo/tXywAWcA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.10.tgz",
+ "integrity": "sha512-gX9sAKOwq4lKdPWeABB7TzKDHdjQXvkUU8NmPJA6mEAVXvm3lhQtFvHDalZstwK8au2LY0LaXTcEtcKYOt3AXQ==",
"devOptional": true,
"requires": {
- "@angular-devkit/architect": "0.1402.7",
- "@angular-devkit/core": "14.2.7",
- "@angular-devkit/schematics": "14.2.7",
- "@schematics/angular": "14.2.7",
+ "@angular-devkit/architect": "0.1402.10",
+ "@angular-devkit/core": "14.2.10",
+ "@angular-devkit/schematics": "14.2.10",
+ "@schematics/angular": "14.2.10",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"debug": "4.3.4",
}
},
"@angular/common": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.8.tgz",
- "integrity": "sha512-JSPN2h1EcyWjHWtOzRQmoX48ZacTjLAYwW9ZRmBpYs6Ptw5xZ39ARTJfQNcNnJleqYju2E6BNkGnLpbtWQjNDA==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
+ "integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/compiler": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.8.tgz",
- "integrity": "sha512-lKwp3B4ZKNLgk/25Iyur8bjAwRL20auRoB4EuHrBf+928ftsjYUXTgi+0++DUjPENbpi59k6GcvMCNa6qccvIw==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
+ "integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/compiler-cli": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.8.tgz",
- "integrity": "sha512-QTftNrAyXOWzKFGY6/i9jh0LB2cOxmykepG4c53wH9LblGvWFztlVOhcoU8tpQSSH8t3EYvGs2r8oUuxcYm5Cw==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
+ "integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
"requires": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
}
},
"@angular/core": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.8.tgz",
- "integrity": "sha512-cgnII9vJGJDLsfr7KsBfU2l+QQUmQIRIP3ImKhBxicw2IHKCSb2mYwoeLV46jaLyHyUMTLRHKUYUR4XtSPnb8A==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
+ "integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/forms": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.8.tgz",
- "integrity": "sha512-OaL7Gi6STxJza7yn0qgmh6+hV6NVbtGmunpzrn9cR1k5TeE4ZtXu1z7VZesbZ9kZ3F6U9CmygFt0csf7j1d+Ow==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
+ "integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/localize": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.8.tgz",
- "integrity": "sha512-ph+ZLl1sXoNnw9AH4aHyI10T0sNCUTtZeGGDTPJnfOQgqfleOvgPxCNNNdi4z02XcLjVE9CKllcaOQY8zwKlZg==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
+ "integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
"requires": {
"@babel/core": "7.18.9",
"glob": "8.0.3",
"semver": "^6.3.0"
}
},
- "@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
- "requires": {
- "@babel/types": "^7.18.13",
- "@jridgewell/gen-mapping": "^0.3.2",
- "jsesc": "^2.5.1"
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
}
},
"@angular/platform-browser": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.8.tgz",
- "integrity": "sha512-tSASBLXoBE0/Gt6d2nC6BJ1DvbGY5wo2Lb+8WCLSvkfsgVqOh4uRuJ2a0wwjeLFd0ZNmpjG42Ijba4btmCpIjg==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
+ "integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/platform-browser-dynamic": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.8.tgz",
- "integrity": "sha512-CPK8wHnKke8AUKR92XrFuanaKNXDzDm3uVI3DD0NxBo+fLAkiuVaDVIGgO6n6SxQVtwjXJtMXqQuNdzUg4Q9uQ==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
+ "integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/router": {
- "version": "14.2.8",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.8.tgz",
- "integrity": "sha512-rbKLsa4/scPP8AxaDRQfkLqfg8CbZ163dPqHMixou90uK/dx00LjCyUeS38/otdAYNZhrD0i5nu+k65qwhLX8w==",
+ "version": "14.2.12",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
+ "integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
"requires": {
"tslib": "^2.3.0"
}
}
},
"@babel/compat-data": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
- "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw=="
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+ "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g=="
},
"@babel/core": {
"version": "7.18.10",
}
},
"@babel/helper-compilation-targets": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
- "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+ "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
"requires": {
- "@babel/compat-data": "^7.18.8",
+ "@babel/compat-data": "^7.20.0",
"@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
+ "browserslist": "^4.21.3",
"semver": "^6.3.0"
},
"dependencies": {
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz",
- "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6"
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
- "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
+ "regexpu-core": "^5.2.1"
}
},
"@babel/helper-define-polyfill-provider": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
- "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+ "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
"dev": true,
"requires": {
"@babel/helper-compilation-targets": "^7.17.7",
}
},
"@babel/helper-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"requires": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
}
},
"@babel/helper-hoist-variables": {
}
},
"@babel/helper-module-transforms": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+ "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-simple-access": "^7.20.2",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.20.1",
+ "@babel/types": "^7.20.2"
}
},
"@babel/helper-optimise-call-expression": {
}
},
"@babel/helper-plugin-utils": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
"dev": true
},
"@babel/helper-remap-async-to-generator": {
}
},
"@babel/helper-replace-supers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
- "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+ "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/traverse": "^7.19.1",
+ "@babel/types": "^7.19.0"
}
},
"@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.20.2"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
- "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+ "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.20.0"
}
},
"@babel/helper-split-export-declaration": {
}
},
"@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
},
"@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
},
"@babel/helper-validator-option": {
"version": "7.18.6",
"integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="
},
"@babel/helper-wrap-function": {
- "version": "7.18.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz",
- "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+ "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.18.11",
- "@babel/types": "^7.18.10"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
}
},
"@babel/helpers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
- "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+ "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"requires": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
}
},
"@babel/highlight": {
}
},
"@babel/parser": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg=="
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.18.6",
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
- "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+ "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.18.8",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.8"
+ "@babel/plugin-transform-parameters": "^7.20.1"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
}
},
"@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+ "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
}
},
"@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+ "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
}
},
"@babel/plugin-syntax-import-meta": {
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
- "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
+ "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
}
},
"@babel/plugin-transform-arrow-functions": {
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
- "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+ "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
- "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+ "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
}
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
- "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+ "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-dotall-regex": {
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+ "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+ "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-simple-access": "^7.19.4"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
- "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+ "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
"dev": true,
"requires": {
"@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-validator-identifier": "^7.19.1"
}
},
"@babel/plugin-transform-modules-umd": {
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
- "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+ "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-new-target": {
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
- "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+ "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-property-literals": {
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+ "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "regenerator-transform": "^0.15.1"
}
},
"@babel/plugin-transform-reserved-words": {
}
},
"@babel/plugin-transform-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
- "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+ "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.19.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
}
},
}
},
"@babel/traverse": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+ "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"requires": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
+ "@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/parser": "^7.20.5",
+ "@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+ "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"requires": {
- "@babel/types": "^7.18.13",
+ "@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
}
}
},
"@babel/types": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+ "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"requires": {
- "@babel/helper-string-parser": "^7.18.10",
- "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/helper-string-parser": "^7.19.4",
+ "@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
}
},
}
},
"@csstools/postcss-cascade-layers": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz",
- "integrity": "sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz",
+ "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==",
"dev": true,
"requires": {
"@csstools/selector-specificity": "^2.0.2",
}
},
"@cypress/schematic": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.1.1.tgz",
- "integrity": "sha512-Kf4QeNk8IVx3tdybls+xq8CbqsZwqR9dZjE3ELZhfG2rZeId9SSG6F2GpR4Xly5ROkX0BuQVeuIFNSkDxWAtPg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.3.0.tgz",
+ "integrity": "sha512-LBKX20MUUYF2Xu+1+KpVbLCoMvt2Osa80yQfonduVsLJ/p8JxtLHqufuf/ryJp9Gm9R5sDfk/YhHL+rB7a+gsg==",
"optional": true,
"requires": {
"@angular-devkit/architect": "^0.1402.1",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
},
"@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
"requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"@leichtgewicht/ip-codec": {
"dev": true
},
"@ng-bootstrap/ng-bootstrap": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.0.0.tgz",
- "integrity": "sha512-aumflJ24VVOQ6kIGmpaWmjqfreRsXOCf/l2nOxPO6Y+d7Pit6aZthyjO7F0bRMutv6n+B/ma18GKvhhBcMepUw==",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-13.1.1.tgz",
+ "integrity": "sha512-R6qnmFKT2EwwijBHw7rUXqyo5W90OImHOv7BlsxMNnZLIksWIhqwU00k4UBTfRTnd6JsTPuj/co3MaP61ajILA==",
"requires": {
"tslib": "^2.3.0"
}
},
"@ng-select/ng-select": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.0.2.tgz",
- "integrity": "sha512-xdNiz/kgkMWYW1qFtk/337xDk/cmfEbSVtTFxWIM2OnIX1XsQOnTlGiBYces1TsMfqS68HjAvljEkj8QIGN2Lg==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-9.1.0.tgz",
+ "integrity": "sha512-vxSRD2d84H39eqtTJaethlpQ+xkJUU8epQNUr3yPiah23z8MBCqSDE1t0chxi+rXJz7+xoC9qFa1aYnUVFan4w==",
"requires": {
"tslib": "^2.3.1"
}
},
"@ngneat/dirty-check-forms": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.2.tgz",
- "integrity": "sha512-SKl3f/SqIdBMle7QorO4T90TqaWAjLe0xtJrTrzCsjC4uQlsk+old1DugUF16FJxAikPcBMoUABHa2iT3Uh75g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@ngneat/dirty-check-forms/-/dirty-check-forms-3.0.3.tgz",
+ "integrity": "sha512-YGlKrAaqTRO8lfT1xyN9LkYN0GH0crzdnXAxQFNEuNDQpCHv9cQ0j9XPDsonek6X4K7fLug84n0CQ42rSmGBqw==",
"requires": {
"tslib": ">=2.0.0"
}
},
"@ngtools/webpack": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.7.tgz",
- "integrity": "sha512-I47BdEybpzjfFFMFB691o9C+69RexLTgSm/VCyDn4M8DrGrZpgYNhxN+AEr1uA6Bi6MaPG6w+TMac5tNIaO4Yw==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.10.tgz",
+ "integrity": "sha512-sLHapZLVub6mEz5b19tf1VfIV1w3tYfg7FNPLeni79aldxu1FbP1v2WmiFAnMzrswqyK0bhTtxrl+Z/CLKqyoQ==",
"dev": true,
"requires": {}
},
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
},
"@schematics/angular": {
- "version": "14.2.7",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.7.tgz",
- "integrity": "sha512-ujtLu0gWARtJsRbN+P+McDO0Y0ygJjUN5016SdbmYDMcDJkwi+GYHU8Yvh/UONtmNor3JdV8AnZ8OmWTlswTDA==",
+ "version": "14.2.10",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.10.tgz",
+ "integrity": "sha512-YFTc/9QJdx422XcApizEcVLKoyknu8b9zHIlAepZCu7WkV8GPT0hvVEHQ7KBWys5aQ7pPZMT0JpZLeAz0F2xYQ==",
"devOptional": true,
"requires": {
- "@angular-devkit/core": "14.2.7",
- "@angular-devkit/schematics": "14.2.7",
+ "@angular-devkit/core": "14.2.10",
+ "@angular-devkit/schematics": "14.2.10",
"jsonc-parser": "3.1.0"
}
},
"dev": true
},
"@sinclair/typebox": {
- "version": "0.24.34",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz",
- "integrity": "sha512-x3ejWKw7rpy30Bvm6U0AQMOHdjqe2E3YJrBHlTxH0KFsp77bBa+MH324nJxtXZFpnTy/JW2h5HPYVm0vG2WPnw==",
+ "version": "0.24.51",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
+ "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
"dev": true
},
"@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
"dev": true
},
"@types/babel__core": {
- "version": "7.1.19",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz",
- "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==",
+ "version": "7.1.20",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
+ "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
}
},
"@types/babel__traverse": {
- "version": "7.18.1",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
- "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+ "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
}
},
"@types/eslint": {
- "version": "8.4.6",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz",
- "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==",
+ "version": "8.4.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
+ "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
"dev": true,
"requires": {
"@types/estree": "*",
}
},
"@types/jsdom": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
- "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
+ "version": "20.0.1",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
"dev": true,
"requires": {
"@types/node": "*",
"dev": true
},
"parse5": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
- "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dev": true,
"requires": {
- "entities": "^4.3.0"
+ "entities": "^4.4.0"
}
}
}
"dev": true
},
"@types/node": {
- "version": "18.7.23",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
- "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+ "version": "18.11.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz",
+ "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==",
"devOptional": true
},
"@types/parse-json": {
"dev": true
},
"@types/prettier": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
- "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
"dev": true
},
"@types/qs": {
}
},
"@types/yargs": {
- "version": "17.0.12",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
- "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
+ "version": "17.0.15",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.15.tgz",
+ "integrity": "sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
"dev": true
},
"acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
"dev": true,
"requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- },
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- }
+ "acorn": "^8.1.0",
+ "acorn-walk": "^8.0.2"
}
},
"acorn-import-assertions": {
"requires": {}
},
"acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true
},
"adjust-sourcemap-loader": {
},
"dependencies": {
"loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
}
},
"anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
"optional": true
},
"autoprefixer": {
- "version": "10.4.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
- "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==",
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
"dev": true,
"requires": {
- "browserslist": "^4.21.3",
- "caniuse-lite": "^1.0.30001373",
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
},
"dependencies": {
"loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
}
}
},
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
"babel-plugin-istanbul": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
}
},
"babel-plugin-polyfill-corejs2": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
- "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+ "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.2",
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
"semver": "^6.1.1"
},
"dependencies": {
}
},
"babel-plugin-polyfill-regenerator": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz",
- "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+ "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.2"
+ "@babel/helper-define-polyfill-provider": "^0.3.3"
}
},
"babel-preset-current-node-syntax": {
"dev": true
},
"bootstrap": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.1.tgz",
- "integrity": "sha512-UQi3v2NpVPEi1n35dmRRzBJFlgvWHYwyem6yHhuT6afYF+sziEt46McRbT//kVXZ7b1YUYEVGdXEH74Nx3xzGA==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
+ "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
"requires": {}
},
"brace-expansion": {
"dev": true
},
"browserslist": {
- "version": "4.21.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
- "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
"requires": {
- "caniuse-lite": "^1.0.30001370",
- "electron-to-chromium": "^1.4.202",
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
"node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.5"
+ "update-browserslist-db": "^1.0.9"
}
},
"bs-logger": {
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001388",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz",
- "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ=="
+ "version": "1.0.30001435",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
+ "integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA=="
},
"caseless": {
"version": "0.12.0",
"dev": true
},
"ci-info": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+ "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
"devOptional": true
},
"cjs-module-lexer": {
"devOptional": true
},
"cli-table3": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
- "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
"optional": true,
"requires": {
"@colors/colors": "1.5.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
"dev": true,
"requires": {
"safe-buffer": "5.2.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- }
}
},
"content-type": {
"dev": true
},
"convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "requires": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
"cookie": {
"version": "0.5.0",
}
},
"core-js-compat": {
- "version": "3.25.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz",
- "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==",
+ "version": "3.26.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+ "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
"dev": true,
"requires": {
- "browserslist": "^4.21.3",
- "semver": "7.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true
- }
+ "browserslist": "^4.21.4"
}
},
"core-util-is": {
"devOptional": true
},
"cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
"requires": {
"@types/parse-json": "^4.0.0",
}
},
"cssdb": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz",
- "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
+ "integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
"dev": true
},
"cssesc": {
},
"dependencies": {
"@types/node": {
- "version": "14.18.26",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz",
- "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==",
+ "version": "14.18.34",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.34.tgz",
+ "integrity": "sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA==",
"optional": true
},
"ansi-styles": {
}
},
"date-fns": {
- "version": "2.29.2",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz",
- "integrity": "sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA==",
+ "version": "2.29.3",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+ "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
"dev": true
},
"dayjs": {
- "version": "1.11.5",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz",
- "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==",
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
+ "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==",
"optional": true
},
"debug": {
}
},
"decimal.js": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz",
- "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==",
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+ "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
"dev": true
},
"dedent": {
}
},
"defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"devOptional": true,
"requires": {
"clone": "^1.0.2"
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"devOptional": true
},
- "define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "dev": true,
- "requires": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"dev": true
},
"electron-to-chromium": {
- "version": "1.4.240",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz",
- "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow=="
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
},
"emittery": {
"version": "0.10.2",
}
},
"enhanced-resolve": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
- "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.4",
"requires": {
"side-channel": "^1.0.4"
}
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
}
}
},
"devOptional": true
},
"fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
}
},
"fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"requires": {
"bser": "2.1.1"
}
},
"follow-redirects": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
- "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"dev": true
},
"forever-agent": {
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"dev": true
},
"global-dirs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
- "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
"optional": true,
"requires": {
"ini": "2.0.0"
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
},
- "has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.1"
- }
- },
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"dev": true
},
"hosted-git-info": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz",
- "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+ "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
"devOptional": true,
"requires": {
"lru-cache": "^7.5.1"
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"devOptional": true
},
"ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
"dev": true
},
"ignore-walk": {
}
},
"is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"devOptional": true,
"requires": {
"has": "^1.0.3"
"dev": true
},
"istanbul-lib-instrument": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
- "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
"requires": {
"@babel/core": "^7.12.3",
}
},
"jest-environment-jsdom": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.2.2.tgz",
- "integrity": "sha512-5mNtTcky1+RYv9kxkwMwt7fkzyX4EJUarV7iI+NQLigpV4Hz4sgfOdP4kOpCHXbkRWErV7tgXoXLm2CKtucr+A==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.3.1.tgz",
+ "integrity": "sha512-G46nKgiez2Gy4zvYNhayfMEAFlVHhWfncqvqS6yCd0i+a4NsSUD2WtrKSaYQrYiLQaupHXxCRi8xxVL2M9PbhA==",
"dev": true,
"requires": {
- "@jest/environment": "^29.2.2",
- "@jest/fake-timers": "^29.2.2",
- "@jest/types": "^29.2.1",
+ "@jest/environment": "^29.3.1",
+ "@jest/fake-timers": "^29.3.1",
+ "@jest/types": "^29.3.1",
"@types/jsdom": "^20.0.0",
"@types/node": "*",
- "jest-mock": "^29.2.2",
- "jest-util": "^29.2.1",
+ "jest-mock": "^29.3.1",
+ "jest-util": "^29.3.1",
"jsdom": "^20.0.0"
},
"dependencies": {
"@jest/environment": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
- "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz",
+ "integrity": "sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^29.2.2",
- "@jest/types": "^29.2.1",
+ "@jest/fake-timers": "^29.3.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
- "jest-mock": "^29.2.2"
+ "jest-mock": "^29.3.1"
}
},
"@jest/fake-timers": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
- "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz",
+ "integrity": "sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==",
"dev": true,
"requires": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^29.2.1",
- "jest-mock": "^29.2.2",
- "jest-util": "^29.2.1"
+ "jest-message-util": "^29.3.1",
+ "jest-mock": "^29.3.1",
+ "jest-util": "^29.3.1"
}
},
"@jest/schemas": {
}
},
"@jest/types": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
- "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz",
+ "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==",
"dev": true,
"requires": {
"@jest/schemas": "^29.0.0",
"dev": true
},
"jest-message-util": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
- "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz",
+ "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.2.1",
+ "pretty-format": "^29.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-mock": {
- "version": "29.2.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
- "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz",
+ "integrity": "sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==",
"dev": true,
"requires": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
- "jest-util": "^29.2.1"
+ "jest-util": "^29.3.1"
}
},
"jest-util": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
- "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz",
+ "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.2.1",
+ "@jest/types": "^29.3.1",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
}
},
"pretty-format": {
- "version": "29.2.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
- "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
+ "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
"dev": true,
"requires": {
"@jest/schemas": "^29.0.0",
}
},
"jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"requires": {}
},
"jest-preset-angular": {
- "version": "12.2.2",
- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.2.tgz",
- "integrity": "sha512-aj5ZwVW6cGGzZKUn6e/jDwFgQh6FHy1zCCXWOeqFCuM3WODrbdUJ93zKrex18e9K1+PvOcP0e20yKbj3gwhfFg==",
+ "version": "12.2.3",
+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.2.3.tgz",
+ "integrity": "sha512-9vgawXuki/lg4IRPtl5k83krWLKADTal7BBm06xNAWOK09AbHK1foXqZdVOMObsWbaMDeQ1cjba60vS/aEVY4Q==",
"dev": true,
"requires": {
"bs-logger": "^0.2.6",
"@types/tough-cookie": "*"
}
},
+ "acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true
},
+ "w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "requires": {
+ "xml-name-validator": "^4.0.0"
+ }
+ },
"whatwg-url": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
}
},
"joi": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
- "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+ "version": "17.7.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz",
+ "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==",
"dev": true,
"requires": {
"@hapi/hoek": "^9.0.0",
"optional": true
},
"jsdom": {
- "version": "20.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
- "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
+ "version": "20.0.3",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
"dev": true,
"requires": {
"abab": "^2.0.6",
- "acorn": "^8.7.1",
- "acorn-globals": "^6.0.0",
+ "acorn": "^8.8.1",
+ "acorn-globals": "^7.0.0",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
"data-urls": "^3.0.2",
- "decimal.js": "^10.3.1",
+ "decimal.js": "^10.4.2",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0",
"http-proxy-agent": "^5.0.0",
"https-proxy-agent": "^5.0.1",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "^7.0.0",
+ "nwsapi": "^2.2.2",
+ "parse5": "^7.1.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^3.0.0",
+ "tough-cookie": "^4.1.2",
+ "w3c-xmlserializer": "^4.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^11.0.0",
- "ws": "^8.8.0",
+ "ws": "^8.11.0",
"xml-name-validator": "^4.0.0"
},
"dependencies": {
}
},
"parse5": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
- "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dev": true,
"requires": {
- "entities": "^4.3.0"
+ "entities": "^4.4.0"
}
},
"tough-cookie": {
"dev": true
},
"loader-utils": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz",
- "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
+ "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
"dev": true
},
"locate-path": {
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"devOptional": true
},
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "peer": true
+ },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
}
},
"lru-cache": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
- "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+ "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
"devOptional": true
},
"magic-string": {
"dev": true
},
"memfs": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.9.tgz",
- "integrity": "sha512-3rm8kbrzpUGRyPKSGuk387NZOwQ90O4rI9tsWQkzNW7BLSnKGp23RsEsKK8N8QVCrtJoAMqy3spxHC4os4G6PQ==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz",
+ "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==",
"dev": true,
"requires": {
"fs-monkey": "^1.0.3"
}
},
"minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"devOptional": true
},
"minipass": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
- "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"devOptional": true,
"requires": {
"yallist": "^4.0.0"
"dev": true
},
"needle": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
- "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
"dev": true,
"optional": true,
"requires": {
"dev": true
},
"ng2-pdf-viewer": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.2.tgz",
- "integrity": "sha512-dVfrEOW0rusHjLGpGnkt2mDKdd3LKK9uXAbNxOCv94I2jS2QjciPHMELLKWCliBXiLNbDOTsQdCDQPvYT3vKgQ==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-9.1.3.tgz",
+ "integrity": "sha512-t2Gez92xPWPfY3qzzs+iLey5NUCYwJXIzv+dU4prY96aYdacsxuOpFjORW1+a330ryMkxYEJvEQ+mgbBJr77xw==",
"requires": {
"pdfjs-dist": "~2.14.305",
"tslib": "^2.3.1"
}
},
"ngx-file-drop": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.1.tgz",
- "integrity": "sha512-OSsI1Qjs273Xi+tIkCoO/ciFx6gT9wwyZ1900O4ggniOiTNByNq+xBN8DASOcAqLxvkuri8en7MtZPu+jxX/6Q==",
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-14.0.2.tgz",
+ "integrity": "sha512-tIW+Ymd2IOjUQTqMb2NiuupeRPWwKe19kHmb13gf4Iw8rkvrO6PlqqZ3EqSGPIEJOmV836FZHpM4B1xXjVQLfA==",
"requires": {
"tslib": "^2.3.0"
}
},
+ "ngx-ui-tour-core": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.2.1.tgz",
+ "integrity": "sha512-KpDSeNl69S1x+jUdREIkFgHGfpAyydxAt2aRUZ263kHZskME/CpaojEmjLCB+xUxEXij9Bq9tQxtGPm5IkJlPg==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
"ngx-ui-tour-ng-bootstrap": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.1.0.tgz",
- "integrity": "sha512-VQbQA+c4aYtUe/6yzY6BzawDHhIxwH0uck3SpJmlhhHLmydm1OCRjlmhVJHEIPggwxGOvO5h/Vs6iLmmwxn//g==",
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-11.3.2.tgz",
+ "integrity": "sha512-DEQ8ek9AGIdIPM6pGZ1Z8b0qY1kwgTppA30432CBBip7UES0KJFoT9BVHG99pA7Lx07GT9okqYh0zR3jPQh7uA==",
"requires": {
- "ngx-ui-tour-core": "9.1.0",
+ "ngx-ui-tour-core": "9.2.1",
"tslib": "^2.0.0"
- },
- "dependencies": {
- "ngx-ui-tour-core": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-9.1.0.tgz",
- "integrity": "sha512-9fSvSoh0wUpaVFNo/D0Vs9NreL0esFBY3MFycONZD8b5SE7nX2+CZLzPbIVnigmj/KH3op5Pw8Pzkg2VHmXTcg==",
- "requires": {
- "tslib": "^2.0.0"
- }
- }
}
},
"nice-napi": {
"dev": true
},
"node-gyp": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz",
- "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz",
+ "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==",
"devOptional": true,
"requires": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
"graceful-fs": "^4.2.6",
"make-fetch-happen": "^10.0.3",
- "nopt": "^5.0.0",
+ "nopt": "^6.0.0",
"npmlog": "^6.0.0",
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
},
"nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
+ "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
"devOptional": true,
"requires": {
- "abbrev": "1"
+ "abbrev": "^1.0.0"
}
},
"normalize-package-data": {
}
},
"nwsapi": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
- "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
"dev": true
},
"object-inspect": {
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
"dev": true
},
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- }
- },
"obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
}
},
"postcss-custom-properties": {
- "version": "12.1.8",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz",
- "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==",
+ "version": "12.1.11",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
+ "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
}
},
"postcss-nesting": {
- "version": "10.1.10",
- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz",
- "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz",
+ "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==",
"dev": true,
"requires": {
"@csstools/selector-specificity": "^2.0.0",
}
},
"postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
"dev": true,
"requires": {
"cssesc": "^3.0.0",
"dev": true
},
"regenerate-unicode-properties": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
"dev": true,
"requires": {
"regenerate": "^1.4.2"
"dev": true
},
"regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
"dev": true,
"requires": {
"@babel/runtime": "^7.8.4"
"dev": true
},
"regexpu-core": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
- "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+ "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
"dev": true,
"requires": {
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.0.1",
- "regjsgen": "^0.6.0",
- "regjsparser": "^0.8.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsgen": "^0.7.1",
+ "regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
+ "unicode-match-property-value-ecmascript": "^2.1.0"
}
},
"regjsgen": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+ "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
"dev": true
},
"regjsparser": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
"requires": {
"jsesc": "~0.5.0"
},
"dependencies": {
"loader-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
}
},
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "devOptional": true
},
"safer-buffer": {
"version": "2.1.2",
"devOptional": true
},
"shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
"dev": true
},
"side-channel": {
}
},
"socks": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
- "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"devOptional": true,
"requires": {
"ip": "^2.0.0",
}
},
"stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
"devOptional": true,
"requires": {
"safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "devOptional": true
- }
}
},
"string-length": {
}
},
"supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"requires": {
"has-flag": "^4.0.0",
"dev": true
},
"tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "version": "6.1.12",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz",
+ "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==",
"devOptional": true,
"requires": {
"chownr": "^2.0.0",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
- },
- "dependencies": {
- "acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true
- }
}
},
"tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"tslint": {
"version": "6.1.3",
}
},
"unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
"dev": true
},
"unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true
},
"unique-filename": {
"optional": true
},
"update-browserslist-db": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.6.tgz",
- "integrity": "sha512-We7BqM9XFlcW94Op93uW8+2LXvGezs7QA0WY+f1H7RR1q46B06W6hZF6LbmOlpCS1HU22q/6NOGTGW5sCm7NJQ==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
}
},
"w3c-xmlserializer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
- "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
"dev": true,
"requires": {
"xml-name-validator": "^4.0.0"
}
},
"ws": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
- "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"dev": true,
"requires": {}
},
"@angular/router": "~14.2.8",
"@ng-bootstrap/ng-bootstrap": "^13.0.0",
"@ng-select/ng-select": "^9.0.2",
- "@ngneat/dirty-check-forms": "^3.0.2",
+ "@ngneat/dirty-check-forms": "^3.0.3",
"@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.1",
"file-saver": "^2.0.5",
"ng2-pdf-viewer": "^9.1.2",
"ngx-color": "^8.0.3",
"ngx-cookie-service": "^14.0.1",
- "ngx-file-drop": "^14.0.1",
+ "ngx-file-drop": "^14.0.2",
"ngx-ui-tour-ng-bootstrap": "^11.1.0",
"rxjs": "~7.5.7",
- "tslib": "^2.3.1",
+ "tslib": "^2.4.1",
"uuid": "^9.0.0",
"zone.js": "~0.11.8"
},
"devDependencies": {
- "@angular-builders/jest": "14.0.1",
+ "@angular-builders/jest": "14.1.0",
"@angular-devkit/build-angular": "~14.2.7",
"@angular/cli": "~14.2.7",
"@angular/compiler-cli": "~14.2.8",
"concurrently": "7.4.0",
"jest": "28.1.3",
"jest-environment-jsdom": "^29.2.2",
- "jest-preset-angular": "^12.2.2",
+ "jest-preset-angular": "^12.2.3",
"ts-node": "~10.9.1",
"tslint": "~6.1.3",
"typescript": "~4.8.4",
},
},
},
+ {
+ path: 'settings/:section',
+ component: SettingsComponent,
+ canDeactivate: [DirtyFormGuard],
+ },
+ { path: 'tasks', component: TasksComponent },
],
},
}
})
+ const prevBtnTitle = $localize`Prev`
+ const nextBtnTitle = $localize`Next`
+ const endBtnTitle = $localize`End`
+
this.tourService.initialize([
{
anchorId: 'tour.dashboard',
route: '/dashboard',
enableBackdrop: true,
delayAfterNavigation: 500,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.upload-widget',
content: $localize`Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.`,
route: '/dashboard',
enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.documents',
placement: 'bottom',
enableBackdrop: true,
disableScrollToAnchor: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.documents-filter-editor',
route: '/documents?sort=created&reverse=1&page=1',
placement: 'bottom',
enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.documents-views',
content: $localize`Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.`,
route: '/documents?sort=created&reverse=1&page=1',
enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.tags',
content: $localize`Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.`,
route: '/tags',
enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.file-tasks',
content: $localize`File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.`,
route: '/tasks',
enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.settings',
- content: $localize`Check out the settings for various tweaks to the web app or to toggle settings for saved views.`,
+ content: $localize`Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.`,
route: '/settings',
enableBackdrop: true,
- },
- {
- anchorId: 'tour.admin',
- content: $localize`The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.`,
- enableBackdrop: true,
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
{
anchorId: 'tour.outro',
'<br/><br/>' +
$localize`Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!`,
route: '/dashboard',
+ prevBtnTitle,
+ nextBtnTitle,
+ endBtnTitle,
},
])
import { TextComponent } from './components/common/input/text/text.component'
import { SelectComponent } from './components/common/input/select/select.component'
import { CheckComponent } from './components/common/input/check/check.component'
+import { PasswordComponent } from './components/common/input/password/password.component'
import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component'
import { TagsComponent } from './components/common/input/tags/tags.component'
import { IfPermissionsDirective } from './directives/if-permissions.directive'
import { UserEditDialogComponent } from './components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
import { GroupEditDialogComponent } from './components/common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
import { PermissionsSelectComponent } from './components/common/permissions-select/permissions-select.component'
+import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
import localeBe from '@angular/common/locales/be'
import localeCs from '@angular/common/locales/cs'
TextComponent,
SelectComponent,
CheckComponent,
+ PasswordComponent,
SaveViewConfigDialogComponent,
TagsComponent,
IfPermissionsDirective,
UserEditDialogComponent,
GroupEditDialogComponent,
PermissionsSelectComponent,
+ MailAccountEditDialogComponent,
+ MailRuleEditDialogComponent,
],
imports: [
BrowserModule,
</svg>
<input class="form-control form-control-sm" type="text" placeholder="Search documents" aria-label="Search"
[formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (keyup)="searchFieldKeyup($event)" (selectItem)="itemSelected($event)" i18n-placeholder>
- <button *ngIf="!searchFieldEmpty" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0" (click)="resetSearchField()">
+ <button type="button" *ngIf="!searchFieldEmpty" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0" (click)="resetSearchField()">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x me-1" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
</svg>
</svg><span> <ng-container i18n>Settings</ng-container></span>
</a>
</li>
- <li class="nav-item" *ifPermissions="{ action: PermissionAction.View, type: PermissionType.Admin }" tourAnchor="tour.admin">
- <a class="nav-link" href="admin/" ngbPopover="Admin" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
- <svg class="sidebaricon" fill="currentColor">
- <use xlink:href="assets/bootstrap-icons.svg#toggles"/>
- </svg><span> <ng-container i18n>Admin</ng-container></span>
- </a>
- </li>
</ul>
<h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted">
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item" tourAnchor="tour.outro">
- <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
+ <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://docs.paperless-ngx.com" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#question-circle"/>
</svg><span> <ng-container i18n>Documentation</ng-container></span>
this.isMenuCollapsed = true
}
+ get openDocuments(): PaperlessDocument[] {
+ return this.openDocumentsService.getOpenDocuments()
+ }
+
+ @HostListener('window:beforeunload')
+ canDeactivate(): Observable<boolean> | boolean {
+ return !this.openDocumentsService.hasDirty()
+ }
+
searchField = new FormControl('')
get searchFieldEmpty(): boolean {
}
}
- get openDocuments(): PaperlessDocument[] {
- return this.openDocumentsService.getOpenDocuments()
- }
-
- @HostListener('window:beforeunload')
- canDeactivate(): Observable<boolean> | boolean {
- return !this.openDocumentsService.hasDirty()
- }
-
searchAutoComplete = (text$: Observable<string>) =>
text$.pipe(
debounceTime(200),
import { FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { Observable } from 'rxjs'
-import { map } from 'rxjs/operators'
import { MATCHING_ALGORITHMS, MATCH_AUTO } from 'src/app/data/matching-model'
import { ObjectWithId } from 'src/app/data/object-with-id'
import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'
-import { ToastService } from 'src/app/services/toast.service'
@Directive()
export abstract class EditDialogComponent<T extends ObjectWithId>
break
}
this.networkActive = true
- serverResponse.subscribe(
- (result) => {
+ serverResponse.subscribe({
+ next: (result) => {
this.activeModal.close()
this.success.emit(result)
},
- (error) => {
+ error: (error) => {
this.error = error.error
this.networkActive = false
- }
- )
+ },
+ })
}
cancel() {
--- /dev/null
+<form [formGroup]="objectForm" (ngSubmit)="save()">
+ <div class="modal-header">
+ <h4 class="modal-title" id="modal-basic-title">{{getTitle()}}</h4>
+ <button type="button" [disabled]="!closeEnabled" class="btn-close" aria-label="Close" (click)="cancel()">
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="col">
+ <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
+ <app-input-text i18n-title title="IMAP Server" formControlName="imap_server" [error]="error?.imap_server"></app-input-text>
+ <app-input-text i18n-title title="IMAP Port" formControlName="imap_port" [error]="error?.imap_port"></app-input-text>
+ <app-input-select i18n-title title="IMAP Security" [items]="imapSecurityOptions" formControlName="imap_security"></app-input-select>
+ </div>
+ <div class="col">
+ <app-input-text i18n-title title="Username" formControlName="username" [error]="error?.username"></app-input-text>
+ <app-input-password i18n-title title="Password" formControlName="password" [error]="error?.password"></app-input-password>
+ <app-input-text i18n-title title="Character Set" formControlName="character_set" [error]="error?.character_set"></app-input-text>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
+ <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
+ </div>
+</form>
--- /dev/null
+import { Component } from '@angular/core'
+import { FormControl, FormGroup } from '@angular/forms'
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
+import {
+ IMAPSecurity,
+ PaperlessMailAccount,
+} from 'src/app/data/paperless-mail-account'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+
+const IMAP_SECURITY_OPTIONS = [
+ { id: IMAPSecurity.None, name: $localize`No encryption` },
+ { id: IMAPSecurity.SSL, name: $localize`SSL` },
+ { id: IMAPSecurity.STARTTLS, name: $localize`STARTTLS` },
+]
+
+@Component({
+ selector: 'app-mail-account-edit-dialog',
+ templateUrl: './mail-account-edit-dialog.component.html',
+ styleUrls: ['./mail-account-edit-dialog.component.scss'],
+})
+export class MailAccountEditDialogComponent extends EditDialogComponent<PaperlessMailAccount> {
+ constructor(service: MailAccountService, activeModal: NgbActiveModal) {
+ super(service, activeModal)
+ }
+
+ getCreateTitle() {
+ return $localize`Create new mail account`
+ }
+
+ getEditTitle() {
+ return $localize`Edit mail account`
+ }
+
+ getForm(): FormGroup {
+ return new FormGroup({
+ name: new FormControl(null),
+ imap_server: new FormControl(null),
+ imap_port: new FormControl(null),
+ imap_security: new FormControl(IMAPSecurity.SSL),
+ username: new FormControl(null),
+ password: new FormControl(null),
+ character_set: new FormControl('UTF-8'),
+ })
+ }
+
+ get imapSecurityOptions() {
+ return IMAP_SECURITY_OPTIONS
+ }
+}
--- /dev/null
+<form [formGroup]="objectForm" (ngSubmit)="save()">
+ <div class="modal-header">
+ <h4 class="modal-title" id="modal-basic-title">{{getTitle()}}</h4>
+ <button type="button" [disabled]="!closeEnabled" class="btn-close" aria-label="Close" (click)="cancel()">
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="col">
+ <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
+ <app-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></app-input-select>
+ <app-input-text i18n-title title="Folder" formControlName="folder" i18n-hint hint="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." [error]="error?.folder"></app-input-text>
+ <app-input-number i18n-title title="Maximum age (days)" formControlName="maximum_age" [showAdd]="false" [error]="error?.maximum_age"></app-input-number>
+ <app-input-select i18n-title title="Attachment type" [items]="attachmentTypeOptions" formControlName="attachment_type"></app-input-select>
+ </div>
+ <div class="col">
+ <p class="small" i18n>Paperless will only process mails that match <em>all</em> of the filters specified below.</p>
+ <app-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></app-input-text>
+ <app-input-text i18n-title title="Filter subject" formControlName="filter_subject" [error]="error?.filter_subject"></app-input-text>
+ <app-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></app-input-text>
+ <app-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" i18n-hint hint="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." [error]="error?.filter_attachment_filename"></app-input-text>
+ </div>
+ <div class="col">
+ <app-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></app-input-select>
+ <app-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></app-input-text>
+ <app-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></app-input-select>
+ <app-input-tags [allowCreate]="false" formControlName="assign_tags"></app-input-tags>
+ <app-input-select i18n-title title="Assign document type" [items]="documentTypes" [allowNull]="true" formControlName="assign_document_type"></app-input-select>
+ <app-input-select i18n-title title="Assign correspondent from" [items]="metadataCorrespondentOptions" formControlName="assign_correspondent_from"></app-input-select>
+ <app-input-select *ngIf="showCorrespondentField" i18n-title title="Assign correspondent" [items]="correspondents" [allowNull]="true" formControlName="assign_correspondent"></app-input-select>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <span class="text-danger" *ngIf="error?.non_field_errors"><ng-container i18n>Error</ng-container>: {{error.non_field_errors}}</span>
+ <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
+ <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
+ </div>
+</form>
--- /dev/null
+import { Component } from '@angular/core'
+import { FormControl, FormGroup } from '@angular/forms'
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
+import { first } from 'rxjs'
+import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'
+import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'
+import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import {
+ MailAction,
+ MailFilterAttachmentType,
+ MailMetadataCorrespondentOption,
+ MailMetadataTitleOption,
+ PaperlessMailRule,
+} from 'src/app/data/paperless-mail-rule'
+import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
+import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+
+const ATTACHMENT_TYPE_OPTIONS = [
+ {
+ id: MailFilterAttachmentType.Attachments,
+ name: $localize`Only process attachments.`,
+ },
+ {
+ id: MailFilterAttachmentType.Everything,
+ name: $localize`Process all files, including 'inline' attachments.`,
+ },
+]
+
+const ACTION_OPTIONS = [
+ {
+ id: MailAction.Delete,
+ name: $localize`Delete`,
+ },
+ {
+ id: MailAction.Move,
+ name: $localize`Move to specified folder`,
+ },
+ {
+ id: MailAction.MarkRead,
+ name: $localize`Mark as read, don't process read mails`,
+ },
+ {
+ id: MailAction.Flag,
+ name: $localize`Flag the mail, don't process flagged mails`,
+ },
+ {
+ id: MailAction.Tag,
+ name: $localize`Tag the mail with specified tag, don't process tagged mails`,
+ },
+]
+
+const METADATA_TITLE_OPTIONS = [
+ {
+ id: MailMetadataTitleOption.FromSubject,
+ name: $localize`Use subject as title`,
+ },
+ {
+ id: MailMetadataTitleOption.FromFilename,
+ name: $localize`Use attachment filename as title`,
+ },
+]
+
+const METADATA_CORRESPONDENT_OPTIONS = [
+ {
+ id: MailMetadataCorrespondentOption.FromNothing,
+ name: $localize`Do not assign a correspondent`,
+ },
+ {
+ id: MailMetadataCorrespondentOption.FromEmail,
+ name: $localize`Use mail address`,
+ },
+ {
+ id: MailMetadataCorrespondentOption.FromName,
+ name: $localize`Use name (or mail address if not available)`,
+ },
+ {
+ id: MailMetadataCorrespondentOption.FromCustom,
+ name: $localize`Use correspondent selected below`,
+ },
+]
+
+@Component({
+ selector: 'app-mail-rule-edit-dialog',
+ templateUrl: './mail-rule-edit-dialog.component.html',
+ styleUrls: ['./mail-rule-edit-dialog.component.scss'],
+})
+export class MailRuleEditDialogComponent extends EditDialogComponent<PaperlessMailRule> {
+ accounts: PaperlessMailAccount[]
+ correspondents: PaperlessCorrespondent[]
+ documentTypes: PaperlessDocumentType[]
+
+ constructor(
+ service: MailRuleService,
+ activeModal: NgbActiveModal,
+ accountService: MailAccountService,
+ correspondentService: CorrespondentService,
+ documentTypeService: DocumentTypeService
+ ) {
+ super(service, activeModal)
+
+ accountService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.accounts = result.results))
+
+ correspondentService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.correspondents = result.results))
+
+ documentTypeService
+ .listAll()
+ .pipe(first())
+ .subscribe((result) => (this.documentTypes = result.results))
+ }
+
+ getCreateTitle() {
+ return $localize`Create new mail rule`
+ }
+
+ getEditTitle() {
+ return $localize`Edit mail rule`
+ }
+
+ getForm(): FormGroup {
+ return new FormGroup({
+ name: new FormControl(null),
+ account: new FormControl(null),
+ folder: new FormControl('INBOX'),
+ filter_from: new FormControl(null),
+ filter_subject: new FormControl(null),
+ filter_body: new FormControl(null),
+ filter_attachment_filename: new FormControl(null),
+ maximum_age: new FormControl(null),
+ attachment_type: new FormControl(MailFilterAttachmentType.Attachments),
+ action: new FormControl(MailAction.MarkRead),
+ action_parameter: new FormControl(null),
+ assign_title_from: new FormControl(MailMetadataTitleOption.FromSubject),
+ assign_tags: new FormControl([]),
+ assign_document_type: new FormControl(null),
+ assign_correspondent_from: new FormControl(
+ MailMetadataCorrespondentOption.FromNothing
+ ),
+ assign_correspondent: new FormControl(null),
+ })
+ }
+
+ get showCorrespondentField(): boolean {
+ return (
+ this.objectForm?.get('assign_correspondent_from')?.value ==
+ MailMetadataCorrespondentOption.FromCustom
+ )
+ }
+
+ get showActionParamField(): boolean {
+ return (
+ this.objectForm?.get('action')?.value == MailAction.Move ||
+ this.objectForm?.get('action')?.value == MailAction.Tag
+ )
+ }
+
+ get attachmentTypeOptions() {
+ return ATTACHMENT_TYPE_OPTIONS
+ }
+
+ get actionOptions() {
+ return ACTION_OPTIONS
+ }
+
+ get metadataTitleOptions() {
+ return METADATA_TITLE_OPTIONS
+ }
+
+ get metadataCorrespondentOptions() {
+ return METADATA_CORRESPONDENT_OPTIONS
+ }
+}
<div class="modal-body">
<p *ngIf="this.dialogMode == 'edit'" i18n>
- <em>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">documentation</a>.</em>
+ <em>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">documentation</a>.</em>
</p>
<app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
' <code>{created_year}-{title}</code> ' +
$localize`or use slashes to add directories e.g.` +
' <code>{created_year}/{correspondent}/{title}</code>. ' +
- $localize`See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.`
+ $localize`See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.`
)
}
<label class="form-label" [for]="inputId">{{title}}</label>
<div class="input-group" [class.is-invalid]="error">
<input type="number" class="form-control" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" [class.is-invalid]="error">
- <button class="btn btn-outline-secondary" type="button" id="button-addon1" (click)="nextAsn()" [disabled]="value">+1</button>
+ <button *ngIf="showAdd" class="btn btn-outline-secondary" type="button" id="button-addon1" (click)="nextAsn()" [disabled]="value">+1</button>
</div>
<div class="invalid-feedback">
{{error}}
-import { Component, forwardRef } from '@angular/core'
+import { Component, forwardRef, Input } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import { FILTER_ASN_ISNULL } from 'src/app/data/filter-rule-type'
import { DocumentService } from 'src/app/services/rest/document.service'
styleUrls: ['./number.component.scss'],
})
export class NumberComponent extends AbstractInputComponent<number> {
+ @Input()
+ showAdd: boolean = true
+
constructor(private documentService: DocumentService) {
super()
}
--- /dev/null
+<div class="mb-3">
+ <label class="form-label" [for]="inputId">{{title}}</label>
+ <input #inputField type="password" class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)">
+ <small *ngIf="hint" class="form-text text-muted" [innerHTML]="hint | safeHtml"></small>
+ <div class="invalid-feedback">
+ {{error}}
+ </div>
+</div>
--- /dev/null
+import { Component, forwardRef } from '@angular/core'
+import { NG_VALUE_ACCESSOR } from '@angular/forms'
+import { AbstractInputComponent } from '../abstract-input'
+
+@Component({
+ providers: [
+ {
+ provide: NG_VALUE_ACCESSOR,
+ useExisting: forwardRef(() => PasswordComponent),
+ multi: true,
+ },
+ ],
+ selector: 'app-input-password',
+ templateUrl: './password.component.html',
+ styleUrls: ['./password.component.scss'],
+})
+export class PasswordComponent extends AbstractInputComponent<string> {
+ constructor() {
+ super()
+ }
+}
[closeOnSelect]="false"
[clearSearchOnAdd]="true"
[hideSelected]="true"
- [addTag]="createTagRef"
+ [addTag]="allowCreate ? createTagRef : false"
addTagText="Add tag"
i18n-addTagText
(change)="onChange(value)"
</ng-template>
</ng-select>
- <button class="btn btn-outline-secondary" type="button" (click)="createTag()">
+ <button *ngIf="allowCreate" class="btn btn-outline-secondary" type="button" (click)="createTag()">
<svg class="buttonicon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#plus" />
</svg>
@Input()
suggestions: number[]
+ @Input()
+ allowCreate: boolean = true
+
value: number[]
tags: PaperlessTag[]
<!-- [dismissible]="isFinished(status)" (closed)="dismiss(status)" -->
<h4 class="alert-heading"><ng-container i18n>Paperless-ngx is running!</ng-container> 🎉</h4>
<p i18n>You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</p>
- <p i18n>More detail on how to use and configure Paperless-ngx is always available in the <a href="https://paperless-ngx.readthedocs.io" target="_blank">documentation</a>.</p>
+ <p i18n>More detail on how to use and configure Paperless-ngx is always available in the <a href="https://docs.paperless-ngx.com" target="_blank">documentation</a>.</p>
<hr>
<div class="d-flex align-items-end">
<p class="lead fs-6 m-0"><em i18n>Thanks for being a part of the Paperless-ngx community!</em></p>
.subscribe({
next: () => {
this.toastService.showInfo(
- $localize`Redo OCR operation will begin in the background.`
+ $localize`Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.`
)
if (modal) {
modal.close()
backdrop: 'static',
})
activeModal.componentInstance.dialogMode = 'create'
- activeModal.componentInstance.success.subscribe((o) => {
- this.reloadData()
+ activeModal.componentInstance.success.subscribe({
+ next: () => {
+ this.reloadData()
+ this.toastService.showInfo(
+ $localize`Successfully created ${this.typeName}.`
+ )
+ },
+ error: (e) => {
+ this.toastService.showInfo(
+ $localize`Error occurred while creating ${
+ this.typeName
+ } : ${e.toString()}.`
+ )
+ },
})
}
})
activeModal.componentInstance.object = object
activeModal.componentInstance.dialogMode = 'edit'
- activeModal.componentInstance.success.subscribe((o) => {
- this.reloadData()
+ activeModal.componentInstance.success.subscribe({
+ next: () => {
+ this.reloadData()
+ this.toastService.showInfo(
+ $localize`Successfully updated ${this.typeName}.`
+ )
+ },
+ error: (e) => {
+ this.toastService.showInfo(
+ $localize`Error occurred while saving ${
+ this.typeName
+ } : ${e.toString()}.`
+ )
+ },
})
}
<app-page-header title="Settings" i18n-title>
<button class="btn btn-sm btn-outline-primary" (click)="tourService.start()"><ng-container i18n>Start tour</ng-container></button>
+ <a class="btn btn-sm btn-primary ms-3" href="admin/" target="_blank">
+ <ng-container i18n>Open Django Admin</ng-container>
+ <svg class="sidebaricon ms-1" fill="currentColor">
+ <use xlink:href="assets/bootstrap-icons.svg#arrow-up-right"/>
+ </svg>
+ </a>
</app-page-header>
-<!-- <p>items per page, documents per view type</p> -->
<form [formGroup]="settingsForm" (ngSubmit)="saveSettings()">
- <ul ngbNav #nav="ngbNav" (navChange)="maybeInitializeTab($event)" [(activeId)]="activeNavID" class="nav-tabs">
+ <ul ngbNav #nav="ngbNav" (navChange)="onNavChange($event)" [(activeId)]="activeNavID" class="nav-tabs">
<li [ngbNavItem]="SettingsNavIDs.General">
<a ngbNavLink i18n>General</a>
<ng-template ngbNavContent>
</ng-template>
</li>
+ <li [ngbNavItem]="SettingsNavIDs.Mail" (mouseover)="maybeInitializeTab(SettingsNavIDs.Mail)" (focusin)="maybeInitializeTab(SettingsNavIDs.Mail)">
+ <a ngbNavLink i18n>Mail</a>
+ <ng-template ngbNavContent>
+
+ <ng-container *ngIf="mailAccounts && mailRules">
+ <h4>
+ <ng-container i18n>Mail accounts</ng-container>
+ <button type="button" class="btn btn-sm btn-primary ms-4" (click)="editMailAccount()">
+ <svg class="sidebaricon me-1" fill="currentColor">
+ <use xlink:href="assets/bootstrap-icons.svg#plus-circle" />
+ </svg>
+ <ng-container i18n>Add Account</ng-container>
+ </button>
+ </h4>
+ <ul class="list-group" formGroupName="mailAccounts">
+
+ <li class="list-group-item">
+ <div class="row">
+ <div class="col" i18n>Name</div>
+ <div class="col" i18n>Server</div>
+ <div class="col" i18n>Actions</div>
+ </div>
+ </li>
+
+ <li *ngFor="let account of mailAccounts" class="list-group-item" [formGroupName]="account.id">
+ <div class="row">
+ <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailAccount(account)">{{account.name}}</button></div>
+ <div class="col d-flex align-items-center">{{account.imap_server}}</div>
+ <div class="col">
+ <div class="btn-group">
+ <button class="btn btn-sm btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button>
+ <button class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailAccount(account)" i18n>Delete</button>
+ </div>
+ </div>
+ </div>
+ </li>
+
+ <div *ngIf="mailAccounts.length == 0" i18n>No mail accounts defined.</div>
+ </ul>
+
+ <h4 class="mt-4">
+ <ng-container i18n>Mail rules</ng-container>
+ <button type="button" class="btn btn-sm btn-primary ms-4" (click)="editMailRule()">
+ <svg class="sidebaricon me-1" fill="currentColor">
+ <use xlink:href="assets/bootstrap-icons.svg#plus-circle" />
+ </svg>
+ <ng-container i18n>Add Rule</ng-container>
+ </button>
+ </h4>
+ <ul class="list-group" formGroupName="mailRules">
+
+ <li class="list-group-item">
+ <div class="row">
+ <div class="col" i18n>Name</div>
+ <div class="col" i18n>Account</div>
+ <div class="col" i18n>Actions</div>
+ </div>
+ </li>
+
+ <li *ngFor="let rule of mailRules" class="list-group-item" [formGroupName]="rule.id">
+ <div class="row">
+ <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailRule(rule)">{{rule.name}}</button></div>
+ <div class="col d-flex align-items-center">{{(mailAccountService.getCached(rule.account) | async)?.name}}</div>
+ <div class="col">
+ <div class="btn-group">
+ <button class="btn btn-sm btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button>
+ <button class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailRule(rule)" i18n>Delete</button>
+ </div>
+ </div>
+ </div>
+ </li>
+
+ <div *ngIf="mailRules.length == 0" i18n>No mail rules defined.</div>
+ </ul>
+ </ng-container>
+
+ <div *ngIf="!mailAccounts || !mailRules">
+ <div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
+ <div class="visually-hidden" i18n>Loading...</div>
+ </div>
+
+ </ng-template>
+ </li>
+
<li [ngbNavItem]="SettingsNavIDs.UsersGroups" *ifPermissions="{ action: PermissionAction.Add, type: PermissionType.User }" (mouseover)="maybeInitializeTab(SettingsNavIDs.UsersGroups)" (focusin)="maybeInitializeTab(SettingsNavIDs.UsersGroups)">
<a ngbNavLink i18n>Users & Groups</a>
<ng-template ngbNavContent>
Subject,
} from 'rxjs'
import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
-import { ActivatedRoute } from '@angular/router'
+import { ActivatedRoute, Router } from '@angular/router'
import { ViewportScroller } from '@angular/common'
import { TourService } from 'ngx-ui-tour-ng-bootstrap'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import { UserEditDialogComponent } from '../../common/edit-dialog/user-edit-dialog/user-edit-dialog.component'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
import { GroupEditDialogComponent } from '../../common/edit-dialog/group-edit-dialog/group-edit-dialog.component'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
+import { MailAccountService } from 'src/app/services/rest/mail-account.service'
+import { MailRuleService } from 'src/app/services/rest/mail-rule.service'
+import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component'
+import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component'
enum SettingsNavIDs {
General = 1,
usersGroup = new FormGroup({})
groupsGroup = new FormGroup({})
+ mailAccountGroup = new FormGroup({})
+ mailRuleGroup = new FormGroup({})
+
settingsForm = new FormGroup({
bulkEditConfirmationDialogs: new FormControl(null),
bulkEditApplyOnClose: new FormControl(null),
darkModeInvertThumbs: new FormControl(null),
themeColor: new FormControl(null),
useNativePdfViewer: new FormControl(null),
- savedViews: this.savedViewGroup,
displayLanguage: new FormControl(null),
dateLocale: new FormControl(null),
dateFormat: new FormControl(null),
+ commentsEnabled: new FormControl(null),
+ updateCheckingEnabled: new FormControl(null),
+
notificationsConsumerNewDocument: new FormControl(null),
notificationsConsumerSuccess: new FormControl(null),
notificationsConsumerFailed: new FormControl(null),
notificationsConsumerSuppressOnDashboard: new FormControl(null),
- commentsEnabled: new FormControl(null),
- updateCheckingEnabled: new FormControl(null),
usersGroup: this.usersGroup,
groupsGroup: this.groupsGroup,
+
+ savedViews: this.savedViewGroup,
+
+ mailAccounts: this.mailAccountGroup,
+ mailRules: this.mailRuleGroup,
})
savedViews: PaperlessSavedView[]
+ mailAccounts: PaperlessMailAccount[]
+ mailRules: PaperlessMailRule[]
+
store: BehaviorSubject<any>
storeSub: Subscription
isDirty$: Observable<boolean>
constructor(
public savedViewService: SavedViewService,
+ public mailAccountService: MailAccountService,
+ public mailRuleService: MailRuleService,
private documentListViewService: DocumentListViewService,
private toastService: ToastService,
private settings: SettingsService,
public readonly tourService: TourService,
private usersService: UserService,
private groupsService: GroupService,
+ private router: Router,
private modalService: NgbModal
) {
super()
})
}
+ ngOnInit() {
+ this.initialize()
+
+ this.activatedRoute.paramMap.subscribe((paramMap) => {
+ const section = paramMap.get('section')
+ if (section) {
+ const navIDKey: string = Object.keys(SettingsNavIDs).find(
+ (navID) => navID.toLowerCase() == section
+ )
+ if (navIDKey) {
+ this.activeNavID = SettingsNavIDs[navIDKey]
+ this.maybeInitializeTab(this.activeNavID)
+ }
+ }
+ })
+ }
+
ngAfterViewInit(): void {
if (this.activatedRoute.snapshot.fragment) {
this.viewportScroller.scrollToAnchor(
useNativePdfViewer: this.settings.get(
SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER
),
- savedViews: {},
displayLanguage: this.settings.getLanguage(),
dateLocale: this.settings.get(SETTINGS_KEYS.DATE_LOCALE),
dateFormat: this.settings.get(SETTINGS_KEYS.DATE_FORMAT),
+ commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED),
+ updateCheckingEnabled: this.settings.get(
+ SETTINGS_KEYS.UPDATE_CHECKING_ENABLED
+ ),
notificationsConsumerNewDocument: this.settings.get(
SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT
),
notificationsConsumerSuppressOnDashboard: this.settings.get(
SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD
),
- commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED),
- updateCheckingEnabled: this.settings.get(
- SETTINGS_KEYS.UPDATE_CHECKING_ENABLED
- ),
usersGroup: {},
groupsGroup: {},
+ savedViews: {},
+ mailAccounts: {},
+ mailRules: {},
}
}
- ngOnInit() {
- this.initialize()
+ onNavChange(navChangeEvent: NgbNavChangeEvent) {
+ this.maybeInitializeTab(navChangeEvent.nextId)
+ const [foundNavIDkey, foundNavIDValue] = Object.entries(
+ SettingsNavIDs
+ ).find(([navIDkey, navIDValue]) => navIDValue == navChangeEvent.nextId)
+ if (foundNavIDkey)
+ // if its dirty we need to wait for confirmation
+ this.router
+ .navigate(['settings', foundNavIDkey.toLowerCase()])
+ .then((navigated) => {
+ if (!navigated && this.isDirty) {
+ this.activeNavID = navChangeEvent.activeId
+ } else if (navigated && this.isDirty) {
+ this.initialize()
+ }
+ })
}
- // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or on nav change event
- maybeInitializeTab(navIDorEvent: number | NgbNavChangeEvent): void {
- const navID =
- typeof navIDorEvent == 'number' ? navIDorEvent : navIDorEvent.nextId
- // initialize saved views
+ // Load tab contents 'on demand', either on mouseover or focusin (i.e. before click) or called from nav change event
+ maybeInitializeTab(navID: number): void {
if (navID == SettingsNavIDs.SavedViews && !this.savedViews) {
this.savedViewService.listAll().subscribe((r) => {
this.savedViews = r.results
- this.initialize()
+ this.initialize(false)
})
} else if (
(navID == SettingsNavIDs.UsersGroups && !this.users) ||
) {
this.usersService.listAll().subscribe((r) => {
this.users = r.results
-
this.groupsService.listAll().subscribe((r) => {
this.groups = r.results
this.initialize()
})
})
+ } else if (
+ navID == SettingsNavIDs.Mail &&
+ (!this.mailAccounts || !this.mailRules)
+ ) {
+ this.mailAccountService.listAll().subscribe((r) => {
+ this.mailAccounts = r.results
+
+ this.mailRuleService.listAll().subscribe((r) => {
+ this.mailRules = r.results
+ this.initialize(false)
+ })
+ })
}
}
- initialize() {
+ initialize(resetSettings: boolean = true) {
this.unsubscribeNotifier.next(true)
+ const currentFormValue = this.settingsForm.value
+
let storeData = this.getCurrentSettings()
if (this.savedViews) {
}
}
+ if (this.mailAccounts && this.mailRules) {
+ for (let account of this.mailAccounts) {
+ storeData.mailAccounts[account.id.toString()] = {
+ id: account.id,
+ name: account.name,
+ imap_server: account.imap_server,
+ imap_port: account.imap_port,
+ imap_security: account.imap_security,
+ username: account.username,
+ password: account.password,
+ character_set: account.character_set,
+ }
+ this.mailAccountGroup.addControl(
+ account.id.toString(),
+ new FormGroup({
+ id: new FormControl(null),
+ name: new FormControl(null),
+ imap_server: new FormControl(null),
+ imap_port: new FormControl(null),
+ imap_security: new FormControl(null),
+ username: new FormControl(null),
+ password: new FormControl(null),
+ character_set: new FormControl(null),
+ })
+ )
+ }
+
+ for (let rule of this.mailRules) {
+ storeData.mailRules[rule.id.toString()] = {
+ name: rule.name,
+ account: rule.account,
+ folder: rule.folder,
+ filter_from: rule.filter_from,
+ filter_subject: rule.filter_subject,
+ filter_body: rule.filter_body,
+ filter_attachment_filename: rule.filter_attachment_filename,
+ maximum_age: rule.maximum_age,
+ attachment_type: rule.attachment_type,
+ action: rule.action,
+ action_parameter: rule.action_parameter,
+ assign_title_from: rule.assign_title_from,
+ assign_tags: rule.assign_tags,
+ assign_document_type: rule.assign_document_type,
+ assign_correspondent_from: rule.assign_correspondent_from,
+ assign_correspondent: rule.assign_correspondent,
+ }
+ this.mailRuleGroup.addControl(
+ rule.id.toString(),
+ new FormGroup({
+ name: new FormControl(null),
+ account: new FormControl(null),
+ folder: new FormControl(null),
+ filter_from: new FormControl(null),
+ filter_subject: new FormControl(null),
+ filter_body: new FormControl(null),
+ filter_attachment_filename: new FormControl(null),
+ maximum_age: new FormControl(null),
+ attachment_type: new FormControl(null),
+ action: new FormControl(null),
+ action_parameter: new FormControl(null),
+ assign_title_from: new FormControl(null),
+ assign_tags: new FormControl(null),
+ assign_document_type: new FormControl(null),
+ assign_correspondent_from: new FormControl(null),
+ assign_correspondent: new FormControl(null),
+ })
+ )
+ }
+ }
+
this.store = new BehaviorSubject(storeData)
this.storeSub = this.store.asObservable().subscribe((state) => {
this.settingsForm.get('themeColor').value
)
})
+
+ if (!resetSettings && currentFormValue) {
+ // prevents loss of unsaved changes
+ this.settingsForm.patchValue(currentFormValue)
+ }
}
ngOnDestroy() {
})
})
}
+
+ editMailAccount(account: PaperlessMailAccount) {
+ const modal = this.modalService.open(MailAccountEditDialogComponent, {
+ backdrop: 'static',
+ size: 'xl',
+ })
+ modal.componentInstance.dialogMode = account ? 'edit' : 'create'
+ modal.componentInstance.object = account
+ modal.componentInstance.success
+ .pipe(takeUntil(this.unsubscribeNotifier))
+ .subscribe({
+ next: (newMailAccount) => {
+ this.toastService.showInfo(
+ $localize`Saved account "${newMailAccount.name}".`
+ )
+ this.mailAccountService.clearCache()
+ this.mailAccountService.listAll().subscribe((r) => {
+ this.mailAccounts = r.results
+ this.initialize()
+ })
+ },
+ error: (e) => {
+ this.toastService.showError(
+ $localize`Error saving account: ${e.toString()}.`
+ )
+ },
+ })
+ }
+
+ deleteMailAccount(account: PaperlessMailAccount) {
+ const modal = this.modalService.open(ConfirmDialogComponent, {
+ backdrop: 'static',
+ })
+ modal.componentInstance.title = $localize`Confirm delete mail account`
+ modal.componentInstance.messageBold = $localize`This operation will permanently this mail account.`
+ modal.componentInstance.message = $localize`This operation cannot be undone.`
+ modal.componentInstance.btnClass = 'btn-danger'
+ modal.componentInstance.btnCaption = $localize`Proceed`
+ modal.componentInstance.confirmClicked.subscribe(() => {
+ modal.componentInstance.buttonsEnabled = false
+ this.mailAccountService.delete(account).subscribe({
+ next: () => {
+ modal.close()
+ this.toastService.showInfo($localize`Deleted mail account`)
+ this.mailAccountService.clearCache()
+ this.mailAccountService.listAll().subscribe((r) => {
+ this.mailAccounts = r.results
+ this.initialize()
+ })
+ },
+ error: (e) => {
+ this.toastService.showError(
+ $localize`Error deleting mail account: ${e.toString()}.`
+ )
+ },
+ })
+ })
+ }
+
+ editMailRule(rule: PaperlessMailRule) {
+ const modal = this.modalService.open(MailRuleEditDialogComponent, {
+ backdrop: 'static',
+ size: 'xl',
+ })
+ modal.componentInstance.dialogMode = rule ? 'edit' : 'create'
+ modal.componentInstance.object = rule
+ modal.componentInstance.success
+ .pipe(takeUntil(this.unsubscribeNotifier))
+ .subscribe({
+ next: (newMailRule) => {
+ this.toastService.showInfo(
+ $localize`Saved rule "${newMailRule.name}".`
+ )
+ this.mailRuleService.clearCache()
+ this.mailRuleService.listAll().subscribe((r) => {
+ this.mailRules = r.results
+
+ this.initialize()
+ })
+ },
+ error: (e) => {
+ this.toastService.showError(
+ $localize`Error saving rule: ${e.toString()}.`
+ )
+ },
+ })
+ }
+
+ deleteMailRule(rule: PaperlessMailRule) {
+ const modal = this.modalService.open(ConfirmDialogComponent, {
+ backdrop: 'static',
+ })
+ modal.componentInstance.title = $localize`Confirm delete mail rule`
+ modal.componentInstance.messageBold = $localize`This operation will permanently this mail rule.`
+ modal.componentInstance.message = $localize`This operation cannot be undone.`
+ modal.componentInstance.btnClass = 'btn-danger'
+ modal.componentInstance.btnCaption = $localize`Proceed`
+ modal.componentInstance.confirmClicked.subscribe(() => {
+ modal.componentInstance.buttonsEnabled = false
+ this.mailRuleService.delete(rule).subscribe({
+ next: () => {
+ modal.close()
+ this.toastService.showInfo($localize`Deleted mail rule`)
+ this.mailRuleService.clearCache()
+ this.mailRuleService.listAll().subscribe((r) => {
+ this.mailRules = r.results
+ this.initialize()
+ })
+ },
+ error: (e) => {
+ this.toastService.showError(
+ $localize`Error deleting mail rule: ${e.toString()}.`
+ )
+ },
+ })
+ })
+ }
}
<td class="overflow-auto">{{ task.task_file_name }}</td>
<td class="d-none d-lg-table-cell">{{ task.date_created | customDate:'short' }}</td>
<td class="d-none d-lg-table-cell" *ngIf="activeTab != 'started' && activeTab != 'queued'">
- <div *ngIf="task.result.length > 50" class="result" (click)="expandTask(task); $event.stopPropagation();"
+ <div *ngIf="task.result?.length > 50" class="result" (click)="expandTask(task); $event.stopPropagation();"
[ngbPopover]="resultPopover" popoverClass="shadow small mobile" triggers="mouseenter:mouseleave" container="body">
<span class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result | slice:0:50 }}…</span>
</div>
- <span *ngIf="task.result.length <= 50" class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result }}</span>
+ <span *ngIf="task.result?.length <= 50" class="small d-none d-md-inline-block font-monospace text-muted">{{ task.result }}</span>
<ng-template #resultPopover>
<pre class="small mb-0">{{ task.result | slice:0:300 }}<ng-container *ngIf="task.result.length > 300">…</ng-container></pre>
- <ng-container *ngIf="task.result.length > 300"><br/><em>(<ng-container i18n>click for full output</ng-container>)</em></ng-container>
+ <ng-container *ngIf="task.result?.length > 300"><br/><em>(<ng-container i18n>click for full output</ng-container>)</em></ng-container>
</ng-template>
</td>
<td class="d-lg-none">
--- /dev/null
+import { ObjectWithId } from './object-with-id'
+
+export enum IMAPSecurity {
+ None = 1,
+ SSL = 2,
+ STARTTLS = 3,
+}
+
+export interface PaperlessMailAccount extends ObjectWithId {
+ name: string
+
+ imap_server: string
+
+ imap_port: number
+
+ imap_security: IMAPSecurity
+
+ username: string
+
+ password: string
+
+ character_set?: string
+}
--- /dev/null
+import { ObjectWithId } from './object-with-id'
+
+export enum MailFilterAttachmentType {
+ Attachments = 1,
+ Everything = 2,
+}
+
+export enum MailAction {
+ Delete = 1,
+ Move = 2,
+ MarkRead = 3,
+ Flag = 4,
+ Tag = 5,
+}
+
+export enum MailMetadataTitleOption {
+ FromSubject = 1,
+ FromFilename = 2,
+}
+
+export enum MailMetadataCorrespondentOption {
+ FromNothing = 1,
+ FromEmail = 2,
+ FromName = 3,
+ FromCustom = 4,
+}
+
+export interface PaperlessMailRule extends ObjectWithId {
+ name: string
+
+ account: number // PaperlessMailAccount.id
+
+ folder: string
+
+ filter_from: string
+
+ filter_subject: string
+
+ filter_body: string
+
+ filter_attachment_filename: string
+
+ maximum_age: number
+
+ attachment_type: MailFilterAttachmentType
+
+ action: MailAction
+
+ action_parameter?: string
+
+ assign_title_from: MailMetadataTitleOption
+
+ assign_tags?: number[] // PaperlessTag.id
+
+ assign_document_type?: number // PaperlessDocumentType.id
+
+ assign_correspondent_from?: MailMetadataCorrespondentOption
+
+ assign_correspondent?: number // PaperlessCorrespondent.id
+}
date_created: Date
- done?: Date
+ date_done?: Date
- result: string
+ result?: string
related_document?: number
}
import { Injectable } from '@angular/core'
import { DirtyCheckGuard } from '@ngneat/dirty-check-forms'
import { Observable, Subject } from 'rxjs'
-import { map } from 'rxjs/operators'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog/confirm-dialog.component'
--- /dev/null
+import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { combineLatest, Observable } from 'rxjs'
+import { tap } from 'rxjs/operators'
+import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
+import { AbstractPaperlessService } from './abstract-paperless-service'
+
+@Injectable({
+ providedIn: 'root',
+})
+export class MailAccountService extends AbstractPaperlessService<PaperlessMailAccount> {
+ loading: boolean
+
+ constructor(http: HttpClient) {
+ super(http, 'mail_accounts')
+ }
+
+ private reload() {
+ this.loading = true
+ this.listAll().subscribe((r) => {
+ this.mailAccounts = r.results
+ this.loading = false
+ })
+ }
+
+ private mailAccounts: PaperlessMailAccount[] = []
+
+ get allAccounts() {
+ return this.mailAccounts
+ }
+
+ create(o: PaperlessMailAccount) {
+ return super.create(o).pipe(tap(() => this.reload()))
+ }
+
+ update(o: PaperlessMailAccount) {
+ return super.update(o).pipe(tap(() => this.reload()))
+ }
+
+ patchMany(
+ objects: PaperlessMailAccount[]
+ ): Observable<PaperlessMailAccount[]> {
+ return combineLatest(objects.map((o) => super.patch(o))).pipe(
+ tap(() => this.reload())
+ )
+ }
+
+ delete(o: PaperlessMailAccount) {
+ return super.delete(o).pipe(tap(() => this.reload()))
+ }
+}
--- /dev/null
+import { HttpClient } from '@angular/common/http'
+import { Injectable } from '@angular/core'
+import { combineLatest, Observable } from 'rxjs'
+import { tap } from 'rxjs/operators'
+import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
+import { AbstractPaperlessService } from './abstract-paperless-service'
+
+@Injectable({
+ providedIn: 'root',
+})
+export class MailRuleService extends AbstractPaperlessService<PaperlessMailRule> {
+ loading: boolean
+
+ constructor(http: HttpClient) {
+ super(http, 'mail_rules')
+ }
+
+ private reload() {
+ this.loading = true
+ this.listAll().subscribe((r) => {
+ this.mailRules = r.results
+ this.loading = false
+ })
+ }
+
+ private mailRules: PaperlessMailRule[] = []
+
+ get allRules() {
+ return this.mailRules
+ }
+
+ create(o: PaperlessMailRule) {
+ return super.create(o).pipe(tap(() => this.reload()))
+ }
+
+ update(o: PaperlessMailRule) {
+ return super.update(o).pipe(tap(() => this.reload()))
+ }
+
+ patchMany(objects: PaperlessMailRule[]): Observable<PaperlessMailRule[]> {
+ return combineLatest(objects.map((o) => super.patch(o))).pipe(
+ tap(() => this.reload())
+ )
+ }
+
+ delete(o: PaperlessMailRule) {
+ return super.delete(o).pipe(tap(() => this.reload()))
+ }
+}
apiBaseUrl: document.baseURI + 'api/',
apiVersion: '2',
appTitle: 'Paperless-ngx',
- version: '1.9.2-dev',
+ version: '1.10.2-dev',
webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/',
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+ <file source-language="en" datatype="plaintext" original="ng2.template" target-language="ar">
+ <body>
+ <trans-unit id="ngb.alert.close" datatype="html">
+ <source>Close</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
+ <context context-type="linenumber">47,48</context>
+ </context-group>
+ <target state="translated">إغلاق</target>
+ </trans-unit>
+ <trans-unit id="ngb.carousel.slide-number" datatype="html">
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+ <context context-type="linenumber">178,186</context>
+ </context-group>
+ <note priority="1" from="description">Currently selected slide number read by screen reader</note>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
+ </trans-unit>
+ <trans-unit id="ngb.carousel.previous" datatype="html">
+ <source>Previous</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+ <context context-type="linenumber">213,215</context>
+ </context-group>
+ <target state="translated">السابق</target>
+ </trans-unit>
+ <trans-unit id="ngb.carousel.next" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
+ <context context-type="linenumber">236</context>
+ </context-group>
+ <target state="translated">التالي</target>
+ </trans-unit>
+ <trans-unit id="ngb.datepicker.select-month" datatype="html">
+ <source>Select month</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+ <context context-type="linenumber">50,51</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+ <context context-type="linenumber">50,51</context>
+ </context-group>
+ <target state="translated">اختر الشهر</target>
+ </trans-unit>
+ <trans-unit id="ngb.datepicker.select-year" datatype="html">
+ <source>Select year</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+ <context context-type="linenumber">50,51</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
+ <context context-type="linenumber">50,51</context>
+ </context-group>
+ <target state="translated">اختر السنة</target>
+ </trans-unit>
+ <trans-unit id="ngb.datepicker.previous-month" datatype="html">
+ <source>Previous month</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+ <context context-type="linenumber">60,63</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+ <context context-type="linenumber">60,63</context>
+ </context-group>
+ <target state="translated">الشهر السابق</target>
+ </trans-unit>
+ <trans-unit id="ngb.datepicker.next-month" datatype="html">
+ <source>Next month</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+ <context context-type="linenumber">60,63</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
+ <context context-type="linenumber">60,63</context>
+ </context-group>
+ <target state="translated">الشهر التالي</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.first" datatype="html">
+ <source>««</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,270</context>
+ </context-group>
+ <target state="translated">««</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.previous" datatype="html">
+ <source>«</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,270</context>
+ </context-group>
+ <target state="translated">«</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.next" datatype="html">
+ <source>»</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,270</context>
+ </context-group>
+ <target state="translated">»</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.last" datatype="html">
+ <source>»»</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,270</context>
+ </context-group>
+ <target state="translated">»»</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.first-aria" datatype="html">
+ <source>First</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,271</context>
+ </context-group>
+ <target state="translated">الأول</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.previous-aria" datatype="html">
+ <source>Previous</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,271</context>
+ </context-group>
+ <target state="translated">السابق</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.next-aria" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,271</context>
+ </context-group>
+ <target state="translated">التالي</target>
+ </trans-unit>
+ <trans-unit id="ngb.pagination.last-aria" datatype="html">
+ <source>Last</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
+ <context context-type="linenumber">269,271</context>
+ </context-group>
+ <target state="translated">الأخير</target>
+ </trans-unit>
+ <trans-unit id="ngb.progressbar.value" datatype="html">
+ <source>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
+ </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
+ <context context-type="linenumber">30,33</context>
+ </context-group>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.HH" datatype="html">
+ <source>HH</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">230,231</context>
+ </context-group>
+ <target state="needs-translation">HH</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.hours" datatype="html">
+ <source>Hours</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">255,258</context>
+ </context-group>
+ <target state="translated">ساعات</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.MM" datatype="html">
+ <source>MM</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">280,282</context>
+ </context-group>
+ <target state="needs-translation">MM</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.minutes" datatype="html">
+ <source>Minutes</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">298,299</context>
+ </context-group>
+ <target state="translated">دقائق</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.increment-hours" datatype="html">
+ <source>Increment hours</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">328,329</context>
+ </context-group>
+ <target state="needs-translation">Increment hours</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.decrement-hours" datatype="html">
+ <source>Decrement hours</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">350,356</context>
+ </context-group>
+ <target state="needs-translation">Decrement hours</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.increment-minutes" datatype="html">
+ <source>Increment minutes</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">383,384</context>
+ </context-group>
+ <target state="needs-translation">Increment minutes</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.decrement-minutes" datatype="html">
+ <source>Decrement minutes</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">412,416</context>
+ </context-group>
+ <target state="needs-translation">Decrement minutes</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.SS" datatype="html">
+ <source>SS</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ <target state="needs-translation">SS</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.seconds" datatype="html">
+ <source>Seconds</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ <target state="translated">ثوانٍ</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.increment-seconds" datatype="html">
+ <source>Increment seconds</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ <target state="needs-translation">Increment seconds</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.decrement-seconds" datatype="html">
+ <source>Decrement seconds</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ <target state="needs-translation">Decrement seconds</target>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.PM" datatype="html">
+ <source>
+ <x id="INTERPOLATION"/>
+ </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="ngb.timepicker.AM" datatype="html">
+ <source>
+ <x id="INTERPOLATION"/>
+ </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
+ <context context-type="linenumber">429</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="ngb.toast.close-aria" datatype="html">
+ <source>Close</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
+ <context context-type="linenumber">74,75</context>
+ </context-group>
+ <target state="translated">إغلاق</target>
+ </trans-unit>
+ <trans-unit id="7103632680753685326" datatype="html">
+ <source>Drop files to begin upload</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.html</context>
+ <context context-type="linenumber">7</context>
+ </context-group>
+ <target state="translated">اسحب الملفات لبدء التحميل</target>
+ </trans-unit>
+ <trans-unit id="9103526311244275943" datatype="html" approved="yes">
+ <source>Document added</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">78</context>
+ </context-group>
+ <target state="final">أُضيف المستند</target>
+ </trans-unit>
+ <trans-unit id="9204248378636247318" datatype="html" approved="yes">
+ <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">80</context>
+ </context-group>
+ <target state="final">أضيف المستند <x id="PH" equiv-text="status.filename"/> إلى paperless.</target>
+ </trans-unit>
+ <trans-unit id="1931214133925051574" datatype="html" approved="yes">
+ <source>Open document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">81</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <target state="final">فتح مستند</target>
+ </trans-unit>
+ <trans-unit id="8582620835547864448" datatype="html">
+ <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">97</context>
+ </context-group>
+ <target state="translated">تعذّر إضافة <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target>
+ </trans-unit>
+ <trans-unit id="1710712016675379662" datatype="html" approved="yes">
+ <source>New document detected</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">112</context>
+ </context-group>
+ <target state="final">عُثر على مستند جديد</target>
+ </trans-unit>
+ <trans-unit id="587031278561344416" datatype="html">
+ <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">114</context>
+ </context-group>
+ <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target>
+ </trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
+ <trans-unit id="3909462337752654810" datatype="html">
+ <source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">126</context>
+ </context-group>
+ <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
+ </trans-unit>
+ <trans-unit id="9075755296812854717" datatype="html">
+ <source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">136</context>
+ </context-group>
+ <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+ </trans-unit>
+ <trans-unit id="7495498057594070122" datatype="html">
+ <source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
+ </trans-unit>
+ <trans-unit id="1334220418719920556" datatype="html">
+ <source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">157</context>
+ </context-group>
+ <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
+ </trans-unit>
+ <trans-unit id="5427326625898532358" datatype="html">
+ <source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">167</context>
+ </context-group>
+ <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
+ </trans-unit>
+ <trans-unit id="2804886236408698479" datatype="html">
+ <source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">176</context>
+ </context-group>
+ <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
+ </trans-unit>
+ <trans-unit id="4680387114119209483" datatype="html">
+ <source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">185</context>
+ </context-group>
+ <target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
+ </trans-unit>
+ <trans-unit id="8625288184670954104" datatype="html">
+ <source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">194</context>
+ </context-group>
+ <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
+ </trans-unit>
+ <trans-unit id="7643249460591212914" datatype="html">
+ <source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">203</context>
+ </context-group>
+ <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
+ </trans-unit>
+ <trans-unit id="7172877665285340082" datatype="html">
+ <source>Thank you! 🙏</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">211</context>
+ </context-group>
+ <target state="translated">شكراً لك! 🙏</target>
+ </trans-unit>
+ <trans-unit id="7354947513482088740" datatype="html">
+ <source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">213</context>
+ </context-group>
+ <target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
+ </trans-unit>
+ <trans-unit id="4270528545616947218" datatype="html">
+ <source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">215</context>
+ </context-group>
+ <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
+ </trans-unit>
+ <trans-unit id="5749300816154614125" datatype="html">
+ <source>Initiating upload...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">264</context>
+ </context-group>
+ <target state="translated">بدء التحميل...</target>
+ </trans-unit>
+ <trans-unit id="2173456130768795374" datatype="html">
+ <source>Paperless-ngx</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <note priority="1" from="description">app title</note>
+ <target state="translated">Paperless-ngx</target>
+ </trans-unit>
+ <trans-unit id="7100953725264790651" datatype="html" approved="yes">
+ <source>Search documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <target state="final">البحث في المستندات</target>
+ </trans-unit>
+ <trans-unit id="2448391510242468907" datatype="html">
+ <source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">39</context>
+ </context-group>
+ <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
+ </trans-unit>
+ <trans-unit id="4930506384627295710" datatype="html" approved="yes">
+ <source>Settings</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">171</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">174</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="final">الإعدادات</target>
+ </trans-unit>
+ <trans-unit id="3797778920049399855" datatype="html" approved="yes">
+ <source>Logout</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">50</context>
+ </context-group>
+ <target state="final">خروج</target>
+ </trans-unit>
+ <trans-unit id="6570363013146073520" datatype="html" approved="yes">
+ <source>Dashboard</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">69</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">72</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="final">لوحة التحكم</target>
+ </trans-unit>
+ <trans-unit id="4733307402565258070" datatype="html">
+ <source>Documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">76</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">79</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+ <context context-type="linenumber">88</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <target state="translated">المستندات</target>
+ </trans-unit>
+ <trans-unit id="472206565520537964" datatype="html" approved="yes">
+ <source>Saved views</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">85</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">184</context>
+ </context-group>
+ <target state="final">طرق العرض المحفوظة</target>
+ </trans-unit>
+ <trans-unit id="6988090220128974198" datatype="html" approved="yes">
+ <source>Open documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">99</context>
+ </context-group>
+ <target state="final">فتح مستندات</target>
+ </trans-unit>
+ <trans-unit id="5687256342387781369" datatype="html" approved="yes">
+ <source>Close all</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">115</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">118</context>
+ </context-group>
+ <target state="final">إغلاق الكل</target>
+ </trans-unit>
+ <trans-unit id="3897348120591552265" datatype="html" approved="yes">
+ <source>Manage</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">124</context>
+ </context-group>
+ <target state="final">إدارة</target>
+ </trans-unit>
+ <trans-unit id="7437910965833684826" datatype="html">
+ <source>Correspondents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">128</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">131</context>
+ </context-group>
+ <target state="needs-translation">Correspondents</target>
+ </trans-unit>
+ <trans-unit id="7886570921510760899" datatype="html" approved="yes">
+ <source>Tags</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">135</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">138</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">28</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">27</context>
+ </context-group>
+ <target state="final">علامات</target>
+ </trans-unit>
+ <trans-unit id="3079652255369035" datatype="html" approved="yes">
+ <source>Document types</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">142</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="final">أنواع المستندات</target>
+ </trans-unit>
+ <trans-unit id="8835528846812581148" datatype="html">
+ <source>Storage paths</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">149</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">152</context>
+ </context-group>
+ <target state="needs-translation">Storage paths</target>
+ </trans-unit>
+ <trans-unit id="2991443309752293110" datatype="html">
+ <source>File Tasks</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">156</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="needs-translation">File Tasks</target>
+ </trans-unit>
+ <trans-unit id="5537285341303594392" datatype="html">
+ <source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">160</context>
+ </context-group>
+ <target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="4804785061014590286" datatype="html" approved="yes">
+ <source>Logs</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">164</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">167</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="final">السجلات</target>
+ </trans-unit>
+ <trans-unit id="5041354590769758251" datatype="html" approved="yes">
+ <source>Admin</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">178</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">181</context>
+ </context-group>
+ <target state="final">المسئول</target>
+ </trans-unit>
+ <trans-unit id="314315645942131479" datatype="html" approved="yes">
+ <source>Info</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">187</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <target state="final">معلومات</target>
+ </trans-unit>
+ <trans-unit id="4895326106573044490" datatype="html" approved="yes">
+ <source>Documentation</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">191</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">194</context>
+ </context-group>
+ <target state="final">الوثائق</target>
+ </trans-unit>
+ <trans-unit id="1534029177398918729" datatype="html">
+ <source>GitHub</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">199</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">202</context>
+ </context-group>
+ <target state="needs-translation">GitHub</target>
+ </trans-unit>
+ <trans-unit id="5612903193691847840" datatype="html" approved="yes">
+ <source>Suggest an idea</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">204</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">208</context>
+ </context-group>
+ <target state="final">اقترح فكرة</target>
+ </trans-unit>
+ <trans-unit id="4112664765954374539" datatype="html">
+ <source>is available.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">217</context>
+ </context-group>
+ <target state="needs-translation">is available.</target>
+ </trans-unit>
+ <trans-unit id="1175891574282637937" datatype="html">
+ <source>Click to view.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">217</context>
+ </context-group>
+ <target state="needs-translation">Click to view.</target>
+ </trans-unit>
+ <trans-unit id="9811291095862612" datatype="html">
+ <source>Paperless-ngx can automatically check for updates</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">221</context>
+ </context-group>
+ <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
+ </trans-unit>
+ <trans-unit id="894819944961861800" datatype="html">
+ <source> How does this work? </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">228,230</context>
+ </context-group>
+ <target state="needs-translation"> How does this work? </target>
+ </trans-unit>
+ <trans-unit id="509090351011426949" datatype="html">
+ <source>Update available</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
+ <context context-type="linenumber">239</context>
+ </context-group>
+ <target state="needs-translation">Update available</target>
+ </trans-unit>
+ <trans-unit id="3011185103048412841" datatype="html">
+ <source>An error occurred while saving settings.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
+ <context context-type="linenumber">83</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">326</context>
+ </context-group>
+ <target state="needs-translation">An error occurred while saving settings.</target>
+ </trans-unit>
+ <trans-unit id="2526035785704676448" datatype="html">
+ <source>An error occurred while saving update checking settings.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
+ <context context-type="linenumber">216</context>
+ </context-group>
+ <target state="needs-translation">An error occurred while saving update checking settings.</target>
+ </trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="needs-translation">Clear</target>
+ </trans-unit>
+ <trans-unit id="5000042972069710005" datatype="html">
+ <source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <target state="needs-translation"><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="1234709746630139322" datatype="html">
+ <source>Confirmation</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">Confirmation</target>
+ </trans-unit>
+ <trans-unit id="9178182467454450952" datatype="html">
+ <source>Confirm</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context>
+ <context context-type="linenumber">32</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">234</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">272</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">308</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">344</context>
+ </context-group>
+ <target state="needs-translation">Confirm</target>
+ </trans-unit>
+ <trans-unit id="6371576811194810854" datatype="html">
+ <source>After</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <target state="needs-translation">After</target>
+ </trans-unit>
+ <trans-unit id="1218334388194408974" datatype="html">
+ <source>Before</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">42</context>
+ </context-group>
+ <target state="needs-translation">Before</target>
+ </trans-unit>
+ <trans-unit id="4873149362496451858" datatype="html">
+ <source>Last 7 days</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <target state="needs-translation">Last 7 days</target>
+ </trans-unit>
+ <trans-unit id="4463380307954693363" datatype="html">
+ <source>Last month</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="needs-translation">Last month</target>
+ </trans-unit>
+ <trans-unit id="8697368973702409683" datatype="html">
+ <source>Last 3 months</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+ <context context-type="linenumber">51</context>
+ </context-group>
+ <target state="needs-translation">Last 3 months</target>
+ </trans-unit>
+ <trans-unit id="3566342898065860218" datatype="html">
+ <source>Last year</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Last year</target>
+ </trans-unit>
+ <trans-unit id="8953033926734869941" datatype="html" approved="yes">
+ <source>Name</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">191</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">40</context>
+ </context-group>
+ <target state="final">اسم</target>
+ </trans-unit>
+ <trans-unit id="8743659855412792665" datatype="html">
+ <source>Matching algorithm</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="needs-translation">Matching algorithm</target>
+ </trans-unit>
+ <trans-unit id="2656329676292524585" datatype="html">
+ <source>Matching pattern</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ <target state="needs-translation">Matching pattern</target>
+ </trans-unit>
+ <trans-unit id="6063936469630366525" datatype="html">
+ <source>Case insensitive</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <target state="needs-translation">Case insensitive</target>
+ </trans-unit>
+ <trans-unit id="2159130950882492111" datatype="html">
+ <source>Cancel</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">6</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <target state="needs-translation">Cancel</target>
+ </trans-unit>
+ <trans-unit id="3768927257183755959" datatype="html" approved="yes">
+ <source>Save</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">185</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">223</context>
+ </context-group>
+ <target state="final">حفظ</target>
+ </trans-unit>
+ <trans-unit id="6457471243969293847" datatype="html">
+ <source>Create new correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="needs-translation">Create new correspondent</target>
+ </trans-unit>
+ <trans-unit id="2059822531169388684" datatype="html">
+ <source>Edit correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context>
+ <context context-type="linenumber">29</context>
+ </context-group>
+ <target state="needs-translation">Edit correspondent</target>
+ </trans-unit>
+ <trans-unit id="6672809941092516947" datatype="html" approved="yes">
+ <source>Create new document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="final">إنشاء نوع مستند جديد</target>
+ </trans-unit>
+ <trans-unit id="36335016091244220" datatype="html" approved="yes">
+ <source>Edit document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts</context>
+ <context context-type="linenumber">29</context>
+ </context-group>
+ <target state="final">تحرير نوع المستند</target>
+ </trans-unit>
+ <trans-unit id="4561076822163447092" datatype="html" approved="yes">
+ <source>Create new item</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+ <context context-type="linenumber">52</context>
+ </context-group>
+ <target state="final">إنشاء عنصر جديد</target>
+ </trans-unit>
+ <trans-unit id="5324147361912094446" datatype="html" approved="yes">
+ <source>Edit item</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+ <context context-type="linenumber">56</context>
+ </context-group>
+ <target state="final">تعديل عنصر</target>
+ </trans-unit>
+ <trans-unit id="1699589597032579396" datatype="html">
+ <source>Could not save element: <x id="PH" equiv-text="error"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
+ <context context-type="linenumber">60</context>
+ </context-group>
+ <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target>
+ </trans-unit>
+ <trans-unit id="6036319582202941456" datatype="html">
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ </trans-unit>
+ <trans-unit id="8911059720204770105" datatype="html">
+ <source>Path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
+ <target state="needs-translation">Path</target>
+ </trans-unit>
+ <trans-unit id="6625768491622252297" datatype="html">
+ <source>e.g.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ <target state="needs-translation">e.g.</target>
+ </trans-unit>
+ <trans-unit id="1918584360573970155" datatype="html">
+ <source>or use slashes to add directories e.g.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+ <context context-type="linenumber">28</context>
+ </context-group>
+ <target state="needs-translation">or use slashes to add directories e.g.</target>
+ </trans-unit>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
+ </trans-unit>
+ <trans-unit id="6898961890896270754" datatype="html">
+ <source>Create new storage path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
+ <target state="needs-translation">Create new storage path</target>
+ </trans-unit>
+ <trans-unit id="3754859110054016570" datatype="html">
+ <source>Edit storage path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
+ <context context-type="linenumber">39</context>
+ </context-group>
+ <target state="needs-translation">Edit storage path</target>
+ </trans-unit>
+ <trans-unit id="9011959596901584887" datatype="html" approved="yes">
+ <source>Color</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
+ <target state="final">لون</target>
+ </trans-unit>
+ <trans-unit id="1426037806946650347" datatype="html" approved="yes">
+ <source>Inbox tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <target state="final">علامة علبة الوارد</target>
+ </trans-unit>
+ <trans-unit id="8566220514470905459" datatype="html" approved="yes">
+ <source>Inbox tags are automatically assigned to all consumed documents.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <target state="final">تُعيَّن علامات علبة الوارد تلقائياً لجميع المستندات المستهلكة.</target>
+ </trans-unit>
+ <trans-unit id="9153094873118985366" datatype="html">
+ <source>Create new tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ <target state="needs-translation">Create new tag</target>
+ </trans-unit>
+ <trans-unit id="5872175735754226507" datatype="html">
+ <source>Edit tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">Edit tag</target>
+ </trans-unit>
+ <trans-unit id="1616102757855967475" datatype="html">
+ <source>All</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">All</target>
+ </trans-unit>
+ <trans-unit id="3184700926171002527" datatype="html">
+ <source>Any</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <target state="needs-translation">Any</target>
+ </trans-unit>
+ <trans-unit id="4391289919356861627" datatype="html">
+ <source>Apply</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+ <context context-type="linenumber">32</context>
+ </context-group>
+ <target state="needs-translation">Apply</target>
+ </trans-unit>
+ <trans-unit id="7780041345210191160" datatype="html">
+ <source>Click again to exclude items.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <target state="needs-translation">Click again to exclude items.</target>
+ </trans-unit>
+ <trans-unit id="7593728289020204896" datatype="html">
+ <source>Not assigned</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context>
+ <context context-type="linenumber">261</context>
+ </context-group>
+ <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note>
+ <target state="needs-translation">Not assigned</target>
+ </trans-unit>
+ <trans-unit id="445302259125375799" datatype="html" approved="yes">
+ <source>Invalid date.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="final">تاريخ غير صالح.</target>
+ </trans-unit>
+ <trans-unit id="524422427194414813" datatype="html">
+ <source>Suggestions:</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+ <context context-type="linenumber">42</context>
+ </context-group>
+ <target state="needs-translation">Suggestions:</target>
+ </trans-unit>
+ <trans-unit id="2722549756198502062" datatype="html">
+ <source>Add item</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <note priority="1" from="description">Used for both types, correspondents, storage paths</note>
+ <target state="needs-translation">Add item</target>
+ </trans-unit>
+ <trans-unit id="6560126119609945418" datatype="html">
+ <source>Add tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <target state="needs-translation">Add tag</target>
+ </trans-unit>
+ <trans-unit id="3797570084942068182" datatype="html" approved="yes">
+ <source>Select</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <target state="final">تحديد</target>
+ </trans-unit>
+ <trans-unit id="7103181924469214926" datatype="html" approved="yes">
+ <source>Please select an object</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="final">الرجاء تحديد كائن</target>
+ </trans-unit>
+ <trans-unit id="3894950702316166331" datatype="html">
+ <source>Loading...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html</context>
+ <context context-type="linenumber">7</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">93</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">27</context>
+ </context-group>
+ <target state="needs-translation">Loading...</target>
+ </trans-unit>
+ <trans-unit id="1865646076514070962" datatype="html">
+ <source>Hello <x id="PH" equiv-text="this.settingsService.displayName"/>, welcome to Paperless-ngx</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <target state="needs-translation">Hello <x id="PH" equiv-text="this.settingsService.displayName"/>, welcome to Paperless-ngx</target>
+ </trans-unit>
+ <trans-unit id="5334686081082652461" datatype="html">
+ <source>Welcome to Paperless-ngx</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">Welcome to Paperless-ngx</target>
+ </trans-unit>
+ <trans-unit id="2946624699882754313" datatype="html">
+ <source>Show all</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+ <context context-type="linenumber">3</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">27</context>
+ </context-group>
+ <target state="needs-translation">Show all</target>
+ </trans-unit>
+ <trans-unit id="4207916966377787111" datatype="html" approved="yes">
+ <source>Created</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">157</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">41</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ <target state="final">أُنشئ</target>
+ </trans-unit>
+ <trans-unit id="5701618810648052610" datatype="html" approved="yes">
+ <source>Title</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">75</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">139</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">153</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="final">عنوان</target>
+ </trans-unit>
+ <trans-unit id="1069523139277190436" datatype="html">
+ <source>Statistics</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="needs-translation">Statistics</target>
+ </trans-unit>
+ <trans-unit id="1171694977288479084" datatype="html">
+ <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+ <context context-type="linenumber">3</context>
+ </context-group>
+ <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target>
+ </trans-unit>
+ <trans-unit id="4207135462646354574" datatype="html">
+ <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context>
+ <context context-type="linenumber">4</context>
+ </context-group>
+ <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target>
+ </trans-unit>
+ <trans-unit id="8187573012244728580" datatype="html">
+ <source>Upload new documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="needs-translation">Upload new documents</target>
+ </trans-unit>
+ <trans-unit id="1749180330008942007" datatype="html">
+ <source>Dismiss completed</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">4</context>
+ </context-group>
+ <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note>
+ <target state="needs-translation">Dismiss completed</target>
+ </trans-unit>
+ <trans-unit id="118343233500414755" datatype="html">
+ <source>Drop documents here or</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="needs-translation">Drop documents here or</target>
+ </trans-unit>
+ <trans-unit id="8133800334834354642" datatype="html">
+ <source>Browse files</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="needs-translation">Browse files</target>
+ </trans-unit>
+ <trans-unit id="2330646618997399019" datatype="html">
+ <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note>
+ <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target>
+ </trans-unit>
+ <trans-unit id="6443586946875325554" datatype="html">
+ <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+ <context context-type="linenumber">37</context>
+ </context-group>
+ <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target>
+ </trans-unit>
+ <trans-unit id="9182918211699394982" datatype="html">
+ <source>Failed: <x id="PH" equiv-text="countFailed"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+ <context context-type="linenumber">40</context>
+ </context-group>
+ <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target>
+ </trans-unit>
+ <trans-unit id="534116346205124059" datatype="html">
+ <source>Added: <x id="PH" equiv-text="countSuccess"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target>
+ </trans-unit>
+ <trans-unit id="760986369763309193" datatype="html">
+ <source>, </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">179</context>
+ </context-group>
+ <note priority="1" from="description">this string is used to separate processing, failed and added on the file upload widget</note>
+ <target state="needs-translation">, </target>
+ </trans-unit>
+ <trans-unit id="7915903586014997661" datatype="html">
+ <source>Paperless-ngx is running!</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+ <context context-type="linenumber">3</context>
+ </context-group>
+ <target state="needs-translation">Paperless-ngx is running!</target>
+ </trans-unit>
+ <trans-unit id="3326049540711826572" datatype="html">
+ <source>You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+ <context context-type="linenumber">4</context>
+ </context-group>
+ <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
+ </trans-unit>
+ <trans-unit id="4474647174688421179" datatype="html">
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+ <context context-type="linenumber">5</context>
+ </context-group>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ </trans-unit>
+ <trans-unit id="4294899532887357745" datatype="html">
+ <source>Thanks for being a part of the Paperless-ngx community!</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <target state="needs-translation">Thanks for being a part of the Paperless-ngx community!</target>
+ </trans-unit>
+ <trans-unit id="1415832194529539652" datatype="html">
+ <source>Start the tour</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <target state="needs-translation">Start the tour</target>
+ </trans-unit>
+ <trans-unit id="7822640317427130239" datatype="html">
+ <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target>
+ </trans-unit>
+ <trans-unit id="2122666445936087317" datatype="html">
+ <source>Enter comment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+ <context context-type="linenumber">4</context>
+ </context-group>
+ <target state="needs-translation">Enter comment</target>
+ </trans-unit>
+ <trans-unit id="4025397324401332794" datatype="html">
+ <source> Please enter a comment. </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+ <context context-type="linenumber">5,7</context>
+ </context-group>
+ <target state="needs-translation"> Please enter a comment. </target>
+ </trans-unit>
+ <trans-unit id="2337485514607640701" datatype="html">
+ <source>Add comment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <target state="needs-translation">Add comment</target>
+ </trans-unit>
+ <trans-unit id="5438997040668245251" datatype="html">
+ <source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+ <context context-type="linenumber">68</context>
+ </context-group>
+ <target state="needs-translation">Error saving comment: <x id="PH" equiv-text="e.toString()"/></target>
+ </trans-unit>
+ <trans-unit id="7593210124183303626" datatype="html">
+ <source>Error deleting comment: <x id="PH" equiv-text="e.toString()"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-comments/document-comments.component.ts</context>
+ <context context-type="linenumber">83</context>
+ </context-group>
+ <target state="needs-translation">Error deleting comment: <x id="PH" equiv-text="e.toString()"/></target>
+ </trans-unit>
+ <trans-unit id="1407560924967345762" datatype="html" approved="yes">
+ <source>Page</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">3</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <target state="final">صفحة</target>
+ </trans-unit>
+ <trans-unit id="2266163016683537825" datatype="html" approved="yes">
+ <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">5</context>
+ </context-group>
+ <target state="final">من <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target>
+ </trans-unit>
+ <trans-unit id="7022070615528435141" datatype="html">
+ <source>Delete</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">97</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">157</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">209</context>
+ </context-group>
+ <target state="needs-translation">Delete</target>
+ </trans-unit>
+ <trans-unit id="3099741642167775297" datatype="html" approved="yes">
+ <source>Download</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">58</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">86</context>
+ </context-group>
+ <target state="final">تحميل</target>
+ </trans-unit>
+ <trans-unit id="8659635229098859487" datatype="html" approved="yes">
+ <source>Download original</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="final">تحميل النسخة الأصلية</target>
+ </trans-unit>
+ <trans-unit id="8312409092917397847" datatype="html">
+ <source>Redo OCR</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">34</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">90</context>
+ </context-group>
+ <target state="needs-translation">Redo OCR</target>
+ </trans-unit>
+ <trans-unit id="1418444397960583910" datatype="html" approved="yes">
+ <source>More like this</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">40</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <target state="final">مزيدا من هذا</target>
+ </trans-unit>
+ <trans-unit id="7819314041543176992" datatype="html" approved="yes">
+ <source>Close</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+ <context context-type="linenumber">32</context>
+ </context-group>
+ <target state="final">إغلاق</target>
+ </trans-unit>
+ <trans-unit id="4452427314943113135" datatype="html">
+ <source>Previous</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">50</context>
+ </context-group>
+ <target state="needs-translation">Previous</target>
+ </trans-unit>
+ <trans-unit id="5028777105388019087" datatype="html" approved="yes">
+ <source>Details</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">72</context>
+ </context-group>
+ <target state="final">تفاصيل</target>
+ </trans-unit>
+ <trans-unit id="1379170675585571971" datatype="html" approved="yes">
+ <source>Archive serial number</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">76</context>
+ </context-group>
+ <target state="final">الرقم التسلسلي للأرشيف</target>
+ </trans-unit>
+ <trans-unit id="5114742157723900905" datatype="html" approved="yes">
+ <source>Date created</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">77</context>
+ </context-group>
+ <target state="final">تاريخ الإنشاء</target>
+ </trans-unit>
+ <trans-unit id="2691296884221415710" datatype="html">
+ <source>Correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">79</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">133</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <target state="needs-translation">Correspondent</target>
+ </trans-unit>
+ <trans-unit id="5066119607229701477" datatype="html" approved="yes">
+ <source>Document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">81</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">42</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <target state="final">نوع المستند</target>
+ </trans-unit>
+ <trans-unit id="2091353339965748767" datatype="html">
+ <source>Storage path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">83</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">56</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">151</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">49</context>
+ </context-group>
+ <target state="needs-translation">Storage path</target>
+ </trans-unit>
+ <trans-unit id="5607669932062416162" datatype="html">
+ <source>Default</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">84</context>
+ </context-group>
+ <target state="needs-translation">Default</target>
+ </trans-unit>
+ <trans-unit id="6205355627445317276" datatype="html" approved="yes">
+ <source>Content</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">91</context>
+ </context-group>
+ <target state="final">محتوى</target>
+ </trans-unit>
+ <trans-unit id="218403386307979629" datatype="html">
+ <source>Metadata</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">100</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <target state="needs-translation">Metadata</target>
+ </trans-unit>
+ <trans-unit id="1826652001816486190" datatype="html" approved="yes">
+ <source>Date modified</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">106</context>
+ </context-group>
+ <target state="final">تاريخ التعديل</target>
+ </trans-unit>
+ <trans-unit id="6392918669949841614" datatype="html" approved="yes">
+ <source>Date added</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">110</context>
+ </context-group>
+ <target state="final">تاريخ الإضافة</target>
+ </trans-unit>
+ <trans-unit id="146828917013192897" datatype="html" approved="yes">
+ <source>Media filename</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">114</context>
+ </context-group>
+ <target state="final">اسم ملف الوسائط</target>
+ </trans-unit>
+ <trans-unit id="4500855521601039868" datatype="html">
+ <source>Original filename</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">118</context>
+ </context-group>
+ <target state="needs-translation">Original filename</target>
+ </trans-unit>
+ <trans-unit id="7985558498848210210" datatype="html" approved="yes">
+ <source>Original MD5 checksum</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">122</context>
+ </context-group>
+ <target state="final">مجموع MD5 الاختباري للأصل</target>
+ </trans-unit>
+ <trans-unit id="5888243105821763422" datatype="html" approved="yes">
+ <source>Original file size</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">126</context>
+ </context-group>
+ <target state="final">حجم الملف الأصلي</target>
+ </trans-unit>
+ <trans-unit id="2696647325713149563" datatype="html" approved="yes">
+ <source>Original mime type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">130</context>
+ </context-group>
+ <target state="final">نوع mime الأصلي</target>
+ </trans-unit>
+ <trans-unit id="342875990758166588" datatype="html" approved="yes">
+ <source>Archive MD5 checksum</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">134</context>
+ </context-group>
+ <target state="final">مجموع MD5 الاختباري للأرشيف</target>
+ </trans-unit>
+ <trans-unit id="6033581412811562084" datatype="html" approved="yes">
+ <source>Archive file size</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">138</context>
+ </context-group>
+ <target state="final">حجم ملف الأرشيف</target>
+ </trans-unit>
+ <trans-unit id="6992781481378431874" datatype="html" approved="yes">
+ <source>Original document metadata</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">144</context>
+ </context-group>
+ <target state="final">بيانات التعريف للمستند الأصلي</target>
+ </trans-unit>
+ <trans-unit id="2846565152091361585" datatype="html" approved="yes">
+ <source>Archived document metadata</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="final">بيانات التعريف للمستند الأصلي</target>
+ </trans-unit>
+ <trans-unit id="8191371354890763172" datatype="html">
+ <source>Enter Password</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">167</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">203</context>
+ </context-group>
+ <target state="needs-translation">Enter Password</target>
+ </trans-unit>
+ <trans-unit id="3807699453257291879" datatype="html">
+ <source>Comments</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">174</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">154</context>
+ </context-group>
+ <target state="needs-translation">Comments</target>
+ </trans-unit>
+ <trans-unit id="3823219296477075982" datatype="html" approved="yes">
+ <source>Discard</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">183</context>
+ </context-group>
+ <target state="final">تجاهل</target>
+ </trans-unit>
+ <trans-unit id="5129524307369213584" datatype="html" approved="yes">
+ <source>Save & next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">184</context>
+ </context-group>
+ <target state="final">حفظ & التالي</target>
+ </trans-unit>
+ <trans-unit id="9021887951960049161" datatype="html" approved="yes">
+ <source>Confirm delete</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">442</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">153</context>
+ </context-group>
+ <target state="final">تأكيد الحذف</target>
+ </trans-unit>
+ <trans-unit id="5382975254277698192" datatype="html" approved="yes">
+ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">443</context>
+ </context-group>
+ <target state="final">هل تريد حقاً حذف المستند "<x id="PH" equiv-text="this.document.title"/>"؟</target>
+ </trans-unit>
+ <trans-unit id="6691075929777935948" datatype="html" approved="yes">
+ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">444</context>
+ </context-group>
+ <target state="final">ستحذف ملفات هذا المستند بشكل دائم. لا يمكن التراجع عن هذه العملية.</target>
+ </trans-unit>
+ <trans-unit id="719892092227206532" datatype="html" approved="yes">
+ <source>Delete document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">446</context>
+ </context-group>
+ <target state="final">حذف مستند</target>
+ </trans-unit>
+ <trans-unit id="1844801255494293730" datatype="html" approved="yes">
+ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">462</context>
+ </context-group>
+ <target state="final">حدث خطأ أثناء حذف الوثيقة: <x id="PH" equiv-text="JSON.stringify(error)"/></target>
+ </trans-unit>
+ <trans-unit id="7362691899087997122" datatype="html">
+ <source>Redo OCR confirm</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">482</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">387</context>
+ </context-group>
+ <target state="needs-translation">Redo OCR confirm</target>
+ </trans-unit>
+ <trans-unit id="9197453786953646058" datatype="html">
+ <source>This operation will permanently redo OCR for this document.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">483</context>
+ </context-group>
+ <target state="needs-translation">This operation will permanently redo OCR for this document.</target>
+ </trans-unit>
+ <trans-unit id="5641451190833696892" datatype="html">
+ <source>This operation cannot be undone.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">484</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">364</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">389</context>
+ </context-group>
+ <target state="needs-translation">This operation cannot be undone.</target>
+ </trans-unit>
+ <trans-unit id="1181910457994920507" datatype="html">
+ <source>Proceed</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">486</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">391</context>
+ </context-group>
+ <target state="needs-translation">Proceed</target>
+ </trans-unit>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">494</context>
+ </context-group>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
+ </trans-unit>
+ <trans-unit id="8008978164775353960" datatype="html">
+ <source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
+ <context context-type="linenumber">505,507</context>
+ </context-group>
+ <target state="needs-translation">Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></target>
+ </trans-unit>
+ <trans-unit id="6857598786757174736" datatype="html">
+ <source>Select:</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <target state="needs-translation">Select:</target>
+ </trans-unit>
+ <trans-unit id="6299008920007331381" datatype="html">
+ <source>Edit:</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">27</context>
+ </context-group>
+ <target state="needs-translation">Edit:</target>
+ </trans-unit>
+ <trans-unit id="7001227209911602786" datatype="html">
+ <source>Filter tags</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">29</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">28</context>
+ </context-group>
+ <target state="needs-translation">Filter tags</target>
+ </trans-unit>
+ <trans-unit id="184185893993764098" datatype="html">
+ <source>Filter correspondents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">39</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">36</context>
+ </context-group>
+ <target state="needs-translation">Filter correspondents</target>
+ </trans-unit>
+ <trans-unit id="2947613869920454977" datatype="html">
+ <source>Filter document types</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">48</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <target state="needs-translation">Filter document types</target>
+ </trans-unit>
+ <trans-unit id="8816999377397522522" datatype="html">
+ <source>Filter storage paths</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">57</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">50</context>
+ </context-group>
+ <target state="needs-translation">Filter storage paths</target>
+ </trans-unit>
+ <trans-unit id="3193976279273491157" datatype="html">
+ <source>Actions</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">75</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">208</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ <target state="needs-translation">Actions</target>
+ </trans-unit>
+ <trans-unit id="1559181160090274453" datatype="html">
+ <source> Download <x id="START_TAG_DIV" ctype="x-div" equiv-text="<div *ngIf="awaitingDownload" class="spinner-border spinner-border-sm" role="status">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="visually-hidden">"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">78,82</context>
+ </context-group>
+ <target state="needs-translation"> Download <x id="START_TAG_DIV" ctype="x-div" equiv-text="<div *ngIf="awaitingDownload" class="spinner-border spinner-border-sm" role="status">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="visually-hidden">"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/></target>
+ </trans-unit>
+ <trans-unit id="9202029122138685465" datatype="html">
+ <source> Download originals <x id="START_TAG_DIV" ctype="x-div" equiv-text="<div *ngIf="awaitingDownload" class="spinner-border spinner-border-sm" role="status">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="visually-hidden">"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
+ <context context-type="linenumber">84,88</context>
+ </context-group>
+ <target state="needs-translation"> Download originals <x id="START_TAG_DIV" ctype="x-div" equiv-text="<div *ngIf="awaitingDownload" class="spinner-border spinner-border-sm" role="status">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="visually-hidden">"/>Preparing download...<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/></target>
+ </trans-unit>
+ <trans-unit id="7985804062689412812" datatype="html">
+ <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">103,105</context>
+ </context-group>
+ <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></target>
+ </trans-unit>
+ <trans-unit id="7894972847287473517" datatype="html">
+ <source>"<x id="PH" equiv-text="items[0].name"/>"</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">171</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">177</context>
+ </context-group>
+ <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target>
+ </trans-unit>
+ <trans-unit id="8639884465898458690" datatype="html">
+ <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">173</context>
+ </context-group>
+ <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note>
+ <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target>
+ </trans-unit>
+ <trans-unit id="1822679894391095557" datatype="html">
+ <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">181,183</context>
+ </context-group>
+ <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note>
+ <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target>
+ </trans-unit>
+ <trans-unit id="4137232459980262849" datatype="html">
+ <source>Confirm tags assignment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">198</context>
+ </context-group>
+ <target state="needs-translation">Confirm tags assignment</target>
+ </trans-unit>
+ <trans-unit id="6619516195038467207" datatype="html">
+ <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">204</context>
+ </context-group>
+ <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="1894412783609570695" datatype="html">
+ <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToAdd )"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">209,211</context>
+ </context-group>
+ <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToAdd )"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="7181166515756808573" datatype="html">
+ <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">217</context>
+ </context-group>
+ <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="3819792277998068944" datatype="html">
+ <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToRemove )"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">222,224</context>
+ </context-group>
+ <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToRemove )"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="2739066218579571288" datatype="html">
+ <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToAdd )"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList( changedTags.itemsToRemove )"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">226,230</context>
+ </context-group>
+ <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList( changedTags.itemsToAdd )"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList( changedTags.itemsToRemove )"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="2996713129519325161" datatype="html">
+ <source>Confirm correspondent assignment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">265</context>
+ </context-group>
+ <target state="needs-translation">Confirm correspondent assignment</target>
+ </trans-unit>
+ <trans-unit id="6900893559485781849" datatype="html">
+ <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">267</context>
+ </context-group>
+ <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="1257522660364398440" datatype="html">
+ <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">269</context>
+ </context-group>
+ <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="5393409374423140648" datatype="html">
+ <source>Confirm document type assignment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">301</context>
+ </context-group>
+ <target state="needs-translation">Confirm document type assignment</target>
+ </trans-unit>
+ <trans-unit id="332180123895325027" datatype="html">
+ <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">303</context>
+ </context-group>
+ <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="2236642492594872779" datatype="html">
+ <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">305</context>
+ </context-group>
+ <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="6386555513013840736" datatype="html">
+ <source>Confirm storage path assignment</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">337</context>
+ </context-group>
+ <target state="needs-translation">Confirm storage path assignment</target>
+ </trans-unit>
+ <trans-unit id="8750527458618415924" datatype="html">
+ <source>This operation will assign the storage path "<x id="PH" equiv-text="storagePath.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">339</context>
+ </context-group>
+ <target state="needs-translation">This operation will assign the storage path "<x id="PH" equiv-text="storagePath.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="60728365335056946" datatype="html">
+ <source>This operation will remove the storage path from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">341</context>
+ </context-group>
+ <target state="needs-translation">This operation will remove the storage path from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="749430623564850405" datatype="html">
+ <source>Delete confirm</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">362</context>
+ </context-group>
+ <target state="needs-translation">Delete confirm</target>
+ </trans-unit>
+ <trans-unit id="4303174930844518780" datatype="html">
+ <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">363</context>
+ </context-group>
+ <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="6734339521247847366" datatype="html">
+ <source>Delete document(s)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">366</context>
+ </context-group>
+ <target state="needs-translation">Delete document(s)</target>
+ </trans-unit>
+ <trans-unit id="8968869182645922415" datatype="html">
+ <source>This operation will permanently redo OCR for <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
+ <context context-type="linenumber">388</context>
+ </context-group>
+ <target state="needs-translation">This operation will permanently redo OCR for <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target>
+ </trans-unit>
+ <trans-unit id="8076495233090006322" datatype="html">
+ <source>Filter by correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">178</context>
+ </context-group>
+ <target state="needs-translation">Filter by correspondent</target>
+ </trans-unit>
+ <trans-unit id="2784168796433474565" datatype="html">
+ <source>Filter by tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">183</context>
+ </context-group>
+ <target state="needs-translation">Filter by tag</target>
+ </trans-unit>
+ <trans-unit id="7585826646011739428" datatype="html" approved="yes">
+ <source>Edit</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">70</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <target state="final">تحرير</target>
+ </trans-unit>
+ <trans-unit id="2509141182388535183" datatype="html">
+ <source>View</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">50</context>
+ </context-group>
+ <target state="needs-translation">View</target>
+ </trans-unit>
+ <trans-unit id="78870852467682010" datatype="html">
+ <source>Filter by document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">63</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">187</context>
+ </context-group>
+ <target state="needs-translation">Filter by document type</target>
+ </trans-unit>
+ <trans-unit id="157572966557284263" datatype="html">
+ <source>Filter by storage path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">70</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">192</context>
+ </context-group>
+ <target state="needs-translation">Filter by storage path</target>
+ </trans-unit>
+ <trans-unit id="3727324658595204357" datatype="html">
+ <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate }}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">85</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">48</context>
+ </context-group>
+ <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate }}"/></target>
+ </trans-unit>
+ <trans-unit id="2030261243264601523" datatype="html">
+ <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate }}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">86</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">49</context>
+ </context-group>
+ <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate }}"/></target>
+ </trans-unit>
+ <trans-unit id="4235671847487610290" datatype="html">
+ <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate }}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">87</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">50</context>
+ </context-group>
+ <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate }}"/></target>
+ </trans-unit>
+ <trans-unit id="2332107018974972998" datatype="html">
+ <source>Score:</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context>
+ <context context-type="linenumber">98</context>
+ </context-group>
+ <target state="needs-translation">Score:</target>
+ </trans-unit>
+ <trans-unit id="3661756380991326939" datatype="html">
+ <source>Toggle tag filter</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ <target state="needs-translation">Toggle tag filter</target>
+ </trans-unit>
+ <trans-unit id="4648526799630820486" datatype="html">
+ <source>Toggle correspondent filter</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <target state="needs-translation">Toggle correspondent filter</target>
+ </trans-unit>
+ <trans-unit id="5319701482646590642" datatype="html">
+ <source>Toggle document type filter</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <target state="needs-translation">Toggle document type filter</target>
+ </trans-unit>
+ <trans-unit id="8950368321707344185" datatype="html">
+ <source>Toggle storage path filter</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <target state="needs-translation">Toggle storage path filter</target>
+ </trans-unit>
+ <trans-unit id="5145213156408463657" datatype="html" approved="yes">
+ <source>Select none</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <target state="final">بدون تحديد</target>
+ </trans-unit>
+ <trans-unit id="1512866475468373520" datatype="html" approved="yes">
+ <source>Select page</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <target state="final">تحديد صفحة</target>
+ </trans-unit>
+ <trans-unit id="1494518490116523821" datatype="html" approved="yes">
+ <source>Select all</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="final">تحديد الكل</target>
+ </trans-unit>
+ <trans-unit id="5146398958364876914" datatype="html" approved="yes">
+ <source>Sort</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <target state="final">ترتيب</target>
+ </trans-unit>
+ <trans-unit id="2123659921722214537" datatype="html" approved="yes">
+ <source>Views</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">64</context>
+ </context-group>
+ <target state="final">طرق عرض</target>
+ </trans-unit>
+ <trans-unit id="1233494216161906927" datatype="html">
+ <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">75</context>
+ </context-group>
+ <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target>
+ </trans-unit>
+ <trans-unit id="2276119452079372898" datatype="html" approved="yes">
+ <source>Save as...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">76</context>
+ </context-group>
+ <target state="final">حفظ باسم...</target>
+ </trans-unit>
+ <trans-unit id="8786996283897742947" datatype="html">
+ <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">95</context>
+ </context-group>
+ <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target>
+ </trans-unit>
+ <trans-unit id="6600548268163632449" datatype="html">
+ <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">97</context>
+ </context-group>
+ <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target>
+ </trans-unit>
+ <trans-unit id="2243770355958919528" datatype="html" approved="yes">
+ <source>(filtered)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">97</context>
+ </context-group>
+ <target state="final">(مصفاة)</target>
+ </trans-unit>
+ <trans-unit id="1559883523769732271" datatype="html">
+ <source>Error while loading documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">110</context>
+ </context-group>
+ <target state="needs-translation">Error while loading documents</target>
+ </trans-unit>
+ <trans-unit id="7517688192215738656" datatype="html">
+ <source>ASN</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">127</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">158</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <target state="needs-translation">ASN</target>
+ </trans-unit>
+ <trans-unit id="231679111972850796" datatype="html" approved="yes">
+ <source>Added</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">163</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">65</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <target state="final">أضيف</target>
+ </trans-unit>
+ <trans-unit id="2179847500064178686" datatype="html">
+ <source>Edit document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
+ <context context-type="linenumber">182</context>
+ </context-group>
+ <target state="needs-translation">Edit document</target>
+ </trans-unit>
+ <trans-unit id="2155249406916744630" datatype="html">
+ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+ <context context-type="linenumber">196</context>
+ </context-group>
+ <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target>
+ </trans-unit>
+ <trans-unit id="6837554170707123455" datatype="html">
+ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
+ <context context-type="linenumber">237</context>
+ </context-group>
+ <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target>
+ </trans-unit>
+ <trans-unit id="6849725902312323996" datatype="html">
+ <source>Reset filters</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
+ <context context-type="linenumber">78</context>
+ </context-group>
+ <target state="needs-translation">Reset filters</target>
+ </trans-unit>
+ <trans-unit id="5195932016807797291" datatype="html">
+ <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find((c) => c.id == +rule.value)?.name"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">94,96</context>
+ </context-group>
+ <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find((c) => c.id == +rule.value)?.name"/></target>
+ </trans-unit>
+ <trans-unit id="8170755470576301659" datatype="html" approved="yes">
+ <source>Without correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">98</context>
+ </context-group>
+ <target state="final">بدون مراسل</target>
+ </trans-unit>
+ <trans-unit id="8705701325879965907" datatype="html">
+ <source>Type: <x id="PH" equiv-text="this.documentTypes.find((dt) => dt.id == +rule.value)?.name"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">103,105</context>
+ </context-group>
+ <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find((dt) => dt.id == +rule.value)?.name"/></target>
+ </trans-unit>
+ <trans-unit id="4362173610367509215" datatype="html" approved="yes">
+ <source>Without document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">107</context>
+ </context-group>
+ <target state="final">بدون نوع المستند</target>
+ </trans-unit>
+ <trans-unit id="8180755793012580465" datatype="html">
+ <source>Tag: <x id="PH" equiv-text="this.tags.find((t) => t.id == +rule.value)?.name"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">111,113</context>
+ </context-group>
+ <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find((t) => t.id == +rule.value)?.name"/></target>
+ </trans-unit>
+ <trans-unit id="6494566478302448576" datatype="html" approved="yes">
+ <source>Without any tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">117</context>
+ </context-group>
+ <target state="final">بدون أي علامة</target>
+ </trans-unit>
+ <trans-unit id="6523384805359286307" datatype="html">
+ <source>Title: <x id="PH" equiv-text="rule.value"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target>
+ </trans-unit>
+ <trans-unit id="1872523635812236432" datatype="html">
+ <source>ASN: <x id="PH" equiv-text="rule.value"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">124</context>
+ </context-group>
+ <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target>
+ </trans-unit>
+ <trans-unit id="3100631071441658964" datatype="html">
+ <source>Title & content</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">156</context>
+ </context-group>
+ <target state="needs-translation">Title & content</target>
+ </trans-unit>
+ <trans-unit id="1010505078885609376" datatype="html">
+ <source>Advanced search</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">161</context>
+ </context-group>
+ <target state="needs-translation">Advanced search</target>
+ </trans-unit>
+ <trans-unit id="2649431021108393503" datatype="html">
+ <source>More like</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">167</context>
+ </context-group>
+ <target state="needs-translation">More like</target>
+ </trans-unit>
+ <trans-unit id="3697582909018473071" datatype="html">
+ <source>equals</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">186</context>
+ </context-group>
+ <target state="needs-translation">equals</target>
+ </trans-unit>
+ <trans-unit id="5325481293405718739" datatype="html">
+ <source>is empty</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">190</context>
+ </context-group>
+ <target state="needs-translation">is empty</target>
+ </trans-unit>
+ <trans-unit id="6166785695326182482" datatype="html">
+ <source>is not empty</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">194</context>
+ </context-group>
+ <target state="needs-translation">is not empty</target>
+ </trans-unit>
+ <trans-unit id="4686622206659266699" datatype="html">
+ <source>greater than</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">198</context>
+ </context-group>
+ <target state="needs-translation">greater than</target>
+ </trans-unit>
+ <trans-unit id="8014012170270529279" datatype="html">
+ <source>less than</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
+ <context context-type="linenumber">202</context>
+ </context-group>
+ <target state="needs-translation">less than</target>
+ </trans-unit>
+ <trans-unit id="7210076240260527720" datatype="html">
+ <source>Save current view</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">3</context>
+ </context-group>
+ <target state="needs-translation">Save current view</target>
+ </trans-unit>
+ <trans-unit id="8689274715612276035" datatype="html">
+ <source>Show in sidebar</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">9</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">203</context>
+ </context-group>
+ <target state="needs-translation">Show in sidebar</target>
+ </trans-unit>
+ <trans-unit id="4104807402967139762" datatype="html">
+ <source>Show on dashboard</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">199</context>
+ </context-group>
+ <target state="needs-translation">Show on dashboard</target>
+ </trans-unit>
+ <trans-unit id="6965614903949668392" datatype="html">
+ <source>Filter rules error occurred while saving this view</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">12</context>
+ </context-group>
+ <target state="needs-translation">Filter rules error occurred while saving this view</target>
+ </trans-unit>
+ <trans-unit id="6438839705789707938" datatype="html">
+ <source>The error returned was</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="needs-translation">The error returned was</target>
+ </trans-unit>
+ <trans-unit id="6316128875819022658" datatype="html">
+ <source>correspondent</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+ <context context-type="linenumber">33</context>
+ </context-group>
+ <target state="needs-translation">correspondent</target>
+ </trans-unit>
+ <trans-unit id="1612355304340685070" datatype="html">
+ <source>correspondents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+ <context context-type="linenumber">34</context>
+ </context-group>
+ <target state="needs-translation">correspondents</target>
+ </trans-unit>
+ <trans-unit id="6360600151505327572" datatype="html">
+ <source>Last used</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+ <context context-type="linenumber">38</context>
+ </context-group>
+ <target state="needs-translation">Last used</target>
+ </trans-unit>
+ <trans-unit id="7427874343955308724" datatype="html">
+ <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context>
+ <context context-type="linenumber">48</context>
+ </context-group>
+ <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target>
+ </trans-unit>
+ <trans-unit id="8084492669582894778" datatype="html">
+ <source>document type</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">document type</target>
+ </trans-unit>
+ <trans-unit id="2992451138146293104" datatype="html">
+ <source>document types</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <target state="needs-translation">document types</target>
+ </trans-unit>
+ <trans-unit id="4990731724078522539" datatype="html" approved="yes">
+ <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context>
+ <context context-type="linenumber">37</context>
+ </context-group>
+ <target state="final">هل ترغب حقاً في حذف نوع المستند "<x id="PH" equiv-text="object.name"/>"؟</target>
+ </trans-unit>
+ <trans-unit id="5674286808255988565" datatype="html" approved="yes">
+ <source>Create</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <target state="final">إنشاء</target>
+ </trans-unit>
+ <trans-unit id="4010735610815226758" datatype="html" approved="yes">
+ <source>Filter by:</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <target state="final">تصفية حسب:</target>
+ </trans-unit>
+ <trans-unit id="1383365546483928780" datatype="html" approved="yes">
+ <source>Matching</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="final">مطابقة</target>
+ </trans-unit>
+ <trans-unit id="1488347670280290838" datatype="html" approved="yes">
+ <source>Document count</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <target state="final">عدد المستندات</target>
+ </trans-unit>
+ <trans-unit id="7376880254267897616" datatype="html">
+ <source>Filter Documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">44</context>
+ </context-group>
+ <target state="needs-translation">Filter Documents</target>
+ </trans-unit>
+ <trans-unit id="8095412801504464756" datatype="html">
+ <source>{VAR_PLURAL, plural, =1 {One <x id="INTERPOLATION"/>} other {<x id="INTERPOLATION_1"/> total <x id="INTERPOLATION_2"/>}}</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">74</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">74</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">74</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.html</context>
+ <context context-type="linenumber">74</context>
+ </context-group>
+ <target state="needs-translation">{VAR_PLURAL, plural, =1 {One <x id="INTERPOLATION"/>} other {<x id="INTERPOLATION_1"/> total <x id="INTERPOLATION_2"/>}}</target>
+ </trans-unit>
+ <trans-unit id="810888510148304696" datatype="html">
+ <source>Automatic</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">87</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">39</context>
+ </context-group>
+ <target state="needs-translation">Automatic</target>
+ </trans-unit>
+ <trans-unit id="4012132330507560812" datatype="html">
+ <source>Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">140</context>
+ </context-group>
+ <target state="needs-translation">Do you really want to delete the <x id="PH" equiv-text="this.typeName"/>?</target>
+ </trans-unit>
+ <trans-unit id="8371896857609524947" datatype="html">
+ <source>Associated documents will not be deleted.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">155</context>
+ </context-group>
+ <target state="needs-translation">Associated documents will not be deleted.</target>
+ </trans-unit>
+ <trans-unit id="5467489005440577210" datatype="html">
+ <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
+ <context context-type="linenumber">168,170</context>
+ </context-group>
+ <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify( error.error )"/></target>
+ </trans-unit>
+ <trans-unit id="1685061484835793745" datatype="html">
+ <source>Start tour</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">2</context>
+ </context-group>
+ <target state="needs-translation">Start tour</target>
+ </trans-unit>
+ <trans-unit id="6439365426343089851" datatype="html">
+ <source>General</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">10</context>
+ </context-group>
+ <target state="needs-translation">General</target>
+ </trans-unit>
+ <trans-unit id="8671234314555525900" datatype="html" approved="yes">
+ <source>Appearance</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">13</context>
+ </context-group>
+ <target state="final">المظهر</target>
+ </trans-unit>
+ <trans-unit id="3777637051272512093" datatype="html" approved="yes">
+ <source>Display language</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <target state="final">لغة العرض</target>
+ </trans-unit>
+ <trans-unit id="53523152145406584" datatype="html">
+ <source>You need to reload the page after applying a new language.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="needs-translation">You need to reload the page after applying a new language.</target>
+ </trans-unit>
+ <trans-unit id="3766032098416558788" datatype="html">
+ <source>Date display</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">32</context>
+ </context-group>
+ <target state="needs-translation">Date display</target>
+ </trans-unit>
+ <trans-unit id="3733378544613473393" datatype="html">
+ <source>Date format</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <target state="needs-translation">Date format</target>
+ </trans-unit>
+ <trans-unit id="3407788781115661841" datatype="html">
+ <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">51</context>
+ </context-group>
+ <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target>
+ </trans-unit>
+ <trans-unit id="6290748171049664628" datatype="html">
+ <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target>
+ </trans-unit>
+ <trans-unit id="7189855711197998347" datatype="html">
+ <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">59</context>
+ </context-group>
+ <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target>
+ </trans-unit>
+ <trans-unit id="8939587804990976924" datatype="html">
+ <source>Items per page</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">67</context>
+ </context-group>
+ <target state="needs-translation">Items per page</target>
+ </trans-unit>
+ <trans-unit id="8028535997917730106" datatype="html">
+ <source>Document editor</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">83</context>
+ </context-group>
+ <target state="needs-translation">Document editor</target>
+ </trans-unit>
+ <trans-unit id="6708098108196142028" datatype="html">
+ <source>Use PDF viewer provided by the browser</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">87</context>
+ </context-group>
+ <target state="needs-translation">Use PDF viewer provided by the browser</target>
+ </trans-unit>
+ <trans-unit id="9003921625412907981" datatype="html">
+ <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">87</context>
+ </context-group>
+ <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target>
+ </trans-unit>
+ <trans-unit id="3982403428275430291" datatype="html">
+ <source>Sidebar</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">94</context>
+ </context-group>
+ <target state="needs-translation">Sidebar</target>
+ </trans-unit>
+ <trans-unit id="4608457133854405683" datatype="html">
+ <source>Use 'slim' sidebar (icons only)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">98</context>
+ </context-group>
+ <target state="needs-translation">Use 'slim' sidebar (icons only)</target>
+ </trans-unit>
+ <trans-unit id="1356890996281769972" datatype="html">
+ <source>Dark mode</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">105</context>
+ </context-group>
+ <target state="needs-translation">Dark mode</target>
+ </trans-unit>
+ <trans-unit id="4913823100518391922" datatype="html">
+ <source>Use system settings</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">108</context>
+ </context-group>
+ <target state="needs-translation">Use system settings</target>
+ </trans-unit>
+ <trans-unit id="5782828784040423650" datatype="html">
+ <source>Enable dark mode</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">109</context>
+ </context-group>
+ <target state="needs-translation">Enable dark mode</target>
+ </trans-unit>
+ <trans-unit id="6336642923114460405" datatype="html">
+ <source>Invert thumbnails in dark mode</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">110</context>
+ </context-group>
+ <target state="needs-translation">Invert thumbnails in dark mode</target>
+ </trans-unit>
+ <trans-unit id="7983234071833154796" datatype="html">
+ <source>Theme Color</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">116</context>
+ </context-group>
+ <target state="needs-translation">Theme Color</target>
+ </trans-unit>
+ <trans-unit id="7808756054397155068" datatype="html">
+ <source>Reset</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">125</context>
+ </context-group>
+ <target state="needs-translation">Reset</target>
+ </trans-unit>
+ <trans-unit id="8901931207592071833" datatype="html">
+ <source>Update checking</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">130</context>
+ </context-group>
+ <target state="needs-translation">Update checking</target>
+ </trans-unit>
+ <trans-unit id="7890007688616707209" datatype="html">
+ <source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Actual updating of the app must still be performed manually. </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">134,137</context>
+ </context-group>
+ <target state="needs-translation"> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Actual updating of the app must still be performed manually. </target>
+ </trans-unit>
+ <trans-unit id="5489945693955857309" datatype="html">
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">139</context>
+ </context-group>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ </trans-unit>
+ <trans-unit id="5070799004079086984" datatype="html">
+ <source>Enable update checking</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">141</context>
+ </context-group>
+ <target state="needs-translation">Enable update checking</target>
+ </trans-unit>
+ <trans-unit id="5478370193831195440" datatype="html">
+ <source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">141</context>
+ </context-group>
+ <target state="needs-translation">Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release.</target>
+ </trans-unit>
+ <trans-unit id="8508424367627989968" datatype="html">
+ <source>Bulk editing</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="needs-translation">Bulk editing</target>
+ </trans-unit>
+ <trans-unit id="8158899674926420054" datatype="html">
+ <source>Show confirmation dialogs</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">149</context>
+ </context-group>
+ <target state="needs-translation">Show confirmation dialogs</target>
+ </trans-unit>
+ <trans-unit id="6906812245033969309" datatype="html">
+ <source>Deleting documents will always ask for confirmation.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">149</context>
+ </context-group>
+ <target state="needs-translation">Deleting documents will always ask for confirmation.</target>
+ </trans-unit>
+ <trans-unit id="290238406234356122" datatype="html">
+ <source>Apply on close</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">150</context>
+ </context-group>
+ <target state="needs-translation">Apply on close</target>
+ </trans-unit>
+ <trans-unit id="4666858503087488647" datatype="html">
+ <source>Enable comments</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">158</context>
+ </context-group>
+ <target state="needs-translation">Enable comments</target>
+ </trans-unit>
+ <trans-unit id="5851560788527570644" datatype="html" approved="yes">
+ <source>Notifications</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">166</context>
+ </context-group>
+ <target state="final">الإشعارات</target>
+ </trans-unit>
+ <trans-unit id="8545554728558600606" datatype="html">
+ <source>Document processing</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">169</context>
+ </context-group>
+ <target state="needs-translation">Document processing</target>
+ </trans-unit>
+ <trans-unit id="3656786776644872398" datatype="html">
+ <source>Show notifications when new documents are detected</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">173</context>
+ </context-group>
+ <target state="needs-translation">Show notifications when new documents are detected</target>
+ </trans-unit>
+ <trans-unit id="6057053428592387613" datatype="html">
+ <source>Show notifications when document processing completes successfully</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">174</context>
+ </context-group>
+ <target state="needs-translation">Show notifications when document processing completes successfully</target>
+ </trans-unit>
+ <trans-unit id="370315664367425513" datatype="html">
+ <source>Show notifications when document processing fails</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">175</context>
+ </context-group>
+ <target state="needs-translation">Show notifications when document processing fails</target>
+ </trans-unit>
+ <trans-unit id="6838309441164918531" datatype="html">
+ <source>Suppress notifications on dashboard</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">176</context>
+ </context-group>
+ <target state="needs-translation">Suppress notifications on dashboard</target>
+ </trans-unit>
+ <trans-unit id="2741919327232918179" datatype="html">
+ <source>This will suppress all messages about document processing status on the dashboard.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">176</context>
+ </context-group>
+ <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target>
+ </trans-unit>
+ <trans-unit id="6925788033494878061" datatype="html">
+ <source>Appears on</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">196</context>
+ </context-group>
+ <target state="needs-translation">Appears on</target>
+ </trans-unit>
+ <trans-unit id="7877440816920439876" datatype="html">
+ <source>No saved views defined.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
+ <context context-type="linenumber">213</context>
+ </context-group>
+ <target state="needs-translation">No saved views defined.</target>
+ </trans-unit>
+ <trans-unit id="5610279464668232148" datatype="html">
+ <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">217</context>
+ </context-group>
+ <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target>
+ </trans-unit>
+ <trans-unit id="3891152409365583719" datatype="html">
+ <source>Settings saved</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">310</context>
+ </context-group>
+ <target state="needs-translation">Settings saved</target>
+ </trans-unit>
+ <trans-unit id="7217000812750597833" datatype="html">
+ <source>Settings were saved successfully.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">311</context>
+ </context-group>
+ <target state="needs-translation">Settings were saved successfully.</target>
+ </trans-unit>
+ <trans-unit id="525012668859298131" datatype="html">
+ <source>Settings were saved successfully. Reload is required to apply some changes.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">315</context>
+ </context-group>
+ <target state="needs-translation">Settings were saved successfully. Reload is required to apply some changes.</target>
+ </trans-unit>
+ <trans-unit id="8491974984518503778" datatype="html">
+ <source>Reload now</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">316</context>
+ </context-group>
+ <target state="needs-translation">Reload now</target>
+ </trans-unit>
+ <trans-unit id="6839066544204061364" datatype="html" approved="yes">
+ <source>Use system language</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">334</context>
+ </context-group>
+ <target state="final">استخدم لغة النظام</target>
+ </trans-unit>
+ <trans-unit id="7729897675462249787" datatype="html" approved="yes">
+ <source>Use date format of display language</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">341</context>
+ </context-group>
+ <target state="final">استخدم تنسيق تاريخ لغة العرض</target>
+ </trans-unit>
+ <trans-unit id="8488620293789898901" datatype="html">
+ <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
+ <context context-type="linenumber">361,363</context>
+ </context-group>
+ <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify( error.error )"/></target>
+ </trans-unit>
+ <trans-unit id="5101757640976222639" datatype="html">
+ <source>storage path</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">storage path</target>
+ </trans-unit>
+ <trans-unit id="22235115124223314" datatype="html">
+ <source>storage paths</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <target state="needs-translation">storage paths</target>
+ </trans-unit>
+ <trans-unit id="1569070683025071137" datatype="html">
+ <source>Do you really want to delete the storage path "<x id="PH" equiv-text="object.name"/>"?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/storage-path-list/storage-path-list.component.ts</context>
+ <context context-type="linenumber">45</context>
+ </context-group>
+ <target state="needs-translation">Do you really want to delete the storage path "<x id="PH" equiv-text="object.name"/>"?</target>
+ </trans-unit>
+ <trans-unit id="6402703264596649214" datatype="html">
+ <source>tag</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">tag</target>
+ </trans-unit>
+ <trans-unit id="4975748273657042999" datatype="html">
+ <source>tags</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <target state="needs-translation">tags</target>
+ </trans-unit>
+ <trans-unit id="93754014749412887" datatype="html" approved="yes">
+ <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <target state="final">هل ترغب حقاً في حذف العلامة "<x id="PH" equiv-text="object.name"/>"؟</target>
+ </trans-unit>
+ <trans-unit id="103921551219467537" datatype="html">
+ <source>Clear selection</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">6</context>
+ </context-group>
+ <target state="needs-translation">Clear selection</target>
+ </trans-unit>
+ <trans-unit id="187187500641108332" datatype="html">
+ <source>
+ <x id="INTERPOLATION" equiv-text="{{dismissButtonText}}"/>
+ </source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{dismissButtonText}}"/></target>
+ </trans-unit>
+ <trans-unit id="1102717806459547726" datatype="html">
+ <source>Refresh</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">Refresh</target>
+ </trans-unit>
+ <trans-unit id="5968132631442328843" datatype="html">
+ <source>Results</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">42</context>
+ </context-group>
+ <target state="needs-translation">Results</target>
+ </trans-unit>
+ <trans-unit id="8958063833276423847" datatype="html">
+ <source>click for full output</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">66</context>
+ </context-group>
+ <target state="needs-translation">click for full output</target>
+ </trans-unit>
+ <trans-unit id="1536087519743707362" datatype="html">
+ <source>Dismiss</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">81</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">56</context>
+ </context-group>
+ <target state="needs-translation">Dismiss</target>
+ </trans-unit>
+ <trans-unit id="2134950584701094962" datatype="html">
+ <source>Open Document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">86</context>
+ </context-group>
+ <target state="needs-translation">Open Document</target>
+ </trans-unit>
+ <trans-unit id="6798650225457993016" datatype="html">
+ <source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0" class="badge bg-danger ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">103</context>
+ </context-group>
+ <target state="needs-translation">Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0" class="badge bg-danger ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="2352193508676933865" datatype="html">
+ <source>Complete <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.completedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">109</context>
+ </context-group>
+ <target state="needs-translation">Complete <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.completedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="1697296301417588213" datatype="html">
+ <source>Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.startedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">115</context>
+ </context-group>
+ <target state="needs-translation">Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.startedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="6517676116023827583" datatype="html">
+ <source>Queued <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.queuedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">Queued <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.queuedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ </trans-unit>
+ <trans-unit id="5404910960991552159" datatype="html">
+ <source>Dismiss selected</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ <target state="needs-translation">Dismiss selected</target>
+ </trans-unit>
+ <trans-unit id="8829078752502782653" datatype="html">
+ <source>Dismiss all</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <target state="needs-translation">Dismiss all</target>
+ </trans-unit>
+ <trans-unit id="1323591410517879795" datatype="html">
+ <source>Confirm Dismiss All</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">52</context>
+ </context-group>
+ <target state="needs-translation">Confirm Dismiss All</target>
+ </trans-unit>
+ <trans-unit id="6566358716882976903" datatype="html">
+ <source>tasks?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.ts</context>
+ <context context-type="linenumber">54</context>
+ </context-group>
+ <target state="needs-translation">tasks?</target>
+ </trans-unit>
+ <trans-unit id="181464970911903082" datatype="html">
+ <source>404 Not Found</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context>
+ <context context-type="linenumber">7</context>
+ </context-group>
+ <target state="needs-translation">404 Not Found</target>
+ </trans-unit>
+ <trans-unit id="5851669019930456395" datatype="html">
+ <source>Any word</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">14</context>
+ </context-group>
+ <target state="needs-translation">Any word</target>
+ </trans-unit>
+ <trans-unit id="7517655726614958140" datatype="html">
+ <source>Any: Document contains any of these words (space separated)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <target state="needs-translation">Any: Document contains any of these words (space separated)</target>
+ </trans-unit>
+ <trans-unit id="700315718208181326" datatype="html">
+ <source>All words</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <target state="needs-translation">All words</target>
+ </trans-unit>
+ <trans-unit id="111914402588955480" datatype="html">
+ <source>All: Document contains all of these words (space separated)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">All: Document contains all of these words (space separated)</target>
+ </trans-unit>
+ <trans-unit id="9180173992399180575" datatype="html">
+ <source>Exact match</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <target state="needs-translation">Exact match</target>
+ </trans-unit>
+ <trans-unit id="7109184332944610787" datatype="html">
+ <source>Exact: Document contains this string</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="needs-translation">Exact: Document contains this string</target>
+ </trans-unit>
+ <trans-unit id="1338733395833138319" datatype="html">
+ <source>Regular expression</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">29</context>
+ </context-group>
+ <target state="needs-translation">Regular expression</target>
+ </trans-unit>
+ <trans-unit id="7548151332424148033" datatype="html">
+ <source>Regular expression: Document matches this regular expression</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">Regular expression: Document matches this regular expression</target>
+ </trans-unit>
+ <trans-unit id="1856513373880048959" datatype="html">
+ <source>Fuzzy word</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">34</context>
+ </context-group>
+ <target state="needs-translation">Fuzzy word</target>
+ </trans-unit>
+ <trans-unit id="8419167206585286450" datatype="html">
+ <source>Fuzzy: Document contains a word similar to this word</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">35</context>
+ </context-group>
+ <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target>
+ </trans-unit>
+ <trans-unit id="2167862279705099846" datatype="html">
+ <source>Auto: Learn matching automatically</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/data/matching-model.ts</context>
+ <context context-type="linenumber">40</context>
+ </context-group>
+ <target state="needs-translation">Auto: Learn matching automatically</target>
+ </trans-unit>
+ <trans-unit id="5948496158474272829" datatype="html">
+ <source>Warning: You have unsaved changes to your document(s).</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-doc.guard.ts</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <target state="needs-translation">Warning: You have unsaved changes to your document(s).</target>
+ </trans-unit>
+ <trans-unit id="159901853873315050" datatype="html">
+ <source>Unsaved Changes</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">116</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">143</context>
+ </context-group>
+ <target state="needs-translation">Unsaved Changes</target>
+ </trans-unit>
+ <trans-unit id="2573823578527613511" datatype="html">
+ <source>You have unsaved changes.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">144</context>
+ </context-group>
+ <target state="needs-translation">You have unsaved changes.</target>
+ </trans-unit>
+ <trans-unit id="3305084982600522070" datatype="html">
+ <source>Are you sure you want to leave?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <target state="needs-translation">Are you sure you want to leave?</target>
+ </trans-unit>
+ <trans-unit id="729881853265307704" datatype="html">
+ <source>Leave page</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-form.guard.ts</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ <target state="needs-translation">Leave page</target>
+ </trans-unit>
+ <trans-unit id="1649285023712919370" datatype="html">
+ <source>You have unsaved changes to the saved view</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ <target state="needs-translation">You have unsaved changes to the saved view</target>
+ </trans-unit>
+ <trans-unit id="7282050913165342352" datatype="html">
+ <source>Are you sure you want to close this saved view?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+ <context context-type="linenumber">30</context>
+ </context-group>
+ <target state="needs-translation">Are you sure you want to close this saved view?</target>
+ </trans-unit>
+ <trans-unit id="856284624775342512" datatype="html">
+ <source>Save and close</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
+ <context context-type="linenumber">34</context>
+ </context-group>
+ <target state="needs-translation">Save and close</target>
+ </trans-unit>
+ <trans-unit id="7536524521722799066" datatype="html" approved="yes">
+ <source>(no title)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context>
+ <context context-type="linenumber">11</context>
+ </context-group>
+ <target state="final">(بدون عنوان)</target>
+ </trans-unit>
+ <trans-unit id="2807800733729323332" datatype="html" approved="yes">
+ <source>Yes</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <target state="final">نعم</target>
+ </trans-unit>
+ <trans-unit id="3542042671420335679" datatype="html" approved="yes">
+ <source>No</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context>
+ <context context-type="linenumber">8</context>
+ </context-group>
+ <target state="final">لا</target>
+ </trans-unit>
+ <trans-unit id="2119857572761283468" datatype="html" approved="yes">
+ <source>Document already exists.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">15</context>
+ </context-group>
+ <target state="final">المستند موجود مسبقاً.</target>
+ </trans-unit>
+ <trans-unit id="148389968432135849" datatype="html" approved="yes">
+ <source>File not found.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">16</context>
+ </context-group>
+ <target state="final">لم يعثر على الملف.</target>
+ </trans-unit>
+ <trans-unit id="1520671543092565667" datatype="html">
+ <source>Pre-consume script does not exist.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">17</context>
+ </context-group>
+ <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+ <target state="needs-translation">Pre-consume script does not exist.</target>
+ </trans-unit>
+ <trans-unit id="7742915911032564889" datatype="html">
+ <source>Error while executing pre-consume script.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">18</context>
+ </context-group>
+ <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+ <target state="needs-translation">Error while executing pre-consume script.</target>
+ </trans-unit>
+ <trans-unit id="8995193730018060346" datatype="html">
+ <source>Post-consume script does not exist.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">19</context>
+ </context-group>
+ <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+ <target state="needs-translation">Post-consume script does not exist.</target>
+ </trans-unit>
+ <trans-unit id="256773668518189604" datatype="html">
+ <source>Error while executing post-consume script.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">20</context>
+ </context-group>
+ <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note>
+ <target state="needs-translation">Error while executing post-consume script.</target>
+ </trans-unit>
+ <trans-unit id="6252258095055634191" datatype="html" approved="yes">
+ <source>Received new file.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">21</context>
+ </context-group>
+ <target state="final">استلم ملف جديد.</target>
+ </trans-unit>
+ <trans-unit id="7337565919209746135" datatype="html" approved="yes">
+ <source>File type not supported.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">22</context>
+ </context-group>
+ <target state="final">نوع الملف غير مدعوم.</target>
+ </trans-unit>
+ <trans-unit id="5002399167376099234" datatype="html" approved="yes">
+ <source>Processing document...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">23</context>
+ </context-group>
+ <target state="final">معالجة الوثيقة...</target>
+ </trans-unit>
+ <trans-unit id="1085975194762600381" datatype="html" approved="yes">
+ <source>Generating thumbnail...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <target state="final">إنشاء مصغرات...</target>
+ </trans-unit>
+ <trans-unit id="3280851677698431426" datatype="html" approved="yes">
+ <source>Retrieving date from document...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">25</context>
+ </context-group>
+ <target state="final">استرداد التاريخ من المستند...</target>
+ </trans-unit>
+ <trans-unit id="7162102384876037296" datatype="html" approved="yes">
+ <source>Saving document...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">26</context>
+ </context-group>
+ <target state="final">حفظ المستند...</target>
+ </trans-unit>
+ <trans-unit id="4550450765009165976" datatype="html" approved="yes">
+ <source>Finished.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context>
+ <context context-type="linenumber">27</context>
+ </context-group>
+ <target state="final">انتهى.</target>
+ </trans-unit>
+ <trans-unit id="5523607037798226031" datatype="html">
+ <source>You have unsaved changes to the document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">118</context>
+ </context-group>
+ <target state="needs-translation">You have unsaved changes to the document</target>
+ </trans-unit>
+ <trans-unit id="2089045849587358256" datatype="html">
+ <source>Are you sure you want to close this document?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">122</context>
+ </context-group>
+ <target state="needs-translation">Are you sure you want to close this document?</target>
+ </trans-unit>
+ <trans-unit id="2885986061416655600" datatype="html">
+ <source>Close document</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">124</context>
+ </context-group>
+ <target state="needs-translation">Close document</target>
+ </trans-unit>
+ <trans-unit id="6755718693176327396" datatype="html">
+ <source>Are you sure you want to close all documents?</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="needs-translation">Are you sure you want to close all documents?</target>
+ </trans-unit>
+ <trans-unit id="4215561719980781894" datatype="html">
+ <source>Close documents</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
+ <context context-type="linenumber">147</context>
+ </context-group>
+ <target state="needs-translation">Close documents</target>
+ </trans-unit>
+ <trans-unit id="3553216189604488439" datatype="html" approved="yes">
+ <source>Modified</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <target state="final">تعديل</target>
+ </trans-unit>
+ <trans-unit id="4460262093225954455" datatype="html" approved="yes">
+ <source>Search score</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <note priority="1" from="description">Score is a value returned by the full text search engine and specifies how well a result matches the given query</note>
+ <target state="final">نقاط البحث</target>
+ </trans-unit>
+ <trans-unit id="1206520795340730278" datatype="html">
+ <source>English (US)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">145</context>
+ </context-group>
+ <target state="needs-translation">English (US)</target>
+ </trans-unit>
+ <trans-unit id="3098941349689899577" datatype="html">
+ <source>Belarusian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">151</context>
+ </context-group>
+ <target state="needs-translation">Belarusian</target>
+ </trans-unit>
+ <trans-unit id="2719780722934172508" datatype="html">
+ <source>Czech</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">157</context>
+ </context-group>
+ <target state="needs-translation">Czech</target>
+ </trans-unit>
+ <trans-unit id="2924289692679201020" datatype="html">
+ <source>Danish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">163</context>
+ </context-group>
+ <target state="needs-translation">Danish</target>
+ </trans-unit>
+ <trans-unit id="1858110241312746425" datatype="html">
+ <source>German</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">169</context>
+ </context-group>
+ <target state="needs-translation">German</target>
+ </trans-unit>
+ <trans-unit id="6987083569809053351" datatype="html">
+ <source>English (GB)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">175</context>
+ </context-group>
+ <target state="needs-translation">English (GB)</target>
+ </trans-unit>
+ <trans-unit id="5190825892106392539" datatype="html" approved="yes">
+ <source>Spanish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">181</context>
+ </context-group>
+ <target state="final">الإسبانية</target>
+ </trans-unit>
+ <trans-unit id="7633754075223722162" datatype="html">
+ <source>French</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">187</context>
+ </context-group>
+ <target state="needs-translation">French</target>
+ </trans-unit>
+ <trans-unit id="2935232983274991580" datatype="html">
+ <source>Italian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">193</context>
+ </context-group>
+ <target state="needs-translation">Italian</target>
+ </trans-unit>
+ <trans-unit id="1334425850005897370" datatype="html">
+ <source>Luxembourgish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">199</context>
+ </context-group>
+ <target state="needs-translation">Luxembourgish</target>
+ </trans-unit>
+ <trans-unit id="3071065188816255493" datatype="html">
+ <source>Dutch</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">205</context>
+ </context-group>
+ <target state="needs-translation">Dutch</target>
+ </trans-unit>
+ <trans-unit id="792060551707690640" datatype="html" approved="yes">
+ <source>Polish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">211</context>
+ </context-group>
+ <target state="final">البولندية</target>
+ </trans-unit>
+ <trans-unit id="9184513005098760425" datatype="html">
+ <source>Portuguese (Brazil)</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">217</context>
+ </context-group>
+ <target state="needs-translation">Portuguese (Brazil)</target>
+ </trans-unit>
+ <trans-unit id="153799456510623899" datatype="html" approved="yes">
+ <source>Portuguese</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">223</context>
+ </context-group>
+ <target state="final">البرتغالية</target>
+ </trans-unit>
+ <trans-unit id="8118856427047826368" datatype="html">
+ <source>Romanian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">229</context>
+ </context-group>
+ <target state="needs-translation">Romanian</target>
+ </trans-unit>
+ <trans-unit id="7137419789978325708" datatype="html" approved="yes">
+ <source>Russian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">235</context>
+ </context-group>
+ <target state="final">الروسية</target>
+ </trans-unit>
+ <trans-unit id="4287008301409320881" datatype="html">
+ <source>Slovenian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">241</context>
+ </context-group>
+ <target state="needs-translation">Slovenian</target>
+ </trans-unit>
+ <trans-unit id="8608389829607915090" datatype="html">
+ <source>Serbian</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">247</context>
+ </context-group>
+ <target state="needs-translation">Serbian</target>
+ </trans-unit>
+ <trans-unit id="499386805970351976" datatype="html" approved="yes">
+ <source>Swedish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">253</context>
+ </context-group>
+ <target state="final">السويدية</target>
+ </trans-unit>
+ <trans-unit id="5682359291233237791" datatype="html">
+ <source>Turkish</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">259</context>
+ </context-group>
+ <target state="needs-translation">Turkish</target>
+ </trans-unit>
+ <trans-unit id="4689443708886954687" datatype="html">
+ <source>Chinese Simplified</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">265</context>
+ </context-group>
+ <target state="needs-translation">Chinese Simplified</target>
+ </trans-unit>
+ <trans-unit id="4912706592792948707" datatype="html">
+ <source>ISO 8601</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">282</context>
+ </context-group>
+ <target state="needs-translation">ISO 8601</target>
+ </trans-unit>
+ <trans-unit id="313643372755303297" datatype="html">
+ <source>Successfully completed one-time migratration of settings to the database!</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">393</context>
+ </context-group>
+ <target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
+ </trans-unit>
+ <trans-unit id="5558341108007064934" datatype="html">
+ <source>Unable to migrate settings to the database, please try saving manually.</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/settings.service.ts</context>
+ <context context-type="linenumber">394</context>
+ </context-group>
+ <target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
+ </trans-unit>
+ <trans-unit id="1519954996184640001" datatype="html" approved="yes">
+ <source>Error</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/toast.service.ts</context>
+ <context context-type="linenumber">32</context>
+ </context-group>
+ <target state="final">خطأ</target>
+ </trans-unit>
+ <trans-unit id="5037437391296624618" datatype="html" approved="yes">
+ <source>Information</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/toast.service.ts</context>
+ <context context-type="linenumber">36</context>
+ </context-group>
+ <target state="final">معلومات</target>
+ </trans-unit>
+ <trans-unit id="3852289441366561594" datatype="html">
+ <source>Connecting...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+ <context context-type="linenumber">31</context>
+ </context-group>
+ <target state="needs-translation">Connecting...</target>
+ </trans-unit>
+ <trans-unit id="1245343823699368872" datatype="html">
+ <source>Uploading...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+ <context context-type="linenumber">43</context>
+ </context-group>
+ <target state="needs-translation">Uploading...</target>
+ </trans-unit>
+ <trans-unit id="7446520539098045935" datatype="html">
+ <source>Upload complete, waiting...</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+ <context context-type="linenumber">46</context>
+ </context-group>
+ <target state="needs-translation">Upload complete, waiting...</target>
+ </trans-unit>
+ <trans-unit id="1405142710727603568" datatype="html">
+ <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/services/upload-documents.service.ts</context>
+ <context context-type="linenumber">62</context>
+ </context-group>
+ <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target>
+ </trans-unit>
+ </body>
+ </file>
+</xliff>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Закрыць</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Папярэдняя</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Наступная</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Абраць месяц</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Абраць год</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Папярэдні месяц</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Наступны месяц</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Першы</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Папярэдняя</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Наступная</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">На апошнюю</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Гадзіны</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Хвіліны</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Прыбавіць гадзіну</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Адняць гадзіну</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Прыбавіць хвіліну</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Адняць хвіліну</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Секунды</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Прыбавіць секунду</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Адняць секунду</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Закрыць</target>
</trans-unit>
</context-group>
<target state="translated">Дакумент <x id="PH" equiv-text="status.filename"/> апрацоўваецца paperless-ngx.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Наступная</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="translated">Прыборную панэль можна выкарыстоўваць для паказу захаваных праглядаў, такіх як "Уваходныя". Гэтыя налады знаходзяцца ў Наладах > Захаваныя прагляды пасля таго, як вы іх стварылі.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Спіс дакументаў паказвае ўсе вашы дакументы і дазваляе фільтраваць, а таксама масава рэдагаваць. Ёсць тры розныя стылі прагляду: спіс, маленькія карты і вялікія карты. Спіс дакументаў, адкрытых для рэдагавання, паказаны на бакавой панэлі.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="translated">Інструменты фільтрацыі дазваляюць хутка знаходзіць дакументы па розных пошуках, датах, тэгах і г.д.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="translated">Любую камбінацыю фільтраў можна захаваць у выглядзе 'прагляда', які потым можа адлюстроўвацца на прыборнай панэлі і/або бакавой панэлі.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="translated">З дапамогай гэтых старонак можна кіраваць тэгамі, карэспандэнтамі, тыпамі дакументаў і шляхамі захоўвання. Іх таксама можна стварыць з прагляду рэдагавання дакумента.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="translated">Файлавыя задачы паказваюць вам дакументы, якія былі спажыты, чакаюць або пацярпелі збой падчас працэсу.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Праверце налады для розных налад вэб-праграмы або каб пераключыць налады для захаваных відаў.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="translated">Вобласць адміністратара змяшчае больш пашыраныя элементы кіравання, а таксама налады для аўтаматычнага атрымання электроннай пошты.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Дзякуй! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="translated">Ёсць <em>тоны</em> дадатковыя магчымасці і інфармацыя, якую мы тут не разглядалі, але гэта дапаможа вам пачаць. Праверце дакументацыю або наведайце праект на GitHub, каб даведацца больш або паведаміць аб праблемах.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="translated">Нарэшце, ад імя кожнага ўдзельніка гэтага праекта, які падтрымліваецца супольнасцю, дзякуй за выкарыстанне Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Пачатак загрузкі...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Вы ўвайшлі як <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Выхад</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Адкрыць дакументы</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Закрыць усё</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Кіраванне</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Карэспандэнты</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Тэгі</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Тыпы дакументаў</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Шляхі захоўвання</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="translated">Файлавыя задачы<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Кіраўнік</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Дакументацыя</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Прапанаваць ідэю</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">даступна.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Націсніце, каб убачыць.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="translated">Paperless-ngx можа аўтаматычна правяраць наяўнасць абнаўленняў</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated"> Як гэта працуе? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Даступна абнаўленне</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="translated">Адбылася памылка падчас захавання налад праверкі абнаўленняў.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Ачысціць</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Пасля</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Ачысціць</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Перад</target>
</trans-unit>
<target state="translated">Немагчыма захаваць элемент: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Звярніце ўвагу, што рэдагаванне шляху не прымяняе змены да захаваных файлаў, пакуль вы не запусціце ўтыліту 'document_renamer'. Глядзіце <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration. html#utilities-renamer">"/>дакументацыю<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x- em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">або выкарыстоўвайце касыя рысы, каб дадаць каталогі, напр.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Глядзіце <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">дакументацыю</a> для поўнага спісу.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Любы</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Ужыць</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Націсніце зноў, каб выключыць элементы.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="translated">Вы гатовыя пачаць запампоўку дакументаў! Даследуйце розныя функцыі гэтай вэб-праграмы самастойна або пачніце кароткі тур, націснуўшы кнопку ніжэй.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="translated">Больш падрабязную інфармацыю аб выкарыстанні і наладзе Paperless-ngx заўсёды можна знайсці ў <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs. io" target="_blank">"/>дакументацыі<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Папярэдняя</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Наступная</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Шлях захоўвання</target>
</trans-unit>
</context-group>
<target state="translated">Працягнуць</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">Паўтор аперацыі OCR пачнецца ў фонавым рэжыме.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Фільтраваць тэгі</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Фільтр карэспандэнтаў</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Фільтр тыпаў дакументаў</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Фільтраваць шляхі захоўвання</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Скінуць фільтры</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zavřít</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Předchozí</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Následující</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Vybrat měsíc</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Vybrat rok</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Předchozí měsíc</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Následující měsíc</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">První</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Předchozí</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Následující</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Poslední</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Hodin</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuty</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekundy</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zavřít</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> je zpracováván Paperless-ngx.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Odhlásit se</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Otevřené dokumenty</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Zavřít vše</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Spravovat</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Korespondenti</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Štítky</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Typy dokumentu</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="needs-translation">Admin</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Dokumentace</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="needs-translation">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Navrhnout úpravu</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">is available.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">Click to view.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="needs-translation">Update available</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Smazat</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Po</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Smazat</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Před</target>
</trans-unit>
<target state="final">Nelze uložit prvek: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Použít</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="needs-translation">Click again to exclude items.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrovat štítky</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrovat korespondenty</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrovat typy dokumentů</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Zrušit filtry</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Luk</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Næste</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Vælg måned</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Vælg år</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Forrige måned</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Næste måned</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Første</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Næste</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Sidste</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Timer</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutter</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Forøg timer</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Reducer timer</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Forøg minutter</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Reducer minutter</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunder</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Forøg sekunder</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Reducer sekunder</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Luk</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> behandles af paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Næste</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Uploader...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Log ud</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Åbn dokumenter</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Luk alle</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Administrér</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Korrespondenter</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Etiketter</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Dokumenttyper</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Admin</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentation</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Foreslå en idé</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">er tilgængelig.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klik for at se.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Opdatering tilgængelig</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Ryd</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Efter</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Ryd</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Før</target>
</trans-unit>
<target state="final">Kunne ikke gemme element: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Anvend</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Klik igen for at ekskludere elementer.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Næste</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Filtrer etiketter</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Filtrer korrespondenter</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Filtrer dokumenttyper</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Nulstil filtre</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Schließen</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Folie <x id="INTERPOLATION" equiv-text="ing when mouse"/> von <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Vorherige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Nächste</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Monat auswählen</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Jahr auswählen</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Vorheriger Monat</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Nächster Monat</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Erste</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Vorherige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Nächste</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Letzte</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Stunden</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuten</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Stunden erhöhen</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Stunden verringern</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Minuten erhöhen</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Minuten verringern</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunden</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunden erhöhen</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunden verringern</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Schließen</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> wird von Paperless verarbeitet.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="translated">Zurück</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Weiter</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="translated">Ende</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="translated">Das Dashboard kann zum Anzeigen von gespeicherten Ansichten verwendet werden, wie zum Beispiel einem 'Posteingang'. Diese Einstellungen werden unter Einstellungen > gespeicherte Ansichten gefunden, sobald Sie mindestens eine eigene Ansicht erstellt haben.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="translated">Ziehen Sie hier Dokumente hinein, um mit dem Hochladen zu beginnen oder kopieren Sie Dateien in den 'consume' Ordner. Sie können auch Dokumente überall auf allen anderen Seiten der Web-App ziehen. Wenn Sie dies tun, startet Paperless-ngx seine Algorithmen.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Die Dokumentenliste zeigt alle Ihre Dokumente an und ermöglicht das Filtern sowie die Massenbearbeitung von mehreren Dokumenten. Es gibt drei verschiedene Ansichtsstile: Liste, kleine Karten und große Karten.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="translated">Mit den Filterwerkzeugen können Sie schnell Dokumente finden, die verschiedene Datumsbereiche, Tags und andere Suchbegriffe enthalten.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="translated">Jede Kombination von Filterkriterien kann als 'Ansicht' gespeichert werden, die dann auf dem Dashboard und / oder der Seitenleiste angezeigt werden können.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="translated">Schlagwörter, Korrespondenten, Dokumententypen und Speicherpfade können über diese Seiten verwaltet werden. Sie können auch aus der Dokumentbearbeitung erstellt werden.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="translated">Die Dateiaufgaben zeigen Ihnen Dokumente, die verarbeitet wurden, auf Verarbeitung warten oder während der Verarbeitung fehlgeschlagen sind.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Hier finden Sie verschiedene globale Einstellungen für die Anwendung und können die gespeicherten Ansichten verwalten.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="translated">Der Adminbereich enthält erweiterte Steuerelemente sowie die Einstellungen für das automatische Abrufen von E-Mails.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Vielen Dank! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="translated">Es gibt noch <em>erheblich</em> mehr Funktionen und Informationen, die nicht in der Tour abgedeckt wurden, nach der Tour sollten Sie jedoch direkt loslegen können. Schauen Sie sich die Dokumentation an oder besuchen Sie das Projekt auf GitHub um mehr zu erfahren oder Probleme zu melden.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="translated">Im Namen jedes Beitragenden zu diesem von der Gemeinschaft unterstützten Projekt, sagen wir, Danke, dass Sie Paperless-ngx benutzen!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Beginne Upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Eingeloggt als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Abmelden</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Geöffnete Dokumente</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Alle schließen</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Verwalten</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Korrespondenten</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Tags</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Dokumenttypen</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Speicherpfad</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="translated">Dateiaufgaben<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administration</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Dokumentation</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Eine Idee vorschlagen</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">ist verfügbar.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Zum Anzeigen klicken.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="translated">Paperless-ngx kann automatisch auf Updates überprüfen</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated"> Wie funktioniert das? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Aktualisierung verfügbar</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="translated">Es ist ein Fehler beim Speichern der Update Einstellungen aufgetreten.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Zurücksetzen</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Nach</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Zurücksetzen</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Vor</target>
</trans-unit>
<target state="final">Konnte Element nicht speichern: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Beachten Sie, dass das Bearbeiten eines Pfades keine Änderungen an gespeicherten Dateien vornimmt, bis Sie das Programm 'document_renamer' gestartet haben. Siehe die <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>Dokumentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">oder benutzen Sie Schrägstriche, um bspw. Verzeichnisse hinzuzufügen</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Siehe <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">Dokumentation</a> für die vollständige Liste.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Irgendeines</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Anwenden</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Erneut klicken, um Elemente auszuschließen.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="translated">Sie sind bereit, Dokumente hochzuladen! Entdecken Sie die verschiedenen Funktionen dieser Web-App auf eigene Faust oder starten Sie eine kurze Tour mit dem unten stehenden Button.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="translated">Mehr Details zum Benutzen und Konfigurieren von Paperless-ngx ist in der offiziellen <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>-Dokumentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> verfügbar.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Zurück</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Weiter</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Speicherpfad</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
<context context-type="linenumber">387</context>
</context-group>
- <target state="translated">OCR wiederholen</target>
+ <target state="translated">OCR wiederholen bestätigen</target>
</trans-unit>
<trans-unit id="9197453786953646058" datatype="html">
<source>This operation will permanently redo OCR for this document.</source>
</context-group>
<target state="translated">Fortfahren</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">Die erneute Texterkennung wird im Hintergrund gestartet.</target>
+ <target state="translated">OCR-Vorgang wird im Hintergrund neu gestartet. Schließen oder laden Sie dieses Dokument nach Abschluss der Operation neu oder öffnen Sie es erneut, um neue Inhalte anzuzeigen.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Tags filtern</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Korrespondenten filtern</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Dokumenttypen filtern</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Speicherpfade filtern</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
<context context-type="linenumber">388</context>
</context-group>
- <target state="translated">Diese Aktion wird die Texterkennung für <x id="PH" equiv-text="this.list.selected.size"/> ausgewählte(s) Dokument(e) wiederholen.</target>
+ <target state="translated">Diese Aktion wird OCR permanent für <x id="PH" equiv-text="this.list.selected.size"/> ausgewählte(s) Dokument(e) wiederholen.</target>
</trans-unit>
<trans-unit id="8076495233090006322" datatype="html" approved="yes">
<source>Filter by correspondent</source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Filter zurücksetzen</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">173</context>
</context-group>
- <target state="final">Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target>
+ <target state="final">Benachrichtigungen anzeigen, wenn neue Dokumente erkannt werden</target>
</trans-unit>
<trans-unit id="6057053428592387613" datatype="html" approved="yes">
<source>Show notifications when document processing completes successfully</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">174</context>
</context-group>
- <target state="final">Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target>
+ <target state="final">Benachrichtigungen anzeigen, wenn die Dokumentenverarbeitung erfolgreich abgeschlossen wurde</target>
</trans-unit>
<trans-unit id="370315664367425513" datatype="html" approved="yes">
<source>Show notifications when document processing fails</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">175</context>
</context-group>
- <target state="final">Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target>
+ <target state="final">Benachrichtigungen anzeigen, wenn die Verarbeitung des Dokuments fehlschlägt</target>
</trans-unit>
<trans-unit id="6838309441164918531" datatype="html" approved="yes">
<source>Suppress notifications on dashboard</source>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Cerrar</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Siguiente</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Seleccionar mes</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Seleccionar año</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mes anterior</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mes siguiente</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Primero</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Siguiente</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Último</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Horas</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutos</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Incrementar horas</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Decrementar horas</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Incrementar minutos</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Decrementar minutos</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Segundos</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Incrementar segundos</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Decrementar segundos</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Cerrar</target>
</trans-unit>
</context-group>
<target state="final">El documento<x id="PH" equiv-text="status.filename"/> está siendo procesado por paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Siguiente</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Iniciando subida...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Sesión iniciada como <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Cerrar sesión</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Abrir documentos</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Cerrar todos</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Organizar</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Interlocutores</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etiquetas</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Tipos de documento</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Rutas de almacenamiento</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administrar</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Documentación</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Sugerir una idea</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">está disponible.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Haz clic para ver.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Actualización disponible</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Limpiar</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Después</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Limpiar</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Antes</target>
</trans-unit>
<target state="final">No se pudo guardar el elemento: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Tenga en cuenta que editar una ruta no aplica los cambios a los archivos almacenados hasta que ejecute la utilidad 'document_renamer'. Vea la <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentación<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">o utilice barras para añadir directorios p.ej.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Vea la <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentación</a> para la lista completa.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Cualquiera</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Aplicar</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Haga clic de nuevo para excluir los elementos.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Siguiente</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Ruta de almacenamiento</target>
</trans-unit>
</context-group>
<target state="translated">Continuar</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">La operación de rehacer OCR comenzará en segundo plano.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrar etiquetas</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrar interlocutores</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrar tipos de documento</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtrar rutas de almacenamiento</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Quitar filtros</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Sulje</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Liu'uta <x id="INTERPOLATION" equiv-text="ing when mouse"/> / <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Edellinen</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Seuraava</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Valitse kuukausi</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Valitse vuosi</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Edellinen kuukausi</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Seuraava kuukausi</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Ensimmäinen</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Edellinen</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Seuraava</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Viimeinen</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Tuntia</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuuttia</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Lisää tunteja</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Pienennä tunteja</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Lisää minuutteja</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Pienennä minuutteja</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekuntia</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Lisäys sekunteina</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Vähennys sekunteina</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Sulje</target>
</trans-unit>
</context-group>
<target state="translated">Paperless käsittelee asiakirjaa <x id="PH" equiv-text="status.filename"/>.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Seuraava</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Aloittaa latausta...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Kirjautunut käyttäjänä <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Kirjaudu ulos</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Avaa asiakirjat</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Sulje kaikki</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Hallitse</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Yhteyshenkilöt</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Tunnisteet</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Dokumenttityypit</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Tallennustilan polut</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Ylläpito</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentaatio</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Ehdota ideaa</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">on saatavilla.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Näytä klikkaamalla.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Päivitys saatavilla</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Tyhjennä</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Jälkeen</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Tyhjennä</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Ennen</target>
</trans-unit>
<target state="translated">Elementtiä ei voitu tallentaa: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Huomaa, että polun muokkaaminen ei tallenna muutoksia tiedostoon ennenkuin olet suorittanut asiakirjan_renamer-apuohjelman. Katso <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>dokumentaatio<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">tai käytä kauttaviivoja lisätäksesi hakemistoja, esim.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Katso <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">dokumentaatio</a>.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Mikä tahansa</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Käytä</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Klikkaa uudelleen jättääksesi pois kohteita.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Edellinen</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Seuraava</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Tallennustilan polku</target>
</trans-unit>
</context-group>
<target state="translated">Jatka</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">Tee OCR uudelleen -operaatio alkaa taustalla.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Suodata tunnisteita</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Suodata yhteyshenkilöt</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Suodata asiakirjatyyppejä</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Suodata tallennuspolkuja</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Tyhjennä suodattimet</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Fermer</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated">Diapositive <x id="INTERPOLATION" equiv-text="ing when mouse"/> sur <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Précédent</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Suivant</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Sélectionner le mois</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Sélectionner l'année</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mois précédent</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mois suivant</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Premier</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Précédent</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Suivant</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Dernier</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Heures</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutes</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Incrémenter les heures</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Décrémenter les heures</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Incrémenter les minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Décrémenter les minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Secondes</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Incrémenter les secondes</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Décrémenter les secondes</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Fermer</target>
</trans-unit>
</context-group>
<target state="final">Le document <x id="PH" equiv-text="status.filename"/> est en cours de traitement par Paperless-ngx.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Suivant</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="translated">Le tableau de bord peut être utilisé pour afficher les vues enregistrées, comme une boîte de réception. Ces paramètres se trouvent dans Paramètres > Vues sauvegardées une fois que vous en avez créé.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">La liste des documents affiche tous vos documents et permet le filtrage ainsi que l'édition en bloc. Il y a trois styles de vue différents : liste, vignettes et liste détaillée. Une liste de documents actuellement ouverts à l'édition est affichée dans la barre latérale.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="translated">Les outils de filtrage vous permettent de trouver rapidement des documents en utilisant diverses recherches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="translated">Toute combinaison de filtres peut être enregistrée sous la forme d'une 'vue' qui peut ensuite être affichée sur le tableau de bord et / ou la barre latérale.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="translated">Les tags, correspondants, types de documents et chemins de stockage peuvent tous être gérés à l'aide de ces pages. Ils peuvent également être créés à partir de la vue d'édition du document.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="translated">Les tâches de fichiers vous montrent les documents qui ont été consommés, sont en attente d'être traité ou peuvent avoir échoué au cours du processus.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Consultez les paramètres pour les diverses améliorations apportées à l'application Web ou pour activer les paramètres pour les vues enregistrées.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="translated">La zone Admin contient des contrôles plus avancés ainsi que les paramètres pour la récupération automatique des e-mails.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Merci ! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="translated">Il y a <em>des tonnes</em> de fonctionnalités et d'informations supplémentaires que nous n'avons pas couvertes ici, mais cela devrait vous aider à démarrer. Consultez la documentation ou visitez le projet sur GitHub pour en savoir plus ou pour rapporter des problèmes.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="translated">Enfin, au nom de chaque contributeur à ce projet soutenu par la communauté, merci d'utiliser Paperless-ngx !</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Début du téléversement...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Connecté en tant que <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Déconnexion</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Documents ouverts</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Fermer tout</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Gestion</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Correspondants</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Étiquettes</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Types de document</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Chemins de stockage</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="translated">Traitement des fichiers<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administration</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Documentation</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Suggérer une idée</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">est disponible.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Cliquer pour visualiser.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="translated">Paperless-ngx peut automatiquement vérifier la disponibilité des mises à jour</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated">Comment ça fonctionne ?</target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Mise à jour disponible</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="translated">Une erreur s'est produite lors de l'enregistrement des paramètres de vérification des mises à jour.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Réinitialiser</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Après</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Réinitialiser</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Avant</target>
</trans-unit>
<target state="final">Impossible d'enregistrer l'élément : <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Notez que l'édition d'un chemin ne modifie pas les fichiers stockés jusqu'à ce que vous ayez exécuté l'utilitaire 'document_renamer'. Voir la documentation <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/><x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">ou utilisez des barres obliques pour ajouter des répertoires, comme</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Voir <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> pour la liste complète.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Tous</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Appliquer</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Cliquer à nouveau pour exclure des éléments.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="translated">Vous êtes prêt à télécharger des documents ! Explorez les différentes fonctionnalités de cette application web par vous-même, ou commencez une visite rapide en utilisant le bouton ci-dessous.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="translated">Plus de détails sur la façon d'utiliser et de configurer Paperless-ngx est toujours disponible dans la <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Précédent</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Suivant</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Chemin de stockage</target>
</trans-unit>
</context-group>
<target state="translated">Continuer</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">La relance de la ROC commencera en arrière-plan.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrer les étiquettes</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrer les correspondants</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrer les types de documents</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtrer les chemins de stockage</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Réinitialiser les filtres</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">סגור</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">הקודם</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">הבא</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">בחר חודש</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">בחר שנה</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">חודש קודם</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">חודש הבא</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">ראשון</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">קודם</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">הבא</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">אחרון</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">שש</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">שעות</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">חח</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">דקות</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">הגדלת שעות</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">הקטנת שעות</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">הגדלת דקות</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">הקטנת דקות</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">שש</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">שניות</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">הגדלת שניות</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">הקטנת שניות</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">סגור</target>
</trans-unit>
</context-group>
<target state="final">מסמך <x id="PH" equiv-text="status.filename"/> נמצא בעיבוד ע"י Paperless-NG.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">הבא</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">מאתחל העלאה...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">מחובר כ- <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">התנתק/י</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">מסמכים פתוחים</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">סגור הכל</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">נהל</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">מכותבים</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">תגיות</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">סוגי מסמך</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">נתיבי אכסון</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">מנהל</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">תיעוד</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">הצעה רעיון</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">זמין.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">לחץ להצגה.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">קיים עדכון</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">ניקוי</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">אחרי</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">ניקוי</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">לפני</target>
</trans-unit>
<target state="translated">לא ניתן לשמור את האלמנט: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>שים לב שעריכת נתיב לא תחיל שינויים על קבצים מאוחסנים עד שתפעיל את כלי השירות 'document_namer'. ראה את<x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>התיעוד<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">או השתמשו באלכסונים כדי להוסיף ספריות, לדוג'</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">ראה <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling"> את התיעוד</a> לרשימה מלאה.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">החל</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">לחץ שוב כדי לא לכלול פריטים.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">הקודם</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">הבא</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">נתיב אכסון</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">סנן תגיות</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">סנן מכותבים</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">סנן סוגי מסמכים</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">סנן מיקום אכסון</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="needs-translation">Reset filters</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zatvori</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Prethodno</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Sljedeće</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Odaberi mjesec</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Odaberi godinu</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Prethodni mjesec</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Sljedeći mjesec</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prvi</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prethodni</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Sljedeći</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Zadnji</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* Maksima"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Sati</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minute</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Povećanje sati</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Smanjenje sati</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Povečanje minuta</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Smanjenje minuta</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunde</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Povečanje sekundi</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Smanjenje sekundi</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zatvori</target>
</trans-unit>
</context-group>
<target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> je u fazi obrade.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Pokretanje prijenosa...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Prijavljen kao <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Odjavi se</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Otvoreni dokumenti</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Zatvori sve</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Upravljaj</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Dopisnici</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Oznake</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Vrste dokumenta</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Putanje pohrane</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Administrator</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentacija</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Predloži ideju</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">je dostupno.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klikni za prikaz.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Dostupno ažuriranje</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Očisti</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Nakon</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Očisti</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Prije</target>
</trans-unit>
<target state="translated">Nije moguće spremiti element: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Imajte na umu da uređivanje putanje se ne primjenjuje na pohranjene datoteke dok ne pokrenete uslužni program 'document_renamer'. Vidi <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">ili koristite kose crte za dodavanje imenika, npr.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Vidi <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> za cijeli popis.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Bilo koji</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Primijeni</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Pritisnite ponovo da biste isključili stavke.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="needs-translation">Filter tags</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="needs-translation">Filter correspondents</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="needs-translation">Filter document types</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="needs-translation">Reset filters</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Chiudi</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Diapositiva <x id="INTERPOLATION" equiv-text="ing when mouse"/> di <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Precedente</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Successivo</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Seleziona il mese</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Seleziona anno</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mese precedente</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mese successivo</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Primo</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Precedente</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Successivo</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Ultimo</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Ore</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuti</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Incrementa ore</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Decrementa ore</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Incrementa minuti</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Decrementa minuti</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Secondi</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Incremento in secondi</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Decremento in secondi</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Chiudi</target>
</trans-unit>
</context-group>
<target state="final">Paperless sta elaborando il documento <x id="PH" equiv-text="status.filename"/>.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="translated">Prec</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Successivo</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="translated">Fine</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="translated">La dashboard può essere usata per mostrare le viste salvate, come una 'Inbox'. Queste impostazioni si trovano in Impostazioni > Viste salvate, dopo averne create alcune.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
- <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+ <target state="translated">Trascina i documenti qui per iniziare a caricarli, oppure posizionali nella cartella di elaborazione. Puoi anche trascinare i documenti ovunque su tutte le altre pagine della web app. Una volta fatto, Paperless-ngx inizierà a formare i suoi algoritmi di machine learning.</target>
</trans-unit>
<trans-unit id="7495498057594070122" datatype="html">
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">L'elenco dei documenti mostra tutti i tuoi documenti e consente di filtrarli e modificarli in blocco. Ci sono tre stili di visualizzazione diversi: elenco, carte piccole e carte grandi. Un elenco di documenti attualmente aperti per la modifica è mostrato nella barra laterale.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="translated">Gli strumenti di filtraggio ti consentono di trovare rapidamente documenti utilizzando vari termini di ricerca, date, tag, ecc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="translated">Qualsiasi combinazione di filtri può essere salvata come 'vista' che può essere visualizzata sulla dashboard e/o nella barra laterale.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="translated">Tag, corrispondenti, tipi di documenti e percorsi di archiviazione possono essere gestiti utilizzando queste pagine. Possono anche essere creati dalla vista di modifica dei documenti.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="translated">Le Attività File mostrano i documenti che sono stati consumati, sono in attesa di esserlo, o possano aver portato a un fallimento durante l'Attività.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Controlla le impostazioni per varie modifiche all'app web o per attivare o disattivare le impostazioni per le viste salvate.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="translated">L'area di Amministrazione contiene impostazioni più avanzate e per il recupero automatico delle e-mail.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Grazie! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="translated">Ci sono <em>tonnellate</em> di caratteristiche e informazioni che non abbiamo coperto qui, ma questo dovrebbe essere abbastanza per cominciare. Consulta la documentazione o visita il progetto su GitHub per saperne di più o per segnalare problemi.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="translated">Infine, a nome di ogni collaboratore di questo progetto supportato dalla comunità, grazie per utilizzare Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Avvio caricamento...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Accesso effettuato come <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Esci</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Apri documenti</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Chiudi tutti</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Gestisci</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Corrispondenti</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etichette</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Tipi di documento</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Percorsi di archiviazione</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="translated">Attività File<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Amministratore</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Documentazione</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Suggerisci un'idea</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">è disponibile.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Clicca per visualizzare.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="translated">Paperless-ngx può controllare automaticamente la presenza di aggiornamenti</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated"> Come funziona? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Aggiornamento disponibile</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="translated">Si è verificato un errore durante il salvataggio delle impostazioni sugli aggiornamenti.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Pulisci</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Dopo</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Pulisci</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Prima</target>
</trans-unit>
<target state="final">Non è possibile salvare l'elemento: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Si noti che la modifica di un percorso non applica le modifiche ai file memorizzati finché non viene eseguita l'utilità 'document_renamer'. Vedi la <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentazione<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">o usa slash per aggiungere directory, ad es.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Vedere <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentazione</a> per l'elenco completo.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Qualsiasi</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Applica</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Clicca di nuovo per escludere gli elementi.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="translated">Sei pronto per iniziare a caricare documenti! Esplora le varie funzionalità di questa web app da sola, o inizia un rapido tour utilizzando il pulsante qui sotto.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="translated">Maggiori dettagli su come usare e configurare Paperless-ngx sono sempre disponibili nella <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentazione<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Precedente</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Successivo</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Percorso archiviazione</target>
</trans-unit>
</context-group>
<target state="translated">Procedi</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">L'operazione di rilettura OCR inizierà in background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtra tag</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtra corrispondenti</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtra tipi di documento</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtra percorsi di archiviazione</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Ripristina filtri</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">109</context>
</context-group>
- <target state="translated">Completa <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.completedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ <target state="translated">Completato <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.completedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.completedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<trans-unit id="1697296301417588213" datatype="html">
<source>Started <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.startedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.startedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">121</context>
</context-group>
- <target state="translated">Accodato <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.queuedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
+ <target state="translated">In coda <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.queuedFileTasks.length > 0" class="badge bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.queuedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<trans-unit id="5404910960991552159" datatype="html">
<source>Dismiss selected</source>
<context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
<context context-type="linenumber">26</context>
</context-group>
- <target state="needs-translation">You have unsaved changes to the saved view</target>
+ <target state="translated">Hai modifiche non salvate alla vista salvata</target>
</trans-unit>
<trans-unit id="7282050913165342352" datatype="html">
<source>Are you sure you want to close this saved view?</source>
<context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">Are you sure you want to close this saved view?</target>
+ <target state="translated">Sei sicuro di voler chiudere questa vista salvata?</target>
</trans-unit>
<trans-unit id="856284624775342512" datatype="html">
<source>Save and close</source>
<context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
<context context-type="linenumber">34</context>
</context-group>
- <target state="needs-translation">Save and close</target>
+ <target state="translated">Salva e chiudi</target>
</trans-unit>
<trans-unit id="7536524521722799066" datatype="html" approved="yes">
<source>(no title)</source>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zoumaachen</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Zréck</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Weider</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Mount auswielen</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Joer auswielen</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mount virdrun</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Nächste Mount</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Ufank</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Zréck</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Weider</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Schluss</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Stonnen</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutten</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Stonnen eropsetzen</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Stonnen erofsetzen</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Minutten erhéijen</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Minutten erofsetzen</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekonnen</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekonnen eropsetzen</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekonnen erofsetzen</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zoumaachen</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> gëtt vu Paperless-ngx veraarbecht.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Weider</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
- <target state="needs-translation">Thank you! 🙏</target>
+ <target state="translated">Merci! 🙏</target>
</trans-unit>
<trans-unit id="7354947513482088740" datatype="html">
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Upload fänkt un...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Ageloggt als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Ofmellen</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Oppen Dokumenter</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">All zoumaachen</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Verwalten</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Korrespondenten</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etiketten</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Dokumententypen</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Späicherpfaden</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
- <target state="needs-translation">File Tasks</target>
+ <target state="translated">Datei Jobs</target>
</trans-unit>
<trans-unit id="5537285341303594392" datatype="html">
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administratioun</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Dokumentatioun</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Eng Iddi virschloen</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">ass disponibel.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klicke fir unzeweisen.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Update disponibel</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Läschen</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">No</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Läschen</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Virun</target>
</trans-unit>
<target state="final">Element konnt net gespäichert ginn: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Applizéieren</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Klickt nach eng Kéier fir Elementer auszeschléissen.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">3</context>
</context-group>
- <target state="needs-translation">Paperless-ngx is running!</target>
+ <target state="translated">Paperless-ngx leeft!</target>
</trans-unit>
<trans-unit id="3326049540711826572" datatype="html">
<source>You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</source>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
- <target state="needs-translation">Start the tour</target>
+ <target state="translated">Tour starten</target>
</trans-unit>
<trans-unit id="7822640317427130239" datatype="html" approved="yes">
<source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
<context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
- <target state="needs-translation">Enter comment</target>
+ <target state="translated">Kommentar antippen</target>
</trans-unit>
<trans-unit id="4025397324401332794" datatype="html">
<source> Please enter a comment. </source>
<context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
<context context-type="linenumber">5,7</context>
</context-group>
- <target state="needs-translation"> Please enter a comment. </target>
+ <target state="translated"> Tipp en Kommentar an. </target>
</trans-unit>
<trans-unit id="2337485514607640701" datatype="html">
<source>Add comment</source>
<context context-type="sourcefile">src/app/components/document-comments/document-comments.component.html</context>
<context context-type="linenumber">11</context>
</context-group>
- <target state="needs-translation">Add comment</target>
+ <target state="translated">Kommentar bäifügen</target>
</trans-unit>
<trans-unit id="5438997040668245251" datatype="html">
<source>Error saving comment: <x id="PH" equiv-text="e.toString()"/></source>
</context-group>
<target state="translated">Zréck</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Weider</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Späicherpfad</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">118</context>
</context-group>
- <target state="needs-translation">Original filename</target>
+ <target state="translated">Original Dateinumm</target>
</trans-unit>
<trans-unit id="7985558498848210210" datatype="html" approved="yes">
<source>Original MD5 checksum</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">154</context>
</context-group>
- <target state="needs-translation">Comments</target>
+ <target state="translated">Kommentaren</target>
</trans-unit>
<trans-unit id="3823219296477075982" datatype="html" approved="yes">
<source>Discard</source>
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
<context context-type="linenumber">391</context>
</context-group>
- <target state="needs-translation">Proceed</target>
+ <target state="translated">Weider</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Etikette filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Korrespondente filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Dokumententype filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Filteren zrécksetzen</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
- <target state="needs-translation">Start tour</target>
+ <target state="translated">Tour starten</target>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
<source>General</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">94</context>
</context-group>
- <target state="needs-translation">Sidebar</target>
+ <target state="translated">Saiteläischt</target>
</trans-unit>
<trans-unit id="4608457133854405683" datatype="html">
<source>Use 'slim' sidebar (icons only)</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">98</context>
</context-group>
- <target state="needs-translation">Use 'slim' sidebar (icons only)</target>
+ <target state="translated">Schmuel Saiteläischt benotzen (nëmmen Ikonen)</target>
</trans-unit>
<trans-unit id="1356890996281769972" datatype="html" approved="yes">
<source>Dark mode</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">130</context>
</context-group>
- <target state="needs-translation">Update checking</target>
+ <target state="translated">Aktualiséierungs Kontroll</target>
</trans-unit>
<trans-unit id="7890007688616707209" datatype="html">
<source> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Actual updating of the app must still be performed manually. </source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">141</context>
</context-group>
- <target state="needs-translation">Enable update checking</target>
+ <target state="translated">Aktualiséierungs Kontroll aschalten</target>
</trans-unit>
<trans-unit id="5478370193831195440" datatype="html">
<source>Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release.</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">158</context>
</context-group>
- <target state="needs-translation">Enable comments</target>
+ <target state="translated">Kommentaren erlaben</target>
</trans-unit>
<trans-unit id="5851560788527570644" datatype="html" approved="yes">
<source>Notifications</source>
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">86</context>
</context-group>
- <target state="needs-translation">Open Document</target>
+ <target state="translated">Dokument opmaachen</target>
</trans-unit>
<trans-unit id="6798650225457993016" datatype="html">
<source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0" class="badge bg-danger ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context context-type="sourcefile">src/app/guards/dirty-saved-view.guard.ts</context>
<context context-type="linenumber">34</context>
</context-group>
- <target state="needs-translation">Save and close</target>
+ <target state="translated">Späicheren an zoumaachen</target>
</trans-unit>
<trans-unit id="7536524521722799066" datatype="html" approved="yes">
<source>(no title)</source>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Sluiten</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Vorige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Volgende</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Maand selecteren</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Jaar selecteren</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Vorige maand</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Volgende maand</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Eerste</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Vorige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Volgende</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Laatste</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="needs-translation">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Uren</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="needs-translation">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuten</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Uren verhogen</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Uren verlagen</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Minuten verhogen</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Minuten verlagen</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Seconden</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Seconden verhogen</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Seconden verlagen</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Sluiten</target>
</trans-unit>
</context-group>
<target state="final">Document <x id="PH" equiv-text="status.filename"/> wordt verwerkt door paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Volgende</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Bedankt! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Upload starten...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Ingelogd als <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Afmelden</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Open documenten</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Alles sluiten</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Beheren</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Correspondenten</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Labels</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Documenttypen</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Opslag paden</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Beheer</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Handleiding</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Ideeënbus</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">is beschikbaar.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klik om te bekijken.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Update beschikbaar</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Leegmaken</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Na</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Leegmaken</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Voor</target>
</trans-unit>
<target state="final">Kon het element niet opslaan: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">of gebruik slashes om mappen toe te voegen, bijv.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Zie <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentatie</a> voor volledige lijst.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Alle</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Toepassen</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Klik nogmaals om items uit te sluiten.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Vorige</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Volgende</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Opslag pad</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Labels filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Correspondenten filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Documenttypes filteren</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Filters terug zetten</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Lukk</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Neste</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Velg en måned</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Velg år</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Forrige måned</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Neste måned</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Først</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Neste</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Siste</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Timer</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutter</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Økende timer</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Reduksjon i timer</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Økende minutter</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Reduksjon i minutter</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunder</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Tilleggstid i sekund</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Reduksjon sekunder</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Lukk</target>
</trans-unit>
</context-group>
<target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Neste</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Starter opplasting...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Logg ut</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Åpne dokumenter</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Lukk alle</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Behandle</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Korrespondenter</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Tags</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Dokumenttyper</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Lagringssti</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Admin</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentasjon</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Foreslå en idé</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">er tilgjengelig.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klikk for å se.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Oppdatering er tilgjengelig</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Tøm</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Etter</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Tøm</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Før</target>
</trans-unit>
<target state="translated">Kunne ikke lagre elementet: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">eller bruk skråstreker for å legge til kataloger, f.eks.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Enhver</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Bruk</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Klikk igjen for å ekskludere elementer.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Forrige</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Neste</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Lagringssti</target>
</trans-unit>
</context-group>
<target state="translated">Fortsett</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Filtrer etter tagger</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Filtrere korrespondenter</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Filtrer dokumenttyper</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtrere lagringsbaner</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Tilbakestille filtre</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zamknij</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Poprzedni</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Następny</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Wybierz miesiąc</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Wybierz rok</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Poprzedni miesiąc</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Następny miesiąc</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Pierwszy</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Poprzedni</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Następny</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Ostatni</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Godziny</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuty</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Godziny przyrostu</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Redukcja godzin</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Przyrost minut</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Zmniejszenie minut</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekundy</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Zwiększa sekundy</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Zmniejsz sekundy</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zamknij</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> jest przetwarzany przez paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Następny</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Rozpoczęcie wysyłania...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Zalogowany jako <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Wyloguj</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Otwarte dokumenty</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Zamknij wszystkie</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Zarządzaj</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Nadawcy</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Tagi</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Typy dokumentów</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Ścieżki składowania</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Administracja</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Dokumentacja</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Zaproponuj pomysł</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">jest dostępny.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Kliknij, aby zobaczyć.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Aktualizacja jest dostępna</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Wyczyść</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Po</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Wyczyść</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Przed</target>
</trans-unit>
<target state="final">Nie można zapisać elementu: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Pamiętaj, że edytowanie ścieżki nie stosuje zmian do zapisanych plików, dopóki nie uruchomisz narzędzia 'document_renamer'. Zobacz <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>dokumentacje<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">lub użyj ukośników, aby dodać katalogi, np.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Zobacz <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">dokumentacje</a> dla pełnej listy.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Zastosuj</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Kliknij ponownie, aby wykluczyć elementy.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Poprzedni</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Następny</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Ścieżki składowania</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtruj tagi</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtruj nadawców</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtruj typy dokumentów</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtruj ścieżkę przechowywania</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Zresetuj filtry</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select month</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select year</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Previous month</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Next month</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">First</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Last</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="needs-translation">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="needs-translation">Hours</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="needs-translation">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="needs-translation">Minutes</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Seconds</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
</context-group>
<target state="final">Documento <x id="PH" equiv-text="status.filename"/> está sendo processado pelo paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Encerrar sessão</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Abrir documentos</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Fechar todos</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Gerenciar</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Correspondentes</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etiquetas</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Tipos de documento</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Admin</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Documentação</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Sugerir uma idéia</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">is available.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">Click to view.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="needs-translation">Update available</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Limpar</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Antes</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Limpar</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Depois</target>
</trans-unit>
<target state="final">Não podemos salvar elemento: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Aplicar</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Clique novamente para excluir itens.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrar etiquetas</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrar correspondentes</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrar tipos de documento</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Limpar filtros</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Fechar</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Seguinte</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Selecionar mês</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Selecionar ano</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mês anterior</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Mês seguinte</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Primeiro</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Seguinte</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Último</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Horas</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minutos</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Incrementar horas</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Diminuir horas</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Incrementar minutos</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Diminuir minutos</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Segundos</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Incrementar segundos</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Diminuir segundos</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Fechar</target>
</trans-unit>
</context-group>
<target state="final">Documento <x id="PH" equiv-text="status.filename"/> está a ser processado pelo paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Seguinte</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Obrigado! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">A iniciar o carregamento...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Terminar sessão</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Abrir documentos</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Fechar todos</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Gerir</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Correspondentes</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etiquetas</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Tipos de documento</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administrador</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Documentação</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="final">Github</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Sugerir uma ideia</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">está disponível.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Clique para ver.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated"> Como é que isto funciona? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Atualização disponível</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Limpar</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Antes</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Limpar</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Depois</target>
</trans-unit>
<target state="final">Não foi possível guardar elemento: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Aplicar</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Clique novamente para excluir itens.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Anterior</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Seguinte</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrar etiquetas</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrar correspondentes</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrar tipos de documentos</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Limpar filtros</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select month</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select year</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Previous month</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Next month</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">First</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Last</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="needs-translation">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="needs-translation">Hours</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="needs-translation">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="needs-translation">Minutes</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Seconds</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
</context-group>
<target state="final">Documentul <x id="PH" equiv-text="status.filename"/> este în procesare.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Deconectare</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Deschide documente</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Închide tot</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Administrează</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Corespondenți</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Etichete</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Tipuri de documente</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Administrator</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Documentație</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Sugestii</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">is available.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">Click to view.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="needs-translation">Update available</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Curăță</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">După</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Curăță</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Înainte</target>
</trans-unit>
<target state="final">Nu s-a putut salva elementul: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Aplică</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Click din nou pentru a exclude elemente.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrează etichete</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrează corespondenți</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrează tipuri de documente</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Resetare filtre</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Закрыть</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Слайд <x id="INTERPOLATION" equiv-text="ing when mouse"/> из <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Назад</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Следующий</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Выберите месяц</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Выберите год</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Предыдущий месяц</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Следующий месяц</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Первый</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Предыдущий</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Следующий</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Последний</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">ЧЧ</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Часы</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Минуты</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">СС</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Секунды</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Закрыть</target>
</trans-unit>
</context-group>
<target state="final">Документ <x id="PH" equiv-text="status.filename"/> обрабатывается paperless</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Следующий</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Выход</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Открыть документы</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Закрыть всё</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Управлять</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Корреспонденты</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Теги</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Типы документов</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Пути хранения</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="final">Администрирование</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Документация</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Предложить идею</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">доступно.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Нажмите для просмотра.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Доступно обновление</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Очистить</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">После</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Очистить</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">До</target>
</trans-unit>
<target state="final">Не могу сохранить элемент: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">или используйте слэши для добавления каталогов, например.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Любой</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Подтвердить</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Нажмите еще раз, чтобы исключить элементы.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Предыдущий</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Следующий</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Путь к хранилищу</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Фильтр тегов</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Фильтр корреспондентов</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Фильтр типа документов</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Фильтр по пути хранения</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Сбросить фильтры</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zapri</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Slike <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Prejšnji</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Naslednji</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Izberi mesec</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Izberi leto</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Prejšnji mesec</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Naslednji mesec</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prvi</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prejšnji</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Naslednja</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Zadnji</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Ura</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuta</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Povečanje ur</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Zmanjšanje ur</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Povečanje minut</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Zmanjšanje minut</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekunde</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Povečanje sekund</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Zmanjšanje sekund</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zapri</target>
</trans-unit>
</context-group>
<target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> je v postopku obdelave.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Naslednji</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Začetek nalaganja...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Prijavljen kot <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Odjavi se</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Odpri dokumente</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Zapri vse</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Upravljaj</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Dopisniki</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Oznake</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Vrste dokumentov</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Poti do shrambe</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Skrbnik</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentacija</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Podaj predlog</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">je na voljo.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klikni za ogled.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Posodobitev na voljo</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Počisti</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Po</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Počisti</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Pred</target>
</trans-unit>
<target state="translated">Elementa ni bilo mogoče shraniti: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">ali uporabljaj slash za dodajanje map npr.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Poglejte <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> za cel seznam.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Poljuben</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Uporabi</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Kliknite znova, da izključite elemente.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">Prejšnji</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Naslednji</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Pot do shrambe</target>
</trans-unit>
</context-group>
<target state="translated">Nadaljuj</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">Ponovna izdelava OCR operacije se bo izvedla v ozadju.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Filtriraj oznake</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Filtrirajte dopisnike</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Filtrirajte vrste dokumentov</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtriraj poti shrambe</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Ponastavi filtre</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Zatvori</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="ing when mouse"/> od <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> od <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Prethodni</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Sledeći</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Odaberi mesec</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Odaberi godinu</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Prethodni mesec</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Naredni mesec</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prvi</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Prethodni</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Sledeći</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Poslednji</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="translated"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">Sati</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">Minuta</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">Povećaj sate</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">Smanji sate</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">Povećaj minute</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">Smanji minute</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Sekundi</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Povećaj sekunde</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">Smanji sekunde</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Zatvori</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context>
<context context-type="linenumber">45</context>
</context-group>
- <target state="translated">Otvoreni dokument</target>
+ <target state="translated">Otvori dokument</target>
</trans-unit>
<trans-unit id="8582620835547864448" datatype="html">
<source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source>
</context-group>
<target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> obrađuje Paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="translated">Prethodni</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">Sledeći</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="translated">Kraj</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
- <target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
+ <target state="translated">Kontrolna tabla se može koristiti za prikazivanje sačuvanih pogleda, kao što je 'Inbox'. Kada kreirate neke poglede ta podešavanja će se nalazati pod Podešavanja > Sačuvani pogledi.</target>
</trans-unit>
<trans-unit id="9075755296812854717" datatype="html">
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
- <target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
+ <target state="translated">Prevucite i otpustite dokumente ovde da biste započeli otpremanje ili ih stavite u folder za konzumiranje. Takođe možete da prevučete i otpustite dokumente bilo gde na svim drugim stranicama veb aplikacije. Kada to učinite, Paperless-ngx će početi da trenira svoje algoritme za mašinsko učenje.</target>
</trans-unit>
<trans-unit id="7495498057594070122" datatype="html">
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
- <target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
+ <target state="translated">Lista dokumenata prikazuje sve vaše dokumente i omogućava filtriranje kao i grupno uređivanje. Postoje tri različita stila prikaza: lista, male kartice i velike kartice. Na bočnoj traci je prikazana lista dokumenata koji su trenutno otvoreni za uređivanje.</target>
</trans-unit>
<trans-unit id="1334220418719920556" datatype="html">
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
- <target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
+ <target state="translated">Alati za filtriranje vam omogućavaju da brzo pronađete dokumente koristeći različite pretrage, datume, oznake itd.</target>
</trans-unit>
<trans-unit id="5427326625898532358" datatype="html">
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
- <target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
+ <target state="translated">Bilo koja kombinacija filtera se može sačuvati kao 'pogled' koji se zatim može prikazati na kontrolnoj tabli i/ili bočnoj traci.</target>
</trans-unit>
<trans-unit id="2804886236408698479" datatype="html">
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
- <target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
+ <target state="translated">Oznake, korespodenti, tipovi dokumenata i putanje skladištenja svi se mogu se uređivati pomoću ovih stranica. Takođe se mogu kreirati iz prikaza za uređivanje dokumenta.</target>
</trans-unit>
<trans-unit id="4680387114119209483" datatype="html">
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="translated">Obrada dokumenata vam prikazuje dokumenta koja su obrađena, čekaju da budu obrađena ili možda nisu uspešno obrađena.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
- <target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
+ <target state="translated">Proverite podešavanja za različita podešavanja veb aplikacije ili da biste uključili podešavanja za sačuvane poglede.</target>
</trans-unit>
<trans-unit id="7643249460591212914" datatype="html">
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
- <target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
+ <target state="translated">Administracija sadrži naprednije kontrole, kao i podešavanja za automatsko preuzimanje e-pošte.</target>
</trans-unit>
<trans-unit id="7172877665285340082" datatype="html">
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="translated">Hvala vam! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
- <target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
+ <target state="translated">Ima <em>tona</em> više funkcija i informacija koje ovde nismo pokrili, ali ovo bi trebalo da vas pokrene. Pogledajte dokumentaciju ili posetite projekat na GitHub-u da biste saznali više ili prijavili probleme.</target>
</trans-unit>
<trans-unit id="4270528545616947218" datatype="html">
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
- <target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
+ <target state="translated">Na kraju, u ime svih koji doprinose ovom projektu koji podržava zajednica, hvala vam što koristite Paperless-ngx!</target>
</trans-unit>
<trans-unit id="5749300816154614125" datatype="html">
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">Pokretanje otpremanja...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">Ulogovan kao <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Odjavi se</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
- <target state="translated">Komandna tabla</target>
+ <target state="translated">Kontrolna tabla</target>
</trans-unit>
<trans-unit id="4733307402565258070" datatype="html">
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Otvorena dokumenta</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Zatvori svе</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Upravljanje</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Korespodenti</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Oznake</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Tipovi dokumenta</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">Putanja skladišta</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="translated">Obrada dokumenata<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Administracija</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokumentacija</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Predložite ideju</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">je dostupno.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Klik za prеglеd.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
- <target state="needs-translation">Paperless-ngx can automatically check for updates</target>
+ <target state="translated">Paperless-ngx može automatski da proveri da li postoje ažuriranja</target>
</trans-unit>
<trans-unit id="894819944961861800" datatype="html">
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="translated"> Kako ovo radi? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Dostupno jе ažuriranjе</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
+ </context-group>
+ <target state="translated">Došlo je do greške prilikom čuvanja podešavanja.</target>
+ </trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
</context-group>
- <target state="needs-translation">An error occurred while saving update checking settings.</target>
+ <target state="translated">Očisti</target>
</trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Posle</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Očisti</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Pre</target>
</trans-unit>
<target state="translated">Nije moguće sačuvati elelement: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Imajte na umu da se promena uređivanje putanje ne primenjuje na sačuvane datoteke sve dok ne pokrenete uslužni program 'document_renamer'. Pogledajte <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>dokumentaciju<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">ili koristite kose crte za dodavanje direktorijuma, npr.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">Pogledaj <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">dokumentaciju</a> za kompletnu listu.</target>
+ <target state="translated">Pogledaj <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">dokumentaciju</a> za kompletnu listu.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">Bilo koja</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Primeni</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Kliknite ponovo da biste isključili stavke.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
- <target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
+ <target state="translated">Spremni ste da počnete da otpremate dokumente! Istražite različite funkcije ove veb aplikacije sami ili započnite brzi obilazak koristeći dugme ispod.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="translated">Više detalja o tome kako da koristite i konfigurišete Paperless-ngx je uvek dostupno u <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>dokumentaciji<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
- <target state="needs-translation">Thanks for being a part of the Paperless-ngx community!</target>
+ <target state="translated">Hvala što ste deo Paperless-ngx zajednice!</target>
</trans-unit>
<trans-unit id="1415832194529539652" datatype="html">
<source>Start the tour</source>
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">9</context>
</context-group>
- <target state="translated">Započni upoznavanje</target>
+ <target state="translated">Započni obilazak</target>
</trans-unit>
<trans-unit id="7822640317427130239" datatype="html">
<source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source>
</context-group>
<target state="translated">Prethodni</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">Sledeći</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">Putanja skladišta</target>
</trans-unit>
</context-group>
<target state="translated">Nastavi</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="translated">Operacija ponovnog OCR će započeti u pozadini.</target>
+ <target state="translated">Ponovna OCR operacija će početi u pozadini. Zatvorite i ponovo otvorite ili ponovo učitajte ovaj dokument nakon što se operacija završi da biste videli novi sadržaj.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Filtriraj oznake</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Filtriraj korespodente</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Filtriraj tip dokumenta</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Filtriraj po putanji skladišta</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Poništavanje filtera</target>
</trans-unit>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
- <target state="translated">Započni upoznavanje</target>
+ <target state="translated">Započni obilazak</target>
</trans-unit>
<trans-unit id="6439365426343089851" datatype="html">
<source>General</source>
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">134,137</context>
</context-group>
- <target state="needs-translation"> Update checking works by pinging the the public <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> for the latest release to determine whether a new version is available.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Actual updating of the app must still be performed manually. </target>
+ <target state="translated"> Provera ažuriranja funkcioniše pingovanjem javnog <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target="_blank" rel="noopener noreferrer">"/>Github API<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/> za najnovije izdanje da bi se utvrdilo da li je nova verzija dostupna.<x id="LINE_BREAK" ctype="lb" equiv-text="<br/>"/> Stvarno ažuriranje aplikacije i dalje mora da se obavlja ručno. </target>
</trans-unit>
<trans-unit id="5489945693955857309" datatype="html">
<source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>No tracking data is collected by the app in any way.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<context context-type="linenumber">86</context>
</context-group>
- <target state="translated">Otvoreni dokument</target>
+ <target state="translated">Otvori dokument</target>
</trans-unit>
<trans-unit id="6798650225457993016" datatype="html">
<source>Failed <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0" class="badge bg-danger ms-1">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select month</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="needs-translation">Select year</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Previous month</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="needs-translation">Next month</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">First</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Next</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="needs-translation">Last</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="needs-translation">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="needs-translation">Hours</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="needs-translation">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="needs-translation">Minutes</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Seconds</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="needs-translation">Close</target>
</trans-unit>
</context-group>
<target state="final">Dokument <x id="PH" equiv-text="status.filename"/> behandlas av paperless.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="final">Logga ut</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="final">Öppna dokument</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="final">Stäng alla</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="final">Hantera</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="final">Korrespondenter</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="final">Taggar</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="final">Dokumenttyper</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="needs-translation">Admin</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="final">Dokumentation</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="needs-translation">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="final">Föreslå en idé</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">is available.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">Click to view.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="needs-translation">Update available</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html" approved="yes">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="final">Rensa</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="final">Efter</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html" approved="yes">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="final">Rensa</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html" approved="yes">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="final">Innan</target>
</trans-unit>
<target state="final">Kunde inte spara element: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="final">Tillämpa</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="needs-translation">Click again to exclude items.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html" approved="yes">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="needs-translation">Proceed</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="final">Filtrera taggar</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="final">Filtrera korrespondenter</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="final">Filtrera dokument typ</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="final">Återställ filter</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">Kapat</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">Önceki</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">Sonraki</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Ay seçin</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">Yıl seçin</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Önceki ay</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">Sonraki ay</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">İlk</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Önceki</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Sonraki</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">Son</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="needs-translation">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="needs-translation">Hours</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="needs-translation">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="needs-translation">Minutes</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="needs-translation">Increment hours</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="needs-translation">Decrement hours</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="needs-translation">Increment minutes</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="needs-translation">Decrement minutes</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Seconds</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Increment seconds</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="needs-translation">Decrement seconds</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">Kapat</target>
</trans-unit>
</context-group>
<target state="translated"><x id="PH" equiv-text="status.filename"/> adlı belge paperless tarafından işleniyor.</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="needs-translation">Next</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="needs-translation">Initiating upload...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">Oturumu kapat</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">Belgeleri aç</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">Tümünü kapat</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">Yönet</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">Muhabirler</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">Etiketler</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">Belge türleri</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">Yönetici</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">Dokümantasyon</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">Github</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">Bir fikir öner</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="needs-translation">is available.</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">Görüntülemek için tıklayın.</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">Güncelleme mevcut</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">Temizle</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">Sonrası</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">Temizle</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">Öncesinde</target>
</trans-unit>
<target state="translated"><x id="PH" equiv-text="error"/> olan öğeyi kayıt edemiyorum</target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="needs-translation">or use slashes to add directories e.g.</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="needs-translation">See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="needs-translation">Any</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">Uygula</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">Öğeleri hariç tutmak için yeniden tıklatın.</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="needs-translation">Previous</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="needs-translation">Next</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="needs-translation">Storage path</target>
</trans-unit>
</context-group>
<target state="translated">Devam et</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">Etiketlere göre filtrele</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">Muhabire göre filtrele</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">Belge türlerini göre filtrele</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="needs-translation">Filter storage paths</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">Filtreleri sıfırla</target>
</trans-unit>
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/alert/alert.ts</context>
- <context context-type="linenumber">42,44</context>
+ <context context-type="linenumber">47,48</context>
</context-group>
<target state="translated">关闭</target>
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
- <source> Slide <x id="INTERPOLATION" equiv-text="ing when mouse"/> of <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </source>
+ <source> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">157,166</context>
+ <context context-type="linenumber">178,186</context>
</context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note>
- <target state="translated"> 滑动 <x id="INTERPOLATION" equiv-text="ing when mouse"/> 的 <x id="INTERPOLATION_1" equiv-text="e. * * @s"/> </target>
+ <target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="@since 2.2.0"/> of <x id="INTERPOLATION_1" equiv-text="eOnHover(value:"/> </target>
</trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">188,191</context>
+ <context context-type="linenumber">213,215</context>
</context-group>
<target state="translated">上一个</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
- <context context-type="linenumber">209,211</context>
+ <context context-type="linenumber">236</context>
</context-group>
<target state="translated">下一个</target>
</trans-unit>
<source>Select month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">选择月份</target>
</trans-unit>
<source>Select year</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation-select.ts</context>
- <context context-type="linenumber">41,42</context>
+ <context context-type="linenumber">50,51</context>
</context-group>
<target state="translated">选择年份</target>
</trans-unit>
<source>Previous month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">上个月</target>
</trans-unit>
<source>Next month</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/datepicker/datepicker-navigation.ts</context>
- <context context-type="linenumber">43,46</context>
+ <context context-type="linenumber">60,63</context>
</context-group>
<target state="translated">下个月</target>
</trans-unit>
<source>««</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">««</target>
</trans-unit>
<source>«</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">«</target>
</trans-unit>
<source>»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»</target>
</trans-unit>
<source>»»</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,270</context>
</context-group>
<target state="translated">»»</target>
</trans-unit>
<source>First</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">第一页</target>
</trans-unit>
<source>Previous</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,226</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">上一页</target>
</trans-unit>
<source>Next</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">下一页</target>
</trans-unit>
<source>Last</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/pagination/pagination.ts</context>
- <context context-type="linenumber">224,225</context>
+ <context context-type="linenumber">269,271</context>
</context-group>
<target state="translated">最后一页</target>
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source>
- <x id="INTERPOLATION" equiv-text="* The maxim"/>
+ <x id="INTERPOLATION" equiv-text="* The maximal"/>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
- <context context-type="linenumber">23,26</context>
+ <context context-type="linenumber">30,33</context>
</context-group>
- <target state="translated"><x id="INTERPOLATION" equiv-text="* The maxim"/></target>
+ <target state="needs-translation"><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
</trans-unit>
<trans-unit id="ngb.timepicker.HH" datatype="html">
<source>HH</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">138,141</context>
+ <context context-type="linenumber">230,231</context>
</context-group>
<target state="translated">HH</target>
</trans-unit>
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">161</context>
+ <context context-type="linenumber">255,258</context>
</context-group>
<target state="translated">小时</target>
</trans-unit>
<source>MM</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">280,282</context>
</context-group>
<target state="translated">MM</target>
</trans-unit>
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">298,299</context>
</context-group>
<target state="translated">分钟</target>
</trans-unit>
<source>Increment hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">218,219</context>
+ <context context-type="linenumber">328,329</context>
</context-group>
<target state="translated">增加小时</target>
</trans-unit>
<source>Decrement hours</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">239,240</context>
+ <context context-type="linenumber">350,356</context>
</context-group>
<target state="translated">减少小时</target>
</trans-unit>
<source>Increment minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">264,268</context>
+ <context context-type="linenumber">383,384</context>
</context-group>
<target state="translated">增加分钟</target>
</trans-unit>
<source>Decrement minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">287,289</context>
+ <context context-type="linenumber">412,416</context>
</context-group>
<target state="translated">减少分钟</target>
</trans-unit>
<source>SS</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">SS</target>
</trans-unit>
<source>Seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">秒</target>
</trans-unit>
<source>Increment seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">增加秒</target>
</trans-unit>
<source>Decrement seconds</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
<target state="translated">减少秒</target>
</trans-unit>
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.timepicker.AM" datatype="html">
</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/timepicker/timepicker.ts</context>
- <context context-type="linenumber">295</context>
+ <context context-type="linenumber">429</context>
</context-group>
</trans-unit>
<trans-unit id="ngb.toast.close-aria" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/toast/toast.ts</context>
- <context context-type="linenumber">70,71</context>
+ <context context-type="linenumber">74,75</context>
</context-group>
<target state="translated">关闭</target>
</trans-unit>
</context-group>
<target state="translated">文档 <x id="PH" equiv-text="status.filename"/> 正在被 paperless 处理中。</target>
</trans-unit>
+ <trans-unit id="2501522447884928778" datatype="html">
+ <source>Prev</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">119</context>
+ </context-group>
+ <target state="needs-translation">Prev</target>
+ </trans-unit>
+ <trans-unit id="3885497195825665706" datatype="html">
+ <source>Next</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">120</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
+ <context context-type="linenumber">55</context>
+ </context-group>
+ <target state="translated">下一个</target>
+ </trans-unit>
+ <trans-unit id="1241348629231510663" datatype="html">
+ <source>End</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/app.component.ts</context>
+ <context context-type="linenumber">121</context>
+ </context-group>
+ <target state="needs-translation">End</target>
+ </trans-unit>
<trans-unit id="3909462337752654810" datatype="html">
<source>The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">122</context>
+ <context context-type="linenumber">126</context>
</context-group>
<target state="needs-translation">The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.</target>
</trans-unit>
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">129</context>
+ <context context-type="linenumber">136</context>
</context-group>
<target state="needs-translation">Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</target>
</trans-unit>
<source>The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="needs-translation">The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.</target>
</trans-unit>
<source>The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">157</context>
</context-group>
<target state="needs-translation">The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.</target>
</trans-unit>
<source>Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">167</context>
</context-group>
<target state="needs-translation">Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.</target>
</trans-unit>
<source>Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">157</context>
+ <context context-type="linenumber">176</context>
</context-group>
<target state="needs-translation">Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.</target>
</trans-unit>
<source>File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">163</context>
+ <context context-type="linenumber">185</context>
</context-group>
<target state="needs-translation">File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.</target>
</trans-unit>
<source>Check out the settings for various tweaks to the web app or to toggle settings for saved views.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="needs-translation">Check out the settings for various tweaks to the web app or to toggle settings for saved views.</target>
</trans-unit>
<source>The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">175</context>
+ <context context-type="linenumber">203</context>
</context-group>
<target state="needs-translation">The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.</target>
</trans-unit>
<source>Thank you! 🙏</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">180</context>
+ <context context-type="linenumber">211</context>
</context-group>
<target state="needs-translation">Thank you! 🙏</target>
</trans-unit>
<source>There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">213</context>
</context-group>
<target state="needs-translation">There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.</target>
</trans-unit>
<source>Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">184</context>
+ <context context-type="linenumber">215</context>
</context-group>
<target state="needs-translation">Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!</target>
</trans-unit>
<source>Initiating upload...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/app.component.ts</context>
- <context context-type="linenumber">230</context>
+ <context context-type="linenumber">264</context>
</context-group>
<target state="translated">正在初始化上传...</target>
</trans-unit>
<source>Logged in as <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">34</context>
+ <context context-type="linenumber">39</context>
</context-group>
<target state="translated">登录为 <x id="INTERPOLATION" equiv-text="{{this.settingsService.displayName}}"/></target>
</trans-unit>
<source>Settings</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">40</context>
+ <context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">166</context>
+ <context context-type="linenumber">171</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">169</context>
+ <context context-type="linenumber">174</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">退出</target>
</trans-unit>
<source>Dashboard</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">64</context>
+ <context context-type="linenumber">69</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">67</context>
+ <context context-type="linenumber">72</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context>
<source>Documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">71</context>
+ <context context-type="linenumber">76</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">74</context>
+ <context context-type="linenumber">79</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<source>Saved views</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">80</context>
+ <context context-type="linenumber">85</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<source>Open documents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">94</context>
+ <context context-type="linenumber">99</context>
</context-group>
<target state="translated">打开文档</target>
</trans-unit>
<source>Close all</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">110</context>
+ <context context-type="linenumber">115</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">113</context>
+ <context context-type="linenumber">118</context>
</context-group>
<target state="translated">全部关闭</target>
</trans-unit>
<source>Manage</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">119</context>
+ <context context-type="linenumber">124</context>
</context-group>
<target state="translated">管理</target>
</trans-unit>
<source>Correspondents</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">123</context>
+ <context context-type="linenumber">128</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">126</context>
+ <context context-type="linenumber">131</context>
</context-group>
<target state="translated">联系人</target>
</trans-unit>
<source>Tags</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">130</context>
+ <context context-type="linenumber">135</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">138</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">22</context>
+ <context context-type="linenumber">27</context>
</context-group>
<target state="translated">标签</target>
</trans-unit>
<source>Document types</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">137</context>
+ <context context-type="linenumber">142</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">140</context>
+ <context context-type="linenumber">145</context>
</context-group>
<target state="translated">文档类型</target>
</trans-unit>
<source>Storage paths</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">144</context>
+ <context context-type="linenumber">149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">147</context>
+ <context context-type="linenumber">152</context>
</context-group>
<target state="translated">保存路径</target>
</trans-unit>
<source>File Tasks</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">151</context>
+ <context context-type="linenumber">156</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">155</context>
+ <context context-type="linenumber">160</context>
</context-group>
<target state="needs-translation">File Tasks<x id="START_TAG_SPAN_1" ctype="x-span_1" equiv-text="<span *ngIf="tasksService.failedFileTasks.length > 0">"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge bg-danger ms-2">"/><x id="INTERPOLATION" equiv-text="{{tasksService.failedFileTasks.length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
</trans-unit>
<source>Logs</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">159</context>
+ <context context-type="linenumber">164</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">162</context>
+ <context context-type="linenumber">167</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context>
<source>Admin</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">173</context>
+ <context context-type="linenumber">178</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">176</context>
+ <context context-type="linenumber">181</context>
</context-group>
<target state="translated">后台管理</target>
</trans-unit>
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">182</context>
+ <context context-type="linenumber">187</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">186</context>
+ <context context-type="linenumber">191</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">189</context>
+ <context context-type="linenumber">194</context>
</context-group>
<target state="translated">帮助文档</target>
</trans-unit>
<source>GitHub</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">194</context>
+ <context context-type="linenumber">199</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">197</context>
+ <context context-type="linenumber">202</context>
</context-group>
<target state="translated">GitHub</target>
</trans-unit>
<source>Suggest an idea</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">199</context>
+ <context context-type="linenumber">204</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">203</context>
+ <context context-type="linenumber">208</context>
</context-group>
<target state="translated">提出建议</target>
</trans-unit>
<source>is available.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">可用</target>
</trans-unit>
<source>Click to view.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">212</context>
+ <context context-type="linenumber">217</context>
</context-group>
<target state="translated">点击查看</target>
</trans-unit>
<source>Paperless-ngx can automatically check for updates</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">216</context>
+ <context context-type="linenumber">221</context>
</context-group>
<target state="needs-translation">Paperless-ngx can automatically check for updates</target>
</trans-unit>
<source> How does this work? </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">223,225</context>
+ <context context-type="linenumber">228,230</context>
</context-group>
<target state="needs-translation"> How does this work? </target>
</trans-unit>
<source>Update available</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
- <context context-type="linenumber">234</context>
+ <context context-type="linenumber">239</context>
</context-group>
<target state="translated">有可用更新</target>
</trans-unit>
<source>An error occurred while saving update checking settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.ts</context>
- <context context-type="linenumber">202</context>
+ <context context-type="linenumber">216</context>
</context-group>
<target state="needs-translation">An error occurred while saving update checking settings.</target>
</trans-unit>
+ <trans-unit id="8700121026680200191" datatype="html">
+ <source>Clear</source>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/clearable-badge/clearable-badge.component.html</context>
+ <context context-type="linenumber">1</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">24</context>
+ </context-group>
+ <context-group purpose="location">
+ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
+ <context context-type="linenumber">47</context>
+ </context-group>
+ <target state="translated">清除</target>
+ </trans-unit>
<trans-unit id="5000042972069710005" datatype="html">
<source><x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="d-inline-block" style="padding-bottom: 1px;" >"/>Cancel<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></source>
<context-group purpose="location">
<source>After</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">19</context>
</context-group>
<target state="translated">之后</target>
</trans-unit>
- <trans-unit id="8700121026680200191" datatype="html">
- <source>Clear</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">26</context>
- </context-group>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">49</context>
- </context-group>
- <target state="translated">清除</target>
- </trans-unit>
<trans-unit id="1218334388194408974" datatype="html">
<source>Before</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">42</context>
</context-group>
<target state="translated">之前</target>
</trans-unit>
<target state="translated">无法保存元素: <x id="PH" equiv-text="error"/></target>
</trans-unit>
<trans-unit id="6036319582202941456" datatype="html">
- <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
+ <source><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
- <target state="translated"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>请注意,在您运行“document_renamer”工具之前,编辑路径不会对存储的文件应用更改。 请参阅 <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/administration.html#utilities-renamer">"/>文档<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>。<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
+ <target state="needs-translation"><x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the <x id="START_LINK" ctype="x-a" equiv-text="<a target="_blank" href="https://docs.paperless-ngx.com/administration/#renamer">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
</trans-unit>
<trans-unit id="8911059720204770105" datatype="html">
<source>Path</source>
</context-group>
<target state="translated">或者使用斜线来添加目录,例如</target>
</trans-unit>
- <trans-unit id="7992597438102889079" datatype="html">
- <source>See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list.</source>
+ <trans-unit id="7871464228487558644" datatype="html">
+ <source>See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
- <target state="translated">查看 <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">文档</a> 以获取完整列表。</target>
+ <target state="needs-translation">See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list.</target>
</trans-unit>
<trans-unit id="6898961890896270754" datatype="html">
<source>Create new storage path</source>
<source>All</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">21</context>
+ <context context-type="linenumber">16</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<source>Any</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">18</context>
</context-group>
<target state="translated">所有</target>
</trans-unit>
<source>Apply</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">32</context>
</context-group>
<target state="translated">应用</target>
</trans-unit>
<source>Click again to exclude items.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context>
- <context context-type="linenumber">43</context>
+ <context context-type="linenumber">38</context>
</context-group>
<target state="translated">再次单击以排除项目。</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">54</context>
+ <context context-type="linenumber">59</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
<target state="needs-translation">You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below.</target>
</trans-unit>
<trans-unit id="4474647174688421179" datatype="html">
- <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
+ <source>More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context>
<context context-type="linenumber">5</context>
</context-group>
- <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://paperless-ngx.readthedocs.io" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
+ <target state="needs-translation">More detail on how to use and configure Paperless-ngx is always available in the <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://docs.paperless-ngx.com" target="_blank">"/>documentation<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/>.</target>
</trans-unit>
<trans-unit id="4294899532887357745" datatype="html">
<source>Thanks for being a part of the Paperless-ngx community!</source>
</context-group>
<target state="translated">上一个</target>
</trans-unit>
- <trans-unit id="3885497195825665706" datatype="html">
- <source>Next</source>
- <context-group purpose="location">
- <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
- <context context-type="linenumber">55</context>
- </context-group>
- <target state="translated">下一个</target>
- </trans-unit>
<trans-unit id="5028777105388019087" datatype="html">
<source>Details</source>
<context-group purpose="location">
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">30</context>
+ <context context-type="linenumber">35</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">37</context>
+ <context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">44</context>
+ <context context-type="linenumber">49</context>
</context-group>
<target state="translated">保存路径</target>
</trans-unit>
</context-group>
<target state="translated">继续操作</target>
</trans-unit>
- <trans-unit id="7662620858973651688" datatype="html">
- <source>Redo OCR operation will begin in the background.</source>
+ <trans-unit id="5729001209753056399" datatype="html">
+ <source>Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">494</context>
</context-group>
- <target state="needs-translation">Redo OCR operation will begin in the background.</target>
+ <target state="needs-translation">Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content.</target>
</trans-unit>
<trans-unit id="8008978164775353960" datatype="html">
<source>Error executing operation: <x id="PH" equiv-text="JSON.stringify( error.error )"/></source>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">23</context>
+ <context context-type="linenumber">28</context>
</context-group>
<target state="translated">过滤器标签</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">31</context>
+ <context context-type="linenumber">36</context>
</context-group>
<target state="translated">过滤联系人</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">38</context>
+ <context context-type="linenumber">43</context>
</context-group>
<target state="translated">过滤文档类型</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">45</context>
+ <context context-type="linenumber">50</context>
</context-group>
<target state="translated">筛选存储路径</target>
</trans-unit>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">60</context>
+ <context context-type="linenumber">65</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/rest/document.service.ts</context>
<source>Reset filters</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context>
- <context context-type="linenumber">73</context>
+ <context context-type="linenumber">78</context>
</context-group>
<target state="translated">重置过滤器</target>
</trans-unit>
}
.input-group {
- .ng-select-container {
- height: 100%;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
+ ng-select:not(:last-child) {
+ .ng-select-container {
+ height: 100%;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
}
}
}
import hashlib
import os
import uuid
-from subprocess import Popen
+from subprocess import CompletedProcess
+from subprocess import run
from typing import Optional
from typing import Type
script_env["DOCUMENT_SOURCE_PATH"] = filepath_arg
try:
- Popen(
- (
+ completed_proc = run(
+ args=[
settings.PRE_CONSUME_SCRIPT,
filepath_arg,
- ),
+ ],
env=script_env,
- ).wait()
+ capture_output=True,
+ )
+
+ self._log_script_outputs(completed_proc)
+
+ # Raises exception on non-zero output
+ completed_proc.check_returncode()
+
except Exception as e:
self._fail(
MESSAGE_PRE_CONSUME_SCRIPT_ERROR,
script_env["DOCUMENT_ORIGINAL_FILENAME"] = str(document.original_filename)
try:
- Popen(
- (
+ completed_proc = run(
+ args=[
settings.POST_CONSUME_SCRIPT,
str(document.pk),
document.get_public_filename(),
reverse("document-thumb", kwargs={"pk": document.pk}),
str(document.correspondent),
str(",".join(document.tags.all().values_list("name", flat=True))),
- ),
+ ],
env=script_env,
- ).wait()
+ capture_output=True,
+ )
+
+ self._log_script_outputs(completed_proc)
+
+ # Raises exception on non-zero output
+ completed_proc.check_returncode()
+
except Exception as e:
self._fail(
MESSAGE_POST_CONSUME_SCRIPT_ERROR,
return document
- def _store(self, text, date, mime_type) -> Document:
+ def _store(
+ self,
+ text: str,
+ date: Optional[datetime.datetime],
+ mime_type: str,
+ ) -> Document:
# If someone gave us the original filename, use it instead of doc.
with open(source, "rb") as read_file:
with open(target, "wb") as write_file:
write_file.write(read_file.read())
+
+ def _log_script_outputs(self, completed_process: CompletedProcess):
+ """
+ Decodes a process stdout and stderr streams and logs them to the main log
+ """
+ # Log what the script exited as
+ self.log(
+ "info",
+ f"{completed_process.args[0]} exited {completed_process.returncode}",
+ )
+
+ # Decode the output (if any)
+ if len(completed_process.stdout):
+ stdout_str = (
+ completed_process.stdout.decode("utf8", errors="ignore")
+ .strip()
+ .split(
+ "\n",
+ )
+ )
+ self.log("info", "Script stdout:")
+ for line in stdout_str:
+ self.log("info", line)
+
+ if len(completed_process.stderr):
+ stderr_str = (
+ completed_process.stderr.decode("utf8", errors="ignore")
+ .strip()
+ .split(
+ "\n",
+ )
+ )
+
+ self.log("warning", "Script stderr:")
+ for line in stderr_str:
+ self.log("warning", line)
try:
date = __parser(date_string, date_order)
- except (TypeError, ValueError):
+ except Exception:
# Skip all matches that do not parse to a proper date
date = None
archive_filename=instance.archive_filename,
)
- except (OSError, DatabaseError, CannotMoveFilesException):
+ except (OSError, DatabaseError, CannotMoveFilesException) as e:
+ logger.warn(f"Exception during file handling: {e}")
# This happens when either:
# - moving the files failed due to file system errors
# - saving to the database failed due to database errors
# Try to move files to their original location.
try:
if move_original and os.path.isfile(instance.source_path):
+ logger.info("Restoring previous original path")
os.rename(instance.source_path, old_source_path)
if move_archive and os.path.isfile(instance.archive_path):
+ logger.info("Restoring previous archive path")
os.rename(instance.archive_path, old_archive_path)
except Exception:
# issue that's going to get caught by the santiy checker.
# All files remain in place and will never be overwritten,
# so this is not the end of the world.
- # B: if moving the orignal file failed, nothing has changed
+ # B: if moving the original file failed, nothing has changed
# anyway.
pass
import os
import shutil
import uuid
+from datetime import datetime
from pathlib import Path
from typing import Type
path = Path(path).resolve()
+ # Celery converts this to a string, but everything expects a datetime
+ # Long term solution is to not use JSON for the serializer but pickle instead
+ if override_created is not None and isinstance(override_created, str):
+ try:
+ override_created = datetime.fromisoformat(override_created)
+ except Exception:
+ pass
+
# check for separators in current document
if settings.CONSUMER_ENABLE_BARCODES:
</g>
</svg>
<h6 class="m-auto">{% translate "Paperless-ngx is loading..." %}</h6>
- <p class="warning m-auto mt-3 small fade hide">{% translate "Still here?! Hmm, something might be wrong." %} <a href="https://paperless-ngx.readthedocs.io/en/latest/">{% translate "Here's a link to the docs." %}</a></p>
+ <p class="warning m-auto mt-3 small fade hide">{% translate "Still here?! Hmm, something might be wrong." %} <a href="https://docs.paperless-ngx.com">{% translate "Here's a link to the docs." %}</a></p>
</div>
</div>
</app-root>
import os
import re
import shutil
+import stat
import tempfile
+from subprocess import CalledProcessError
from unittest import mock
from unittest.mock import MagicMock
class PreConsumeTestCase(TestCase):
- @mock.patch("documents.consumer.Popen")
+ def setUp(self) -> None:
+
+ # this prevents websocket message reports during testing.
+ patcher = mock.patch("documents.consumer.Consumer._send_progress")
+ self._send_progress = patcher.start()
+ self.addCleanup(patcher.stop)
+
+ return super().setUp()
+
+ @mock.patch("documents.consumer.run")
@override_settings(PRE_CONSUME_SCRIPT=None)
def test_no_pre_consume_script(self, m):
c = Consumer()
c.run_pre_consume_script()
m.assert_not_called()
- @mock.patch("documents.consumer.Popen")
+ @mock.patch("documents.consumer.run")
@mock.patch("documents.consumer.Consumer._send_progress")
@override_settings(PRE_CONSUME_SCRIPT="does-not-exist")
def test_pre_consume_script_not_found(self, m, m2):
c.path = "path-to-file"
self.assertRaises(ConsumerError, c.run_pre_consume_script)
- @mock.patch("documents.consumer.Popen")
+ @mock.patch("documents.consumer.run")
def test_pre_consume_script(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(PRE_CONSUME_SCRIPT=script.name):
args, kwargs = m.call_args
- command = args[0]
+ command = kwargs["args"]
self.assertEqual(command[0], script.name)
self.assertEqual(command[1], "path-to-file")
+ @mock.patch("documents.consumer.Consumer.log")
+ def test_script_with_output(self, mocked_log):
+ """
+ GIVEN:
+ - A script which outputs to stdout and stderr
+ WHEN:
+ - The script is executed as a consume script
+ THEN:
+ - The script's outputs are logged
+ """
+ with tempfile.NamedTemporaryFile(mode="w") as script:
+ # Write up a little script
+ with script.file as outfile:
+ outfile.write("#!/usr/bin/env bash\n")
+ outfile.write("echo This message goes to stdout\n")
+ outfile.write("echo This message goes to stderr >&2")
+
+ # Make the file executable
+ st = os.stat(script.name)
+ os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+ with override_settings(PRE_CONSUME_SCRIPT=script.name):
+ c = Consumer()
+ c.path = "path-to-file"
+ c.run_pre_consume_script()
+
+ mocked_log.assert_called()
+
+ mocked_log.assert_any_call("info", "This message goes to stdout")
+ mocked_log.assert_any_call("warning", "This message goes to stderr")
+
+ def test_script_exit_non_zero(self):
+ """
+ GIVEN:
+ - A script which exits with a non-zero exit code
+ WHEN:
+ - The script is executed as a pre-consume script
+ THEN:
+ - A ConsumerError is raised
+ """
+ with tempfile.NamedTemporaryFile(mode="w") as script:
+ # Write up a little script
+ with script.file as outfile:
+ outfile.write("#!/usr/bin/env bash\n")
+ outfile.write("exit 100\n")
+
+ # Make the file executable
+ st = os.stat(script.name)
+ os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+ with override_settings(PRE_CONSUME_SCRIPT=script.name):
+ c = Consumer()
+ c.path = "path-to-file"
+ self.assertRaises(ConsumerError, c.run_pre_consume_script)
+
class PostConsumeTestCase(TestCase):
- @mock.patch("documents.consumer.Popen")
+ def setUp(self) -> None:
+
+ # this prevents websocket message reports during testing.
+ patcher = mock.patch("documents.consumer.Consumer._send_progress")
+ self._send_progress = patcher.start()
+ self.addCleanup(patcher.stop)
+
+ return super().setUp()
+
+ @mock.patch("documents.consumer.run")
@override_settings(POST_CONSUME_SCRIPT=None)
def test_no_post_consume_script(self, m):
doc = Document.objects.create(title="Test", mime_type="application/pdf")
c.filename = "somefile.pdf"
self.assertRaises(ConsumerError, c.run_post_consume_script, doc)
- @mock.patch("documents.consumer.Popen")
+ @mock.patch("documents.consumer.run")
def test_post_consume_script_simple(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(POST_CONSUME_SCRIPT=script.name):
m.assert_called_once()
- @mock.patch("documents.consumer.Popen")
+ @mock.patch("documents.consumer.run")
def test_post_consume_script_with_correspondent(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(POST_CONSUME_SCRIPT=script.name):
args, kwargs = m.call_args
- command = args[0]
+ command = kwargs["args"]
self.assertEqual(command[0], script.name)
self.assertEqual(command[1], str(doc.pk))
self.assertEqual(command[6], f"/api/documents/{doc.pk}/thumb/")
self.assertEqual(command[7], "my_bank")
self.assertCountEqual(command[8].split(","), ["a", "b"])
+
+ def test_script_exit_non_zero(self):
+ """
+ GIVEN:
+ - A script which exits with a non-zero exit code
+ WHEN:
+ - The script is executed as a post-consume script
+ THEN:
+ - A ConsumerError is raised
+ """
+ with tempfile.NamedTemporaryFile(mode="w") as script:
+ # Write up a little script
+ with script.file as outfile:
+ outfile.write("#!/usr/bin/env bash\n")
+ outfile.write("exit -500\n")
+
+ # Make the file executable
+ st = os.stat(script.name)
+ os.chmod(script.name, st.st_mode | stat.S_IEXEC)
+
+ with override_settings(POST_CONSUME_SCRIPT=script.name):
+ c = Consumer()
+ doc = Document.objects.create(title="Test", mime_type="application/pdf")
+ c.path = "path-to-file"
+ with self.assertRaises(ConsumerError):
+ c.run_post_consume_script(doc)
+++ /dev/null
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Bahrain\n"
-"Language: ar_BH\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-BH\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
+++ /dev/null
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Egypt\n"
-"Language: ar_EG\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-EG\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
+++ /dev/null
-msgid ""
-msgstr ""
-"Project-Id-Version: paperless-ng\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-16 09:38+0000\n"
-"PO-Revision-Date: 2021-11-23 18:07\n"
-"Last-Translator: \n"
-"Language-Team: Arabic, Yemen\n"
-"Language: ar_YE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
-"X-Crowdin-Project: paperless-ng\n"
-"X-Crowdin-Project-ID: 434940\n"
-"X-Crowdin-Language: ar-YE\n"
-"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n"
-"X-Crowdin-File-ID: 54\n"
-
-#: documents/apps.py:10
-msgid "Documents"
-msgstr ""
-
-#: documents/models.py:32
-msgid "Any word"
-msgstr ""
-
-#: documents/models.py:33
-msgid "All words"
-msgstr ""
-
-#: documents/models.py:34
-msgid "Exact match"
-msgstr ""
-
-#: documents/models.py:35
-msgid "Regular expression"
-msgstr ""
-
-#: documents/models.py:36
-msgid "Fuzzy word"
-msgstr ""
-
-#: documents/models.py:37
-msgid "Automatic"
-msgstr ""
-
-#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25
-#: paperless_mail/models.py:117
-msgid "name"
-msgstr ""
-
-#: documents/models.py:45
-msgid "match"
-msgstr ""
-
-#: documents/models.py:49
-msgid "matching algorithm"
-msgstr ""
-
-#: documents/models.py:55
-msgid "is insensitive"
-msgstr ""
-
-#: documents/models.py:74 documents/models.py:120
-msgid "correspondent"
-msgstr ""
-
-#: documents/models.py:75
-msgid "correspondents"
-msgstr ""
-
-#: documents/models.py:81
-msgid "color"
-msgstr ""
-
-#: documents/models.py:87
-msgid "is inbox tag"
-msgstr ""
-
-#: documents/models.py:89
-msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
-msgstr ""
-
-#: documents/models.py:94
-msgid "tag"
-msgstr ""
-
-#: documents/models.py:95 documents/models.py:151
-msgid "tags"
-msgstr ""
-
-#: documents/models.py:101 documents/models.py:133
-msgid "document type"
-msgstr ""
-
-#: documents/models.py:102
-msgid "document types"
-msgstr ""
-
-#: documents/models.py:110
-msgid "Unencrypted"
-msgstr ""
-
-#: documents/models.py:111
-msgid "Encrypted with GNU Privacy Guard"
-msgstr ""
-
-#: documents/models.py:124
-msgid "title"
-msgstr ""
-
-#: documents/models.py:137
-msgid "content"
-msgstr ""
-
-#: documents/models.py:139
-msgid "The raw, text-only data of the document. This field is primarily used for searching."
-msgstr ""
-
-#: documents/models.py:144
-msgid "mime type"
-msgstr ""
-
-#: documents/models.py:155
-msgid "checksum"
-msgstr ""
-
-#: documents/models.py:159
-msgid "The checksum of the original document."
-msgstr ""
-
-#: documents/models.py:163
-msgid "archive checksum"
-msgstr ""
-
-#: documents/models.py:168
-msgid "The checksum of the archived document."
-msgstr ""
-
-#: documents/models.py:172 documents/models.py:328
-msgid "created"
-msgstr ""
-
-#: documents/models.py:176
-msgid "modified"
-msgstr ""
-
-#: documents/models.py:180
-msgid "storage type"
-msgstr ""
-
-#: documents/models.py:188
-msgid "added"
-msgstr ""
-
-#: documents/models.py:192
-msgid "filename"
-msgstr ""
-
-#: documents/models.py:198
-msgid "Current filename in storage"
-msgstr ""
-
-#: documents/models.py:202
-msgid "archive filename"
-msgstr ""
-
-#: documents/models.py:208
-msgid "Current archive filename in storage"
-msgstr ""
-
-#: documents/models.py:212
-msgid "archive serial number"
-msgstr ""
-
-#: documents/models.py:217
-msgid "The position of this document in your physical document archive."
-msgstr ""
-
-#: documents/models.py:223
-msgid "document"
-msgstr ""
-
-#: documents/models.py:224
-msgid "documents"
-msgstr ""
-
-#: documents/models.py:311
-msgid "debug"
-msgstr ""
-
-#: documents/models.py:312
-msgid "information"
-msgstr ""
-
-#: documents/models.py:313
-msgid "warning"
-msgstr ""
-
-#: documents/models.py:314
-msgid "error"
-msgstr ""
-
-#: documents/models.py:315
-msgid "critical"
-msgstr ""
-
-#: documents/models.py:319
-msgid "group"
-msgstr ""
-
-#: documents/models.py:322
-msgid "message"
-msgstr ""
-
-#: documents/models.py:325
-msgid "level"
-msgstr ""
-
-#: documents/models.py:332
-msgid "log"
-msgstr ""
-
-#: documents/models.py:333
-msgid "logs"
-msgstr ""
-
-#: documents/models.py:344 documents/models.py:401
-msgid "saved view"
-msgstr ""
-
-#: documents/models.py:345
-msgid "saved views"
-msgstr ""
-
-#: documents/models.py:348
-msgid "user"
-msgstr ""
-
-#: documents/models.py:354
-msgid "show on dashboard"
-msgstr ""
-
-#: documents/models.py:357
-msgid "show in sidebar"
-msgstr ""
-
-#: documents/models.py:361
-msgid "sort field"
-msgstr ""
-
-#: documents/models.py:367
-msgid "sort reverse"
-msgstr ""
-
-#: documents/models.py:373
-msgid "title contains"
-msgstr ""
-
-#: documents/models.py:374
-msgid "content contains"
-msgstr ""
-
-#: documents/models.py:375
-msgid "ASN is"
-msgstr ""
-
-#: documents/models.py:376
-msgid "correspondent is"
-msgstr ""
-
-#: documents/models.py:377
-msgid "document type is"
-msgstr ""
-
-#: documents/models.py:378
-msgid "is in inbox"
-msgstr ""
-
-#: documents/models.py:379
-msgid "has tag"
-msgstr ""
-
-#: documents/models.py:380
-msgid "has any tag"
-msgstr ""
-
-#: documents/models.py:381
-msgid "created before"
-msgstr ""
-
-#: documents/models.py:382
-msgid "created after"
-msgstr ""
-
-#: documents/models.py:383
-msgid "created year is"
-msgstr ""
-
-#: documents/models.py:384
-msgid "created month is"
-msgstr ""
-
-#: documents/models.py:385
-msgid "created day is"
-msgstr ""
-
-#: documents/models.py:386
-msgid "added before"
-msgstr ""
-
-#: documents/models.py:387
-msgid "added after"
-msgstr ""
-
-#: documents/models.py:388
-msgid "modified before"
-msgstr ""
-
-#: documents/models.py:389
-msgid "modified after"
-msgstr ""
-
-#: documents/models.py:390
-msgid "does not have tag"
-msgstr ""
-
-#: documents/models.py:391
-msgid "does not have ASN"
-msgstr ""
-
-#: documents/models.py:392
-msgid "title or content contains"
-msgstr ""
-
-#: documents/models.py:393
-msgid "fulltext query"
-msgstr ""
-
-#: documents/models.py:394
-msgid "more like this"
-msgstr ""
-
-#: documents/models.py:405
-msgid "rule type"
-msgstr ""
-
-#: documents/models.py:409
-msgid "value"
-msgstr ""
-
-#: documents/models.py:415
-msgid "filter rule"
-msgstr ""
-
-#: documents/models.py:416
-msgid "filter rules"
-msgstr ""
-
-#: documents/serialisers.py:53
-#, python-format
-msgid "Invalid regular expression: %(error)s"
-msgstr ""
-
-#: documents/serialisers.py:177
-msgid "Invalid color."
-msgstr ""
-
-#: documents/serialisers.py:451
-#, python-format
-msgid "File type %(type)s not supported"
-msgstr ""
-
-#: documents/templates/index.html:22
-msgid "Paperless-ng is loading..."
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:14
-msgid "Paperless-ng signed out"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:45
-msgid "You have been successfully logged out. Bye!"
-msgstr ""
-
-#: documents/templates/registration/logged_out.html:46
-msgid "Sign in again"
-msgstr ""
-
-#: documents/templates/registration/login.html:15
-msgid "Paperless-ng sign in"
-msgstr ""
-
-#: documents/templates/registration/login.html:47
-msgid "Please sign in."
-msgstr ""
-
-#: documents/templates/registration/login.html:50
-msgid "Your username and password didn't match. Please try again."
-msgstr ""
-
-#: documents/templates/registration/login.html:53
-msgid "Username"
-msgstr ""
-
-#: documents/templates/registration/login.html:54
-msgid "Password"
-msgstr ""
-
-#: documents/templates/registration/login.html:59
-msgid "Sign in"
-msgstr ""
-
-#: paperless/settings.py:303
-msgid "English (US)"
-msgstr ""
-
-#: paperless/settings.py:304
-msgid "English (GB)"
-msgstr ""
-
-#: paperless/settings.py:305
-msgid "German"
-msgstr ""
-
-#: paperless/settings.py:306
-msgid "Dutch"
-msgstr ""
-
-#: paperless/settings.py:307
-msgid "French"
-msgstr ""
-
-#: paperless/settings.py:308
-msgid "Portuguese (Brazil)"
-msgstr ""
-
-#: paperless/settings.py:309
-msgid "Portuguese"
-msgstr ""
-
-#: paperless/settings.py:310
-msgid "Italian"
-msgstr ""
-
-#: paperless/settings.py:311
-msgid "Romanian"
-msgstr ""
-
-#: paperless/settings.py:312
-msgid "Russian"
-msgstr ""
-
-#: paperless/settings.py:313
-msgid "Spanish"
-msgstr ""
-
-#: paperless/settings.py:314
-msgid "Polish"
-msgstr ""
-
-#: paperless/settings.py:315
-msgid "Swedish"
-msgstr ""
-
-#: paperless/urls.py:120
-msgid "Paperless-ng administration"
-msgstr ""
-
-#: paperless_mail/admin.py:15
-msgid "Authentication"
-msgstr ""
-
-#: paperless_mail/admin.py:18
-msgid "Advanced settings"
-msgstr ""
-
-#: paperless_mail/admin.py:37
-msgid "Filter"
-msgstr ""
-
-#: paperless_mail/admin.py:39
-msgid "Paperless will only process mails that match ALL of the filters given below."
-msgstr ""
-
-#: paperless_mail/admin.py:49
-msgid "Actions"
-msgstr ""
-
-#: paperless_mail/admin.py:51
-msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched."
-msgstr ""
-
-#: paperless_mail/admin.py:58
-msgid "Metadata"
-msgstr ""
-
-#: paperless_mail/admin.py:60
-msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined."
-msgstr ""
-
-#: paperless_mail/apps.py:9
-msgid "Paperless mail"
-msgstr ""
-
-#: paperless_mail/models.py:11
-msgid "mail account"
-msgstr ""
-
-#: paperless_mail/models.py:12
-msgid "mail accounts"
-msgstr ""
-
-#: paperless_mail/models.py:19
-msgid "No encryption"
-msgstr ""
-
-#: paperless_mail/models.py:20
-msgid "Use SSL"
-msgstr ""
-
-#: paperless_mail/models.py:21
-msgid "Use STARTTLS"
-msgstr ""
-
-#: paperless_mail/models.py:29
-msgid "IMAP server"
-msgstr ""
-
-#: paperless_mail/models.py:33
-msgid "IMAP port"
-msgstr ""
-
-#: paperless_mail/models.py:36
-msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections."
-msgstr ""
-
-#: paperless_mail/models.py:40
-msgid "IMAP security"
-msgstr ""
-
-#: paperless_mail/models.py:46
-msgid "username"
-msgstr ""
-
-#: paperless_mail/models.py:50
-msgid "password"
-msgstr ""
-
-#: paperless_mail/models.py:54
-msgid "character set"
-msgstr ""
-
-#: paperless_mail/models.py:57
-msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'."
-msgstr ""
-
-#: paperless_mail/models.py:68
-msgid "mail rule"
-msgstr ""
-
-#: paperless_mail/models.py:69
-msgid "mail rules"
-msgstr ""
-
-#: paperless_mail/models.py:75
-msgid "Only process attachments."
-msgstr ""
-
-#: paperless_mail/models.py:76
-msgid "Process all files, including 'inline' attachments."
-msgstr ""
-
-#: paperless_mail/models.py:86
-msgid "Mark as read, don't process read mails"
-msgstr ""
-
-#: paperless_mail/models.py:87
-msgid "Flag the mail, don't process flagged mails"
-msgstr ""
-
-#: paperless_mail/models.py:88
-msgid "Move to specified folder"
-msgstr ""
-
-#: paperless_mail/models.py:89
-msgid "Delete"
-msgstr ""
-
-#: paperless_mail/models.py:96
-msgid "Use subject as title"
-msgstr ""
-
-#: paperless_mail/models.py:97
-msgid "Use attachment filename as title"
-msgstr ""
-
-#: paperless_mail/models.py:107
-msgid "Do not assign a correspondent"
-msgstr ""
-
-#: paperless_mail/models.py:109
-msgid "Use mail address"
-msgstr ""
-
-#: paperless_mail/models.py:111
-msgid "Use name (or mail address if not available)"
-msgstr ""
-
-#: paperless_mail/models.py:113
-msgid "Use correspondent selected below"
-msgstr ""
-
-#: paperless_mail/models.py:121
-msgid "order"
-msgstr ""
-
-#: paperless_mail/models.py:128
-msgid "account"
-msgstr ""
-
-#: paperless_mail/models.py:132
-msgid "folder"
-msgstr ""
-
-#: paperless_mail/models.py:134
-msgid "Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:138
-msgid "filter from"
-msgstr ""
-
-#: paperless_mail/models.py:141
-msgid "filter subject"
-msgstr ""
-
-#: paperless_mail/models.py:144
-msgid "filter body"
-msgstr ""
-
-#: paperless_mail/models.py:148
-msgid "filter attachment filename"
-msgstr ""
-
-#: paperless_mail/models.py:150
-msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
-msgstr ""
-
-#: paperless_mail/models.py:156
-msgid "maximum age"
-msgstr ""
-
-#: paperless_mail/models.py:158
-msgid "Specified in days."
-msgstr ""
-
-#: paperless_mail/models.py:161
-msgid "attachment type"
-msgstr ""
-
-#: paperless_mail/models.py:164
-msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter."
-msgstr ""
-
-#: paperless_mail/models.py:169
-msgid "action"
-msgstr ""
-
-#: paperless_mail/models.py:175
-msgid "action parameter"
-msgstr ""
-
-#: paperless_mail/models.py:177
-msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots."
-msgstr ""
-
-#: paperless_mail/models.py:184
-msgid "assign title from"
-msgstr ""
-
-#: paperless_mail/models.py:194
-msgid "assign this tag"
-msgstr ""
-
-#: paperless_mail/models.py:202
-msgid "assign this document type"
-msgstr ""
-
-#: paperless_mail/models.py:206
-msgid "assign correspondent from"
-msgstr ""
-
-#: paperless_mail/models.py:216
-msgid "assign this correspondent"
-msgstr ""
-
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-16 13:46\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Belarusian\n"
"Language: be_BY\n"
msgid "Documents"
msgstr "Дакументы"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Любое слова"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Усе словы"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Дакладнае супадзенне"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Рэгулярны выраз"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Невыразнае слова"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Аўтаматычна"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "назва"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "супадзенне"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "алгарытм супастаўлення"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "без уліку рэгістра"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "карэспандэнт"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "карэспандэнты"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "колер"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "гэта ўваходны тэг"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Пазначыць гэты тэг як тэг папкі \"Уваходныя\": Усе нядаўна спажытыя дакументы будуць пазначаны тэгамі \"Уваходныя\"."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "тэг"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "тэгі"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "тып дакумента"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "тыпы дакументаў"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "шлях"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "шлях захоўвання"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "шляхі захоўвання"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Незашыфраваны"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Зашыфравана з дапамогай GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "назва"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "змест"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Неапрацаваныя тэкставыя даныя дакумента. Гэта поле ў асноўным выкарыстоўваецца для пошуку."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "тып MIME"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "кантрольная сума"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Кантрольная сума зыходнага дакумента."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "кантрольная сума архіва"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Кантрольная сума архіўнага дакумента."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "створаны"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "мадыфікаваны"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "тып захоўвання"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "дададзена"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "імя файла"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Цяперашняе імя файла ў сховішчы"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "імя файла архіва"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Цяперашняе імя файла архіва ў сховішчы"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "парадкавы нумар архіва"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Пазіцыя гэтага дакумента ў вашым фізічным архіве дакументаў."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "дакумент"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "дакументы"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "адладка"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "інфармацыя"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "папярэджанне"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "памылка"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "крытычны"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "група"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "паведамленне"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "узровень"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "лог"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "логі"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "захаваны выгляд"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "захаваныя выгляды"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "карыстальнік"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "паказаць на панэлі"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "паказаць у бакавой панэлі"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "поле сартавання"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "сартаваць у адваротным парадку"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "назва змяшчае"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "змест змяшчае"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "карэспандэнт"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "тып дакумента"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "ва ўваходных"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "мае тэг"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "мае любы тэг"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "створана перад"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "створана пасля"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "год стварэння"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "месяц стварэння"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "дзень стварэння"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "даданы перад"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "даданы пасля"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "зменены перад"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "зменены пасля"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "не мае тэга"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "не мае ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "назва або змест смяшчае"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "поўнатэкставы запыт"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "больш падобнага"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "мае тэгі ў"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "тып правіла"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "значэнне"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "правіла фільтрацыі"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "правілы фільтрацыі"
-#: documents/models.py:521
-msgid "started"
-msgstr "пачата"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Няправільны рэгулярны выраз: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Няправільны колер."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Тып файла %(type)s не падтрымліваецца"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Выяўлена няправільная зменная."
msgid "Sign in"
msgstr "Увайсці"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Англійская (ЗША)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Беларуская"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Чэшская"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Дацкая"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Нямецкая"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Англійская (Вялікабрытанія)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Іспанская"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Французская"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Італьянская"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Люксембургская"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Нідэрландская"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Польская"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Партугальская (Бразілія)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Партугальская"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Румынская"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Руская"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Славенская"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Сербская"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Шведская"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Турэцкая"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Кітайская спрошчаная"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-18 20:06\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
msgid "Documents"
msgstr "Dokumenty"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Jakékoliv slovo"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Všechna slova"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Přesná shoda"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regulární výraz"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Fuzzy slovo"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatický"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "název"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "shoda"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritmus pro shodu"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "je ignorováno"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korespondenti"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "barva"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "tag přichozí"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Označí tento tag jako tag pro příchozí: Všechny nově zkonzumované dokumenty budou označeny tagem pro přichozí"
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "tagy"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "tagy"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "typ dokumentu"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "typy dokumentu"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "cesta"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "cesta k úložišti"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "cesta k úložišti"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Nešifrované"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Šifrované pomocí GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titulek"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "obsah"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Nezpracovaná, pouze textová data dokumentu. Toto pole je používáno především pro vyhledávání."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime typ"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrolní součet"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrolní součet původního dokumentu"
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "kontrolní součet archivu"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrolní součet archivovaného dokumentu."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "vytvořeno"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "upraveno"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "typ úložiště"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "přidáno"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "název souboru"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Aktuální název souboru v úložišti"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "Název archivovaného souboru"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Aktuální název souboru archivu v úložišti"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "sériové číslo archivu"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Pozice dokumentu ve vašem archivu fyzických dokumentů"
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenty"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "ladění"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informace"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "varování"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "chyba"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritická"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "skupina"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "zpráva"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "úroveň"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "záznam"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "záznamy"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "uložený pohled"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "uložené pohledy"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "uživatel"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "zobrazit v dashboardu"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "zobrazit v postranním menu"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "pole na řazení"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "třídit opačně"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "titulek obsahuje"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "obsah obsahuje"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN je"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "korespondent je"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "typ dokumentu je"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "je v příchozích"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "má tag"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "má jakýkoliv tag"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "vytvořeno před"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "vytvořeno po"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "rok vytvoření je"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "měsíc vytvoření je"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "den vytvoření je"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "přidáno před"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "přidáno po"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "upraveno před"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "upraveno po"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "nemá tag"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "Nemá ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "Titulek nebo obsah obsahuje"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "Fulltextový dotaz"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "Podobné"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "má značky v"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "typ pravidla"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "hodnota"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtrovací pravidlo"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtrovací pravidla"
-#: documents/models.py:521
-msgid "started"
-msgstr "zahájeno"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Neplatný regulární výraz: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Neplatná barva."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Typ souboru %(type)s není podporován"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Zjištěna neplatná proměnná."
msgid "Sign in"
msgstr "Přihlásit se"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Angličtina (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Běloruština"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Čeština"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dánština"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Němčina"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Angličtina (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Španělština"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francouzština"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italština"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Lucemburština"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Holandština"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polština"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugalština (Brazílie)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugalština"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumunština"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ruština"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovinština"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Srbština"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Švédština"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turečtina"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Čínština (zjednodušená)"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\n"
msgid "Documents"
msgstr "Dokumenter"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Ethvert ord"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Alle ord"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Præcis match"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regulær udtryk"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Tilnærmet ord"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatisk"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "navn"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "match"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "matching algoritme"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "er usensitiv"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korrespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korrespondenter"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "farve"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "er indbakkeetiket"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Markerer denne etiket som en indbakkeetiket: Alle ny-bearbejdede dokumenter vil blive mærket med indbakkeetiketter."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etiket"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiketter"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "dokumenttype"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "dokumenttyper"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Ukrypteret"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Krypteret med GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "indhold"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Dokumentets rå tekstdata. Dette felt bruges primært til søgning."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "MIME-type"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrolsum"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrolsummen af det oprindelige dokument."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arkiv kontrolsum"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrolsummen af det arkiverede dokument."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "oprettet"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "ændret"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "lagringstype"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "tilføjet"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "filnavn"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nuværende filnavn lagret"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "arkiv filnavn"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nuværende arkivfilnavn lagret"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arkiv serienummer"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Placeringen af dette dokument i dit fysiske dokumentarkiv."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenter"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "fejlfinding"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "information"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "advarsel"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "fejl"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritisk"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "gruppe"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "besked"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "niveau"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "log"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logninger"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "gemt visning"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "gemte visninger"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "bruger"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "vis på betjeningspanel"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "vis i sidepanelet"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sortér felt"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "sortér omvendt"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "titel indeholder"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "indhold indeholder"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN er"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "korrespondent er"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "dokumenttype er"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "er i indbakke"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "har etiket"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "har en etiket"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "oprettet før"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "oprettet efter"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "oprettet år er"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "oprettet måned er"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "oprettet dag er"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "tilføjet før"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "tilføjet efter"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "ændret før"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "ændret efter"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "har ikke nogen etiket"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "har ikke ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "titel eller indhold indeholder"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "fuldtekst forespørgsel"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mere som dette"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "har etiketter i"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "regeltype"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "værdi"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtreringsregel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtreringsregler"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ugyldigt regulært udtryk: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ugyldig farve."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Filtype %(type)s understøttes ikke"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr ""
msgid "Sign in"
msgstr "Log ind"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engelsk (USA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tjekkisk"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dansk"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Tysk"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engelsk (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spansk"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Fransk"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiensk"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburgsk"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Hollandsk"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polsk"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugisisk (Brasilien)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugisisk"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Romansk"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russisk"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Svensk"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-04 11:44\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-26 20:28\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
msgid "Documents"
msgstr "Dokumente"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Irgendein Wort"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Alle Wörter"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Exakte Übereinstimmung"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regulärer Ausdruck"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Ungenaues Wort"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatisch"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "Name"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "Zuweisungsmuster"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "Zuweisungsalgorithmus"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "Groß-/Kleinschreibung irrelevant"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "Korrespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "Korrespondenten"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "Farbe"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "Posteingangs-Tag"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit diesem Tag versehen."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "Tag"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "Tags"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "Dokumenttyp"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "Dokumenttypen"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "Pfad"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "Speicherpfad"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "Speicherpfade"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Nicht verschlüsselt"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Durch GNU Privacy Guard verschlüsselt"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "Titel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "Inhalt"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche verwendet."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "MIME-Typ"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "Prüfsumme"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Die Prüfsumme des originalen Dokuments."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "Archiv-Prüfsumme"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Die Prüfsumme des archivierten Dokuments."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "Erstellt"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "Geändert"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "Speichertyp"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "Hinzugefügt"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "Dateiname"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Aktueller Dateiname im Datenspeicher"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "Archiv-Dateiname"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Aktueller Dateiname im Archiv"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "Original-Dateiname"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Der Originalname der Datei beim Hochladen"
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "Archiv-Seriennummer"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "Dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "Dokumente"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "Debug"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "Information"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "Warnung"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "Fehler"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "Kritisch"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "Gruppe"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "Nachricht"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "Level"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "Protokoll"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "Protokoll"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "Gespeicherte Ansicht"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "Gespeicherte Ansichten"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "Benutzer"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "Auf Startseite zeigen"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "In Seitenleiste zeigen"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "Sortierfeld"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "Umgekehrte Sortierung"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "Titel enthält"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "Inhalt enthält"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN ist"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "Korrespondent ist"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "Dokumenttyp ist"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "Ist im Posteingang"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "Hat Tag"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "Hat irgendein Tag"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "Ausgestellt vor"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "Ausgestellt nach"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "Ausgestellt im Jahr"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "Ausgestellt im Monat"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "Ausgestellt am Tag"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "Hinzugefügt vor"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "Hinzugefügt nach"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "Geändert vor"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "Geändert nach"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "Hat nicht folgendes Tag"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "Dokument hat keine ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "Titel oder Inhalt enthält"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "Volltextsuche"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "Ähnliche Dokumente"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "hat Tags in"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN größer als"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN kleiner als"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "Speicherpfad ist"
+
+#: documents/models.py:422
msgid "rule type"
msgstr "Regeltyp"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "Wert"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "Filterregel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "Filterregeln"
-#: documents/models.py:521
-msgid "started"
-msgstr "gestartet"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "Aufgaben ID"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery-ID für die ausgeführte Aufgabe"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Bestätigt"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Wenn die Aufgabe über das Frontend oder die API bestätigt wird"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Aufgabenname"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Name der Datei, für die die Aufgabe ausgeführt wurde"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Name der ausgeführten Aufgabe"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr "Aufgabe: Positionsargumente"
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr "JSON-Darstellung der Positionsargumente, die für die Aufgabe verwendet werden"
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr "Aufgabe: Benannte Argumente"
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr "JSON-Darstellung der benannten Argumente, die für die Aufgabe verwendet werden"
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Aufgabe: Status"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr "Aktueller Status der laufenden Aufgabe"
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr "Erstellungsdatum/-zeit"
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr "Zeitpunkt, an dem das Ergebnis der Aufgabe erstellt wurde (in UTC)"
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr "Startzeitpunk"
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr "Zeitpunkt, als die Aufgabe erstellt wurde (in UTC)"
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr "Abgeschlossen Zeitpunkt"
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr "Zeitpunkt, an dem die Aufgabe abgeschlossen wurde (in UTC)"
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr "Ergebnisse"
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Die von der Aufgabe zurückgegebenen Daten"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Kommentar zu diesem Dokument"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "Kommentar"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "Kommentare"
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ungültiger regulärer Ausdruck: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ungültige Farbe."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Dateityp %(type)s nicht unterstützt"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Ungültige Variable entdeckt."
msgid "Sign in"
msgstr "Anmelden"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Englisch (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Belarussisch"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tschechisch"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dänisch"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Deutsch"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Englisch (UK)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spanisch"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Französisch"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italienisch"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburgisch"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Niederländisch"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polnisch"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugiesisch (Brasilien)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugiesisch"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumänisch"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russisch"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slowenisch"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbisch"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Schwedisch"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Türkisch"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Vereinfachtes Chinesisch"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
msgid "Documents"
msgstr "Documentos"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Cualquier palabra"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Todas las palabras"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Coincidencia exacta"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Expresión regular"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Palabra borrosa"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automático"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nombre"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "coincidencia"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "Algoritmo de coincidencia"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "es insensible"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "interlocutor"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "interlocutores"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "color"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "es etiqueta de bandeja"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Marca esta etiqueta como una etiqueta de bandeja: todos los documentos recién consumidos serán etiquetados con las etiquetas de bandeja."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etiqueta"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiquetas"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tipo de documento"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipos de documento"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "ruta"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "ruta de almacenamiento"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "rutas de almacenamiento"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Sin cifrar"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Cifrado con GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "título"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "contenido"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Los datos de texto en bruto del documento. Este campo se utiliza principalmente para las búsquedas."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "tipo MIME"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "Cadena de verificación"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "La cadena de verificación del documento original."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "cadena de comprobación del archivo"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "La cadena de verificación del documento archivado."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "creado"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificado"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tipo de almacenamiento"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "añadido"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nombre del archivo"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nombre de archivo actual en disco"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nombre de archivo"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nombre de archivo actual en disco"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "número de serie del archivo"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Posición de este documento en tu archivo físico de documentos."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "documento"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documentos"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "depuración"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "información"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "alerta"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "error"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "crítico"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupo"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "mensaje"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivel"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "log"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logs"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "vista guardada"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "vistas guardadas"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "usuario"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "mostrar en el panel de control"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "mostrar en barra lateral"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "campo de ordenación"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "ordenar al revés"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "el título contiene"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "el contenido contiene"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN es"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "interlocutor es"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "el tipo de documento es"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "está en la bandeja de entrada"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "tiene la etiqueta"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "tiene cualquier etiqueta"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "creado antes"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "creado después"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "el año de creación es"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "el mes de creación es"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "creado el día"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "agregado antes de"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "agregado después de"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificado después de"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificado antes de"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "no tiene la etiqueta"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "no tiene ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "el título o cuerpo contiene"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "consulta de texto completo"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "más contenido similar"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "tiene etiquetas en"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tipo de regla"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valor"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "regla de filtrado"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "reglas de filtrado"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Expresión irregular inválida: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Color inválido."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tipo de fichero %(type)s no suportado"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Variable inválida."
msgid "Sign in"
msgstr "Iniciar sesión"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Inglés (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Bielorruso"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Checo"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danés"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Alemán"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Inglés (Gran Bretaña)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Español"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francés"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiano"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburgués"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Alemán"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polaco"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugués (Brasil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugués"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumano"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ruso"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Esloveno"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbio"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Sueco"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turco"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Chino simplificado"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-06 20:21\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\n"
msgid "Documents"
msgstr "Dokumentit"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Mikä tahansa sana"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Kaikki sanat"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Tarkka osuma"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Säännöllinen lauseke (regex)"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Sumea sana"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automaattinen"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nimi"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "osuma"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "tunnistusalgoritmi"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "ei ole herkkä"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "yhteyshenkilö"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "yhteyshenkilöt"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "väri"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "on uusien tunniste"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Merkitsee tämän tunnisteen uusien tunnisteeksi: Kaikille vastasyötetyille tiedostoille annetaan tämä tunniste."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "tunniste"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "tunnisteet"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "asiakirjatyyppi"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "asiakirjatyypit"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "polku"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "tallennustilan polku"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "tallennustilan polut"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Salaamaton"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "GNU Privacy Guard -salattu"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "otsikko"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "sisältö"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Raaka vain teksti -muotoinen dokumentin sisältö. Kenttää käytetään pääasiassa hakutoiminnossa."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime-tyyppi"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "tarkistussumma"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Alkuperäisen dokumentin tarkistussumma."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arkistotarkastussumma"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Arkistoidun dokumentin tarkistussumma."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "luotu"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "muokattu"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tallennustilan tyyppi"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "lisätty"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "tiedostonimi"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Tiedostonimi tallennustilassa"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "arkistointitiedostonimi"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Tämänhetkinen arkistointitiedostoimi tallennustilassa"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arkistointisarjanumero"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Dokumentin sijainti fyysisessa dokumenttiarkistossa."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokumentti"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumentit"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "virheenjäljitys"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informaatio"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "varoitus"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "virhe"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kriittinen"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "ryhmä"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "viesti"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "taso"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "loki"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "lokit"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "tallennettu näkymä"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "tallennetut näkymät"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "käyttäjä"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "näytä etusivulla"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "näytä sivupaneelissa"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "lajittelukenttä"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "lajittele käänteisesti"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "otsikko sisältää"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "sisältö sisältää"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN on"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "yhteyshenkilö on"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "dokumenttityyppi on"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "on uusi"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "on tagattu"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "on mikä tahansa tagi"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "luotu ennen"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "luotu jälkeen"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "luotu vuonna"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "luotu kuukautena"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "luomispäivä on"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "lisätty ennen"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "lisätty jälkeen"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "muokattu ennen"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "muokattu jälkeen"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "ei ole tagia"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "ei ole ASN-numeroa"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "otsikko tai sisältö sisältää"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "fulltext-kysely"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "enemmän kuten tämä"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "sisältää tagit"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "sääntötyyppi"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "arvo"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "suodatussääntö"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "suodatussäännöt"
-#: documents/models.py:521
-msgid "started"
-msgstr "aloitettu"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Virheellinen regex-lauseke: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Virheellinen väri."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tiedostotyyppiä %(type)s ei tueta"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Virheellinen muuttuja havaittu."
msgid "Sign in"
msgstr "Kirjaudu sisään"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Englanti (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "valkovenäjä"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tšekki"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Tanska"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Saksa"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Englanti (US)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Espanja"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Ranska"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italia"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburg"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Hollanti"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "puola"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "portugali (Brasilia)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "portugali"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "romania"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "venäjä"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovenia"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbia"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "ruotsi"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turkki"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Kiina (yksinkertaistettu)"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-09-07 21:41\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
msgid "Documents"
msgstr "Documents"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Un des mots"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Tous les mots"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Concordance exacte"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Expression régulière"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Mot approximatif"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatique"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nom"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "rapprochement"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algorithme de rapprochement"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "est insensible à la casse"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "correspondant"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "correspondants"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "couleur"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "est une étiquette de boîte de réception"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Marque cette étiquette comme étiquette de boîte de réception : ces étiquettes sont affectées à tous les documents nouvellement traités."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "étiquette"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "étiquettes"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "type de document"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "types de document"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "chemin"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "chemin de stockage"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "chemins de stockage"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Non chiffré"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Chiffré avec GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titre"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "contenu"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Les données brutes du document, en format texte uniquement. Ce champ est principalement utilisé pour la recherche."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "type mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "somme de contrôle"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "La somme de contrôle du document original."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "somme de contrôle de l'archive"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "La somme de contrôle du document archivé."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "créé le"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modifié"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "forme d'enregistrement :"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "date d'ajout"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nom du fichier"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nom du fichier courant en base de données"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nom de fichier de l'archive"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nom du fichier d'archive courant en base de données"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "numéro de série de l'archive"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Le classement de ce document dans votre archive de documents physiques."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "document"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documents"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "débogage"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informations"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "avertissement"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "erreur"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "critique"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "groupe"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "message"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "niveau"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "journal"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "journaux"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "vue enregistrée"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "vues enregistrées"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "utilisateur"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "montrer sur le tableau de bord"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "montrer dans la barre latérale"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "champ de tri"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "tri inverse"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "le titre contient"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "le contenu contient"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "le NSA est"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "le correspondant est"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "le type de document est"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "est dans la boîte de réception"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "porte l'étiquette"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "porte l'une des étiquettes"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "créé avant"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "créé après"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "l'année de création est"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "le mois de création est"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "le jour de création est"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "ajouté avant"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "ajouté après"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modifié avant"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modifié après"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "ne porte pas d'étiquette"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "ne porte pas de NSA"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "le titre ou le contenu contient"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "recherche en texte intégral"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "documents relatifs"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "porte une étiquette parmi"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "type de règle"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valeur"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "règle de filtrage"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "règles de filtrage"
-#: documents/models.py:521
-msgid "started"
-msgstr "démarré"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Expression régulière incorrecte : %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Couleur incorrecte."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Type de fichier %(type)s non pris en charge"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Variable non valide détectée."
msgid "Sign in"
msgstr "S'identifier"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Anglais (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Biélorusse"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tchèque"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danois"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Allemand"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Anglais (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Espagnol"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Français"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italien"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxembourgeois"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Néerlandais"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polonais"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugais (Brésil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugais"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Roumain"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russe"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovène"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbe"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Suédois"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turc"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Chinois simplifié"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:06\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\n"
msgid "Documents"
msgstr "מסמכים"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "מילה כלשהי"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "כל המילים"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "התאמה מדוייקת"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "ביטוי רגולרי"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "מילה מעורפלת"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "אוטומטי"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "שם"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "התאמה"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "אלגוריתם התאמה"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "אינו רגיש"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "מכותב"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "מכותבים"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "צבע"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "תגית דואר נכנס"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "מסמן תגית זו כתגית דואר נכנס: כל המסמכים החדשים שהתקבלו יתויגו עם תגית דואר נכנס."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "תגית"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "תגיות"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "סוג מסמך"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "סוגי מסמך"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "נתיב"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "נתיב אכסון"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "נתיבי אכסון"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "לא מוצפן"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "הוצפן באמצעות GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "כותרת"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "תוכן"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "הנתונים הגולמיים של המסמך, המכילים טקסט בלבד. שדה זה משמש בעיקר לצורך חיפוש."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "סוג mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "מחרוזת בדיקה"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "מחרוזת בדיקה של המסמך המקורי."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "מחרוזת בדיקה לארכיון"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "מחרוזת הבדיקה למסמך בארכיון."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "נוצר"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "נערך לאחרונה"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "סוג אחסון"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "התווסף"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "שם קובץ"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "שם קובץ נוכחי באחסון"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "שם קובץ בארכיון"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "שם קובץ ארכיוני נוכחי באחסון"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "מספר סידורי בארכיון"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "מיקומו של מסמך זה בארכיון המסמכים הפיזי שלך."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "מסמך"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "מסמכים"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "ניפוי שגיאות"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "מידע"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "אזהרה"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "שגיאה"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "קריטי"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "קבוצה"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "הודעה"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "רמה"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "יומן רישום"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "יומני רישום"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "תצוגה שמורה"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "תצוגות שמורות"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "משתמש"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "הצג בדשבורד"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "הצג בסרגל צידי"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "שדה המיון"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "מיין הפוך"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "כותרת מכילה"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "תוכן מכיל"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "מס\"ד הוא"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "מכותב הוא"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "סוג מסמך הוא"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "בתיבה הנכנסת"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ישנו תיוג"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ישנו כל תיוג"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "נוצר לפני"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "נוצר לאחר"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "נוצר בשנת"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "נוצר בחודש"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "נוצר ביום"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "הוסף לפני"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "הוסף אחרי"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "נערך לפני"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "נערך אחרי"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "אינו כולל את התיוג"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "אינו בעל מס\"ד"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "כותרת או תוכן מכילים"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "שאילתת טקסט מלא"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "עוד כמו זה"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "מכיל תגים ב-"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "סוג כלל"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "ערך"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "חוק סינון"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "חוקי סינון"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "ביטוי רגולרי בלתי חוקי: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "צבע לא חוקי."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "סוג קובץ %(type)s לא נתמך"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "משתנה לא חוקי זוהה."
msgid "Sign in"
msgstr "התחבר"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "אנגלית (ארה\"ב)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "בלרוסית"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "צ'כית"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "דנית"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "גרמנית"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "אנגלית (בריטניה)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "ספרדית"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "צרפתית"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "איטלקית"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "לוקסמבורגית"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "הולנדית"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "פולנית"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "פורטוגזית (ברזיל)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "פורטוגזית"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "רומנית"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "רוסית"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "סלובנית"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "סרבית"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "שוודית"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "טורקית"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "סינית מופשטת"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-09 12:27\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
"Last-Translator: \n"
"Language-Team: Croatian\n"
"Language: hr_HR\n"
msgid "Documents"
msgstr "Dokumenti"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Bilo koja riječ"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Sve riječi"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Točno podudaranje"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Uobičajeni izraz"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Nejasna riječ"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatski"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "ime"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "podudarati"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritam podudaranja"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "ne razlikuje velika i mala slova"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "dopisnik"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "dopisnici"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "boja"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "oznaka ulazne pošte (inbox)"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Označava ovu oznaku kao oznaku ulazne pošte (inbox): Svi novopotrošeni dokumenti bit će označeni oznakama ulazne pošte (inbox)."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "oznaka"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "oznake"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "vrsta dokumenta"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "vrste dokumenta"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "putanja"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "putanja pohrane"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "putanje pohrane"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Nekriptirano"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Enkriptirano s GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "naslov"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "sadržaj"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Neobrađeni tekstualni podaci dokumenta. Ovo se polje koristi prvenstveno za pretraživanje."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "vrste mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrolni zbroj"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrolni zbroj originalnog dokumenta."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arhivski kontrolni zbroj"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrolni zbroj arhiviranog dokumenta."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "stvoreno"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificiran"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "vrsta pohrane"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "dodano"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "naziv datoteke"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Trenutni naziv pohranjene datoteke"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "naziv arhivirane datoteke"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Trenutni naziv arhivirane pohranjene datoteke"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arhivirani serijski broj"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Položaj ovog dokumenta u vašoj fizičkoj arhivi dokumenata."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenti"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "otklanjanje pogrešaka"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informacije"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "upozorenje"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "greška"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritično"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupa"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "poruka"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "razina"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "zapisnik"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "zapisnici"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "spremljen prikaz"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "spremljeni prikazi"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "korisnik"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "prikaži na nadzornoj ploči"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "prikaži u bočnoj traci"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sortiraj polje"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "obrnuto sortiranje"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "naslov sadrži"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "sadržaj sadrži"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN je"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "dopisnik je"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "vrsta dokumenta je"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "nalazi se u ulaznoj pošti"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ima oznaku"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ima bilo kakvu oznaku"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "stvoreni prije"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "stvoreno poslije"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "godina stvaranja je"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "mjesec stvaranja je"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dan stvaranja je"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "dodano prije"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "dodano poslije"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificirano prije"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificirano poslije"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "ne posjeduje oznaku"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "ne posjeduje ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "naziv ili sadržaj sadrži"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "upit za cijeli tekst"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "više poput ovog"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "sadrži oznake"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "vrsta pravila"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "vrijednost"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "pravilo filtera"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "pravila filtera"
-#: documents/models.py:521
-msgid "started"
-msgstr "započeto"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Nevažeći regularni izraz: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Nevažeća boja."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s nije podržana"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Otkrivena je nevaljana vrsta datoteke."
msgid "Sign in"
msgstr "Prijava"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engleski (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Bjeloruski"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Češki"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danski"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Njemački"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engleski (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Španjolski"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francuski"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Talijanski"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luksemburški"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Nizozemski"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Poljski"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugalski (Brazil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugalski"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumunjski"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ruski"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovenski"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Srpski"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Švedski"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turski"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Pojednostavljeni kineski"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 11:24\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-12 10:50\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
msgid "Documents"
msgstr "Documenti"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Qualsiasi parola"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Tutte le parole"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Corrispondenza esatta"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Espressione regolare"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Parole fuzzy"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatico"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nome"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "corrispondenza"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritmo di corrispondenza"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "non distingue maiuscole e minuscole"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "corrispondente"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "corrispondenti"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "colore"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "è tag di arrivo"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati verranno taggati con questo tag."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "tag"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "tag"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tipo di documento"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipi di documento"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "percorso"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "percorso di archiviazione"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "percorsi di archiviazione"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Non criptato"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Criptato con GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titolo"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "contenuto"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "I dati grezzi o solo testo del documento. Questo campo è usato principalmente per la ricerca."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "tipo mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "checksum"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Il checksum del documento originale."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "checksum dell'archivio"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Il checksum del documento archiviato."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "creato il"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificato il"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tipo di storage"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "aggiunto il"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nome del file"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nome del file corrente nello storage"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "Nome file in archivio"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Il nome del file nell'archiviazione"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "nome file originale"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Il nome originale del file quando è stato caricato"
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "numero seriale dell'archivio"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Posizione di questo documento all'interno dell'archivio fisico."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "documento"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documenti"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "debug"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informazione"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "avvertimento"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "errore"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "critico"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "gruppo"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "messaggio"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "livello"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "logs"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "log"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "vista salvata"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "viste salvate"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "utente"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "mostra sul cruscotto"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "mostra nella barra laterale"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "campo di ordinamento"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "ordine invertito"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "il titolo contiene"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "il contenuto contiene"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN è"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "la corrispondenza è"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "il tipo di documento è"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "è in arrivo"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ha etichetta"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ha qualsiasi etichetta"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "creato prima del"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "creato dopo il"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "l'anno di creazione è"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "il mese di creazione è"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "il giorno di creazione è"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "aggiunto prima del"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "aggiunto dopo il"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificato prima del"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificato dopo"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "non ha tag"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "non ha ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "il titolo o il contenuto contiene"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "query fulltext"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "altro come questo"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "ha tag in"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN maggiore di"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN minore di"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "il percorso di archiviazione è"
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tipo di regola"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valore"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "regola filtro"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "regole filtro"
-#: documents/models.py:521
-msgid "started"
-msgstr "avviato"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID Attività"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "commento"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "commenti"
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Espressione regolare non valida: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Colore non valido."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Il tipo di file %(type)s non è supportato"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Variabile non valida."
msgid "Sign in"
msgstr "Accedi"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Inglese (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Bielorusso"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Ceco"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danese"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Tedesco"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Inglese (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spagnolo"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francese"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiano"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Lussemburghese"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Olandese"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polacco"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portoghese (Brasile)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portoghese"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumeno"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russo"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Sloveno"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbo"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Svedese"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turco"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Cinese semplificato"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
"Last-Translator: \n"
"Language-Team: Luxembourgish\n"
"Language: lb_LU\n"
msgid "Documents"
msgstr "Dokumenter"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Iergendee Wuert"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "All d'Wierder"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Exakten Treffer"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regulären Ausdrock"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Ongenaut Wuert"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatesch"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "Numm"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "Zouweisungsmuster"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "Zouweisungsalgorithmus"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "Grouss-/Klengschreiwung ignoréieren"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "Korrespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "Korrespondenten"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "Faarf"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "Postaganks-Etikett"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Dës Etikett als Postaganks-Etikett markéieren: All nei importéiert Dokumenter kréien ëmmer dës Etikett zougewisen."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "Etikett"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "Etiketten"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "Dokumententyp"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "Dokumententypen"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "Pfad"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "Späicherpfad"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "Späicherpfaden"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Onverschlësselt"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Verschlësselt mat GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "Titel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "Inhalt"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "De réien Textinhalt vum Dokument. Dëst Feld gëtt primär fir d'Sich benotzt."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "MIME-Typ"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "Préifzomm"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "D'Préifzomm vum Original-Dokument."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "Archiv-Préifzomm"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "D'Préifzomm vum archivéierten Dokument."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "erstallt"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "verännert"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "Späichertyp"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "derbäigesat"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "Fichiersnumm"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Aktuellen Dateinumm am Späicher"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "Archiv-Dateinumm"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Aktuellen Dateinumm am Archiv"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "Archiv-Seriennummer"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "D'Positioun vun dësem Dokument am physeschen Dokumentenarchiv."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "Dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "Dokumenter"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "Fehlersiich"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "Informatioun"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "Warnung"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "Feeler"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritesch"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "Grupp"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "Message"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "Niveau"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "Protokoll"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "Protokoller"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "Gespäichert Usiicht"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "Gespäichert Usiichten"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "Benotzer"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "Op der Startsäit uweisen"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "An der Säiteleescht uweisen"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "Zortéierfeld"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "ëmgedréint zortéieren"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "Titel enthält"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "Inhalt enthält"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN ass"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "Korrespondent ass"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "Dokumententyp ass"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "ass am Postagank"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "huet Etikett"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "huet iergendeng Etikett"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "erstallt virun"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "erstallt no"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "Erstellungsjoer ass"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "Erstellungsmount ass"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "Erstellungsdag ass"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "dobäigesat virun"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "dobäigesat no"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "verännert virun"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "verännert no"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "huet dës Etikett net"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "huet keng ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "Titel oder Inhalt enthalen"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "Volltextsich"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "ähnlech Dokumenter"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "huet Etiketten an"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "Reegeltyp"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "Wäert"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "Filterreegel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "Filterreegelen"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ongëltege regulären Ausdrock: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ongëlteg Faarf."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Fichierstyp %(type)s net ënnerstëtzt"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Ongëlteg Zeechen detektéiert."
msgid "Sign in"
msgstr "Umellen"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Englesch (USA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Belarusesch"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tschechesch"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dänesch"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Däitsch"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Englesch (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spuenesch"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Franséisch"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italienesch"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Lëtzebuergesch"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Hollännesch"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polnesch"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugisesch (Brasilien)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugisesch"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumänesch"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russesch"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slowenesch"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbesch"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Schwedesch"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Tierkesch"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Chinesesch (Vereinfacht)"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-10-27 09:51\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
msgid "Documents"
msgstr "Documenten"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Elk woord"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Alle woorden"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Exacte overeenkomst"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Reguliere expressie"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Gelijkaardig woord"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatisch"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "naam"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "Overeenkomst"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "Algoritme voor het bepalen van de overeenkomst"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "is niet hoofdlettergevoelig"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "correspondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "correspondenten"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "Kleur"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "is \"Postvak in\"-label"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Markeert dit label als een \"Postvak in\"-label: alle nieuw verwerkte documenten krijgen de \"Postvak in\"-labels."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "label"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "labels"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "documenttype"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "documenttypen"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "pad"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "opslag pad"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "opslag paden"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Niet versleuteld"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Versleuteld met GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "inhoud"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk gebruikt om te zoeken."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mimetype"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "checksum"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "De checksum van het oorspronkelijke document."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "archief checksum"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "De checksum van het gearchiveerde document."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "aangemaakt"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "gewijzigd"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "type opslag"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "toegevoegd"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "bestandsnaam"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Huidige bestandsnaam in opslag"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "Bestandsnaam in archief"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Huidige bestandsnaam in archief"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "serienummer in archief"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "De positie van dit document in je fysieke documentenarchief."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "document"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documenten"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "debug"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informatie"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "waarschuwing"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "fout"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritisch"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "groep"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "bericht"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "niveau"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "bericht"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "berichten"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "opgeslagen view"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "opgeslagen views"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "gebruiker"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "weergeven op dashboard"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "weergeven in zijbalk"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sorteerveld"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "omgekeerd sorteren"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "titel bevat"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "inhoud bevat"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN is"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "correspondent is"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "documenttype is"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "zit in \"Postvak in\""
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "heeft label"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "heeft één van de labels"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "aangemaakt voor"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "aangemaakt na"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "aangemaakt jaar is"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "aangemaakte maand is"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "aangemaakte dag is"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "toegevoegd voor"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "toegevoegd na"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "gewijzigd voor"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "gewijzigd na"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "heeft geen label"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "heeft geen ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "titel of inhoud bevat"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "inhoud doorzoeken"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "meer zoals dit"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "heeft tags in"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "type regel"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "waarde"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filterregel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filterregels"
-#: documents/models.py:521
-msgid "started"
-msgstr "gestart"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ongeldige reguliere expressie: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ongeldig kleur."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Bestandstype %(type)s niet ondersteund"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Ongeldige variabele ontdekt."
msgid "Sign in"
msgstr "Aanmelden"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engels (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Wit-Russisch"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tsjechisch"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Deens"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Duits"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engels (Brits)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spaans"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Frans"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiaans"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburgs"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Nederlands"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Pools"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugees (Brazilië)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugees"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Roemeens"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russisch"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Sloveens"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Servisch"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Zweeds"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turks"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Chinees (vereenvoudigd)"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 08:59\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-29 08:29\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\n"
msgid "Documents"
msgstr "Dokumenter"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Hvilket som helst ord"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Alle ord"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Eksakt match"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regulære uttrykk"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Fuzzy word"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatisk"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "navn"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "treff"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "samsvarende algoritme"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "er insensitiv"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korrespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korrespondenter"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "farge"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "er innboks tag"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Markerer dette merket som en innboks-tag: Alle nybrukte dokumenter vil bli merket med innboks-tagger."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "tagg"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "tagger"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "dokument type"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "dokumenttyper"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "sti"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "lagringssti"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "lagringsveier"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Ukryptert"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Kryptert med GNU Personvernvakt"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "tittel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "innhold"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Raw, tekstbare data fra dokumentet. Dette feltet brukes primært for søking."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime type"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "sjekksum"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Sjekksummen av det opprinnelige dokumentet."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arkiv sjekksum"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Sjekksummen av det arkiverte dokumentet."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "opprettet"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "endret"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "lagringstype"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "lagt til"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "filnavn"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Gjeldende filnavn i lagring"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "arkiver filnavn"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Gjeldende arkiv filnavn i lagring"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "opprinnelig filnavn"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Det opprinnelige filnavnet da den ble lastet opp"
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arkiver serienummer"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Dokumentets posisjon i ditt fysiske dokumentarkiv."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenter"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "feilsøk"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informasjon"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "advarsel"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "feil"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritisk"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "gruppe"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "melding"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivå"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "Logg"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logger"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "lagret visning"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "lagrede visninger"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "bruker"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "vis på dashbordet"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "vis i sidestolpen"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sorter felt"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "sorter på baksiden"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "tittelen inneholder"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "innholdet inneholder"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN er"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "tilsvarendet er"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "dokumenttype er"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "er i innboksen"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "har tagg"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "har en tag"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "opprettet før"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "opprettet etter"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "opprettet år er"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "opprettet måned er"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "opprettet dag er"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "lagt til før"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "lagt til etter"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "endret før"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "endret etter"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "har ikke tagg"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "har ikke ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "tittel eller innhold inneholder"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "full tekst spørring"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mer som dette"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "har tags i"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN større enn"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN mindre enn"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "lagringssti er"
+
+#: documents/models.py:422
msgid "rule type"
msgstr "Type regel"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "verdi"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtrer regel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtrer regler"
-#: documents/models.py:521
-msgid "started"
-msgstr "startet"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "Oppgave ID"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery ID for oppgaven som ble kjørt"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Bekreftet"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Hvis oppgaven bekreftes via frontend eller API"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Oppgavenavn"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Navn på filen som oppgaven ble kjørt for"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Navn på Oppgaven som ble kjørt"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ugyldig regulært uttrykk: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ugyldig farge."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Filtype %(type)s støttes ikke"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Ugyldig variabel oppdaget."
msgid "Sign in"
msgstr "Logg inn"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engelsk (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Hviterussisk"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tsjekkisk"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dansk"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Tysk"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engelsk (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spansk"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Fransk"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiensk"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxembourgsk"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Nederlandsk"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polsk"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugisisk (Brasil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugisisk"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumensk"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russisk"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovenian"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbisk"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Svensk"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Tyrkisk"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Kinesisk forenklet"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-17 11:20\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-28 16:30\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
msgid "Documents"
msgstr "Dokumenty"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Dowolne słowo"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Wszystkie słowa"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Dokładne dopasowanie"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Wyrażenie regularne"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Dopasowanie rozmyte"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatyczny"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nazwa"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "dopasowanie"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algorytm dopasowania"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "bez rozróżniania wielkości znaków"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korespondenci"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "kolor"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "jest tagiem skrzynki odbiorczej"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Zaznacza ten tag jako tag skrzynki odbiorczej: Wszystkie nowo przetworzone dokumenty będą oznaczone tagami skrzynki odbiorczej."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "znacznik"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "tagi"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "typ dokumentu"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "typy dokumentów"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "ścieżka"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "ścieżka przechowywania"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "ścieżki składowania"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Niezaszyfrowane"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Zaszyfrowane przy użyciu GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "tytuł"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "zawartość"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Surowe, tekstowe dane dokumentu. To pole jest używane głównie do wyszukiwania."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime type"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "suma kontrolna"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Suma kontrolna oryginalnego dokumentu."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "suma kontrolna archiwum"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Suma kontrolna zarchiwizowanego dokumentu."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "utworzono"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "zmodyfikowano"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "typ przechowywania"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "dodano"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nazwa pliku"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Aktualna nazwa pliku w pamięci"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nazwa pliku archiwum"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Aktualna nazwa pliku archiwum w pamięci"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "oryginalna nazwa pliku"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Oryginalna nazwa pliku, gdy został przesłany"
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "numer seryjny archiwum"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Pozycja tego dokumentu w archiwum dokumentów fizycznych."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenty"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "debugowanie"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informacja"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "ostrzeżenie"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "błąd"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "krytyczne"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupa"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "wiadomość"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "poziom"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "log"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logi"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "zapisany widok"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "zapisane widoki"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "użytkownik"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "pokaż na stronie głównej"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "pokaż na pasku bocznym"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "pole sortowania"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "sortuj malejąco"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "tytuł zawiera"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "zawartość zawiera"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "numer archiwum jest"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "korespondentem jest"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "typ dokumentu jest"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "jest w skrzynce odbiorczej"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ma tag"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ma dowolny tag"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "utworzony przed"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "utworzony po"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "rok utworzenia to"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "miesiąc utworzenia to"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dzień utworzenia to"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "dodany przed"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "dodany po"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "zmodyfikowany przed"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "zmodyfikowany po"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "nie ma tagu"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "nie ma numeru archiwum"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "tytuł lub zawartość zawiera"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "zapytanie pełnotekstowe"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "podobne dokumenty"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "ma znaczniki w"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN większy niż"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN mniejszy niż"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "ścieżką przechowywania jest"
+
+#: documents/models.py:422
msgid "rule type"
msgstr "typ reguły"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "wartość"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "reguła filtrowania"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "reguły filtrowania"
-#: documents/models.py:521
-msgid "started"
-msgstr "start"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID zadania"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "ID Celery dla zadania, które zostało uruchomione"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Potwierdzono"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Jeśli zadanie jest potwierdzone przez frontend lub API"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Nazwa zadania"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Stan zadania"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Dane zwrócone przez zadanie"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Komentarz do dokumentu"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "komentarz"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "komentarze"
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Nieprawidłowe wyrażenie regularne: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Nieprawidłowy kolor."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Typ pliku %(type)s nie jest obsługiwany"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Wykryto nieprawidłową zmienną."
msgid "Sign in"
msgstr "Zaloguj się"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Angielski (USA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Białoruski"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Czeski"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Duński"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Niemiecki"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Angielski (Wielka Brytania)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Hiszpański"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francuski"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Włoski"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luksemburski"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Holenderski"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polski"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugalski (Brazylia)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugalski"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumuński"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Rosyjski"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Słoweński"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Serbski"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Szwedzki"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turecki"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Chiński uproszczony"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
msgid "Documents"
msgstr "Documentos"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Qualquer palavra"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Todas as palavras"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Detecção exata"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Expressão regular"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Palavra difusa (fuzzy)"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automático"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nome"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "detecção"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritmo de detecção"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "diferencia maiúsculas de minúsculas"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "correspondente"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "correspondentes"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "cor"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "é etiqueta caixa de entrada"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Marca essa etiqueta como caixa de entrada: Todos os novos documentos consumidos terão as etiquetas de caixa de entrada."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etiqueta"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiquetas"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tipo de documento"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipos de documento"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Não encriptado"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Encriptado com GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "título"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "conteúdo"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "O conteúdo de texto bruto do documento. Esse campo é usado principalmente para busca."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "tipo mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "some de verificação"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "A soma de verificação original do documento."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "Soma de verificação de arquivamento."
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "A soma de verificação do documento arquivado."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "criado"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificado"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tipo de armazenamento"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "adicionado"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nome do arquivo"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nome do arquivo atual armazenado"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nome do arquivo para arquivamento"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nome do arquivo para arquivamento armazenado"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "número de sério de arquivamento"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "A posição deste documento no seu arquivamento físico."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "documento"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documentos"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "debug"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informação"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "aviso"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "erro"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "crítico"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupo"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "mensagem"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nível"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "log"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logs"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "visualização"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "visualizações"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "usuário"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "exibir no painel de controle"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "exibir no painel lateral"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "ordenar campo"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "odernar reverso"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "título contém"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "conteúdo contém"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "NSA é"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "correspondente é"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "tipo de documento é"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "é caixa de entrada"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "contém etiqueta"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "contém qualquer etiqueta"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "criado antes de"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "criado depois de"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "ano de criação é"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "mês de criação é"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dia de criação é"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "adicionado antes de"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "adicionado depois de"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificado antes de"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificado depois de"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "não tem etiqueta"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "não tem NSA"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "título ou conteúdo contém"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "pesquisa de texto completo"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mais como este"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "contém etiqueta em"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tipo de regra"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valor"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "regra de filtragem"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "regras de filtragem"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Expressão regular inválida: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Cor inválida."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tipo de arquivo %(type)s não suportado"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr ""
msgid "Sign in"
msgstr "Entrar"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Inglês (EUA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Tcheco"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dinamarquês"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Alemão"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Inglês (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Espanhol"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francês"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiano"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburguês"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Holandês"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polonês"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Português (Brasil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Português"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Romeno"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russo"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Sueco"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Language: pt_PT\n"
msgid "Documents"
msgstr "Documentos"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Qualquer palavra"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Todas as palavras"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Detecção exata"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Expressão regular"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Palavra difusa (fuzzy)"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automático"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nome"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "correspondência"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritmo correspondente"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "é insensível"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "correspondente"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "correspondentes"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "cor"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "é etiqueta de novo"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Marca esta etiqueta como uma etiqueta de entrada. Todos os documentos recentemente consumidos serão etiquetados com a etiqueta de entrada."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etiqueta"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiquetas"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tipo de documento"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipos de documento"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Não encriptado"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Encriptado com GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "título"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "conteúdo"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Os dados de texto, em cru, do documento. Este campo é utilizado principalmente para pesquisar."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "tipo mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "soma de verificação"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "A soma de verificação do documento original."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arquivar soma de verificação"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "A soma de verificação do documento arquivado."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "criado"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificado"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tipo de armazenamento"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "adicionado"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nome de ficheiro"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nome do arquivo atual no armazenamento"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nome do ficheiro de arquivo"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nome do arquivo atual em no armazenamento"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "numero de série de arquivo"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "A posição do documento no seu arquivo físico de documentos."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "documento"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documentos"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "depurar"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informação"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "aviso"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "erro"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "crítico"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupo"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "mensagem"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nível"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "registo"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "registos"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "vista guardada"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "vistas guardadas"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "utilizador"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "exibir no painel de controlo"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "mostrar na navegação lateral"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "ordenar campo"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "ordenar inversamente"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "o título contém"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "o conteúdo contém"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "O NSA é"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "o correspondente é"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "o tipo de documento é"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "está na entrada"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "tem etiqueta"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "tem qualquer etiqueta"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "criado antes"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "criado depois"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "ano criada é"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "mês criado é"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dia criado é"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "adicionada antes"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "adicionado depois de"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificado antes de"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificado depois de"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "não tem etiqueta"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "não possui um NSA"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "título ou conteúdo contém"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "consulta de texto completo"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mais como este"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "tem etiquetas em"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tipo de regra"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valor"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "regra de filtragem"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "regras de filtragem"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Expressão regular inválida: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Cor invalida."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tipo de arquivo %(type)s não suportado"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr ""
msgid "Sign in"
msgstr "Iniciar sessão"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Inglês (EUA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Checo"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Dinamarquês"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Deutsch"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Inglês (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Espanhol"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Français"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiano"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburguês"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Nederlandse"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polaco"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Português (Brasil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Português"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Romeno"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Russo"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Sueco"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:12\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\n"
msgid "Documents"
msgstr "Documente"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Orice cuvânt"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Toate cuvintele"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Potrivire exactă"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Expresie regulată"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Mod neatent"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automat"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "nume"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "potrivire"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritm de potrivire"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "nu ține cont de majuscule"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "corespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "corespondenți"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "culoare"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "este etichetă inbox"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Marchează aceasta eticheta ca etichetă inbox: Toate documentele nou consumate primesc aceasta eticheta."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etichetă"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etichete"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tip de document"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipuri de document"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Necriptat"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Criptat cu GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titlu"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "conținut"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Textul brut al documentului. Acest camp este folosit in principal pentru căutare."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "tip MIME"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "sumă de control"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Suma de control a documentului original."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "suma de control a arhivei"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Suma de control a documentului arhivat."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "creat"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "modificat"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tip de stocare"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "adăugat"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "nume fișier"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Numele curent al fișierului stocat"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "nume fișier arhiva"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Numele curent al arhivei stocate"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "număr serial in arhiva"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Poziția acestui document in arhiva fizica."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "document"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "documente"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "depanare"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informații"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "avertizare"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "eroare"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "critic"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grup"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "mesaj"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivel"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "jurnal"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "jurnale"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "vizualizare"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "vizualizări"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "utilizator"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "afișează pe tabloul de bord"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "afișează in bara laterala"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sortează camp"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "sortează invers"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "titlul conține"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "conținutul conține"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "Avizul prealabil de expediție este"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "corespondentul este"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "tipul documentului este"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "este în inbox"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "are eticheta"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "are orice eticheta"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "creat înainte de"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "creat după"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "anul creării este"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "luna creării este"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "ziua creării este"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "adăugat înainte de"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "adăugat după"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "modificat înainte de"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "modificat după"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "nu are etichetă"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "nu are aviz prealabil de expediție"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "titlul sau conținutul conține"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "query fulltext"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mai multe ca aceasta"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "are etichete în"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tip de regula"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "valoare"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "regulă de filtrare"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "reguli de filtrare"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Expresie regulată invalida: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Culoare invalidă."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tip de fișier %(type)s nesuportat"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr ""
msgid "Sign in"
msgstr "Conectare"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engleză (Americană)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Cehă"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Daneză"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Germană"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engleză (Britanică)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spaniolă"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Franceză"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italiană"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luxemburgheză"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Olandeză"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Poloneză"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugheză (Brazilia)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugheză"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Română"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Rusă"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Suedeză"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-03 16:12\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
msgid "Documents"
msgstr "Документы"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Любые слова"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Все слова"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Точное соответствие"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Регулярное выражение"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "\"Нечёткий\" режим"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Автоматически"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "имя"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "соответствие"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "алгоритм сопоставления"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "без учёта регистра"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "корреспондент"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "корреспонденты"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "цвет"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "это входящий тег"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Отметить этот тег как «Входящий»: все вновь добавленные документы будут помечены тегами «Входящие»."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "тег"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "теги"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "тип документа"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "типы документов"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "путь"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "путь к хранилищу"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "пути хранения"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "не зашифровано"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Зашифровано с помощью GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "заголовок"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "содержимое"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Это поле используется в основном для поиска."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "тип Mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "контрольная сумма"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Контрольная сумма оригинального документа."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "контрольная сумма архива"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Контрольная сумма архивного документа."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "создано"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "изменено"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "тип хранилища"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "добавлено"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "имя файла"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Текущее имя файла в хранилище"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "имя файла архива"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Текущее имя файла архива в хранилище"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "архивный номер (АН)"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Позиция этого документа в вашем физическом архиве документов."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "документ"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "документы"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "отладка"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "информация"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "предупреждение"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "ошибка"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "критическая"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "группа"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "сообщение"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "уровень"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "журнал"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "логи"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "сохранённое представление"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "сохраненные представления"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "пользователь"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "показать на панели"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "показать в боковой панели"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "Поле сортировки"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "обратная сортировка"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "заголовок содержит"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "содержимое содержит"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "АН"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "корреспондент"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "тип документа"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "во входящих"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "есть тег"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "есть любой тег"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "создан до"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "создан после"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "год создания"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "месяц создания"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "день создания"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "добавлен до"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "добавлен после"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "изменен до"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "изменен после"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "не имеет тега"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "не имеет архивного номера"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "Название или содержимое включает"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "полнотекстовый запрос"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "больше похожих"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "имеет теги в"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "Тип правила"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "значение"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "Правило фильтрации"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "правила фильтрации"
-#: documents/models.py:521
-msgid "started"
-msgstr "запущено"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "неверное регулярное выражение: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Неверный цвет."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Тип файла %(type)s не поддерживается"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Обнаружена неверная переменная."
msgid "Sign in"
msgstr "Вход"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Английский (США)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Белорусский"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Чешский"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Датский"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Немецкий"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Английский (Великобритании)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Испанский"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Французский"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Итальянский"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Люксембургский"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Датский"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Польский"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Португальский (Бразилия)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Португальский"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Румынский"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Русский"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Словенский"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Сербский"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Шведский"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Турецкий"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Китайский упрощенный"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-25 12:46\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Language: sl_SI\n"
msgid "Documents"
msgstr "Dokumenti"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Katerakoli beseda"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Vse besede"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Točno ujemanje"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regularni izraz"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Fuzzy beseda"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Samodejno"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "ime"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "ujemanje"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritem ujemanja"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "brez razlikovanje velikosti črk"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "dopisnik"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "dopisniki"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "barva"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "je vhodna oznaka"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Označi to oznako kot vhodno oznako: vsi na novo obdelani dokumenti bodo označeni z vhodno oznako."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "oznaka"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "oznake"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "vrsta dokumenta"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "vrste dokumentov"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "pot"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "pot do shrambe"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "poti do shrambe"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Nešifrirano"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Šifrirano z GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "naslov"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "vsebina"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Neobdelani besedilni podatki dokumenta. To polje se uporablja predvsem za iskanje."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "vrsta mime"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrolna vsota"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrolna vsota izvirnega dokumenta."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arhivska kontrolna vsota"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrolna vsota arhiviranega dokumenta."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "ustvarjeno"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "spremenjeno"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "vrsta shrambe"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "dodano"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "ime datoteke"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Trenutno ime dokumenta v shrambi"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "ime arhivske datoteke"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Trenutno ime arhivske datoteke v shrambi"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arhivska serijska številka"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Položaj tega dokumenta v vašem fizičnem arhivu dokumentov."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenti"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "razhroščevanje"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informacija"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "opozorilo"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "napaka"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritično"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "skupina"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "sporočilo"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivo"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "dnevnik"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "dnevniki"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "shranjeni pogled"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "shranjeni pogledi"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "uporabnik"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "prikaži na pregledni plošči"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "prikaži v stranski vrstici"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "polje za razvrščanje"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "razvrsti obratno"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "naslov vsebuje"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "vsebina vsebuje"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN je"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "dopisnik je"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "vrsta dokumenta je"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "je v prejetem"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ima oznako"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ima katero koli oznako"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "ustvarjeno pred"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "ustvarjeno po"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "leto nastanka"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "mesec nastanka"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dan nastanka"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "dodano pred"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "dodano po"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "spremenjeno pred"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "spremenjeno po"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "nima oznake"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "nima ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "naslov ali vsebina vsebujeta"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "polnobesedilna poizvedba"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "več takih"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "ima oznake"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "vrsta pravila"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "vrednost"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtriraj pravilo"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtriraj pravila"
-#: documents/models.py:521
-msgid "started"
-msgstr "zagnano"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Neveljaven splošen izraz: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Napačna barva."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s ni podprta"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Zaznani neveljavni znaki."
msgid "Sign in"
msgstr "Prijava"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Angleščina (ZDA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Beloruščina"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Češčina"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danščina"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Nemščina"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Angleščina (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Španščina"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francoščina"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italijanščina"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luksemburški"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Nizozemščina"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Poljščina"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugalščina (Brazilija)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugalščina"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Romunščina"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ruščina"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovenščina"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Srbščina"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Švedščina"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turščina"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Poenostavljena kitajščina"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-04 23:55\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-12 13:08\n"
"Last-Translator: \n"
"Language-Team: Serbian (Latin)\n"
"Language: sr_CS\n"
msgid "Documents"
msgstr "Dokumenta"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Bilo koja reč"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Sve reči"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Tačno podudaranje"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Regularni izraz"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Fuzzy reč"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatski"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "naziv"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "poklapanje"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "algoritam podudaranja"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "bez razlike veliko/malo slovo"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korespodent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korespodenti"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "boja"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "je oznaka prijemnog sandučeta"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Označava ovu oznaku kao oznaku prijemnog sandučeta (inbox): Svi novoobrađeni dokumenti će biti označeni oznakama prijemnog sandučeta (inbox)."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "oznaka"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "oznake"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "tip dokumenta"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "tipovi dokumenta"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "putanja"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "putanja skladišta"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "putanja skladišta"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Nešifrovano"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Šifrovano pomoću GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "naslov"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "sadržaj"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Neobrađeni tekstualni podaci dokumenta. Ovo se polje koristi prvenstveno za pretraživanje."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime tip"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrolna suma"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrolna suma originalnog dokumenta."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arhivni checksum"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrolna suma arhivnog dokumenta."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "kreirano"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "izmenjeno"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "tip skladišta"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "dodato"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "naziv fajla"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Trenutni naziv sačuvane datoteke"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "naziv fajla arhive"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Trenutni naziv arhivirane sačuvane datoteke"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr "originalno ime fajla"
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr "Originalni naziv fajla kada je otpremljen"
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arhivski serijski broj"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Položaj ovog dokumenta u vašoj fizičkoj arhivi dokumenata."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokumenta"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "okloni greške"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "informacija"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "upozorenje"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "grеška"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritično"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupa"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "poruka"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivo"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "log"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "logovi"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "sačuvani prikaz"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "sačuvani prikazi"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "korisnik"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "prikaži na kontrolnoj tabli"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "prikaži u bočnoj traci"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "polje za sortiranje"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "obrnuto sortiranje"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "naslov sadrži"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "sadržaj sadrži"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN je"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "korespodent je"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "tip dokumenta je"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "je u prijemnog sandučetu"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "ima oznaku"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "ima bilo koju oznaku"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "kreiran pre"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "kreiran posle"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "godina kreiranja je"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "mesec kreiranja je"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "dan kreiranja je"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "dodat pre"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "dodat posle"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "izmenjen pre"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "izmenjen posle"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "nema oznaku"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "nema ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "naslov i sadržaj sadrži"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "upit za ceo tekst"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "više ovakvih"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "ima oznake u"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr "ASN veći od"
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr "ASN manji od"
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr "putanja skladišta je"
+
+#: documents/models.py:422
msgid "rule type"
msgstr "tip pravila"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "vrednost"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filter pravilo"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filter pravila"
-#: documents/models.py:521
-msgid "started"
-msgstr "pokrenuto"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr "ID Zadatka"
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr "Celery ID za zadatak koji je pokrenut"
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr "Potvrđeno"
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr "Ako je zadatak potvrđen preko frontenda ili API-ja"
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr "Ime zadatka"
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr "Naziv fajla za koji je zadatak pokrenut"
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr "Naziv zadatka koji je bio pokrenut"
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr "Pozicioni argumenti zadatka"
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr "JSON prikaz pozicionih argumenata koji se koriste sa zadatkom"
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr "Argumenti zadatka"
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr "JSON prikaz imenovanih argumenata koji se koriste sa zadatkom"
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr "Stanje zadatka"
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr "Trenutno stanje zadatka koji se izvršava"
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr "Datum i vreme kreiranja"
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr "Polje datuma i vremena kada je rezultat zadatka kreiran u UTC"
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr "Datum i vreme početka"
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr "Polje datuma i vremena kada je zadatak pokrenut u UTC"
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr "Datum i vreme završetka"
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr "Polje datuma i vremena kada je zadatak završen u UTC"
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr "Podaci o rezultatu"
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr "Podaci koje vraća zadatak"
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr "Komentar za dokument"
+
+#: documents/models.py:642
+msgid "comment"
+msgstr "komentar"
+
+#: documents/models.py:643
+msgid "comments"
+msgstr "komentari"
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Nevažeći regularni izraz: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Nevažeća boja."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s nije podržana"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Otkrivena je nevažeća promenljiva."
msgid "Sign in"
msgstr "Prijavite se"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engleski (US)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Beloruski"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Češki"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danski"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Nemački"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engleski (UK)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Španski"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Francuski"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italijanski"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Luksemburški"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Holandski"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Poljski"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugalski (Brazil)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugalski"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumunski"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ruski"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovenački"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Srpski"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Švedski"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Turski"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Kineski pojednostavljen"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-08 22:07\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
msgid "Documents"
msgstr "Dokument"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Valfritt ord"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Alla ord"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Exakt matchning"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Reguljära uttryck"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Ungefärligt ord"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Automatisk"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "namn"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "träff"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "matchande algoritm"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "är ej skiftlägeskänsligt"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "korrespondent"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "korrespondenter"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "färg"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "är inkorgsetikett"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Markerar denna etikett som en inkorgsetikett: Alla nyligen konsumerade dokument kommer att märkas med inkorgsetiketter."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etikett"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiketter"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "dokumenttyp"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "dokumenttyper"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Okrypterad"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "Krypterad med GNU Privacy Guard"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "titel"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "innehåll"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Dokumentets obearbetade textdata. Detta fält används främst för sökning."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "MIME-typ"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "kontrollsumma"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Kontrollsumman för originaldokumentet."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arkivera kontrollsumma"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Kontrollsumman för det arkiverade dokumentet."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "skapad"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "ändrad"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "lagringstyp"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "tillagd"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "filnamn"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Nuvarande filnamn i lagringsutrymmet"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "arkivfilnamn"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Nuvarande arkivfilnamn i lagringsutrymmet"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "serienummer (arkivering)"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Placeringen av detta dokument i ditt fysiska dokumentarkiv."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "dokument"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "dokument"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "felsök"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr ""
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "varning"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "fel"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritisk"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grupp"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "meddelande"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "nivå"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "logg"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "loggar"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "sparad vy"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "sparade vyer"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "användare"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "visa på kontrollpanelen"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "visa i sidofältet"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "sortera fält"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "sortera omvänt"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "titel innehåller"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "innehåll innehåller"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN är"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "korrespondent är"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "dokumenttyp är"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "är i inkorgen"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "har etikett"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "har någon etikett"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "skapad före"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "skapad efter"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "skapat år är"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "skapad månad är"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "skapad dag är"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "tillagd före"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "tillagd efter"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "ändrad före"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "ändrad efter"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "har inte etikett"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "har inte ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "titel eller innehåll innehåller"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "fulltextfråga"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "mer som detta"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr ""
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "regeltyp"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "värde"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtrera regel"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtrera regler"
-#: documents/models.py:521
-msgid "started"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Ogiltigt reguljärt uttryck: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Ogiltig färg."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Filtypen %(type)s stöds inte"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr ""
msgid "Sign in"
msgstr "Logga in"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "Engelska (USA)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr ""
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr ""
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Tyska"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "Engelska (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "Spanska"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Franska"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "Italienska"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr ""
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Holländska"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polska"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portugisiska (Brasilien)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portugisiska"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Rumänska"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Ryska"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "Svenska"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-08-01 19:02\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
msgid "Documents"
msgstr "Belgeler"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "Herhangi bir kelime"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "Tüm Kelimeler"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "Tam eşleşme"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "Düzenli ifade"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "Fuzzy Kelime"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "Otomatik"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "ad"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "eşleme"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "eşleştirme algoritması"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "duyarsızdır"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "muhabir"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "muhabirler"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "renk"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "gelen kutu etiketidir"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "Bu etiketi, gelen kutusu etiketi olarak işaretle: Yeni aktarılan tüm dokümanlar gelen kutusu etiketi ile etiketlendirileceklerdir."
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "etiket"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "etiketler"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "belge türü"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "belge türleri"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr ""
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr ""
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr ""
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "Şifresiz"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "GNU Gizlilik Koruması ile şifrelendirilmiştir"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "başlık"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "içerik"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "Belgenin ham, yalnızca metin verileri. Bu alan öncelikle arama için kullanılır."
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime türü"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "sağlama toplamı"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "Orjinal belgenin sağlama toplamı."
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "arşiv sağlama toplamı"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "Arşivlenen belgenin sağlama toplamı."
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "oluşturuldu"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "değiştirilmiş"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "depolama türü"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "eklendi"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "dosya adı"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "Depolamadaki geçerli dosya adı"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "arşiv dosya adı"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "Depolamadaki geçerli arşiv dosya adı"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "arşiv seri numarası"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "Bu belgenin fiziksel belge arşivinizdeki posizyonu."
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "belge"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "belgeler"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "hata ayıklama"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "bilgi"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "uyarı"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "hata"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "kritik"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "grup"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "mesaj"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "seviye"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "günlük"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "günlükler"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "kaydedilen görünüm"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "kaydedilen görünümler"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "kullanıcı"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "kontrol paneli'nde göster"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "kenar çubuğunda göster"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "alanı sıralama"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "tersine sırala"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "başlık içerir"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "içerik içerir"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN ise"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "muhabir ise"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "belge türü ise"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "gelen kutusunun içerisindedir"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "etiketine sahip"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "herhangi bir etiketine sahip"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "bu tarihten önce oluşturuldu"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "bu tarihten sonra oluşturuldu"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "oluşturma yili ise"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "oluşturma ayı ise"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "oluşturma günü ise"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "bu tarihten önce eklendi"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "bu tarihten sonra eklendi"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "bu tarihten önce değiştirldi"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "bu tarihten sonra değiştirldi"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "etikete sahip değil"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "ASN'e sahip değil"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "başlik veya içerik içerir"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "tam metin sorgulama"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "buna benzer daha"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "içerisinde etiketine sahip"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "kural türü"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "değer"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "filtreleme kuralı"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "filtreleme kuralları"
-#: documents/models.py:521
-msgid "started"
-msgstr "başladı"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "Hatalı Düzenli İfade: %(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "Geçersiz renk."
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "Dosya türü %(type)s desteklenmiyor"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "Geçersiz değişken algılandı."
msgid "Sign in"
msgstr "Oturum aç"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "İngilizce (Birleşik Devletler)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "Belarusça"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "Çekçe"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "Danca"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "Almanca"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "İngilizce (GB)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "İspanyolca"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "Fransızca"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "İtalyanca"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "Lüksemburgca"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "Hollandaca"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "Polonyaca"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "Portekizce (Brezilya)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "Portekizce"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "Romence"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "Rusça"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "Slovakça"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "Sırpça"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "İsveççe"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "Türkçe"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "Basitleştirilmiş Çince"
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-07-08 14:11-0700\n"
-"PO-Revision-Date: 2022-07-15 04:02\n"
+"POT-Creation-Date: 2022-11-09 21:50+0000\n"
+"PO-Revision-Date: 2022-11-09 23:11\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
msgid "Documents"
msgstr "文档"
-#: documents/models.py:29
+#: documents/models.py:32
msgid "Any word"
msgstr "任意单词"
-#: documents/models.py:30
+#: documents/models.py:33
msgid "All words"
msgstr "所有单词"
-#: documents/models.py:31
+#: documents/models.py:34
msgid "Exact match"
msgstr "精确匹配"
-#: documents/models.py:32
+#: documents/models.py:35
msgid "Regular expression"
msgstr "正则表达式"
-#: documents/models.py:33
+#: documents/models.py:36
msgid "Fuzzy word"
msgstr "模糊单词"
-#: documents/models.py:34
+#: documents/models.py:37
msgid "Automatic"
msgstr "自动"
-#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16
+#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16
#: paperless_mail/models.py:80
msgid "name"
msgstr "名称"
-#: documents/models.py:39
+#: documents/models.py:42
msgid "match"
msgstr "匹配"
-#: documents/models.py:42
+#: documents/models.py:45
msgid "matching algorithm"
msgstr "匹配算法"
-#: documents/models.py:47
+#: documents/models.py:50
msgid "is insensitive"
msgstr "忽略大小写"
-#: documents/models.py:60 documents/models.py:115
+#: documents/models.py:63 documents/models.py:118
msgid "correspondent"
msgstr "联系人"
-#: documents/models.py:61
+#: documents/models.py:64
msgid "correspondents"
msgstr "联系人"
-#: documents/models.py:66
+#: documents/models.py:69
msgid "color"
msgstr "颜色"
-#: documents/models.py:69
+#: documents/models.py:72
msgid "is inbox tag"
msgstr "收件箱标签"
-#: documents/models.py:72
+#: documents/models.py:75
msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags."
msgstr "将此标签标记为收件箱标签:所有新处理的文档将被标记为收件箱标签。"
-#: documents/models.py:78
+#: documents/models.py:81
msgid "tag"
msgstr "标签"
-#: documents/models.py:79 documents/models.py:153
+#: documents/models.py:82 documents/models.py:156
msgid "tags"
msgstr "标签"
-#: documents/models.py:84 documents/models.py:135
+#: documents/models.py:87 documents/models.py:138
msgid "document type"
msgstr "文档类型"
-#: documents/models.py:85
+#: documents/models.py:88
msgid "document types"
msgstr "文档类型"
-#: documents/models.py:90
+#: documents/models.py:93
msgid "path"
msgstr "路径"
-#: documents/models.py:96 documents/models.py:124
+#: documents/models.py:99 documents/models.py:127
msgid "storage path"
msgstr "保存路径"
-#: documents/models.py:97
+#: documents/models.py:100
msgid "storage paths"
msgstr "保存路径"
-#: documents/models.py:105
+#: documents/models.py:108
msgid "Unencrypted"
msgstr "未加密"
-#: documents/models.py:106
+#: documents/models.py:109
msgid "Encrypted with GNU Privacy Guard"
msgstr "使用 GNU 隐私防护(GPG)加密"
-#: documents/models.py:127
+#: documents/models.py:130
msgid "title"
msgstr "标题"
-#: documents/models.py:139
+#: documents/models.py:142 documents/models.py:611
msgid "content"
msgstr "内容"
-#: documents/models.py:142
+#: documents/models.py:145
msgid "The raw, text-only data of the document. This field is primarily used for searching."
msgstr "文档的原始、纯文本的数据。这个字段主要用于搜索。"
-#: documents/models.py:147
+#: documents/models.py:150
msgid "mime type"
msgstr "mime 类型"
-#: documents/models.py:157
+#: documents/models.py:160
msgid "checksum"
msgstr "校验和"
-#: documents/models.py:161
+#: documents/models.py:164
msgid "The checksum of the original document."
msgstr "原始文档的校验和。"
-#: documents/models.py:165
+#: documents/models.py:168
msgid "archive checksum"
msgstr "存档校验和"
-#: documents/models.py:170
+#: documents/models.py:173
msgid "The checksum of the archived document."
msgstr "已归档文档的校验和。"
-#: documents/models.py:173 documents/models.py:335 documents/models.py:520
+#: documents/models.py:176 documents/models.py:348 documents/models.py:617
msgid "created"
msgstr "已创建"
-#: documents/models.py:176
+#: documents/models.py:179
msgid "modified"
msgstr "已修改"
-#: documents/models.py:183
+#: documents/models.py:186
msgid "storage type"
msgstr "存储类型"
-#: documents/models.py:191
+#: documents/models.py:194
msgid "added"
msgstr "已添加"
-#: documents/models.py:198
+#: documents/models.py:201
msgid "filename"
msgstr "文件名"
-#: documents/models.py:204
+#: documents/models.py:207
msgid "Current filename in storage"
msgstr "当前存储中的文件名"
-#: documents/models.py:208
+#: documents/models.py:211
msgid "archive filename"
msgstr "归档文件名"
-#: documents/models.py:214
+#: documents/models.py:217
msgid "Current archive filename in storage"
msgstr "当前存储中的归档文件名"
-#: documents/models.py:218
+#: documents/models.py:221
+msgid "original filename"
+msgstr ""
+
+#: documents/models.py:227
+msgid "The original name of the file when it was uploaded"
+msgstr ""
+
+#: documents/models.py:231
msgid "archive serial number"
msgstr "归档序列号"
-#: documents/models.py:224
+#: documents/models.py:237
msgid "The position of this document in your physical document archive."
msgstr "此文档在您的物理文档归档中的位置。"
-#: documents/models.py:230
+#: documents/models.py:243 documents/models.py:628
msgid "document"
msgstr "文档"
-#: documents/models.py:231
+#: documents/models.py:244
msgid "documents"
msgstr "文档"
-#: documents/models.py:318
+#: documents/models.py:331
msgid "debug"
msgstr "调试"
-#: documents/models.py:319
+#: documents/models.py:332
msgid "information"
msgstr "信息"
-#: documents/models.py:320
+#: documents/models.py:333
msgid "warning"
msgstr "警告"
-#: documents/models.py:321
+#: documents/models.py:334
msgid "error"
msgstr "错误"
-#: documents/models.py:322
+#: documents/models.py:335
msgid "critical"
msgstr "严重"
-#: documents/models.py:325
+#: documents/models.py:338
msgid "group"
msgstr "用户组"
-#: documents/models.py:327
+#: documents/models.py:340
msgid "message"
msgstr "消息"
-#: documents/models.py:330
+#: documents/models.py:343
msgid "level"
msgstr "等级"
-#: documents/models.py:339
+#: documents/models.py:352
msgid "log"
msgstr "日志"
-#: documents/models.py:340
+#: documents/models.py:353
msgid "logs"
msgstr "日志"
-#: documents/models.py:350 documents/models.py:403
+#: documents/models.py:363 documents/models.py:419
msgid "saved view"
msgstr "保存的视图"
-#: documents/models.py:351
+#: documents/models.py:364
msgid "saved views"
msgstr "保存的视图"
-#: documents/models.py:353
+#: documents/models.py:366 documents/models.py:637
msgid "user"
msgstr "用户"
-#: documents/models.py:357
+#: documents/models.py:370
msgid "show on dashboard"
msgstr "在仪表盘显示"
-#: documents/models.py:360
+#: documents/models.py:373
msgid "show in sidebar"
msgstr "在侧边栏显示"
-#: documents/models.py:364
+#: documents/models.py:377
msgid "sort field"
msgstr "排序字段"
-#: documents/models.py:369
+#: documents/models.py:382
msgid "sort reverse"
msgstr "反向排序"
-#: documents/models.py:374
+#: documents/models.py:387
msgid "title contains"
msgstr "标题包含"
-#: documents/models.py:375
+#: documents/models.py:388
msgid "content contains"
msgstr "内容包含"
-#: documents/models.py:376
+#: documents/models.py:389
msgid "ASN is"
msgstr "ASN 为"
-#: documents/models.py:377
+#: documents/models.py:390
msgid "correspondent is"
msgstr "联系人是"
-#: documents/models.py:378
+#: documents/models.py:391
msgid "document type is"
msgstr "文档类型是"
-#: documents/models.py:379
+#: documents/models.py:392
msgid "is in inbox"
msgstr "在收件箱中"
-#: documents/models.py:380
+#: documents/models.py:393
msgid "has tag"
msgstr "有标签"
-#: documents/models.py:381
+#: documents/models.py:394
msgid "has any tag"
msgstr "有任意标签"
-#: documents/models.py:382
+#: documents/models.py:395
msgid "created before"
msgstr "在此时间之前创建"
-#: documents/models.py:383
+#: documents/models.py:396
msgid "created after"
msgstr "在此时间之后创建"
-#: documents/models.py:384
+#: documents/models.py:397
msgid "created year is"
msgstr "创建年份是"
-#: documents/models.py:385
+#: documents/models.py:398
msgid "created month is"
msgstr "创建月份是"
-#: documents/models.py:386
+#: documents/models.py:399
msgid "created day is"
msgstr "创建日期是"
-#: documents/models.py:387
+#: documents/models.py:400
msgid "added before"
msgstr "添加早于"
-#: documents/models.py:388
+#: documents/models.py:401
msgid "added after"
msgstr "添加晚于"
-#: documents/models.py:389
+#: documents/models.py:402
msgid "modified before"
msgstr "修改早于"
-#: documents/models.py:390
+#: documents/models.py:403
msgid "modified after"
msgstr "修改晚于"
-#: documents/models.py:391
+#: documents/models.py:404
msgid "does not have tag"
msgstr "没有标签"
-#: documents/models.py:392
+#: documents/models.py:405
msgid "does not have ASN"
msgstr "没有 ASN"
-#: documents/models.py:393
+#: documents/models.py:406
msgid "title or content contains"
msgstr "标题或内容包含"
-#: documents/models.py:394
+#: documents/models.py:407
msgid "fulltext query"
msgstr "全文检索"
-#: documents/models.py:395
+#: documents/models.py:408
msgid "more like this"
msgstr "更多类似内容"
-#: documents/models.py:396
+#: documents/models.py:409
msgid "has tags in"
msgstr "有标签包含于"
-#: documents/models.py:406
+#: documents/models.py:410
+msgid "ASN greater than"
+msgstr ""
+
+#: documents/models.py:411
+msgid "ASN less than"
+msgstr ""
+
+#: documents/models.py:412
+msgid "storage path is"
+msgstr ""
+
+#: documents/models.py:422
msgid "rule type"
msgstr "规则类型"
-#: documents/models.py:408
+#: documents/models.py:424
msgid "value"
msgstr "值"
-#: documents/models.py:411
+#: documents/models.py:427
msgid "filter rule"
msgstr "过滤规则"
-#: documents/models.py:412
+#: documents/models.py:428
msgid "filter rules"
msgstr "过滤规则"
-#: documents/models.py:521
-msgid "started"
-msgstr "已开始"
+#: documents/models.py:536
+msgid "Task ID"
+msgstr ""
+
+#: documents/models.py:537
+msgid "Celery ID for the Task that was run"
+msgstr ""
+
+#: documents/models.py:542
+msgid "Acknowledged"
+msgstr ""
+
+#: documents/models.py:543
+msgid "If the task is acknowledged via the frontend or API"
+msgstr ""
+
+#: documents/models.py:549 documents/models.py:556
+msgid "Task Name"
+msgstr ""
+
+#: documents/models.py:550
+msgid "Name of the file which the Task was run for"
+msgstr ""
+
+#: documents/models.py:557
+msgid "Name of the Task which was run"
+msgstr ""
+
+#: documents/models.py:562
+msgid "Task Positional Arguments"
+msgstr ""
+
+#: documents/models.py:564
+msgid "JSON representation of the positional arguments used with the task"
+msgstr ""
+
+#: documents/models.py:569
+msgid "Task Named Arguments"
+msgstr ""
+
+#: documents/models.py:571
+msgid "JSON representation of the named arguments used with the task"
+msgstr ""
+
+#: documents/models.py:578
+msgid "Task State"
+msgstr ""
+
+#: documents/models.py:579
+msgid "Current state of the task being run"
+msgstr ""
+
+#: documents/models.py:584
+msgid "Created DateTime"
+msgstr ""
+
+#: documents/models.py:585
+msgid "Datetime field when the task result was created in UTC"
+msgstr ""
+
+#: documents/models.py:590
+msgid "Started DateTime"
+msgstr ""
+
+#: documents/models.py:591
+msgid "Datetime field when the task was started in UTC"
+msgstr ""
+
+#: documents/models.py:596
+msgid "Completed DateTime"
+msgstr ""
+
+#: documents/models.py:597
+msgid "Datetime field when the task was completed in UTC"
+msgstr ""
+
+#: documents/models.py:602
+msgid "Result Data"
+msgstr ""
+
+#: documents/models.py:604
+msgid "The data returned by the task"
+msgstr ""
+
+#: documents/models.py:613
+msgid "Comment for the document"
+msgstr ""
+
+#: documents/models.py:642
+msgid "comment"
+msgstr ""
+
+#: documents/models.py:643
+msgid "comments"
+msgstr ""
-#: documents/serialisers.py:70
+#: documents/serialisers.py:72
#, python-format
msgid "Invalid regular expression: %(error)s"
msgstr "无效的正则表达式:%(error)s"
-#: documents/serialisers.py:191
+#: documents/serialisers.py:193
msgid "Invalid color."
msgstr "无效的颜色"
-#: documents/serialisers.py:515
+#: documents/serialisers.py:518
#, python-format
msgid "File type %(type)s not supported"
msgstr "不支持文件类型 %(type)s"
-#: documents/serialisers.py:596
+#: documents/serialisers.py:599
msgid "Invalid variable detected."
msgstr "检测到无效变量。"
msgid "Sign in"
msgstr "登录"
-#: paperless/settings.py:339
+#: paperless/settings.py:378
msgid "English (US)"
msgstr "英语(美国)"
-#: paperless/settings.py:340
+#: paperless/settings.py:379
msgid "Belarusian"
msgstr "白俄罗斯语"
-#: paperless/settings.py:341
+#: paperless/settings.py:380
msgid "Czech"
msgstr "捷克语"
-#: paperless/settings.py:342
+#: paperless/settings.py:381
msgid "Danish"
msgstr "丹麦语"
-#: paperless/settings.py:343
+#: paperless/settings.py:382
msgid "German"
msgstr "德语"
-#: paperless/settings.py:344
+#: paperless/settings.py:383
msgid "English (GB)"
msgstr "英语(英国)"
-#: paperless/settings.py:345
+#: paperless/settings.py:384
msgid "Spanish"
msgstr "西班牙语"
-#: paperless/settings.py:346
+#: paperless/settings.py:385
msgid "French"
msgstr "法语"
-#: paperless/settings.py:347
+#: paperless/settings.py:386
msgid "Italian"
msgstr "意大利语"
-#: paperless/settings.py:348
+#: paperless/settings.py:387
msgid "Luxembourgish"
msgstr "卢森堡语"
-#: paperless/settings.py:349
+#: paperless/settings.py:388
msgid "Dutch"
msgstr "荷兰语"
-#: paperless/settings.py:350
+#: paperless/settings.py:389
msgid "Polish"
msgstr "波兰语"
-#: paperless/settings.py:351
+#: paperless/settings.py:390
msgid "Portuguese (Brazil)"
msgstr "葡萄牙语 (巴西)"
-#: paperless/settings.py:352
+#: paperless/settings.py:391
msgid "Portuguese"
msgstr "葡萄牙语"
-#: paperless/settings.py:353
+#: paperless/settings.py:392
msgid "Romanian"
msgstr "罗马尼亚语"
-#: paperless/settings.py:354
+#: paperless/settings.py:393
msgid "Russian"
msgstr "俄语"
-#: paperless/settings.py:355
+#: paperless/settings.py:394
msgid "Slovenian"
msgstr "斯洛语尼亚语"
-#: paperless/settings.py:356
+#: paperless/settings.py:395
msgid "Serbian"
msgstr "塞尔维亚语"
-#: paperless/settings.py:357
+#: paperless/settings.py:396
msgid "Swedish"
msgstr "瑞典语"
-#: paperless/settings.py:358
+#: paperless/settings.py:397
msgid "Turkish"
msgstr "土耳其语"
-#: paperless/settings.py:359
+#: paperless/settings.py:398
msgid "Chinese Simplified"
msgstr "简体中文"
from typing import Final
from typing import Optional
from typing import Set
+from typing import Tuple
from urllib.parse import urlparse
from celery.schedules import crontab
return os.path.abspath(os.path.normpath(os.environ.get(key, default)))
+def _parse_redis_url(env_redis: Optional[str]) -> Tuple[str]:
+ """
+ Gets the Redis information from the environment or a default and handles
+ converting from incompatible django_channels and celery formats.
+
+ Returns a tuple of (celery_url, channels_url)
+ """
+
+ # Not set, return a compatible default
+ if env_redis is None:
+ return ("redis://localhost:6379", "redis://localhost:6379")
+
+ if "unix" in env_redis.lower():
+ # channels_redis socket format, looks like:
+ # "unix:///path/to/redis.sock"
+ _, path = env_redis.split(":")
+ # Optionally setting a db number
+ if "?db=" in env_redis:
+ path, number = path.split("?db=")
+ return (f"redis+socket:{path}?virtual_host={number}", env_redis)
+ else:
+ return (f"redis+socket:{path}", env_redis)
+
+ elif "+socket" in env_redis.lower():
+ # celery socket style, looks like:
+ # "redis+socket:///path/to/redis.sock"
+ _, path = env_redis.split(":")
+ if "?virtual_host=" in env_redis:
+ # Virtual host (aka db number)
+ path, number = path.split("?virtual_host=")
+ return (env_redis, f"unix:{path}?db={number}")
+ else:
+ return (env_redis, f"unix:{path}")
+
+ # Not a socket
+ return (env_redis, env_redis)
+
+
# NEVER RUN WITH DEBUG IN PRODUCTION.
DEBUG = __get_boolean("PAPERLESS_DEBUG", "NO")
STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", BASE_URL + "static/")
WHITENOISE_STATIC_PREFIX = "/static/"
-_REDIS_URL = os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")
+_CELERY_REDIS_URL, _CHANNELS_REDIS_URL = _parse_redis_url(
+ os.getenv("PAPERLESS_REDIS", None),
+)
# TODO: what is this used for?
TEMPLATES = [
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
- "hosts": [_REDIS_URL],
+ "hosts": [_CHANNELS_REDIS_URL],
"capacity": 2000, # default 100
"expiry": 15, # default 60
},
WORKER_TIMEOUT: Final[int] = __get_int("PAPERLESS_WORKER_TIMEOUT", 1800)
-CELERY_BROKER_URL = _REDIS_URL
+CELERY_BROKER_URL = _CELERY_REDIS_URL
CELERY_TIMEZONE = TIME_ZONE
CELERY_WORKER_HIJACK_ROOT_LOGGER = False
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
- "LOCATION": _REDIS_URL,
+ "LOCATION": _CHANNELS_REDIS_URL,
},
}
from unittest import TestCase
from paperless.settings import _parse_ignore_dates
+from paperless.settings import _parse_redis_url
from paperless.settings import default_threads_per_worker
self.assertGreaterEqual(default_threads, 1)
self.assertLessEqual(default_workers * default_threads, i)
+
+ def test_redis_socket_parsing(self):
+ """
+ GIVEN:
+ - Various Redis connection URI formats
+ WHEN:
+ - The URI is parsed
+ THEN:
+ - Socket based URIs are translated
+ - Non-socket URIs are unchanged
+ - None provided uses default
+ """
+
+ for input, expected in [
+ # Nothing is set
+ (None, ("redis://localhost:6379", "redis://localhost:6379")),
+ # celery style
+ (
+ "redis+socket:///run/redis/redis.sock",
+ (
+ "redis+socket:///run/redis/redis.sock",
+ "unix:///run/redis/redis.sock",
+ ),
+ ),
+ # redis-py / channels-redis style
+ (
+ "unix:///run/redis/redis.sock",
+ (
+ "redis+socket:///run/redis/redis.sock",
+ "unix:///run/redis/redis.sock",
+ ),
+ ),
+ # celery style with db
+ (
+ "redis+socket:///run/redis/redis.sock?virtual_host=5",
+ (
+ "redis+socket:///run/redis/redis.sock?virtual_host=5",
+ "unix:///run/redis/redis.sock?db=5",
+ ),
+ ),
+ # redis-py / channels-redis style with db
+ (
+ "unix:///run/redis/redis.sock?db=10",
+ (
+ "redis+socket:///run/redis/redis.sock?virtual_host=10",
+ "unix:///run/redis/redis.sock?db=10",
+ ),
+ ),
+ # Just a host with a port
+ (
+ "redis://myredishost:6379",
+ ("redis://myredishost:6379", "redis://myredishost:6379"),
+ ),
+ ]:
+ result = _parse_redis_url(input)
+ self.assertTupleEqual(expected, result)
from paperless.views import FaviconView
from paperless.views import GroupViewSet
from paperless.views import UserViewSet
+from paperless_mail.views import MailAccountViewSet
+from paperless_mail.views import MailRuleViewSet
from rest_framework.authtoken import views
from rest_framework.routers import DefaultRouter
api_router.register(r"tasks", TasksViewSet, basename="tasks")
api_router.register(r"users", UserViewSet, basename="users")
api_router.register(r"groups", GroupViewSet, basename="groups")
+api_router.register(r"mail_accounts", MailAccountViewSet)
+api_router.register(r"mail_rules", MailRuleViewSet)
urlpatterns = [
from typing import Final
from typing import Tuple
-__version__: Final[Tuple[int, int, int]] = (1, 9, 2)
+__version__: Final[Tuple[int, int, int]] = (1, 10, 2)
# Version string like X.Y.Z
__full_version_str__: Final[str] = ".".join(map(str, __version__))
# Version string like X.Y
"filter_body",
"filter_attachment_filename",
"maximum_age",
+ "consumption_scope",
"attachment_type",
),
},
{
"description": _(
"The action applied to the mail. This action is only "
- "performed when documents were consumed from the mail. "
- "Mails without attachments will remain entirely untouched.",
+ "performed when the mail body or attachments were "
+ "consumed from the mail.",
),
"fields": ("action", "action_parameter"),
},
from django.apps import AppConfig
+from django.conf import settings
from django.utils.translation import gettext_lazy as _
+from paperless_mail.signals import mail_consumer_declaration
class PaperlessMailConfig(AppConfig):
name = "paperless_mail"
verbose_name = _("Paperless mail")
+
+ def ready(self):
+ from documents.signals import document_consumer_declaration
+
+ if settings.TIKA_ENABLED:
+ document_consumer_declaration.connect(mail_consumer_declaration)
+ AppConfig.ready(self)
return total_processed_files
- def handle_message(self, message, rule) -> int:
- if not message.attachments:
- return 0
+ def handle_message(self, message, rule: MailRule) -> int:
+ processed_elements = 0
+
+ # Skip Message handling when only attachments are to be processed but
+ # message doesn't have any.
+ if (
+ not message.attachments
+ and rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY
+ ):
+ return processed_elements
self.log(
"debug",
tag_ids = [tag.id for tag in rule.assign_tags.all()]
doc_type = rule.assign_document_type
- processed_attachments = 0
+ if (
+ rule.consumption_scope == MailRule.ConsumptionScope.EML_ONLY
+ or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING
+ ):
+ processed_elements += self.process_eml(
+ message,
+ rule,
+ correspondent,
+ tag_ids,
+ doc_type,
+ )
+
+ if (
+ rule.consumption_scope == MailRule.ConsumptionScope.ATTACHMENTS_ONLY
+ or rule.consumption_scope == MailRule.ConsumptionScope.EVERYTHING
+ ):
+ processed_elements += self.process_attachments(
+ message,
+ rule,
+ correspondent,
+ tag_ids,
+ doc_type,
+ )
+
+ return processed_elements
+ def process_attachments(
+ self,
+ message: MailMessage,
+ rule: MailRule,
+ correspondent,
+ tag_ids,
+ doc_type,
+ ):
+ processed_attachments = 0
for att in message.attachments:
if (
f"since guessed mime type {mime_type} is not supported "
f"by paperless",
)
-
return processed_attachments
+
+ def process_eml(
+ self,
+ message: MailMessage,
+ rule: MailRule,
+ correspondent,
+ tag_ids,
+ doc_type,
+ ):
+ os.makedirs(settings.SCRATCH_DIR, exist_ok=True)
+ _, temp_filename = tempfile.mkstemp(
+ prefix="paperless-mail-",
+ dir=settings.SCRATCH_DIR,
+ suffix=".eml",
+ )
+ with open(temp_filename, "wb") as f:
+ # Move "From"-header to beginning of file
+ # TODO: This ugly workaround is needed because the parser is
+ # chosen only by the mime_type detected via magic
+ # (see documents/consumer.py "mime_type = magic.from_file")
+ # Unfortunately magic sometimes fails to detect the mime
+ # type of .eml files correctly as message/rfc822 and instead
+ # detects text/plain.
+ # This also effects direct file consumption of .eml files
+ # which are not treated with this workaround.
+ from_element = None
+ for i, header in enumerate(message.obj._headers):
+ if header[0] == "From":
+ from_element = i
+ if from_element:
+ new_headers = [message.obj._headers.pop(from_element)]
+ new_headers += message.obj._headers
+ message.obj._headers = new_headers
+
+ f.write(message.obj.as_bytes())
+
+ self.log(
+ "info",
+ f"Rule {rule}: "
+ f"Consuming eml from mail "
+ f"{message.subject} from {message.from_}",
+ )
+
+ consume_file.delay(
+ path=temp_filename,
+ override_filename=pathvalidate.sanitize_filename(
+ message.subject + ".eml",
+ ),
+ override_title=message.subject,
+ override_correspondent_id=correspondent.id if correspondent else None,
+ override_document_type_id=doc_type.id if doc_type else None,
+ override_tag_ids=tag_ids,
+ )
+ processed_elements = 1
+ return processed_elements
--- /dev/null
+# Generated by Django 4.0.4 on 2022-07-11 22:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("paperless_mail", "0015_alter_mailrule_action"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="mailrule",
+ name="consumption_scope",
+ field=models.PositiveIntegerField(
+ choices=[
+ (1, "Only process attachments."),
+ (
+ 2,
+ "Process full Mail (with embedded attachments in file) as .eml",
+ ),
+ (
+ 3,
+ "Process full Mail (with embedded attachments in file) as .eml + process attachments as separate documents",
+ ),
+ ],
+ default=1,
+ verbose_name="consumption scope",
+ ),
+ ),
+ ]
verbose_name = _("mail rule")
verbose_name_plural = _("mail rules")
+ class ConsumptionScope(models.IntegerChoices):
+ ATTACHMENTS_ONLY = 1, _("Only process attachments.")
+ EML_ONLY = 2, _("Process full Mail (with embedded attachments in file) as .eml")
+ EVERYTHING = 3, _(
+ "Process full Mail (with embedded attachments in file) as .eml "
+ "+ process attachments as separate documents",
+ )
+
class AttachmentProcessing(models.IntegerChoices):
ATTACHMENTS_ONLY = 1, _("Only process attachments.")
EVERYTHING = 2, _("Process all files, including 'inline' " "attachments.")
),
)
+ consumption_scope = models.PositiveIntegerField(
+ _("consumption scope"),
+ choices=ConsumptionScope.choices,
+ default=ConsumptionScope.ATTACHMENTS_ONLY,
+ )
+
action = models.PositiveIntegerField(
_("action"),
choices=MailAction.choices,
--- /dev/null
+import os
+import re
+from html import escape
+from io import BytesIO
+from io import StringIO
+
+import requests
+from bleach import clean
+from bleach import linkify
+from django.conf import settings
+from documents.parsers import DocumentParser
+from documents.parsers import make_thumbnail_from_pdf
+from documents.parsers import ParseError
+from humanfriendly import format_size
+from imap_tools import MailMessage
+from tika import parser
+
+
+class MailDocumentParser(DocumentParser):
+ """
+ This parser uses imap_tools to parse .eml files, generates pdf using
+ gotenbergs and sends the html part to a local tika server for text extraction.
+ """
+
+ gotenberg_server = settings.TIKA_GOTENBERG_ENDPOINT
+ tika_server = settings.TIKA_ENDPOINT
+
+ logging_name = "paperless.parsing.mail"
+ _parsed = None
+
+ def get_parsed(self, document_path) -> MailMessage:
+ if not self._parsed:
+ try:
+ with open(document_path, "rb") as eml:
+ self._parsed = MailMessage.from_bytes(eml.read())
+ except Exception as err:
+ raise ParseError(
+ f"Could not parse {document_path}: {err}",
+ )
+ if not self._parsed.from_values:
+ self._parsed = None
+ raise ParseError(
+ f"Could not parse {document_path}: Missing 'from'",
+ )
+
+ return self._parsed
+
+ def get_thumbnail(self, document_path, mime_type, file_name=None):
+ if not self.archive_path:
+ self.archive_path = self.generate_pdf(document_path)
+
+ return make_thumbnail_from_pdf(
+ self.archive_path,
+ self.tempdir,
+ self.logging_group,
+ )
+
+ def extract_metadata(self, document_path, mime_type):
+ result = []
+
+ try:
+ mail = self.get_parsed(document_path)
+ except ParseError as e:
+ self.log(
+ "warning",
+ f"Error while fetching document metadata for " f"{document_path}: {e}",
+ )
+ return result
+
+ for key, value in mail.headers.items():
+ value = ", ".join(i for i in value)
+
+ result.append(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": key,
+ "value": value,
+ },
+ )
+
+ result.append(
+ {
+ "namespace": "",
+ "prefix": "",
+ "key": "attachments",
+ "value": ", ".join(
+ f"{attachment.filename}"
+ f"({format_size(attachment.size, binary=True)})"
+ for attachment in mail.attachments
+ ),
+ },
+ )
+
+ result.append(
+ {
+ "namespace": "",
+ "prefix": "",
+ "key": "date",
+ "value": mail.date.strftime("%Y-%m-%d %H:%M:%S %Z"),
+ },
+ )
+
+ result.sort(key=lambda item: (item["prefix"], item["key"]))
+ return result
+
+ def parse(self, document_path, mime_type, file_name=None):
+ def strip_text(text: str):
+ text = re.sub(r"\s+", " ", text)
+ text = re.sub(r"(\n *)+", "\n", text)
+ return text.strip()
+
+ mail = self.get_parsed(document_path)
+
+ self.text = f"Subject: {mail.subject}\n\n"
+ self.text += f"From: {mail.from_values.full}\n\n"
+ self.text += f"To: {', '.join(address.full for address in mail.to_values)}\n\n"
+ if len(mail.cc_values) >= 1:
+ self.text += (
+ f"CC: {', '.join(address.full for address in mail.cc_values)}\n\n"
+ )
+ if len(mail.bcc_values) >= 1:
+ self.text += (
+ f"BCC: {', '.join(address.full for address in mail.bcc_values)}\n\n"
+ )
+ if len(mail.attachments) >= 1:
+ att = []
+ for a in mail.attachments:
+ att.append(f"{a.filename} ({format_size(a.size, binary=True)})")
+
+ self.text += f"Attachments: {', '.join(att)}\n\n"
+
+ if mail.html != "":
+ self.text += "HTML content: " + strip_text(self.tika_parse(mail.html))
+
+ self.text += f"\n\n{strip_text(mail.text)}"
+
+ self.date = mail.date
+ self.archive_path = self.generate_pdf(document_path)
+
+ def tika_parse(self, html: str):
+ self.log("info", "Sending content to Tika server")
+
+ try:
+ parsed = parser.from_buffer(html, self.tika_server)
+ except Exception as err:
+ raise ParseError(
+ f"Could not parse content with tika server at "
+ f"{self.tika_server}: {err}",
+ )
+ if parsed["content"]:
+ return parsed["content"]
+ else:
+ return ""
+
+ def generate_pdf(self, document_path):
+ pdf_collection = []
+ url_merge = self.gotenberg_server + "/forms/pdfengines/merge"
+ pdf_path = os.path.join(self.tempdir, "merged.pdf")
+ mail = self.get_parsed(document_path)
+
+ pdf_collection.append(("1_mail.pdf", self.generate_pdf_from_mail(mail)))
+
+ if mail.html == "":
+ with open(pdf_path, "wb") as file:
+ file.write(pdf_collection[0][1])
+ file.close()
+ return pdf_path
+ else:
+ pdf_collection.append(
+ (
+ "2_html.pdf",
+ self.generate_pdf_from_html(mail.html, mail.attachments),
+ ),
+ )
+
+ files = {}
+ for name, content in pdf_collection:
+ files[name] = (name, BytesIO(content))
+ headers = {}
+ try:
+ response = requests.post(url_merge, files=files, headers=headers)
+ response.raise_for_status() # ensure we notice bad responses
+ except Exception as err:
+ raise ParseError(f"Error while converting document to PDF: {err}")
+
+ with open(pdf_path, "wb") as file:
+ file.write(response.content)
+ file.close()
+
+ return pdf_path
+
+ @staticmethod
+ def mail_to_html(mail: MailMessage) -> StringIO:
+ data = {}
+
+ def clean_html(text: str):
+ if isinstance(text, list):
+ text = "\n".join([str(e) for e in text])
+ if type(text) != str:
+ text = str(text)
+ text = escape(text)
+ text = clean(text)
+ text = linkify(text, parse_email=True)
+ text = text.replace("\n", "<br>")
+ return text
+
+ data["subject"] = clean_html(mail.subject)
+ if data["subject"] != "":
+ data["subject_label"] = "Subject"
+ data["from"] = clean_html(mail.from_values.full)
+ if data["from"] != "":
+ data["from_label"] = "From"
+ data["to"] = clean_html(", ".join(address.full for address in mail.to_values))
+ if data["to"] != "":
+ data["to_label"] = "To"
+ data["cc"] = clean_html(", ".join(address.full for address in mail.cc_values))
+ if data["cc"] != "":
+ data["cc_label"] = "CC"
+ data["bcc"] = clean_html(", ".join(address.full for address in mail.bcc_values))
+ if data["bcc"] != "":
+ data["bcc_label"] = "BCC"
+
+ att = []
+ for a in mail.attachments:
+ att.append(f"{a.filename} ({format_size(a.size, binary=True)})")
+ data["attachments"] = clean_html(", ".join(att))
+ if data["attachments"] != "":
+ data["attachments_label"] = "Attachments"
+
+ data["date"] = clean_html(mail.date.astimezone().strftime("%Y-%m-%d %H:%M"))
+ data["content"] = clean_html(mail.text.strip())
+
+ html = StringIO()
+
+ from django.template.loader import render_to_string
+
+ rendered = render_to_string("email_msg_template.html", context=data)
+
+ html.write(rendered)
+ html.seek(0)
+
+ return html
+
+ def generate_pdf_from_mail(self, mail):
+
+ url = self.gotenberg_server + "/forms/chromium/convert/html"
+ self.log("info", "Converting mail to PDF")
+
+ css_file = os.path.join(os.path.dirname(__file__), "templates/output.css")
+
+ with open(css_file, "rb") as css_handle:
+
+ files = {
+ "html": ("index.html", self.mail_to_html(mail)),
+ "css": ("output.css", css_handle),
+ }
+ headers = {}
+ data = {
+ "marginTop": "0.1",
+ "marginBottom": "0.1",
+ "marginLeft": "0.1",
+ "marginRight": "0.1",
+ "paperWidth": "8.27",
+ "paperHeight": "11.7",
+ "scale": "1.0",
+ }
+ try:
+ response = requests.post(
+ url,
+ files=files,
+ headers=headers,
+ data=data,
+ )
+ response.raise_for_status() # ensure we notice bad responses
+ except Exception as err:
+ raise ParseError(f"Error while converting document to PDF: {err}")
+
+ return response.content
+
+ @staticmethod
+ def transform_inline_html(html, attachments):
+ def clean_html_script(text: str):
+ compiled_open = re.compile(re.escape("<script"), re.IGNORECASE)
+ text = compiled_open.sub("<div hidden ", text)
+
+ compiled_close = re.compile(re.escape("</script"), re.IGNORECASE)
+ text = compiled_close.sub("</div", text)
+ return text
+
+ html_clean = clean_html_script(html)
+ files = []
+
+ for a in attachments:
+ name_cid = "cid:" + a.content_id
+ name_clean = "".join(e for e in name_cid if e.isalnum())
+ files.append((name_clean, BytesIO(a.payload)))
+ html_clean = html_clean.replace(name_cid, name_clean)
+
+ files.append(("index.html", StringIO(html_clean)))
+
+ return files
+
+ def generate_pdf_from_html(self, orig_html, attachments):
+ url = self.gotenberg_server + "/forms/chromium/convert/html"
+ self.log("info", "Converting html to PDF")
+
+ files = {}
+ for name, file in self.transform_inline_html(orig_html, attachments):
+ files[name] = (name, file)
+
+ headers = {}
+ data = {
+ "marginTop": "0.1",
+ "marginBottom": "0.1",
+ "marginLeft": "0.1",
+ "marginRight": "0.1",
+ "paperWidth": "8.27",
+ "paperHeight": "11.7",
+ "scale": "1.0",
+ }
+ try:
+ response = requests.post(
+ url,
+ files=files,
+ headers=headers,
+ data=data,
+ )
+ response.raise_for_status() # ensure we notice bad responses
+ except Exception as err:
+ raise ParseError(f"Error while converting document to PDF: {err}")
+
+ return response.content
--- /dev/null
+from documents.serialisers import CorrespondentField
+from documents.serialisers import DocumentTypeField
+from documents.serialisers import TagsField
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from rest_framework import serializers
+
+
+class ObfuscatedPasswordField(serializers.Field):
+ """
+ Sends *** string instead of password in the clear
+ """
+
+ def to_representation(self, value):
+ return "*" * len(value)
+
+ def to_internal_value(self, data):
+ return data
+
+
+class MailAccountSerializer(serializers.ModelSerializer):
+ password = ObfuscatedPasswordField()
+
+ class Meta:
+ model = MailAccount
+ depth = 1
+ fields = [
+ "id",
+ "name",
+ "imap_server",
+ "imap_port",
+ "imap_security",
+ "username",
+ "password",
+ "character_set",
+ ]
+
+ def update(self, instance, validated_data):
+ if "password" in validated_data:
+ if len(validated_data.get("password").replace("*", "")) == 0:
+ validated_data.pop("password")
+ super().update(instance, validated_data)
+ return instance
+
+ def create(self, validated_data):
+ mail_account = MailAccount.objects.create(**validated_data)
+ return mail_account
+
+
+class AccountField(serializers.PrimaryKeyRelatedField):
+ def get_queryset(self):
+ return MailAccount.objects.all().order_by("-id")
+
+
+class MailRuleSerializer(serializers.ModelSerializer):
+ account = AccountField(required=True)
+ action_parameter = serializers.CharField(
+ allow_null=True,
+ required=False,
+ default="",
+ )
+ assign_correspondent = CorrespondentField(allow_null=True, required=False)
+ assign_tags = TagsField(many=True, allow_null=True, required=False)
+ assign_document_type = DocumentTypeField(allow_null=True, required=False)
+ order = serializers.IntegerField(required=False)
+
+ class Meta:
+ model = MailRule
+ depth = 1
+ fields = [
+ "id",
+ "name",
+ "account",
+ "folder",
+ "filter_from",
+ "filter_subject",
+ "filter_body",
+ "filter_attachment_filename",
+ "maximum_age",
+ "action",
+ "action_parameter",
+ "assign_title_from",
+ "assign_tags",
+ "assign_correspondent_from",
+ "assign_correspondent",
+ "assign_document_type",
+ "order",
+ "attachment_type",
+ ]
+
+ def update(self, instance, validated_data):
+ super().update(instance, validated_data)
+ return instance
+
+ def create(self, validated_data):
+ if "assign_tags" in validated_data:
+ assign_tags = validated_data.pop("assign_tags")
+ mail_rule = MailRule.objects.create(**validated_data)
+ if assign_tags:
+ mail_rule.assign_tags.set(assign_tags)
+ return mail_rule
+
+ def validate(self, attrs):
+ if (
+ attrs["action"] == MailRule.MailAction.TAG
+ or attrs["action"] == MailRule.MailAction.MOVE
+ ) and attrs["action_parameter"] is None:
+ raise serializers.ValidationError("An action parameter is required.")
+
+ return attrs
--- /dev/null
+def get_parser(*args, **kwargs):
+ from .parsers import MailDocumentParser
+
+ return MailDocumentParser(*args, **kwargs)
+
+
+def mail_consumer_declaration(sender, **kwargs):
+ return {
+ "parser": get_parser,
+ "weight": 20,
+ "mime_types": {
+ "message/rfc822": ".eml",
+ },
+ }
--- /dev/null
+{% autoescape off %}
+<!doctype html>
+<html>
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <link href="output.css" rel="stylesheet">
+</head>
+
+<body class="bg-white w-screen flex flex-col items-center">
+ <div class="container max-w-4xl">
+ <!-- Header -->
+ <div class="grid gap-x-2 bg-slate-200 p-4">
+
+ <div class="col-start-9 col-span-4 row-start-1 text-right">{{ date }}</div>
+
+ <div class="col-start-1 row-start-1 text-slate-400 text-right">{{ from_label }}</div>
+ <div class="col-start-2 col-span-7 row-start-1">{{ from }}</div>
+
+ <div class="col-start-1 row-start-2 text-slate-400 text-right">{{ subject_label }}</div>
+ <div class=" col-start-2 col-span-10 row-start-2 font-bold">{{ subject }}</div>
+
+ <div class="col-start-1 row-start-3 text-slate-400 text-right">{{ to_label }}</div>
+ <div class="col-start-2 col-span-10 row-start-3 text-sm my-0.5">{{ to }}</div>
+
+ <div class="col-start-1 row-start-4 text-slate-400 text-right">{{ cc_label }}</div>
+ <div class="col-start-2 col-span-10 row-start-4 text-sm my-0.5">{{ cc }}</div>
+
+ <div class="col-start-1 row-start-5 text-slate-400 text-right">{{ bcc_label }}</div>
+ <div class="col-start-2 col-span-10 row-start-5" text-sm my-0.5>{{ bcc }}</div>
+
+ <div class="col-start-1 row-start-6 text-slate-400 text-right">{{ attachments_label }}</div>
+ <div class="col-start-2 col-span-10 row-start-6">{{ attachments }}</div>
+ </div>
+
+ <!-- Separator-->
+ <div class="border-t border-solid border-b w-full h-[1px] box-content border-black mb-5 bg-slate-200"></div>
+
+ <!-- Content-->
+ <div class="w-full break-words">{{ content }}</div>
+ </div>
+
+</body>
+
+</html>
+
+{% endautoescape %}
--- /dev/null
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
--- /dev/null
+/*
+! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com
+*/
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box;
+ /* 1 */
+ border-width: 0;
+ /* 2 */
+ border-style: solid;
+ /* 2 */
+ border-color: #e5e7eb;
+ /* 2 */
+}
+
+::before,
+::after {
+ --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+*/
+
+html {
+ line-height: 1.5;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+ -moz-tab-size: 4;
+ /* 3 */
+ -o-tab-size: 4;
+ tab-size: 4;
+ /* 3 */
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ /* 4 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0;
+ /* 1 */
+ line-height: inherit;
+ /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ border-top-width: 1px;
+ /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0;
+ /* 1 */
+ border-color: inherit;
+ /* 2 */
+ border-collapse: collapse;
+ /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ line-height: inherit;
+ /* 1 */
+ color: inherit;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+ padding: 0;
+ /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button;
+ /* 1 */
+ background-color: transparent;
+ /* 2 */
+ background-image: none;
+ /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+input:-ms-input-placeholder, textarea:-ms-input-placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1;
+ /* 1 */
+ color: #9ca3af;
+ /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block;
+ /* 1 */
+ vertical-align: middle;
+ /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/*
+Ensure the default browser behavior of the `hidden` attribute.
+*/
+
+[hidden] {
+ display: none;
+}
+
+*, ::before, ::after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgb(59 130 246 / 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+.container {
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+}
+
+@media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+}
+
+@media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+}
+
+@media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+}
+
+.col-span-2 {
+ grid-column: span 2 / span 2;
+}
+
+.col-span-8 {
+ grid-column: span 8 / span 8;
+}
+
+.col-span-10 {
+ grid-column: span 10 / span 10;
+}
+
+.col-span-3 {
+ grid-column: span 3 / span 3;
+}
+
+.col-span-4 {
+ grid-column: span 4 / span 4;
+}
+
+.col-span-7 {
+ grid-column: span 7 / span 7;
+}
+
+.col-start-11 {
+ grid-column-start: 11;
+}
+
+.col-start-1 {
+ grid-column-start: 1;
+}
+
+.col-start-2 {
+ grid-column-start: 2;
+}
+
+.col-start-10 {
+ grid-column-start: 10;
+}
+
+.col-start-9 {
+ grid-column-start: 9;
+}
+
+.row-start-1 {
+ grid-row-start: 1;
+}
+
+.row-start-2 {
+ grid-row-start: 2;
+}
+
+.row-start-3 {
+ grid-row-start: 3;
+}
+
+.row-start-4 {
+ grid-row-start: 4;
+}
+
+.row-start-5 {
+ grid-row-start: 5;
+}
+
+.row-start-6 {
+ grid-row-start: 6;
+}
+
+.my-1 {
+ margin-top: 0.25rem;
+ margin-bottom: 0.25rem;
+}
+
+.my-0\.5 {
+ margin-top: 0.125rem;
+ margin-bottom: 0.125rem;
+}
+
+.my-0 {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.mb-5 {
+ margin-bottom: 1.25rem;
+}
+
+.box-content {
+ box-sizing: content-box;
+}
+
+.flex {
+ display: flex;
+}
+
+.grid {
+ display: grid;
+}
+
+.h-\[1px\] {
+ height: 1px;
+}
+
+.w-screen {
+ width: 100vw;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.max-w-4xl {
+ max-width: 56rem;
+}
+
+.grid-cols-12 {
+ grid-template-columns: repeat(12, minmax(0, 1fr));
+}
+
+.grid-rows-5 {
+ grid-template-rows: repeat(5, minmax(0, 1fr));
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.gap-x-2 {
+ -moz-column-gap: 0.5rem;
+ column-gap: 0.5rem;
+}
+
+.whitespace-pre-line {
+ white-space: pre-line;
+}
+
+.break-words {
+ overflow-wrap: break-word;
+}
+
+.border-t {
+ border-top-width: 1px;
+}
+
+.border-b {
+ border-bottom-width: 1px;
+}
+
+.border-solid {
+ border-style: solid;
+}
+
+.border-black {
+ --tw-border-opacity: 1;
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+
+.bg-slate-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity));
+}
+
+.p-4 {
+ padding: 1rem;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-sm {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+
+.font-bold {
+ font-weight: 700;
+}
+
+.text-slate-400 {
+ --tw-text-opacity: 1;
+ color: rgb(148 163 184 / var(--tw-text-opacity));
+}
+
+.text-blue-600 {
+ --tw-text-opacity: 1;
+ color: rgb(37 99 235 / var(--tw-text-opacity));
+}
+
+.underline {
+ -webkit-text-decoration-line: underline;
+ text-decoration-line: underline;
+}
--- /dev/null
+{
+ "name": "phail-html",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "devDependencies": {
+ "tailwindcss": "^3.0.24"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+ "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "node_modules/detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.12",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
+ "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.1",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dev": true,
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.6"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.0.24",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
+ "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
+ "dev": true,
+ "dependencies": {
+ "arg": "^5.0.1",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.11",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.12",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ }
+ },
+ "dependencies": {
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+ "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ }
+ },
+ "didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "lilconfig": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.12",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
+ "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.1",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "dev": true,
+ "requires": {
+ "camelcase-css": "^2.0.1"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dev": true,
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ }
+ },
+ "postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.6"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "tailwindcss": {
+ "version": "3.0.24",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
+ "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
+ "dev": true,
+ "requires": {
+ "arg": "^5.0.1",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.11",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.12",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ }
+ }
+}
--- /dev/null
+{
+ "devDependencies": {
+ "tailwindcss": "^3.0.24"
+ }
+}
--- /dev/null
+module.exports = {
+ content: ['./*.html'],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
--- /dev/null
+This is not a valid eml.
--- /dev/null
+Return-Path: <someone@example.de>
+Delivered-To: someoneelse@example.de
+Received: from mail.example.de
+ by mail.example.de with LMTP id KDcHIQh8fmPHVQAAFx6lBw
+ for <someoneelse@example.de>; Sat, 15 Oct 2022 09:23:20 +0000
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.de;
+ s=2018; t=1665825800;
+ h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
+ to:to:cc:mime-version:mime-version:content-type:content-type;
+ bh=/6OzHOWcwCHrfo1mlk+KcsiTCkt9lN5CEU2AETZBM/M=;
+ b=AM/Q8Xlmh5jmccjofuedENG9dk1K9ItOL7CBtRhQlTEkjJqb1e1WgrT86SZmU5K9WTVerX
+ b0GgndG9xavsCSsaKrZX9rIbozFVY1+pr80sl+sZB/UbUFlr2C4/CALwUBveC6H+HcAJUR
+ uRQycv5zuGm8XAXdo28oFWxCKcAsE0Vs+b8UNs5Qd0VJY9inquLKXHlvLYx+ivnkg/yPCZ
+ ZiOfv4+Ljfxh3oq6vjN0G7pHmANn1U3MmTLivgGLocl+PPxOCCzHeRp38gJQi3NC75JA/B
+ 4bSJxwjV0ghnq5z7RG/Yo8d9zlB8l7z31PwCNzbPy/bJVC2EFBvHdhVqow==
+Content-Type: multipart/mixed; boundary="------------6FpezQEQZc7E309m0sKHeaNu"
+Message-ID: <a9215c39-5464-8dbf-bb8a-c9fa95eee30f@example.de>
+Date: Sat, 15 Oct 2022 11:23:19 +0200
+MIME-Version: 1.0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
+ Thunderbird/102.4.0
+To: someone@example.de
+From: Name <someone@example.de>
+Content-Language: en-US
+X-Last-TLS-Session-Version: TLSv1.3
+Subject: HTML Message
+
+This is a multi-part message in MIME format.
+--------------6FpezQEQZc7E309m0sKHeaNu
+Content-Type: multipart/alternative;
+ boundary="------------Ny4NE0BVNKgkbFGTIy1tAjo6"
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6
+Content-Type: text/plain; charset=UTF-8; format=flowed
+Content-Transfer-Encoding: 7bit
+
+Some Text
+
+and an embedded image.
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6
+Content-Type: multipart/related;
+ boundary="------------UpACVYsiyWaYgeZ6U0yeiTdy"
+
+--------------UpACVYsiyWaYgeZ6U0yeiTdy
+Content-Type: text/html; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+<html>
+ <head>
+
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <p>Some Text</p>
+ <p>
+ <img src="cid:part1.pNdUSz0s.D3NqVtPg@example.de" alt="Has to be rewritten to work..">
+ <img src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png" alt="This image should not be shown.">
+ </p>
+
+ <p>and an embedded image.<br>
+ </p>
+ <p id="changeme">Paragraph unchanged.</p>
+ <scRipt>
+ document.getElementById("changeme").innerHTML = "Paragraph changed via Java Script.";
+ </script>
+ </body>
+</html>
+--------------UpACVYsiyWaYgeZ6U0yeiTdy
+Content-Type: image/png; name="IntM6gnXFm00FEV5.png"
+Content-Disposition: inline; filename="IntM6gnXFm00FEV5.png"
+Content-Id: <part1.pNdUSz0s.D3NqVtPg@example.de>
+Content-Transfer-Encoding: base64
+
+iVBORw0KGgoAAAANSUhEUgAAAF0AAABdCAIAAABIE/2UAAAACXBIWXMAAA7EAAAOxAGVKw4b
+AAAbQ0lEQVR4nO18eZxcVZX/+Z773qvq6iUbWSCsgsiu4BIEcQGRURAEHXWcGcdlXGB+I86o
+g/7QQUHA+aGiAdFxHFTAARRlU0RBRFRAcRRkE4iShLBFkpBOd1fVe/ee7++Pe191JzRJE0Bi
+Zk76U13dqXr93vede873fM+5BZLyv/YY02f6BDZR+19cJrfsmT6Bp9MohIDC+AMgQqEg/UAR
+xB8E674V/4PiS7zQx0AwqW3u/iICEYLjTpHcAEIKgPR93bdu7vElXrBBSBJCCg0iYiKW/hOT
+LZjN0F9IAiB7cSVaDCiMjiIgkByFmGRtbW649EABIHXkjaE1RWGICE1UIPr4oXVzw6UHSswn
+8QnFAMRwIwRVjKQIImb/Q/wlPjEzVfXeC6RkmalzVBHVuJ5EhICIQDBZnt4c4m7yg9oAmJmI
+mBkAoy1dvmRNNUqIRCdixCFFoEkX0+aAS1wHqK0XXMwMgm7VvfDSb3VDVxSAigkoTsQJYrB5
+bJKWzQMXxn8kY4YhIQBQ+VKdXvvza7/z/UtNQQqNgJgwQpNS9GQOs1ngQgqEwoohEThKVXa8
+lo/45V+46AuLV9/74xuvycRZMIJQo5CW3j4pf/mzx2U8MQscNF6kWaAz18hO+cKpdy65UxwX
+L1kM1IQXlhhwSlCTHPbPHhcAwphwoSIgjBwNY4289b2ff/+Cyy7QlsuK/IHlD3bNuywTQUrQ
+EE6ei0T+fHGJ+TglICFjciGM7LLKGsWNS276zFdOtz5YIaJYtepRA4MZhca6un78KvLPlb9M
+5G8pPlBCYDt0WcjN99xy7Mf/cenK+/qm9XVDaUIoKKCQgNU5qKbAfzb8JS59Su0IFFIkPZKk
+TCS10VSlstI13aiMffKMk+/9433N6QMdX4m6omgsWbpkrNPO8ywlr1QyCmVyn9k0cUlENAaC
++osQIHIT9IATqVdTtyyzhi5bvvSYD//DbUvubM7s74SuukKoAhkZGTNv0cmICdXk45zBpohL
+nSqiWyQXMYLkhCuLcUJIGq1TdfIiW75y+Uf/7aM//eV1zFlZgLooKZhRVIIE9nLQ49Dcnm2K
+uPRuJ0jCjDRIEAZIIE3EIoMjQmU+hOFypGjkP7vr568//q+uvPVHfXP7jSEXOC/iTUSoEJFc
+FYAjMxG3Id1uU4y7URQwiUUdYmh0IqQoCVULBohAg1hp5WDf4CU/veS4U457NBsbmjWtqioR
+MlABAQyJByMqLoyEuLbH0Xc3RVykV/sTESMhRKgiIqBRI6MNpSvyYN1P/sep37zywrZWzb5m
+VfrobQB6eWqC7CAWZZkJQExaH22KuFDiNcGEEmOt0EhAKEYRQEsri6J564N3fPJzJ193889c
+v+NAFoLH2oEjiv5rKXgkNMb19dmmiEtMPSY0Ee3xN+89SDWK0AHOXfzTS04589SlK5b1zerv
+sPIMOUAjXK2wQMREVMwCoEZuINhOsGcSF46H2FjsMarzIkIQJqI9lQ2auXbVrsz6mv0r/YoT
+Tzvxe9de0c18MbPZDl0qANBEVU2oUWegAUrSOReCJ8m0tjjxr0/qOM8kLhh/TN2KqBOYiFJs
+Ys8LUlaVZciy/p/ddtPC80+/9sZr+6f3qZNSSqrAnBMVMQpRF4WoYSY5ffqMPMshEICgmrDu
+kEzaJ3lm/aVuB1JiAEhn2cvTJhAxM4JaZA8+8vDCr5518VWXjbjVfbNapVRmXjLV4JRQgoCp
+qYlo7S+iCvHeb731/L6+hnkCAJEoENJffuy5PaO4MN5ReFBIF6MJSaEJQVWvnh5NF4Q/+PUP
+P/rpExY/fG9r5mAfmiSVTuEkEKIAidpZ6guNoKsoTDJozkyMVApJBZKbYJPQvdeqa2rdGRRI
+yr6kCDQETwmCqtlo3vPwH/79/C9f9MPvdLNyYM600kpnDkxLIh02ZvXHXGBK955bzd1SBcFX
+WUPZKzYpCtpkHvOnxiWeQjoRMlZwWcyfFKScKt3KN1t9XrrfvemK077wmdsX3dGc0UKuPhjU
+xUtJEnY8LCE14xl3AApBB7XKD7UGVRDqmAZhlG02lXW0lr+QUKUZIDRCIm9hJ1SDrdZvl961
+8ILP/uAnV1bm++cOdqwUIJgJJVNEajbuIOPfJ/wOoDAEm94/bZ899yGo0DTFkNzNLAL8jPvL
+Wv3ACBAQfCVGwjyD5FmujQt/fNkpnzt1SXtR/7RWJkXHOnQgxDlHMzGJBGf93Cz6Qqj87P7Z
+L9j9BUKIquiEOlyAmvut894/BS6saWvU6evkk5xFRES1sqq0smg2lq5c9sWvf/nbV14aMhuY
+PhBYCQOgqeUTTEmI1m2x+vpjdhaRqDbVvROBBB+222G7vqxJi0FdKFAhhCaqYozZ60+PS13r
+pP5eTeKSmmjGThUCOK057bKfX/6ps/7tdw/c09iiZWrqTUWZQrOIGOtQndRL1MevBVtJ4ZdC
+CEWhZVnt+uxdBlwrlMFBCRKkxHmG5L2PJTB/Yn8Z76PHhjHIEEo0tKr8Z88940vnfXEU7YG5
+Q6M2QkUfGhGKyE9Rt4rWaSr3/CX+MvpLzFAKsRDmDM0GaWaZcxG5GHQt6izPWN0YuazQ6CkO
+VIj40ouYIDSK1k33/Phf/9+Jt//+rmyoxTzrBHNosQpBpBco41FiJotQTUg7AtIgJpZR1NQg
+ldIUIfhpzf49tt2NInA0NQicZLGTnwDZOFweq6ROtIl9z8d7FwGN6ppmkcKqgGKVVK2ieeGP
+zj/+08ePWac1c6BDH2KeDXCiomZMIalmOzUcE0piCAWa2iUWfwQFCkhgf6O1x3P2AACo0ZSq
+qmKaBIaN1l/WYhxrX/bEF6zvXawnuiiAIIi3MkjVZvuz55xx5jlfzFvImwMd86aRvMchHsbU
+AY4XmD35fnxwUOqLi4sVUfg0QB3Ud8Jzdn3OjJkz4h1yzkn8X01N/HUgfgK4TOov6/xm/f6S
+bmfUUARmFVyAyr+c9OHzr754aKuZlVnHShcvuZ6gjDM8E7xxrUtYt/lDYcpRZNTjyBx5Z3T4
+uTvv1cpawXt1Lg5/RKgx6f2cIi4TL368UVOP3PTmBx7vvQkdYdSog7Ebyizn8pUPfui0j1x3
+6w1DW03vqhcycwhmGhupvXZ6T3HbgIpUZyzEcsIAKoVl6HetvXbeM5bRE3GYdO1PGRcmR0hA
+KIQSR0seC5asXR/LBCfqDaRUvps387seuPt9H3vfbUvvKGa2Ar0GQ4wHoJrFBWNKAmpQwrAB
+/lbXE9pjALECYhm2mT3/gH0OoJiq9q5FdcNq//pekY7em1UzETIuUQji1M1agUZSfToRzQiS
+cyoimWL12PD//fQJNy29PZ830GaZCxolc0JpWRBHRsYFIUFB7IlsQGVjLR1EIhBzdZZrp9M9
+7FWHzhuaU1Zl4lATurcbj0sSeCgkzSyIXzmy6re3/1ZSdFxrkq0HQapWo7xcI9gtSx+qDjvH
+nfqhG377i/7ZgyO+SxUEayCHUQkVUUIsBs9YYyMV2+u11FLqddwgFAllGGi0XnPga0Tg1EU/
+wgTbeFzGPaVk5Suv4b8X33z6BQuHuSbQKycmCpH6OymhLo4liFUWLFTircBJ55580U++M21W
+SztlXylNy03QVYooRAM0KKggoKKZAWuVho+PSyLTdCwF3sQy5DJmu87feadtdgpGVbehY0wN
+l3F9JGVK8eYrC5dfdfkNv7mhHTqaaWrycvz1iMw+gRWZOI3mEQaK/qtv/NG5F/3XjLkzu1VX
+gUxUzAQwxFlaEOkLQNTfxgn+eq2nXRJmMIo6c9VoddjBr5meDQTvVcfHMyelHVPFZfxtEFC8
+WLPRt3TF0ht/84vhsZHLr/4u4EytDrB12oZEMh4viUJRGCyDu+ehe888+wsuzwKJzJnFSkfq
+GEJJi4dITfn0THphfD1WMz8PJTIn6rth+y23ffmCl3WqTu5y1sVHL7JsZHwZfxtFVAga+K3L
+vr34gfvQ1G9c9I37Rx6opOpVxnWgETC12euBAQYNlfqTzjjp1ntuzZq5kSEEOGf1yUbBIabS
+3lfv2ZT8JVVNoIOZOMn9muo9b/n7PbfezXyFEGdkesn6SfjL+J80hhAIGbH2Tbf8d8gsG8zv
+XPy7q268Ond5t+z44M3MzJjIVFxIkaRKYMiy/Cc3/+y6X/20mN5XiQVlarAiMfA0l4LJ59ym
+YjWdZzDLXVaNls/acvvXv/qoQN8oGqIT+P6U7XH9hazHW0nNdNGSRYuWLEJDK3jX78779nlL
+Hr0vi52HtdedUMRIEwAm7IbOOd88Zw1Hq8IHkACdBJJJeAbrcnnDp91bVfVXGoyJSxJw1IzK
+sfC6Q47YophFI8TBaWwtTd5wfUK4pEulxJyTqfvd3b9bPTactbK2tRuDzVvuuHnh2QuLrKjK
+SiZuYorMkwQQLBRa3HLXrb+65abGYNHVMoiZiAmpNQFMNGVq/pIWQx2TUpgeJ0q5Oj9Wzuwf
+evUrXiUUB0doSK+UJ+SQjxt3U7YnBOLpb7njlsoqgi5z7W53aIvp3/nuxd/78RWNZsPoRWK9
+HEdUxgckDXbeReeOVKOSa7AQG8P1zg6wDiw9dW0D1pt1SoBEeKhQEZFABFoV3v32d++67XNC
+8IDGSoipdf9U+EsPIFWMofPw8P0h76og90VmRQXrDvlPfOXk+9sPBvH0XgkxUlCJmFogTeX2
+h+685pZrbcgCrQjNzCOjOBMXM9ETOM8aGJG4sklHc0IHceZNzRqqYbi73x77vuP175SQZ5JJ
+ECWyuFrjwn2SuNR5lzHjlFX3/gfvLxqF95WESLkNuS5btezE009aMbJSnVpitwIRHzyFCtx9
+z91ruiOSqxmVqgRItQmhBfJE/CVdGcREaDAqPUOWxx6s9KN1zNuO7pOm+B7qBDxoeIJ3Yf3+
+AhFRaFVWyx9erqrJY+MfpBX9xQWXXbDwnDOQZZ5lZIBqdHAWghL3LP79aLsNOMT6IMZd1KOl
+mBBBZQr5IomTAjEgCCyIRwZPE3GrVw6/6dVvfOmeL/VVlasm/QrBGJhU/yftLz0+Ek/6oRUP
+Rbmorsok3uIuyplbz/qvSy74zk8vdnnR9aUQsOi3Uor9fsm9LssMluqX1JdAVJ6Sj0zdXxI6
+EUSjBCIYg4p2R8v9n/+S97/9WOn4gjmgBAWpA1Dnu6covkAkhADghuuvX7FyRV4UKUhGwFQM
+VqJyQ/kHTzzuwh9+M28UY2U3mEFYFHlJv/yRR5g7E6lHfZ4iS+UCBZKLSsfm9M0+9YOnzBma
+o3SZZiKisSqX3hinbLAun2jr85dEnIWddjelJ60HMkQgWnkTl83bfv5qP/z5s89YumqpNlwQ
+T9I5HWmPLXlgmeaZ1Z2JqdraPIVpLpP1hSbnomgmmQtORnns3/6f5265R6iYFQ1RiKZ5BYqK
+OHL9w91TxqVX70TCkDdyVUUcuYg3QMSMuWusWTM6fdbM/V6+/+/uu+vDJx73yIqHVZOr+8pX
+wTRTSx2aKUPTawelod1UTI7LD8xIBzgIQjt88L3//I7XvbXqVA4qEqOYpQ2vcEAGKKcQvjaM
+i9QUVqEkd9zhWQP9A+1OR1Wjqh7jgxKNZvPW2297z9+9d8G+Cy770fe+dOGXszzrdjshmMud
+OoQQIHW3cYpW+wssSWP1o8S2WIAZmMGtfvjRV+530NFvfI/zmklGBZUCM6FJTVpSmJyKYjEF
+XOr/h4B77bFbf2tQJDd1Qb2pN1FlQ0NXmvLomjUXn3fBsW89eto2c8++6vxLb7rE9bluGAMr
+xyqn5Ua1JzIpnJiwqDkx7Q0Mgsh85kx9s501QvePo39z0FtOOvoTmc8oJoVBCSjonKgDHKmo
+uWQ87lOFCygki7wYHBgSi3WhReJhVDqIDzP6hy75/uVrxtpvOOzIPz704Jlnf2l1dw0yV/mS
+PmQSIwKmvrxZl1yExhBrMdbBTA1gXrnVD6x+7UGHL/zY57eeNd9o6mDiI8mOyp3GtScTqdJT
+6C8AaQPNwW223NoC03iEQEXEsatommsSHGhccu2V73rzW1+4216/vvWW0876rFOHQmfNmukr
+n0JDGimcAk1JFRcJMUhQmpppsKR3qq7WN73qrz7+/hN85b33RZalida6/qD01k8iRk+wnN6g
+vwjN2GBzzozZoRNg0NQwp5l5p85TqsoNFj/59fVzZsw46pWvNeC711xx6723DbWmz5u7Jb04
+giKmScbbYMJOW5ujBCc9MOE0U8qqP658yyF//cUPn7lFcws1NFwuAojWLSXUmWECV6rhfrK4
+TJCyxcwy5HvsvKeDc3BOtCauNWeFUOXRNSuvvuaHh73iNbNnzV4+uuIHN1zVb83B1oCE6Nsw
+WEpLGzrB+mMmaDB1AOGCNiRHx9DmP77lmOOPOR5BG5L15UWETjVOtvSUnSdr69MxKVTVTDML
+fsELXjRzYLpVIW3hp0CYBa1UO8qcbGX51y44d9ZWc56/+15jvn3Vz68p1XbcYcdQeo20B/Wk
+JWpqsrakWMuME0cVzFdVDteUolrVHeLAmScsPOk9H29qAxRYzZsRY5JLLaSngkCuDxfU9VHw
+Yaetdtxh22eVnTKr291qKIJ0M2nnLIxDLr9z2R9uvueOQ/Y/MGtldy9ZdN1tP9tj9z1bfX3m
+TUCrpXBhr1SqOy2S4KhbGD01x5qNLHS77dWjBy448KunfeXwBYeFTmi6LFMwdrRq+p3G5aag
+e248LmvJwgDJftc68rVHWmWMXUASwszgAa8QY6Z4tL3mljtv323H5wwMtoZHVv/qV7/cZaed
+m1lfhARJGlICSULpQUOoKkmrHUYgqtrUorumM60xdNzRHzrrkwv33WVBOVIVzOOJOxenR3qV
+ci+uPwUOs/5+QNyXLLm6KnSOfOlhe+/+/DVj3ZA7L95QebU+r31V1nYcbpRFQx9aumyrrbYb
+zPty86MjK+b2z9lxm12rtmbIxLqMG2YIo0aaF7OUOvXew2mc3BV14tzo6Fjn4fCK3V75vbOu
++MBR7x+yweAtbzWsIalvWwvjIoDGoflxN39acOnhk5BR573NbEx/+5F/4ypRE8lQihdHNVET
+UTWFiN1//zLAOZcVWfHwQw81WOz7wn19p1JKrnASlEFJpWn8fBqaU/G+cqpq0pCswRxj1nlk
+9MW7L/jsJ0474+TTt91iK+9LFXXOCUit9ySlRYfxSbCNSDwbgUtqdkBEtVE0u1X70P0P3nv7
+3apHOy7LvaZQIXGcv/JZo1i8bOnw2KjmDR9k7uwtFe6Nr3vDlrPnhU4FEzGv4pVeEQReJACB
+DArNoCjNr6nCqnLr1tx/OOpdZ5/472942RF9LFh5BydU1opwIm+1OE/W22KnSJCmYOubZ4hD
+9BYnQokGGwNF/yeOPf5t//Lu0XqcxIkBDqLOudLK0sogQZAFL/NmbQVi1tDM5+6259U3XNls
+9XVCGSTEcl2gACiaaSZd6451C8mfv/PeRxx8+MEHHLj1jPndbkfKsuUKJRgIx+QdQgp04vx6
+XErj9/NpxyVReAMdJXNZqPz+e7zsUx855b0nvb9vehHQIQFk0XPUKR3vuW/R6tUjc2bOPfCA
+V4xVo4PF4KsP+otrfnl16avgYIJcMwhoqLqV0R4dXrNla9bhBx121CFH7rPH3rPcDJMQur4P
+/ZKJAjRIHBekSJxuiel4YxTipwKXWJEaqRIAiKgia3faB7/4kHce8Xdfu/jrnB4ELjaMBAy0
+aVtMX/LA0lXLVx74isN23mbnUJZmnDNvbt5slOzm2hS6ql3SW+iGmYPTd91pl7133/ule+/3
+0r1ekonrWln5KkOWuUJSey4l8tTDnDBs+/SBsgFcYmsGYk5KwpE5FCEAyE445qNDfc1PfuuU
+6TNmS4dZlokTs87MLWb94NqrChSHH3xYgXys7LSazSu//8PVo6OtGY01y9c00JzRP23reVu+
+4TVHHfySA+fNmjfkhoJYtyxNrHBF7LFDIGneS6zu9kqq/0CKYryj9qfGRYSxQqyjW1zZ6qBZ
+sA+8458W29Lzzr9wxsBsOPUhZI1i0eJFK+9b+YLdn3vAC/frdjqtwWnfv/4Hl115WaPRGOqb
+9qbD//LZW+304hct2GX+swezQRHSe9/pClxDCxGhxQ+fSDNhJmJIH0WhiaykD8t6OjERWatV
+OBkuHJ9HjqeSij4LIVjouuqsr33p65edt9I/qgMu0HdH2/Onz/vGyf+557Z7hUrvXX3/mz/w
+xgdX3T+AgYUf+/yhL/qLeFyTYD6NACK1NnsH71W/WOcH1Lv8pH7+9C2l9c4FpcoDSPpOTRFI
+AKpa+OLD7/zgCf/0r9PywfaKsT7p0wqvP/T1e2//vM5YRxvZ+Zeff9+KZYHhr498y6tfdEhZ
+llVVmZkYXJZDHTSNGgqk7qv2dEsBRCc8Sl0N9Z4/jcb1mVl6TBMLNsFCCN12OTy2Zphjv1z8
+m6M/c+z8g7Y/9INHLKmWDY+u9t5fd/v1Ox6+y6zD5u79thf8fsWScixUpbfoaSFMPBTX+Z6e
+0IzGdR9p6bTqquFpsfXHlwk3pp5P6607CDJRoBgb7ey13e5n/fPnXFvuXHRnA40iawyXaz7/
+tc8NV6s63fabD33js2ZuW414V7g0V8U0F1kP1PaCRc8HJjgD1n3EY17ylNsTUF3XauZHdSzT
+LM+n9Q1pJVWojn3X+0YeGVn0h0WNonH6uQuv/sVVLtf99ljwple+ueyWTtMgZ6wSpzif80zZ
+E9s3MZ4voyymQooZM2Sefv4W8+fN2+ruuxbNnDXnPy/+6rTZQ6jklPd/arvp21RjFfJ4F9b6
+nMbNBBcR6cklIhJgAGCg0QIbRb7D9jv86Pprr/jtVZ28Ld1w+L5H7LPD3n7Eq4PXbiaF1Buo
+yLUA2tRsY/bZkFSoWQgSnDqIKmAM0GLbHbb/6ufPcXO0GCzQ5nv/9hilCJUwbz7Topfi4qE2
+TVBk4z7/JfINAK6ONRSqywI5Z/vZ/XP6p08bGFk2/Jcvf/M+2z4vBEMTcK7p+uUJdR2fUdu4
+z8VJLWJAUReX3gcADy9/2MrQWdU+4Hn7Hf/ej3S7nbg1MT70ujlP7TU8HbZxuPSEw3pUnswz
+N9wdvvSiS9kO2ai++03vmtOYqaZS97nTfvjx6Z5N2p7UPj4gfuiZCMWpsgoHLNh/oNX3rHnb
+vWrBq7plp3A5VEUosPSZI3BPL4F/imz99dHklmqW3vtoQqUEcxTBsB9poVloJiagxrJYEMQo
+6kA3YUP8pmsbh0vaSJbKOaaNpSahpBenBXOkycm6/6kWBU+JnGez9JeEQvrG1F1VE5HY1gcE
+kjZWACJpJ1eadd9kOctE+/+PsA04/7ZXkgAAAABJRU5ErkJggg==
+
+--------------UpACVYsiyWaYgeZ6U0yeiTdy--
+
+--------------Ny4NE0BVNKgkbFGTIy1tAjo6--
+--------------6FpezQEQZc7E309m0sKHeaNu
+Content-Type: text/plain; charset=UTF-8; name="600+kbfile.txt"
+Content-Disposition: attachment; filename="600+kbfile.txt"
+Content-Transfer-Encoding: base64
+
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2Ig
+dG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBy
+dW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBt
+eSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRl
+c3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMu
+LgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkg
+bmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVk
+IGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBm
+aWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUg
+YmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdn
+ZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0
+aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4g
+NjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBr
+YiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRv
+IHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVu
+IG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkg
+dGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0
+cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4K
+SSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5l
+ZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBh
+IGZpbGUgYmlnZ2VyIHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmls
+ZSBiaWdnZXIgdGhhbiA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJp
+Z2dlciB0aGFuIDYwMGtiIHRvIHJ1biBteSB0ZXN0cy4uCkkgbmVlZCBhIGZpbGUgYmlnZ2Vy
+IHRoYW4gNjAwa2IgdG8gcnVuIG15IHRlc3RzLi4KSSBuZWVkIGEgZmlsZSBiaWdnZXIgdGhh
+biA2MDBrYiB0byBydW4gbXkgdGVzdHMuLgpJIG5lZWQgYSBmaWxlIGJpZ2dlciB0aGFuIDYw
+MGtiIHRvIHJ1biBteSB0ZXN0cy4uCg==
+
+--------------6FpezQEQZc7E309m0sKHeaNu--
--- /dev/null
+<!doctype html>
+<html>
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <link href="output.css" rel="stylesheet">
+</head>
+
+<body class="bg-white w-screen flex flex-col items-center">
+ <div class="container max-w-4xl">
+ <!-- Header -->
+ <div class="grid gap-x-2 bg-slate-200 p-4">
+
+ <div class="col-start-9 col-span-4 row-start-1 text-right">2022-10-15 09:23</div>
+
+ <div class="col-start-1 row-start-1 text-slate-400 text-right">From</div>
+ <div class="col-start-2 col-span-7 row-start-1">Name <<a href="mailto:someone@example.de">someone@example.de</a>></div>
+
+ <div class="col-start-1 row-start-2 text-slate-400 text-right">Subject</div>
+ <div class=" col-start-2 col-span-10 row-start-2 font-bold">HTML Message</div>
+
+ <div class="col-start-1 row-start-3 text-slate-400 text-right">To</div>
+ <div class="col-start-2 col-span-10 row-start-3 text-sm my-0.5"><a href="mailto:someone@example.de">someone@example.de</a></div>
+
+ <div class="col-start-1 row-start-4 text-slate-400 text-right"></div>
+ <div class="col-start-2 col-span-10 row-start-4 text-sm my-0.5"></div>
+
+ <div class="col-start-1 row-start-5 text-slate-400 text-right"></div>
+ <div class="col-start-2 col-span-10 row-start-5" text-sm my-0.5></div>
+
+ <div class="col-start-1 row-start-6 text-slate-400 text-right">Attachments</div>
+ <div class="col-start-2 col-span-10 row-start-6">IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)</div>
+ </div>
+
+ <!-- Separator-->
+ <div class="border-t border-solid border-b w-full h-[1px] box-content border-black mb-5 bg-slate-200"></div>
+
+ <!-- Content-->
+ <div class="w-full break-words">Some Text<br><br>and an embedded image.</div>
+ </div>
+
+</body>
+
+</html>
--- /dev/null
+ <html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <p>Some Text</p>
+ <p>
+ <img src="cid:part1.pNdUSz0s.D3NqVtPg@example.de" alt="Has to be rewritten to work..">
+ <img src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png" alt="This image should not be shown.">
+ </p>
+
+ <p>and an embedded image.<br>
+ </p>
+ <p id="changeme">Paragraph unchanged.</p>
+ <scRipt>
+ document.getElementById("changeme").innerHTML = "Paragraph changed via Java Script.";
+ </script>
+ </body>
+ </html>
--- /dev/null
+Return-Path: <mail@someserver.de>
+Delivered-To: mail@someserver.de
+Received: from mail.someserver.org ([::1])
+ by e1acdba3bd07 with LMTP
+ id KBKZGD2YR2NTCgQAjubtDA
+ (envelope-from <mail@someserver.de>)
+ for <mail@someserver.de>; Wed, 10 Oct 2022 11:40:46 +0200
+Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2BC9064C1616
+ for <some@one.de>; Wed, 12 Oct 2022 21:40:46 +0200 (CEST)
+Message-ID: <6e99e34d-e20a-80c4-ea61-d8234b612be9@someserver.de>
+Date: Wed, 12 Oct 2022 21:40:43 +0200
+MIME-Version: 1.0
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
+ Thunderbird/102.3.1
+Content-Language: en-US
+To: some@one.de
+Cc: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de
+Bcc: fdf@fvf.de
+From: Some One <mail@someserver.de>
+Content-Type: text/plain; charset=UTF-8; format=flowed
+Content-Transfer-Encoding: 7bit
+X-Last-TLS-Session-Version: TLSv1.3
+Subject: Simple Text Mail
+
+This is just a simple Text Mail.
--- /dev/null
+from django.contrib.auth.models import User
+from documents.models import Correspondent
+from documents.models import DocumentType
+from documents.models import Tag
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from rest_framework.test import APITestCase
+
+
+class TestAPIMailAccounts(APITestCase):
+ ENDPOINT = "/api/mail_accounts/"
+
+ def setUp(self):
+ super().setUp()
+
+ self.user = User.objects.create_superuser(username="temp_admin")
+ self.client.force_authenticate(user=self.user)
+
+ def test_get_mail_accounts(self):
+ """
+ GIVEN:
+ - Configured mail accounts
+ WHEN:
+ - API call is made to get mail accounts
+ THEN:
+ - Configured mail accounts are provided
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ response = self.client.get(self.ENDPOINT)
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.data["count"], 1)
+ returned_account1 = response.data["results"][0]
+
+ self.assertEqual(returned_account1["name"], account1.name)
+ self.assertEqual(returned_account1["username"], account1.username)
+ self.assertEqual(
+ returned_account1["password"],
+ "*" * len(account1.password),
+ )
+ self.assertEqual(returned_account1["imap_server"], account1.imap_server)
+ self.assertEqual(returned_account1["imap_port"], account1.imap_port)
+ self.assertEqual(returned_account1["imap_security"], account1.imap_security)
+ self.assertEqual(returned_account1["character_set"], account1.character_set)
+
+ def test_create_mail_account(self):
+ """
+ WHEN:
+ - API request is made to add a mail account
+ THEN:
+ - A new mail account is created
+ """
+
+ account1 = {
+ "name": "Email1",
+ "username": "username1",
+ "password": "password1",
+ "imap_server": "server.example.com",
+ "imap_port": 443,
+ "imap_security": MailAccount.ImapSecurity.SSL,
+ "character_set": "UTF-8",
+ }
+
+ response = self.client.post(
+ self.ENDPOINT,
+ data=account1,
+ )
+
+ self.assertEqual(response.status_code, 201)
+
+ returned_account1 = MailAccount.objects.get(name="Email1")
+
+ self.assertEqual(returned_account1.name, account1["name"])
+ self.assertEqual(returned_account1.username, account1["username"])
+ self.assertEqual(returned_account1.password, account1["password"])
+ self.assertEqual(returned_account1.imap_server, account1["imap_server"])
+ self.assertEqual(returned_account1.imap_port, account1["imap_port"])
+ self.assertEqual(returned_account1.imap_security, account1["imap_security"])
+ self.assertEqual(returned_account1.character_set, account1["character_set"])
+
+ def test_delete_mail_account(self):
+ """
+ GIVEN:
+ - Existing mail account
+ WHEN:
+ - API request is made to delete a mail account
+ THEN:
+ - Account is deleted
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ response = self.client.delete(
+ f"{self.ENDPOINT}{account1.pk}/",
+ )
+
+ self.assertEqual(response.status_code, 204)
+
+ self.assertEqual(len(MailAccount.objects.all()), 0)
+
+ def test_update_mail_account(self):
+ """
+ GIVEN:
+ - Existing mail accounts
+ WHEN:
+ - API request is made to update mail account
+ THEN:
+ - The mail account is updated, password only updated if not '****'
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ response = self.client.patch(
+ f"{self.ENDPOINT}{account1.pk}/",
+ data={
+ "name": "Updated Name 1",
+ "password": "******",
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+
+ returned_account1 = MailAccount.objects.get(pk=account1.pk)
+ self.assertEqual(returned_account1.name, "Updated Name 1")
+ self.assertEqual(returned_account1.password, account1.password)
+
+ response = self.client.patch(
+ f"{self.ENDPOINT}{account1.pk}/",
+ data={
+ "name": "Updated Name 2",
+ "password": "123xyz",
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+
+ returned_account2 = MailAccount.objects.get(pk=account1.pk)
+ self.assertEqual(returned_account2.name, "Updated Name 2")
+ self.assertEqual(returned_account2.password, "123xyz")
+
+
+class TestAPIMailRules(APITestCase):
+ ENDPOINT = "/api/mail_rules/"
+
+ def setUp(self):
+ super().setUp()
+
+ self.user = User.objects.create_superuser(username="temp_admin")
+ self.client.force_authenticate(user=self.user)
+
+ def test_get_mail_rules(self):
+ """
+ GIVEN:
+ - Configured mail accounts and rules
+ WHEN:
+ - API call is made to get mail rules
+ THEN:
+ - Configured mail rules are provided
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ rule1 = MailRule.objects.create(
+ name="Rule1",
+ account=account1,
+ folder="INBOX",
+ filter_from="from@example.com",
+ filter_subject="subject",
+ filter_body="body",
+ filter_attachment_filename="file.pdf",
+ maximum_age=30,
+ action=MailRule.MailAction.MARK_READ,
+ assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+ assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+ order=0,
+ attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+ )
+
+ response = self.client.get(self.ENDPOINT)
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.data["count"], 1)
+ returned_rule1 = response.data["results"][0]
+
+ self.assertEqual(returned_rule1["name"], rule1.name)
+ self.assertEqual(returned_rule1["account"], account1.pk)
+ self.assertEqual(returned_rule1["folder"], rule1.folder)
+ self.assertEqual(returned_rule1["filter_from"], rule1.filter_from)
+ self.assertEqual(returned_rule1["filter_subject"], rule1.filter_subject)
+ self.assertEqual(returned_rule1["filter_body"], rule1.filter_body)
+ self.assertEqual(
+ returned_rule1["filter_attachment_filename"],
+ rule1.filter_attachment_filename,
+ )
+ self.assertEqual(returned_rule1["maximum_age"], rule1.maximum_age)
+ self.assertEqual(returned_rule1["action"], rule1.action)
+ self.assertEqual(returned_rule1["assign_title_from"], rule1.assign_title_from)
+ self.assertEqual(
+ returned_rule1["assign_correspondent_from"],
+ rule1.assign_correspondent_from,
+ )
+ self.assertEqual(returned_rule1["order"], rule1.order)
+ self.assertEqual(returned_rule1["attachment_type"], rule1.attachment_type)
+
+ def test_create_mail_rule(self):
+ """
+ GIVEN:
+ - Configured mail account exists
+ WHEN:
+ - API request is made to add a mail rule
+ THEN:
+ - A new mail rule is created
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ tag = Tag.objects.create(
+ name="t",
+ )
+
+ correspondent = Correspondent.objects.create(
+ name="c",
+ )
+
+ document_type = DocumentType.objects.create(
+ name="dt",
+ )
+
+ rule1 = {
+ "name": "Rule1",
+ "account": account1.pk,
+ "folder": "INBOX",
+ "filter_from": "from@example.com",
+ "filter_subject": "subject",
+ "filter_body": "body",
+ "filter_attachment_filename": "file.pdf",
+ "maximum_age": 30,
+ "action": MailRule.MailAction.MARK_READ,
+ "assign_title_from": MailRule.TitleSource.FROM_SUBJECT,
+ "assign_correspondent_from": MailRule.CorrespondentSource.FROM_NOTHING,
+ "order": 0,
+ "attachment_type": MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+ "action_parameter": "parameter",
+ "assign_tags": [tag.pk],
+ "assign_correspondent": correspondent.pk,
+ "assign_document_type": document_type.pk,
+ }
+
+ response = self.client.post(
+ self.ENDPOINT,
+ data=rule1,
+ )
+
+ self.assertEqual(response.status_code, 201)
+
+ response = self.client.get(self.ENDPOINT)
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.data["count"], 1)
+ returned_rule1 = response.data["results"][0]
+
+ self.assertEqual(returned_rule1["name"], rule1["name"])
+ self.assertEqual(returned_rule1["account"], account1.pk)
+ self.assertEqual(returned_rule1["folder"], rule1["folder"])
+ self.assertEqual(returned_rule1["filter_from"], rule1["filter_from"])
+ self.assertEqual(returned_rule1["filter_subject"], rule1["filter_subject"])
+ self.assertEqual(returned_rule1["filter_body"], rule1["filter_body"])
+ self.assertEqual(
+ returned_rule1["filter_attachment_filename"],
+ rule1["filter_attachment_filename"],
+ )
+ self.assertEqual(returned_rule1["maximum_age"], rule1["maximum_age"])
+ self.assertEqual(returned_rule1["action"], rule1["action"])
+ self.assertEqual(
+ returned_rule1["assign_title_from"],
+ rule1["assign_title_from"],
+ )
+ self.assertEqual(
+ returned_rule1["assign_correspondent_from"],
+ rule1["assign_correspondent_from"],
+ )
+ self.assertEqual(returned_rule1["order"], rule1["order"])
+ self.assertEqual(returned_rule1["attachment_type"], rule1["attachment_type"])
+ self.assertEqual(returned_rule1["action_parameter"], rule1["action_parameter"])
+ self.assertEqual(
+ returned_rule1["assign_correspondent"],
+ rule1["assign_correspondent"],
+ )
+ self.assertEqual(
+ returned_rule1["assign_document_type"],
+ rule1["assign_document_type"],
+ )
+ self.assertEqual(returned_rule1["assign_tags"], rule1["assign_tags"])
+
+ def test_delete_mail_rule(self):
+ """
+ GIVEN:
+ - Existing mail rule
+ WHEN:
+ - API request is made to delete a mail rule
+ THEN:
+ - Rule is deleted
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ rule1 = MailRule.objects.create(
+ name="Rule1",
+ account=account1,
+ folder="INBOX",
+ filter_from="from@example.com",
+ filter_subject="subject",
+ filter_body="body",
+ filter_attachment_filename="file.pdf",
+ maximum_age=30,
+ action=MailRule.MailAction.MARK_READ,
+ assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+ assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+ order=0,
+ attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+ )
+
+ response = self.client.delete(
+ f"{self.ENDPOINT}{rule1.pk}/",
+ )
+
+ self.assertEqual(response.status_code, 204)
+
+ self.assertEqual(len(MailRule.objects.all()), 0)
+
+ def test_update_mail_rule(self):
+ """
+ GIVEN:
+ - Existing mail rule
+ WHEN:
+ - API request is made to update mail rule
+ THEN:
+ - The mail rule is updated
+ """
+
+ account1 = MailAccount.objects.create(
+ name="Email1",
+ username="username1",
+ password="password1",
+ imap_server="server.example.com",
+ imap_port=443,
+ imap_security=MailAccount.ImapSecurity.SSL,
+ character_set="UTF-8",
+ )
+
+ rule1 = MailRule.objects.create(
+ name="Rule1",
+ account=account1,
+ folder="INBOX",
+ filter_from="from@example.com",
+ filter_subject="subject",
+ filter_body="body",
+ filter_attachment_filename="file.pdf",
+ maximum_age=30,
+ action=MailRule.MailAction.MARK_READ,
+ assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
+ assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
+ order=0,
+ attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
+ )
+
+ response = self.client.patch(
+ f"{self.ENDPOINT}{rule1.pk}/",
+ data={
+ "name": "Updated Name 1",
+ "action": MailRule.MailAction.DELETE,
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+
+ returned_rule1 = MailRule.objects.get(pk=rule1.pk)
+ self.assertEqual(returned_rule1.name, "Updated Name 1")
+ self.assertEqual(returned_rule1.action, MailRule.MailAction.DELETE)
--- /dev/null
+import datetime
+import os
+from unittest import mock
+
+from django.test import TestCase
+from documents.parsers import ParseError
+from paperless_mail.parsers import MailDocumentParser
+
+
+class TestParser(TestCase):
+ SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
+ def setUp(self) -> None:
+ self.parser = MailDocumentParser(logging_group=None)
+
+ def tearDown(self) -> None:
+ self.parser.cleanup()
+
+ def test_get_parsed_missing_file(self):
+ """
+ GIVEN:
+ - Fresh parser
+ WHEN:
+ - A nonexistent file should be parsed
+ THEN:
+ - An Exception is thrown
+ """
+ # Check if exception is raised when parsing fails.
+ self.assertRaises(
+ ParseError,
+ self.parser.get_parsed,
+ os.path.join(self.SAMPLE_FILES, "na"),
+ )
+
+ def test_get_parsed_broken_file(self):
+ """
+ GIVEN:
+ - Fresh parser
+ WHEN:
+ - A faulty file should be parsed
+ THEN:
+ - An Exception is thrown
+ """
+ # Check if exception is raised when the mail is faulty.
+ self.assertRaises(
+ ParseError,
+ self.parser.get_parsed,
+ os.path.join(self.SAMPLE_FILES, "broken.eml"),
+ )
+
+ def test_get_parsed_simple_text_mail(self):
+ """
+ GIVEN:
+ - Fresh parser
+ WHEN:
+ - A .eml file should be parsed
+ THEN:
+ - The content of the mail should be available in the parse result.
+ """
+ # Parse Test file and check relevant content
+ parsed1 = self.parser.get_parsed(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ )
+
+ self.assertEqual(parsed1.date.year, 2022)
+ self.assertEqual(parsed1.date.month, 10)
+ self.assertEqual(parsed1.date.day, 12)
+ self.assertEqual(parsed1.date.hour, 21)
+ self.assertEqual(parsed1.date.minute, 40)
+ self.assertEqual(parsed1.date.second, 43)
+ self.assertEqual(parsed1.date.tzname(), "UTC+02:00")
+ self.assertEqual(parsed1.from_, "mail@someserver.de")
+ self.assertEqual(parsed1.subject, "Simple Text Mail")
+ self.assertEqual(parsed1.text, "This is just a simple Text Mail.\n")
+ self.assertEqual(parsed1.to, ("some@one.de",))
+
+ def test_get_parsed_reparse(self):
+ """
+ GIVEN:
+ - An E-Mail was parsed
+ WHEN:
+ - Another .eml file should be parsed
+ THEN:
+ - The parser should not retry to parse and return the old results
+ """
+ # Parse Test file and check relevant content
+ parsed1 = self.parser.get_parsed(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ )
+ # Check if same parsed object as before is returned, even if another file is given.
+ parsed2 = self.parser.get_parsed(
+ os.path.join(os.path.join(self.SAMPLE_FILES, "html.eml")),
+ )
+ self.assertEqual(parsed1, parsed2)
+
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+ @mock.patch("paperless_mail.parsers.make_thumbnail_from_pdf")
+ def test_get_thumbnail(
+ self,
+ mock_make_thumbnail_from_pdf: mock.MagicMock,
+ mock_generate_pdf: mock.MagicMock,
+ ):
+ """
+ GIVEN:
+ - An E-Mail was parsed
+ WHEN:
+ - The Thumbnail is requested
+ THEN:
+ - The parser should call the functions which generate the thumbnail
+ """
+ mocked_return = "Passing the return value through.."
+ mock_make_thumbnail_from_pdf.return_value = mocked_return
+
+ mock_generate_pdf.return_value = "Mocked return value.."
+
+ thumb = self.parser.get_thumbnail(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ "message/rfc822",
+ )
+ self.assertEqual(
+ self.parser.archive_path,
+ mock_make_thumbnail_from_pdf.call_args_list[0].args[0],
+ )
+ self.assertEqual(
+ self.parser.tempdir,
+ mock_make_thumbnail_from_pdf.call_args_list[0].args[1],
+ )
+ self.assertEqual(mocked_return, thumb)
+
+ @mock.patch("documents.loggers.LoggingMixin.log")
+ def test_extract_metadata_fail(self, m: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - Metadata extraction is triggered for nonexistent file
+ THEN:
+ - A log warning should be generated
+ """
+ # Validate if warning is logged when parsing fails
+ self.assertEqual([], self.parser.extract_metadata("na", "message/rfc822"))
+ self.assertEqual("warning", m.call_args[0][0])
+
+ def test_extract_metadata(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - Metadata extraction is triggered
+ THEN:
+ - metadata is returned
+ """
+ # Validate Metadata parsing returns the expected results
+ metadata = self.parser.extract_metadata(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ "message/rfc822",
+ )
+
+ self.assertIn(
+ {"namespace": "", "prefix": "", "key": "attachments", "value": ""},
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "",
+ "key": "date",
+ "value": "2022-10-12 21:40:43 UTC+02:00",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "content-language",
+ "value": "en-US",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "content-type",
+ "value": "text/plain; charset=UTF-8; format=flowed",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "date",
+ "value": "Wed, 12 Oct 2022 21:40:43 +0200",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "delivered-to",
+ "value": "mail@someserver.de",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "from",
+ "value": "Some One <mail@someserver.de>",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "message-id",
+ "value": "<6e99e34d-e20a-80c4-ea61-d8234b612be9@someserver.de>",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "mime-version",
+ "value": "1.0",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "received",
+ "value": "from mail.someserver.org ([::1])\n\tby e1acdba3bd07 with LMTP\n\tid KBKZGD2YR2NTCgQAjubtDA\n\t(envelope-from <mail@someserver.de>)\n\tfor <mail@someserver.de>; Wed, 10 Oct 2022 11:40:46 +0200, from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2BC9064C1616\n\tfor <some@one.de>; Wed, 12 Oct 2022 21:40:46 +0200 (CEST)",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "return-path",
+ "value": "<mail@someserver.de>",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "subject",
+ "value": "Simple Text Mail",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {"namespace": "", "prefix": "header", "key": "to", "value": "some@one.de"},
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "user-agent",
+ "value": "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n Thunderbird/102.3.1",
+ },
+ metadata,
+ )
+ self.assertIn(
+ {
+ "namespace": "",
+ "prefix": "header",
+ "key": "x-last-tls-session-version",
+ "value": "TLSv1.3",
+ },
+ metadata,
+ )
+
+ def test_parse_na(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - parsing is attempted with nonexistent file
+ THEN:
+ - Exception is thrown
+ """
+ # Check if exception is raised when parsing fails.
+ self.assertRaises(
+ ParseError,
+ self.parser.parse,
+ os.path.join(self.SAMPLE_FILES, "na"),
+ "message/rfc822",
+ )
+
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.tika_parse")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+ def test_parse_html_eml(self, n, mock_tika_parse: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - parsing is done with html mail
+ THEN:
+ - Tika is called, parsed information from non html parts is available
+ """
+ # Validate parsing returns the expected results
+ text_expected = "Subject: HTML Message\n\nFrom: Name <someone@example.de>\n\nTo: someone@example.de\n\nAttachments: IntM6gnXFm00FEV5.png (6.89 KiB), 600+kbfile.txt (600.24 KiB)\n\nHTML content: tika return\n\nSome Text and an embedded image."
+ mock_tika_parse.return_value = "tika return"
+
+ self.parser.parse(os.path.join(self.SAMPLE_FILES, "html.eml"), "message/rfc822")
+
+ self.assertEqual(text_expected, self.parser.text)
+ self.assertEqual(
+ datetime.datetime(
+ 2022,
+ 10,
+ 15,
+ 11,
+ 23,
+ 19,
+ tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
+ ),
+ self.parser.date,
+ )
+
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+ def test_parse_simple_eml(self, n):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - parsing is done with non html mail
+ THEN:
+ - parsed information is available
+ """
+ # Validate parsing returns the expected results
+
+ self.parser.parse(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ "message/rfc822",
+ )
+ text_expected = "Subject: Simple Text Mail\n\nFrom: Some One <mail@someserver.de>\n\nTo: some@one.de\n\nCC: asdasd@æsdasd.de, asdadasdasdasda.asdasd@æsdasd.de\n\nBCC: fdf@fvf.de\n\n\n\nThis is just a simple Text Mail."
+ self.assertEqual(text_expected, self.parser.text)
+ self.assertEqual(
+ datetime.datetime(
+ 2022,
+ 10,
+ 12,
+ 21,
+ 40,
+ 43,
+ tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
+ ),
+ self.parser.date,
+ )
+
+ # Just check if file exists, the unittest for generate_pdf() goes deeper.
+ self.assertTrue(os.path.isfile(self.parser.archive_path))
+
+ @mock.patch("paperless_mail.parsers.parser.from_buffer")
+ def test_tika_parse_unsuccessful(self, mock_from_buffer: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing fails
+ THEN:
+ - the parser should return an empty string
+ """
+ # Check unsuccessful parsing
+ mock_from_buffer.return_value = {"content": None}
+ parsed = self.parser.tika_parse(None)
+ self.assertEqual("", parsed)
+
+ @mock.patch("paperless_mail.parsers.parser.from_buffer")
+ def test_tika_parse(self, mock_from_buffer: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing is called
+ THEN:
+ - a web request to tika shall be done and the reply es returned
+ """
+ html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+ expected_text = "Some Text"
+
+ # Check successful parsing
+ mock_from_buffer.return_value = {"content": expected_text}
+ parsed = self.parser.tika_parse(html)
+ self.assertEqual(expected_text, parsed.strip())
+ mock_from_buffer.assert_called_with(html, self.parser.tika_server)
+
+ @mock.patch("paperless_mail.parsers.parser.from_buffer")
+ def test_tika_parse_exception(self, mock_from_buffer: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing is called and an exception is thrown on the request
+ THEN:
+ - a ParseError Exception is thrown
+ """
+ html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+
+ # Check ParseError
+ def my_side_effect():
+ raise Exception("Test")
+
+ mock_from_buffer.side_effect = my_side_effect
+ self.assertRaises(ParseError, self.parser.tika_parse, html)
+
+ def test_tika_parse_unreachable(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing is called but tika is not available
+ THEN:
+ - a ParseError Exception is thrown
+ """
+ html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+
+ # Check if exception is raised when Tika cannot be reached.
+ self.parser.tika_server = ""
+ self.assertRaises(ParseError, self.parser.tika_parse, html)
+
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+ def test_generate_pdf_parse_error(self, m: mock.MagicMock, n: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation is requested but gotenberg can not be reached
+ THEN:
+ - a ParseError Exception is thrown
+ """
+ m.return_value = b""
+ n.return_value = b""
+
+ # Check if exception is raised when the pdf can not be created.
+ self.parser.gotenberg_server = ""
+ self.assertRaises(
+ ParseError,
+ self.parser.generate_pdf,
+ os.path.join(self.SAMPLE_FILES, "html.eml"),
+ )
+
+ def test_generate_pdf_exception(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation is requested but parsing throws an exception
+ THEN:
+ - a ParseError Exception is thrown
+ """
+ # Check if exception is raised when the mail can not be parsed.
+ self.assertRaises(
+ ParseError,
+ self.parser.generate_pdf,
+ os.path.join(self.SAMPLE_FILES, "broken.eml"),
+ )
+
+ @mock.patch("paperless_mail.parsers.requests.post")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+ def test_generate_pdf(
+ self,
+ mock_generate_pdf_from_html: mock.MagicMock,
+ mock_generate_pdf_from_mail: mock.MagicMock,
+ mock_post: mock.MagicMock,
+ ):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation is requested
+ THEN:
+ - gotenberg is called and the resulting file is returned
+ """
+ mock_generate_pdf_from_mail.return_value = b"Mail Return"
+ mock_generate_pdf_from_html.return_value = b"HTML Return"
+
+ mock_response = mock.MagicMock()
+ mock_response.content = b"Content"
+ mock_post.return_value = mock_response
+ pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml"))
+ self.assertTrue(os.path.isfile(pdf_path))
+
+ mock_generate_pdf_from_mail.assert_called_once_with(
+ self.parser.get_parsed(None),
+ )
+ mock_generate_pdf_from_html.assert_called_once_with(
+ self.parser.get_parsed(None).html,
+ self.parser.get_parsed(None).attachments,
+ )
+ self.assertEqual(
+ self.parser.gotenberg_server + "/forms/pdfengines/merge",
+ mock_post.call_args.args[0],
+ )
+ self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+ self.assertEqual(
+ b"Mail Return",
+ mock_post.call_args.kwargs["files"]["1_mail.pdf"][1].read(),
+ )
+ self.assertEqual(
+ b"HTML Return",
+ mock_post.call_args.kwargs["files"]["2_html.pdf"][1].read(),
+ )
+
+ mock_response.raise_for_status.assert_called_once()
+
+ with open(pdf_path, "rb") as file:
+ self.assertEqual(b"Content", file.read())
+
+ def test_mail_to_html(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - conversion from eml to html is requested
+ THEN:
+ - html should be returned
+ """
+ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+ html_handle = self.parser.mail_to_html(mail)
+ html_received = html_handle.read()
+
+ with open(
+ os.path.join(self.SAMPLE_FILES, "html.eml.html"),
+ ) as html_expected_handle:
+ html_expected = html_expected_handle.read()
+
+ self.assertHTMLEqual(html_expected, html_received)
+
+ @mock.patch("paperless_mail.parsers.requests.post")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.mail_to_html")
+ def test_generate_pdf_from_mail(
+ self,
+ mock_mail_to_html: mock.MagicMock,
+ mock_post: mock.MagicMock,
+ ):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - conversion of PDF from .eml is requested
+ THEN:
+ - gotenberg should be called with valid intermediary html files, the resulting pdf is returned
+ """
+ mock_response = mock.MagicMock()
+ mock_response.content = b"Content"
+ mock_post.return_value = mock_response
+
+ mock_mail_to_html.return_value = "Testresponse"
+
+ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+ retval = self.parser.generate_pdf_from_mail(mail)
+ self.assertEqual(b"Content", retval)
+
+ mock_mail_to_html.assert_called_once_with(mail)
+ self.assertEqual(
+ self.parser.gotenberg_server + "/forms/chromium/convert/html",
+ mock_post.call_args.args[0],
+ )
+ self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+ self.assertEqual(
+ {
+ "marginTop": "0.1",
+ "marginBottom": "0.1",
+ "marginLeft": "0.1",
+ "marginRight": "0.1",
+ "paperWidth": "8.27",
+ "paperHeight": "11.7",
+ "scale": "1.0",
+ },
+ mock_post.call_args.kwargs["data"],
+ )
+ self.assertEqual(
+ "Testresponse",
+ mock_post.call_args.kwargs["files"]["html"][1],
+ )
+ self.assertEqual(
+ "output.css",
+ mock_post.call_args.kwargs["files"]["css"][0],
+ )
+
+ mock_response.raise_for_status.assert_called_once()
+
+ def test_transform_inline_html(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - transforming of html content from an email with an inline image attachment is requested
+ THEN:
+ - html is returned and sanitized
+ """
+
+ class MailAttachmentMock:
+ def __init__(self, payload, content_id):
+ self.payload = payload
+ self.content_id = content_id
+
+ result = None
+
+ with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+ with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+ html = html_file.read()
+ png = png_file.read()
+ attachments = [
+ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+ ]
+ result = self.parser.transform_inline_html(html, attachments)
+
+ resulting_html = result[-1][1].read()
+ self.assertTrue(result[-1][0] == "index.html")
+ self.assertIn(result[0][0], resulting_html)
+ self.assertNotIn("<script", resulting_html.lower())
+
+ @mock.patch("paperless_mail.parsers.requests.post")
+ def test_generate_pdf_from_html(self, mock_post: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - generating pdf from html with inline attachments is attempted
+ THEN:
+ - gotenberg is called with the correct parameters and the resulting pdf is returned
+ """
+
+ class MailAttachmentMock:
+ def __init__(self, payload, content_id):
+ self.payload = payload
+ self.content_id = content_id
+
+ mock_response = mock.MagicMock()
+ mock_response.content = b"Content"
+ mock_post.return_value = mock_response
+
+ result = None
+
+ with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+ with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+ html = html_file.read()
+ png = png_file.read()
+ attachments = [
+ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+ ]
+ result = self.parser.generate_pdf_from_html(html, attachments)
+
+ self.assertEqual(
+ self.parser.gotenberg_server + "/forms/chromium/convert/html",
+ mock_post.call_args.args[0],
+ )
+ self.assertEqual({}, mock_post.call_args.kwargs["headers"])
+ self.assertEqual(
+ {
+ "marginTop": "0.1",
+ "marginBottom": "0.1",
+ "marginLeft": "0.1",
+ "marginRight": "0.1",
+ "paperWidth": "8.27",
+ "paperHeight": "11.7",
+ "scale": "1.0",
+ },
+ mock_post.call_args.kwargs["data"],
+ )
+
+ # read to assert it is a file like object.
+ mock_post.call_args.kwargs["files"]["cidpart1pNdUSz0sD3NqVtPgexamplede"][
+ 1
+ ].read()
+ mock_post.call_args.kwargs["files"]["index.html"][1].read()
+
+ mock_response.raise_for_status.assert_called_once()
+
+ self.assertEqual(b"Content", result)
--- /dev/null
+import os
+from unittest import mock
+from urllib.error import HTTPError
+from urllib.request import urlopen
+
+import pytest
+from django.test import TestCase
+from documents.parsers import ParseError
+from documents.parsers import run_convert
+from imagehash import average_hash
+from paperless_mail.parsers import MailDocumentParser
+from pdfminer.high_level import extract_text
+from PIL import Image
+
+
+class TestParserLive(TestCase):
+ SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
+ def setUp(self) -> None:
+ self.parser = MailDocumentParser(logging_group=None)
+
+ def tearDown(self) -> None:
+ self.parser.cleanup()
+
+ @staticmethod
+ def imagehash(file, hash_size=18):
+ return f"{average_hash(Image.open(file), hash_size)}"
+
+ # Only run if convert is available
+ @pytest.mark.skipif(
+ "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+ reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+ )
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf")
+ def test_get_thumbnail(self, mock_generate_pdf: mock.MagicMock):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - The Thumbnail is requested
+ THEN:
+ - The returned thumbnail image file is as expected
+ """
+ mock_generate_pdf.return_value = os.path.join(
+ self.SAMPLE_FILES,
+ "simple_text.eml.pdf",
+ )
+ thumb = self.parser.get_thumbnail(
+ os.path.join(self.SAMPLE_FILES, "simple_text.eml"),
+ "message/rfc822",
+ )
+ self.assertTrue(os.path.isfile(thumb))
+
+ expected = os.path.join(self.SAMPLE_FILES, "simple_text.eml.pdf.webp")
+
+ self.assertEqual(
+ self.imagehash(thumb),
+ self.imagehash(expected),
+ f"Created Thumbnail {thumb} differs from expected file {expected}",
+ )
+
+ @pytest.mark.skipif(
+ "TIKA_LIVE" not in os.environ,
+ reason="No tika server",
+ )
+ def test_tika_parse_successful(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing is called
+ THEN:
+ - a web request to tika shall be done and the reply es returned
+ """
+ html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><p>Some Text</p></body></html>'
+ expected_text = "Some Text"
+
+ # Check successful parsing
+ parsed = self.parser.tika_parse(html)
+ self.assertEqual(expected_text, parsed.strip())
+
+ @pytest.mark.skipif(
+ "TIKA_LIVE" not in os.environ,
+ reason="No tika server",
+ )
+ def test_tika_parse_unsuccessful(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - tika parsing fails
+ THEN:
+ - the parser should return an empty string
+ """
+ # Check unsuccessful parsing
+ parsed = self.parser.tika_parse(None)
+ self.assertEqual("", parsed)
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_mail")
+ @mock.patch("paperless_mail.parsers.MailDocumentParser.generate_pdf_from_html")
+ def test_generate_pdf_gotenberg_merging(
+ self,
+ mock_generate_pdf_from_html: mock.MagicMock,
+ mock_generate_pdf_from_mail: mock.MagicMock,
+ ):
+ """
+ GIVEN:
+ - Intermediary pdfs to be merged
+ WHEN:
+ - pdf generation is requested with html file requiring merging of pdfs
+ THEN:
+ - gotenberg is called to merge files and the resulting file is returned
+ """
+ with open(os.path.join(self.SAMPLE_FILES, "first.pdf"), "rb") as first:
+ mock_generate_pdf_from_mail.return_value = first.read()
+
+ with open(os.path.join(self.SAMPLE_FILES, "second.pdf"), "rb") as second:
+ mock_generate_pdf_from_html.return_value = second.read()
+
+ pdf_path = self.parser.generate_pdf(os.path.join(self.SAMPLE_FILES, "html.eml"))
+ self.assertTrue(os.path.isfile(pdf_path))
+
+ extracted = extract_text(pdf_path)
+ expected = (
+ "first\tPDF\tto\tbe\tmerged.\n\n\x0csecond\tPDF\tto\tbe\tmerged.\n\n\x0c"
+ )
+ self.assertEqual(expected, extracted)
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ def test_generate_pdf_from_mail_no_convert(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation from simple eml file is requested
+ THEN:
+ - gotenberg is called and the resulting file is returned and contains the expected text.
+ """
+ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+ pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf")
+
+ with open(pdf_path, "wb") as file:
+ file.write(self.parser.generate_pdf_from_mail(mail))
+
+ extracted = extract_text(pdf_path)
+ expected = extract_text(os.path.join(self.SAMPLE_FILES, "html.eml.pdf"))
+ self.assertEqual(expected, extracted)
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ # Only run if convert is available
+ @pytest.mark.skipif(
+ "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+ reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+ )
+ def test_generate_pdf_from_mail(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation from simple eml file is requested
+ THEN:
+ - gotenberg is called and the resulting file is returned and look as expected.
+ """
+ mail = self.parser.get_parsed(os.path.join(self.SAMPLE_FILES, "html.eml"))
+
+ pdf_path = os.path.join(self.parser.tempdir, "html.eml.pdf")
+
+ with open(pdf_path, "wb") as file:
+ file.write(self.parser.generate_pdf_from_mail(mail))
+
+ converted = os.path.join(
+ self.parser.tempdir,
+ "html.eml.pdf.webp",
+ )
+ run_convert(
+ density=300,
+ scale="500x5000>",
+ alpha="remove",
+ strip=True,
+ trim=False,
+ auto_orient=True,
+ input_file=f"{pdf_path}", # Do net define an index to convert all pages.
+ output_file=converted,
+ logging_group=None,
+ )
+ self.assertTrue(os.path.isfile(converted))
+ thumb_hash = self.imagehash(converted)
+
+ # The created pdf is not reproducible. But the converted image should always look the same.
+ expected_hash = self.imagehash(
+ os.path.join(self.SAMPLE_FILES, "html.eml.pdf.webp"),
+ )
+ self.assertEqual(
+ thumb_hash,
+ expected_hash,
+ f"PDF looks different. Check if {converted} looks weird.",
+ )
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ def test_generate_pdf_from_html_no_convert(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation from html eml file is requested
+ THEN:
+ - gotenberg is called and the resulting file is returned and contains the expected text.
+ """
+
+ class MailAttachmentMock:
+ def __init__(self, payload, content_id):
+ self.payload = payload
+ self.content_id = content_id
+
+ result = None
+
+ with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+ with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+ html = html_file.read()
+ png = png_file.read()
+ attachments = [
+ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+ ]
+ result = self.parser.generate_pdf_from_html(html, attachments)
+
+ pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf")
+
+ with open(pdf_path, "wb") as file:
+ file.write(result)
+
+ extracted = extract_text(pdf_path)
+ expected = extract_text(os.path.join(self.SAMPLE_FILES, "sample.html.pdf"))
+ self.assertEqual(expected, extracted)
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ # Only run if convert is available
+ @pytest.mark.skipif(
+ "PAPERLESS_TEST_SKIP_CONVERT" in os.environ,
+ reason="PAPERLESS_TEST_SKIP_CONVERT set, skipping Test",
+ )
+ def test_generate_pdf_from_html(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - pdf generation from html eml file is requested
+ THEN:
+ - gotenberg is called and the resulting file is returned and look as expected.
+ """
+
+ class MailAttachmentMock:
+ def __init__(self, payload, content_id):
+ self.payload = payload
+ self.content_id = content_id
+
+ result = None
+
+ with open(os.path.join(self.SAMPLE_FILES, "sample.html")) as html_file:
+ with open(os.path.join(self.SAMPLE_FILES, "sample.png"), "rb") as png_file:
+ html = html_file.read()
+ png = png_file.read()
+ attachments = [
+ MailAttachmentMock(png, "part1.pNdUSz0s.D3NqVtPg@example.de"),
+ ]
+ result = self.parser.generate_pdf_from_html(html, attachments)
+
+ pdf_path = os.path.join(self.parser.tempdir, "sample.html.pdf")
+
+ with open(pdf_path, "wb") as file:
+ file.write(result)
+
+ converted = os.path.join(self.parser.tempdir, "sample.html.pdf.webp")
+ run_convert(
+ density=300,
+ scale="500x5000>",
+ alpha="remove",
+ strip=True,
+ trim=False,
+ auto_orient=True,
+ input_file=f"{pdf_path}", # Do net define an index to convert all pages.
+ output_file=converted,
+ logging_group=None,
+ )
+ self.assertTrue(os.path.isfile(converted))
+ thumb_hash = self.imagehash(converted)
+
+ # The created pdf is not reproducible. But the converted image should always look the same.
+ expected_hash = self.imagehash(
+ os.path.join(self.SAMPLE_FILES, "sample.html.pdf.webp"),
+ )
+
+ self.assertEqual(
+ thumb_hash,
+ expected_hash,
+ f"PDF looks different. Check if {converted} looks weird. "
+ f"If Rick Astley is shown, Gotenberg loads from web which is bad for Mail content.",
+ )
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ def test_online_image_exception_on_not_available(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - nonexistent image is requested
+ THEN:
+ - An exception shall be thrown
+ """
+ """
+ A public image is used in the html sample file. We have no control
+ whether this image stays online forever, so here we check if we can detect if is not
+ available anymore.
+ """
+
+ # Start by Testing if nonexistent URL really throws an Exception
+ self.assertRaises(
+ HTTPError,
+ urlopen,
+ "https://upload.wikimedia.org/wikipedia/en/f/f7/nonexistent.png",
+ )
+
+ @pytest.mark.skipif(
+ "GOTENBERG_LIVE" not in os.environ,
+ reason="No gotenberg server",
+ )
+ def test_is_online_image_still_available(self):
+ """
+ GIVEN:
+ - Fresh start
+ WHEN:
+ - A public image used in the html sample file is requested
+ THEN:
+ - No exception shall be thrown
+ """
+ """
+ A public image is used in the html sample file. We have no control
+ whether this image stays online forever, so here we check if it is still there
+ """
+
+ # Now check the URL used in samples/sample.html
+ urlopen("https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png")
--- /dev/null
+from paperless.views import StandardPagination
+from paperless_mail.models import MailAccount
+from paperless_mail.models import MailRule
+from paperless_mail.serialisers import MailAccountSerializer
+from paperless_mail.serialisers import MailRuleSerializer
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.viewsets import ModelViewSet
+
+
+class MailAccountViewSet(ModelViewSet):
+ model = MailAccount
+
+ queryset = MailAccount.objects.all().order_by("pk")
+ serializer_class = MailAccountSerializer
+ pagination_class = StandardPagination
+ permission_classes = (IsAuthenticated,)
+
+ # TODO: user-scoped
+ # def get_queryset(self):
+ # user = self.request.user
+ # return MailAccount.objects.filter(user=user)
+
+ # def perform_create(self, serializer):
+ # serializer.save(user=self.request.user)
+
+
+class MailRuleViewSet(ModelViewSet):
+ model = MailRule
+
+ queryset = MailRule.objects.all().order_by("pk")
+ serializer_class = MailRuleSerializer
+ pagination_class = StandardPagination
+ permission_classes = (IsAuthenticated,)
+
+ # TODO: user-scoped
+ # def get_queryset(self):
+ # user = self.request.user
+ # return MailRule.objects.filter(user=user)
+
+ # def perform_create(self, serializer):
+ # serializer.save(user=self.request.user)
+import shutil
import subprocess
from django.conf import settings
def get_tesseract_langs():
- with subprocess.Popen(["tesseract", "--list-langs"], stdout=subprocess.PIPE) as p:
- stdout, stderr = p.communicate()
+ proc = subprocess.run(
+ [shutil.which("tesseract"), "--list-langs"],
+ capture_output=True,
+ )
- return stdout.decode().strip().split("\n")[1:]
+ # Decode bytes to string, split on newlines, trim out the header
+ proc_lines = proc.stdout.decode("utf8", errors="ignore").strip().split("\n")[1:]
+
+ return [x.strip() for x in proc_lines]
@register()
"image/tiff",
"image/bmp",
"image/gif",
+ "image/webp",
]
def has_alpha(self, image):
return None
def extract_text(self, sidecar_file, pdf_file):
- if sidecar_file and os.path.isfile(sidecar_file):
+ # When re-doing OCR, the sidecar contains ONLY the new text, not
+ # the whole text, so do not utilize it in that case
+ if (
+ sidecar_file is not None
+ and os.path.isfile(sidecar_file)
+ and settings.OCR_MODE != "redo"
+ ):
with open(sidecar_file) as f:
text = f.read()
"input_file": input_file,
"output_file": output_file,
# need to use threads, since this will be run in daemonized
- # processes by django-q.
+ # processes via the task library.
"use_threads": True,
"jobs": settings.THREADS_PER_WORKER,
"language": settings.OCR_LANGUAGE,
if settings.OCR_MODE == "redo":
ocrmypdf_args["clean"] = True
else:
+ # --clean-final is not compatible with --redo-ocr
ocrmypdf_args["clean_final"] = True
- if settings.OCR_DESKEW and not settings.OCR_MODE == "redo":
+ if settings.OCR_DESKEW and settings.OCR_MODE != "redo":
+ # --deskew is not compatible with --redo-ocr
ocrmypdf_args["deskew"] = True
if settings.OCR_ROTATE_PAGES:
# Either no text was in the original or there should be an archive
# file created, so OCR the file and create an archive with any
- # test located via OCR
+ # text located via OCR
import ocrmypdf
from ocrmypdf import InputFileError, EncryptedPdfError
"image/tiff": ".tif",
"image/gif": ".gif",
"image/bmp": ".bmp",
+ "image/webp": ".webp",
},
}
msgs = check_default_language_available(None)
self.assertEqual(len(msgs), 1)
self.assertEqual(msgs[0].level, ERROR)
+
+ @override_settings(OCR_LANGUAGE="chi_sim")
+ @mock.patch("paperless_tesseract.checks.get_tesseract_langs")
+ def test_multi_part_language(self, m):
+ """
+ GIVEN:
+ - An OCR language which is multi part (ie chi-sim)
+ - The language is correctly formatted
+ WHEN:
+ - Installed packages are checked
+ THEN:
+ - No errors are reported
+ """
+ m.return_value = ["chi_sim", "eng"]
+
+ msgs = check_default_language_available(None)
+
+ self.assertEqual(len(msgs), 0)
+
+ @override_settings(OCR_LANGUAGE="chi-sim")
+ @mock.patch("paperless_tesseract.checks.get_tesseract_langs")
+ def test_multi_part_language_bad_format(self, m):
+ """
+ GIVEN:
+ - An OCR language which is multi part (ie chi-sim)
+ - The language is correctly NOT formatted
+ WHEN:
+ - Installed packages are checked
+ THEN:
+ - No errors are reported
+ """
+ m.return_value = ["chi_sim", "eng"]
+
+ msgs = check_default_language_available(None)
+
+ self.assertEqual(len(msgs), 1)
+ self.assertEqual(msgs[0].level, ERROR)
class TestParser(DirectoriesMixin, TestCase):
+
+ SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
+
def assertContainsStrings(self, content, strings):
# Asserts that all strings appear in content, in the given order.
indices = []
self.fail(f"'{s}' is not in '{content}'")
self.assertListEqual(indices, sorted(indices))
- text_cases = [
- ("simple string", "simple string"),
- ("simple newline\n testing string", "simple newline\ntesting string"),
- ("utf-8 строка с пробелами в конце ", "utf-8 строка с пробелами в конце"),
- ]
-
def test_post_process_text(self):
- for source, result in self.text_cases:
+
+ text_cases = [
+ ("simple string", "simple string"),
+ ("simple newline\n testing string", "simple newline\ntesting string"),
+ (
+ "utf-8 строка с пробелами в конце ",
+ "utf-8 строка с пробелами в конце",
+ ),
+ ]
+
+ for source, result in text_cases:
actual_result = post_process_text(source)
self.assertEqual(
result,
),
)
- SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
-
def test_get_text_from_pdf(self):
parser = RasterisedDocumentParser(uuid.uuid4())
text = parser.extract_text(
self.assertIn("[OCR skipped on page(s) 4-6]", sidecar)
+ @override_settings(OCR_MODE="redo")
+ def test_single_page_mixed(self):
+ """
+ GIVEN:
+ - File with some text contained in images and some in text layer
+ - Text and images are mixed on the same page
+ - OCR mode set to redo
+ WHEN:
+ - Document is parsed
+ THEN:
+ - Text from images is extracted
+ - Full content of the file is parsed (not just the image text)
+ - An archive file is created with the OCRd text and the original text
+ """
+ parser = RasterisedDocumentParser(None)
+ parser.parse(
+ os.path.join(self.SAMPLE_FILES, "single-page-mixed.pdf"),
+ "application/pdf",
+ )
+ self.assertIsNotNone(parser.archive_path)
+ self.assertTrue(os.path.isfile(parser.archive_path))
+ self.assertContainsStrings(
+ parser.get_text().lower(),
+ [
+ "this is some normal text, present on page 1 of the document.",
+ "this is some text, but in an image, also on page 1.",
+ "this is further text on page 1.",
+ ],
+ )
+
+ with open(os.path.join(parser.tempdir, "sidecar.txt")) as f:
+ sidecar = f.read().lower()
+
+ self.assertIn("this is some text, but in an image, also on page 1.", sidecar)
+ self.assertNotIn(
+ "this is some normal text, present on page 1 of the document.",
+ sidecar,
+ )
+
@override_settings(OCR_MODE="skip_noarchive")
def test_multi_page_mixed_no_archive(self):
"""
parser = RasterisedDocumentParser(None)
parser.parse(os.path.join(self.SAMPLE_FILES, "simple.bmp"), "image/bmp")
self.assertTrue(os.path.isfile(parser.archive_path))
- self.assertTrue("this is a test document" in parser.get_text().lower())
+ self.assertIn("this is a test document", parser.get_text().lower())
def test_jpg(self):
parser = RasterisedDocumentParser(None)
parser.parse(os.path.join(self.SAMPLE_FILES, "simple.jpg"), "image/jpeg")
self.assertTrue(os.path.isfile(parser.archive_path))
- self.assertTrue("this is a test document" in parser.get_text().lower())
+ self.assertIn("this is a test document", parser.get_text().lower())
@override_settings(OCR_IMAGE_DPI=200)
def test_gif(self):
parser = RasterisedDocumentParser(None)
parser.parse(os.path.join(self.SAMPLE_FILES, "simple.gif"), "image/gif")
self.assertTrue(os.path.isfile(parser.archive_path))
- self.assertTrue("this is a test document" in parser.get_text().lower())
+ self.assertIn("this is a test document", parser.get_text().lower())
def test_tiff(self):
parser = RasterisedDocumentParser(None)
parser.parse(os.path.join(self.SAMPLE_FILES, "simple.tif"), "image/tiff")
self.assertTrue(os.path.isfile(parser.archive_path))
- self.assertTrue("this is a test document" in parser.get_text().lower())
+ self.assertIn("this is a test document", parser.get_text().lower())
+
+ @override_settings(OCR_IMAGE_DPI=72)
+ def test_webp(self):
+ parser = RasterisedDocumentParser(None)
+ parser.parse(os.path.join(self.SAMPLE_FILES, "document.webp"), "image/webp")
+ self.assertTrue(os.path.isfile(parser.archive_path))
+ # OCR consistent mangles this space, oh well
+ self.assertIn(
+ "this is awebp document, created 11/14/2022.",
+ parser.get_text().lower(),
+ )