Showing preview only (1,061K chars total). Download the full file or copy to clipboard to get everything.
Repository: phiresky/ripgrep-all
Branch: master
Commit: d6d7d5314ba4
Files: 70
Total size: 1.0 MB
Directory structure:
gitextract_jwvrvi_c/
├── .cargo/
│ └── audit.toml
├── .envrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── .typos.toml
├── .vscode/
│ └── launch.json
├── CHANGELOG.md
├── Cargo.toml
├── LICENSE.md
├── README.md
├── ci/
│ ├── macos-install-packages
│ └── ubuntu-install-packages
├── doc/
│ ├── config.default.jsonc
│ ├── notes.md
│ └── update-readme.sh
├── exampledir/
│ ├── decompress/
│ │ ├── test.log
│ │ ├── test.log.bz2
│ │ ├── test.log.xz
│ │ ├── test.log.zst
│ │ └── testlogbutwithoutextension
│ ├── demo/
│ │ ├── greeting.mkv
│ │ ├── hello.odt
│ │ └── hello.sqlite3
│ ├── encoding/
│ │ ├── utf16le.txt
│ │ └── utf8.txt
│ ├── formatting.epub
│ ├── mail_nested.eml
│ ├── mail_pdf_attach.eml
│ ├── sqlitedb
│ ├── tar/
│ │ └── test.tar.bz2
│ ├── test/
│ │ ├── github_email.eml
│ │ ├── hello.sqlite3
│ │ ├── mail_with_attachment.mbox
│ │ └── test.mbx
│ ├── test.djvu
│ ├── wasteland.docx
│ ├── wasteland.epub
│ ├── wasteland.fb2
│ ├── wasteland.mkv
│ ├── wasteland.mobi
│ └── wasteland.odt
├── flake.nix
├── rust-toolchain.toml
└── src/
├── adapted_iter.rs
├── adapters/
│ ├── custom.rs
│ ├── decompress.rs
│ ├── ffmpeg.rs
│ ├── mbox.rs
│ ├── postproc.rs
│ ├── sqlite.rs
│ ├── tar.rs
│ ├── writing.rs
│ └── zip.rs
├── adapters.rs
├── bin/
│ ├── rga-fzf-open.rs
│ ├── rga-fzf.rs
│ ├── rga-preproc.rs
│ └── rga.rs
├── caching_writer.rs
├── config.rs
├── expand.rs
├── lib.rs
├── matching.rs
├── preproc.rs
├── preproc_cache.rs
├── recurse.rs
└── test_utils.rs
================================================
FILE CONTENTS
================================================
================================================
FILE: .cargo/audit.toml
================================================
[yanked]
enabled = false # doesn't work in Nix sandbox
update_index = false # crates.io index managed by Nix
================================================
FILE: .envrc
================================================
use flake
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
**To Reproduce**
Attach example file:
Run command:
**Output**
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Operating System and Version**
**Output of `rga --version`**
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/workflows/ci.yml
================================================
# Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md
#
# While our "example" application has platform-specific code,
# for simplicity we are compiling and testing everything in a nix-on-Linux environment only.
on: [push, pull_request]
name: ci
jobs:
nix-flake-check:
name: nix flake check
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Install nix
uses: cachix/install-nix-action@v21
- name: Ensure the build succeeds
run: nix build
- name: Run `nix flake check` to run formatters, linters, and tests
run: nix flake check --print-build-logs
================================================
FILE: .github/workflows/release.yml
================================================
# adapted from https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml
# The way this works is a little weird. But basically, the create-release job
# runs purely to initialize the GitHub release itself. Once done, the upload
# URL of the release is saved as an artifact.
#
# The build-release job runs only once create-release is finished. It gets
# the release upload URL by downloading the corresponding artifact (which was
# uploaded by create-release). It then builds the release executables for each
# supported platform and attaches them as release assets to the previously
# created release.
#
# The key here is that we create the release only once.
name: release
on:
push:
# Enable when testing release infrastructure on a branch.
# branches:
# - ag/release
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"
jobs:
create-release:
permissions: write-all
name: create-release
runs-on: ubuntu-latest
# env:
# Set to force version number, e.g., when no tag exists.
# RG_VERSION: TEST-0.0.0
steps:
- name: Create artifacts directory
run: mkdir artifacts
- name: Get the release version from the tag
if: env.RG_VERSION == ''
run: |
# Apparently, this is the right way to get a tag name. Really?
#
# See: https://github.community/t5/GitHub-Actions/How-to-get-just-the-tag-name/m-p/32167/highlight/true#M1027
echo "RG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
echo "version is: ${{ env.RG_VERSION }}"
- name: Create GitHub release
id: release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.RG_VERSION }}
release_name: ${{ env.RG_VERSION }}
- name: Save release upload URL to artifact
run: echo "${{ steps.release.outputs.upload_url }}" > artifacts/release-upload-url
- name: Save version number to artifact
run: echo "${{ env.RG_VERSION }}" > artifacts/release-version
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts
path: artifacts
build-release:
name: build-release
needs: ["create-release"]
runs-on: ${{ matrix.os }}
env:
# For some builds, we use cross to test on 32-bit and big-endian
# systems.
CARGO: cargo
# When CARGO is set to CROSS, this is set to `--target matrix.target`.
TARGET_FLAGS: ""
# When CARGO is set to CROSS, TARGET_DIR includes matrix.target.
TARGET_DIR: ./target
# Emit backtraces on panics.
RUST_BACKTRACE: 1
strategy:
matrix:
include:
- build: linux
os: ubuntu-22.04
rust: nightly
target: x86_64-unknown-linux-musl
strip: x86_64-linux-musl-strip
- build: linux
os: ubuntu-22.04
rust: nightly
target: arm-unknown-linux-gnueabihf
strip: arm-linux-gnueabihf-strip
- build: linux
os: ubuntu-22.04
rust: nightly
target: aarch64-unknown-linux-gnu
strip: aarch64-linux-gnu-strip
- build: macos
os: macos-latest
rust: nightly
target: x86_64-apple-darwin
- build: macos
os: macos-latest
rust: nightly
target: aarch64-apple-darwin
- build: win
os: windows-2025
rust: nightly
target: x86_64-pc-windows-msvc
#- build: win
# os: windows-2019
# rust: nightly-x86_64-gnu
# target: x86_64-pc-windows-gnu
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install packages (Ubuntu)
if: matrix.build == 'linux'
run: |
ci/ubuntu-install-packages
- name: Install packages (macOS)
if: matrix.build == 'macos'
run: |
ci/macos-install-packages
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
profile: minimal
override: true
target: ${{ matrix.target }}
- name: Use Cross
shell: bash
run: |
cargo install cross
echo "CARGO=cross" >> $GITHUB_ENV
echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV
echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV
- name: Show command used for Cargo
run: |
echo "cargo command is: ${{ env.CARGO }}"
echo "target flag is: ${{ env.TARGET_FLAGS }}"
echo "target dir is: ${{ env.TARGET_DIR }}"
- name: Get release download URL
uses: actions/download-artifact@v4
with:
name: artifacts
path: artifacts
- name: Set release upload URL and release version
shell: bash
run: |
echo "RELEASE_UPLOAD_URL=$(cat artifacts/release-upload-url)" >> $GITHUB_ENV
echo "release upload url: $RELEASE_UPLOAD_URL"
echo "RELEASE_VERSION=$(cat artifacts/release-version)" >> $GITHUB_ENV
echo "release version: $RELEASE_VERSION"
- name: Build release binary
run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }}
- name: Strip release binary (macos)
if: matrix.build == 'macos'
run: |
strip "target/${{ matrix.target }}/release/rga" \
"target/${{ matrix.target }}/release/rga-preproc" \
"target/${{ matrix.target }}/release/rga-fzf" \
"target/${{ matrix.target }}/release/rga-fzf-open"
- name: Strip release binary (linux)
if: matrix.build == 'linux'
run: |
docker run --rm -v \
"$PWD/target:/target:Z" \
"rustembedded/cross:${{ matrix.target }}" \
"${{ matrix.strip }}" \
"/target/${{ matrix.target }}/release/rga" \
"/target/${{ matrix.target }}/release/rga-preproc" \
"/target/${{ matrix.target }}/release/rga-fzf" \
"/target/${{ matrix.target }}/release/rga-fzf-open"
- name: Build archive
shell: bash
run: |
staging="ripgrep_all-${{ env.RELEASE_VERSION }}-${{ matrix.target }}"
mkdir -p "$staging"/doc
cp {README.md,LICENSE.md} "$staging/"
cp CHANGELOG.md "$staging/doc/"
if [ "${{ matrix.build }}" = "win" ]; then
cp "target/${{ matrix.target }}/release/rga.exe" "$staging/"
cp "target/${{ matrix.target }}/release/rga-preproc.exe" "$staging/"
cp "target/${{ matrix.target }}/release/rga-fzf.exe" "$staging/"
cp "target/${{ matrix.target }}/release/rga-fzf-open.exe" "$staging/"
7z a "$staging.zip" "$staging"
echo "ASSET=$staging.zip" >> $GITHUB_ENV
else
cp "target/${{ matrix.target }}/release/rga" "$staging/"
cp "target/${{ matrix.target }}/release/rga-preproc" "$staging/"
cp "target/${{ matrix.target }}/release/rga-fzf" "$staging/"
cp "target/${{ matrix.target }}/release/rga-fzf-open" "$staging/"
tar czf "$staging.tar.gz" "$staging"
echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV
fi
- name: Upload release archive
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_UPLOAD_URL }}
asset_path: ${{ env.ASSET }}
asset_name: ${{ env.ASSET }}
asset_content_type: application/octet-stream
================================================
FILE: .gitignore
================================================
/result
/target
/exampledir.2
/.idea
/.pre-commit-config.yaml
/.vscode/settings.json
**/*.rs.bk
================================================
FILE: .typos.toml
================================================
[default.extend-words]
als = "als"
[files]
extend-exclude = ["exampledir/*"]
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "attach",
"name": "Attach",
"program": "${workspaceFolder}/target/release/rga-preproc"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'rga'",
"cargo": {
"args": ["test", "--no-run", "--lib", "--package=rga"],
"filter": {
"name": "rga",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'rga'",
"cargo": {
"args": ["build", "--bin=rga"],
"filter": {
"name": "rga",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'rga'",
"cargo": {
"args": ["test", "--no-run", "--bin=rga", "--package=ripgrep-all"],
"filter": {
"name": "rga",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'rga-preproc'",
"cargo": {
"args": ["build", "--bin=rga-preproc"],
"filter": {
"name": "rga-preproc",
"kind": "bin"
}
},
"args": ["exampledir/tar/test.tar.bz2"],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'rga-preproc'",
"cargo": {
"args": ["test", "--no-run", "--bin=rga-preproc", "--package=rga"],
"filter": {
"name": "rga-preproc",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
================================================
FILE: CHANGELOG.md
================================================
# 0.10.5 (2024-01-16)
- return the same exit status as rg
# 0.10.4 (2024-01-16)
- add `--rga-no-prefix-filenames` flag (https://github.com/phiresky/ripgrep-all/issues/154)
# 0.10.3 (2024-01-15)
This was originally supposed to be version 1.0.0, but I don't feel confident enough in the stability to call it that.
Highlights:
- rga is now configurable via a config file (~/.config/ripgrep-all/config.jsonc) that is generated on first use, including schema.
- Custom subprocess-spawning adapters can be defined via config file. See https://github.com/phiresky/ripgrep-all/wiki
- External adapters can be shared with the community at https://github.com/phiresky/ripgrep-all/discussions
Others:
- mbox adapter (@FliegendeWurst https://github.com/phiresky/ripgrep-all/pull/104)
- auto generate parts of the readme
- add loads of debug logs and performance timings when `--debug` is used
- better error messages via `anyhow`
- add cross-platform rga-fzf binary
- change whole code base to be async
- change adapter interface from `(&Read, &Write) -> ()` to `AsyncRead -> AsyncRead` to allow chaining of adapters
# 0.9.6 (2020-05-19)
- Fix windows builds
- Case insensitive file extension matching
- Move to Github Actions instead of Travis
- Fix searching for words that are hyphenated in PDFs (#44)
- Always load rga-preproc binary from location where rga is
# 0.9.5 (2020-04-08)
- Allow search in pdf files without extension (https://github.com/phiresky/ripgrep-all/issues/39)
- Prefer shipped binaries to system-installed ones (https://github.com/phiresky/ripgrep-all/issues/32)
- Upgrade dependencies
# 0.9.3 (2019-09-19)
- Fix compilation on new Rust by updating rusqlite ([#25](https://github.com/phiresky/ripgrep-all/pull/25))
# 0.9.2 (2019-06-17)
- Fix file ending regex ([#13](https://github.com/phiresky/ripgrep-all/issues/13))
- Fix decoding of UTF16 with BOM ([#5](https://github.com/phiresky/ripgrep-all/issues/5))
- Shorten the output on failure to two lines (https://github.com/phiresky/ripgrep-all/issues/7), you can use `--no-messages` to completely suppress errors.
- Better installations instructions in readme for each OS
- Add windows binaries! Including all dependencies!
# 0.9.1 (2019-06-16)
- Add enabled adapters to cache key if caching for archive
- Prevent empty trailing page output in pdf reader
# 0.9.0 (2019-06-16)
- Split decompress and tar adapter so we can also read pure .bz2 files etc
- Add mime type detection to decompress so we can read e.g. /boot/initramfs.img which is a bz2 file without ending
# 0.8.9 (2019-06-15)
- Finally fix linux binary package
- add readme to crates.io
# 0.8.7 (2019-06-15)
Minor fixes
- Correctly wrap help text
- Show own help when no arguments given
- Hopefully package the rga binary correctly
# 0.8.5
previous changes not documented
================================================
FILE: Cargo.toml
================================================
[package]
authors = ["phiresky <phireskyde+git@gmail.com>"]
description = "rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc."
edition = "2024"
exclude = [
"exampledir/*",
]
homepage = "https://github.com/phiresky/ripgrep-all"
license = "AGPL-3.0-or-later"
name = "ripgrep_all"
readme = "README.md"
repository = "https://github.com/phiresky/ripgrep-all"
version = "0.10.10"
[features]
default = ["perf-literal"]
perf-literal = ["regex/perf-literal"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = {version = "1.0.71", features = ["backtrace"]}
async-compression = { version = "0.4.0", features = ["all", "all-algorithms", "tokio"] }
async-stream = "0.3.5"
async-trait = "0.1.68"
async_zip = {version = "0.0.12", features = ["full"]}
bincode = "1.3.3"
bytes = "1.4.0"
clap = {version = "4.3.0", features = ["wrap_help"]}
crossbeam = "0.8.2"
crossbeam-channel = "0.5.8"
derive_more = "0.99.17"
directories-next = "2.0.0"
dyn-clonable = "0.9.0"
dyn-clone = "1.0.11"
encoding_rs = "0.8.32"
encoding_rs_io = "0.1.7"
env_logger = "0.10.0"
glob = "0.3.1"
json_comments = "0.2.1"
lazy_static = "1.4.0"
log = "0.4.17"
mailparse = "0.14.0"
memchr = "2.5.0"
mime2ext = "0.1.52"
open = "5"
paste = "1.0.12"
path-clean = "1.0.1"
pretty-bytes = "0.2.2"
regex = "1.8.2"
rusqlite = {version = "0.30.0", features = ["vtab", "bundled"]}
schemars = {version = "0.8.12", features = ["preserve_order"]}
serde = {version = "1.0.163", features = ["derive"]}
serde_json = "1.0.96"
size_format = "1.0.2"
structopt = "0.3.26"
tempfile = "3.5.0"
tokio = {version = "1.28.1", features = ["full"]}
tokio-rusqlite = "0.5.0"
tokio-stream = {version = "0.1.14", features = ["io-util", "tokio-util"]}
astral-tokio-tar = "0.5.6"
tokio-util = {version = "0.7.8", features = ["io", "full"]}
tree_magic = {package = "tree_magic_mini", version = "3.0.3"}
[dev-dependencies]
async-recursion = "1.0.4"
ctor = "0.2.0"
pretty_assertions = "1.3.0"
tempfile = "3.5.0"
tokio-test = "0.4.2"
[profile.release]
debug = true
lto = "thin"
split-debuginfo = "packed"
================================================
FILE: LICENSE.md
================================================
I like the concept of giving back, so I settled on the AGPL as the
default license for all my personal projects.
This isn't set in stone, so feel free to write me at
`phireskyde+git@gmail.com` if you need something else.
---
### GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright © 2007 Free Software Foundation, Inc.
<<http://fsf.org/>>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed to
take away your freedom to share and change the works. By contrast, our
General Public Licenses are intended to guarantee your freedom to share
and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have the
freedom to distribute copies of free software (and charge for them if
you wish), that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights with
two steps: (1) assert copyright on the software, and (2) offer you this
License which gives you legal permission to copy, distribute and/or
modify the software.
A secondary benefit of defending all users' freedom is that improvements
made in alternate versions of the program, if they receive widespread
use, become available for other developers to incorporate. Many
developers of free software are heartened and encouraged by the
resulting cooperation. However, in the case of software used on network
servers, this result may fail to come about. The GNU General Public
License permits making a modified version and letting the public access
it on a server without ever releasing its source code to the public.
The GNU Affero General Public License is designed specifically to ensure
that, in such cases, the modified source code becomes available to the
community. It requires the operator of a network server to provide the
source code of the modified version running there to the users of that
server. Therefore, public use of a modified version, on a publicly
accessible server, gives the public access to the source code of the
modified version.
An older license, called the Affero General Public License and published
by Affero, was designed to accomplish similar goals. This is a different
license, not a version of the Affero GPL, but Affero has released a new
version of the Affero GPL which permits relicensing under this license.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public
License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on
the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible feature
that (1) displays an appropriate copyright notice, and (2) tells the
user that there is no warranty for the work (except to the extent that
warranties are provided), that licensees may convey the work under this
License, and how to view a copy of this License. If the interface
presents a list of user commands or options, such as a menu, a prominent
item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of a
work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that is
widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that Major
Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A "Major
Component", in this context, means a major essential component (kernel,
window system, and so on) of the specific operating system (if any) on
which the executable work runs, or a compiler used to produce the work,
or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the
source code needed to generate, install, and (for an executable work)
run the object code and to modify the work, including scripts to control
those activities. However, it does not include the work's System
Libraries, or general-purpose tools or generally available free programs
which are used unmodified in performing those activities but which are
not part of the work. For example, Corresponding Source includes
interface definition files associated with source files for the work,
and the source code for shared libraries and dynamically linked
subprograms that the work is specifically designed to require, such as
by intimate data communication or control flow between those subprograms
and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article 11
of the WIPO copyright treaty adopted on 20 December 1996, or similar
laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to the
covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice; keep
intact all notices stating that this License and any non-permissive
terms added in accord with section 7 apply to the code; keep intact all
notices of the absence of any warranty; and give all recipients a copy
of this License along with the Program.
You may charge any price or no price for each copy that you convey, and
you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the terms
of section 4, provided that you also meet all of these conditions:
- a\) The work must carry prominent notices stating that you modified it,
and giving a relevant date.
- b\) The work must carry prominent notices stating that it is released
under this License and any conditions added under section 7. This
requirement modifies the requirement in section 4 to "keep intact
all notices".
- c\) You must license the entire work, as a whole, under this License to
anyone who comes into possession of a copy. This License will therefore
apply, along with any applicable section 7 additional terms, to the
whole of the work, and all its parts, regardless of how they
are packaged. This License gives no permission to license the work in
any other way, but it does not invalidate such permission if you have
separately received it.
- d\) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your work need
not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work, and
which are not combined with it such as to form a larger program, in or
on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not used
to limit the access or legal rights of the compilation's users beyond
what the individual works permit. Inclusion of a covered work in an
aggregate does not cause this License to apply to the other parts of the
aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a\) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium customarily used
for software interchange.
- b\) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a written
offer, valid for at least three years and valid for as long as you offer
spare parts or customer support for that product model, to give anyone
who possesses the object code either (1) a copy of the Corresponding
Source for all the software in the product that is covered by this
License, on a durable physical medium customarily used for software
interchange, for a price no more than your reasonable cost of physically
performing this conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
- c\) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This alternative is
allowed only occasionally and noncommercially, and only if you received
the object code with such an offer, in accord with subsection 6b.
- d\) Convey the object code by offering access from a designated place
(gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to copy
the object code is a network server, the Corresponding Source may be on
a different server (operated by you or a third party) that supports
equivalent copying facilities, provided you maintain clear directions
next to the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you remain
obligated to ensure that it is available for as long as needed to
satisfy these requirements.
- e\) Convey the object code using peer-to-peer transmission, provided you
inform other peers where the object code and Corresponding Source of the
work are being offered to the general public at no charge under
subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be included
in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of coverage.
For a particular product received by a particular user, "normally used"
refers to a typical or common use of that class of product, regardless
of the status of the particular user or of the way in which the
particular user actually uses, or expects or is expected to use, the
product. A product is a consumer product regardless of whether the
product has substantial commercial, industrial or non-consumer uses,
unless such uses represent the only significant mode of use of the
product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product
from a modified version of its Corresponding Source. The information
must suffice to ensure that the continued functioning of the modified
object code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied by
the Installation Information. But this requirement does not apply if
neither you nor any third party retains the ability to install modified
object code on the User Product (for example, the work has been
installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in
accord with this section must be in a format that is publicly documented
(and with an implementation available to the public in source code
form), and must require no special password or key for unpacking,
reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by this
License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove
any additional permissions from that copy, or from any part of it.
(Additional permissions may be written to require their own removal in
certain cases when you modify the work.) You may place additional
permissions on material, added by you to a covered work, for which you
have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a\) Disclaiming warranty or limiting liability differently from the terms
of sections 15 and 16 of this License; or
- b\) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal Notices
displayed by works containing it; or
- c\) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d\) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
- e\) Declining to grant rights under trademark law for use of some trade
names, trademarks, or service marks; or
- f\) Requiring indemnification of licensors and authors of that material
by anyone who conveys the material (or modified versions of it) with
contractual assumptions of liability to the recipient, for any liability
that these contractual assumptions directly impose on those licensors
and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains a
further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms of
that license document, provided that the further restriction does not
survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must
place, in the relevant source files, a statement of the additional terms
that apply to those files, or a notice indicating where to find the
applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the above
requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally terminates
your license, and (b) permanently, if the copyright holder fails to
notify you of the violation by some reasonable means prior to 60 days
after the cessation.
Moreover, your license from a particular copyright holder is reinstated
permanently if the copyright holder notifies you of the violation by
some reasonable means, this is the first time you have received notice
of violation of this License (for any work) from that copyright holder,
and you cure the violation prior to 30 days after your receipt of the
notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a
copy of the Program. Ancillary propagation of a covered work occurring
solely as a consequence of using peer-to-peer transmission to receive a
copy likewise does not require acceptance. However, nothing other than
this License grants you permission to propagate or modify any covered
work. These actions infringe copyright if you do not accept this
License. Therefore, by modifying or propagating a covered work, you
indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered work
results from an entity transaction, each party to that transaction who
receives a copy of the work also receives whatever licenses to the work
the party's predecessor in interest had or could give under the previous
paragraph, plus a right to possession of the Corresponding Source of the
work from the predecessor in interest, if the predecessor has it or can
get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may not
impose a license fee, royalty, or other charge for exercise of rights
granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that any
patent claim is infringed by making, using, selling, offering for sale,
or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The work
thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or
controlled by the contributor, whether already acquired or hereafter
acquired, that would be infringed by some manner, permitted by this
License, of making, using, or selling its contributor version, but do
not include claims that would be infringed only as a consequence of
further modification of the contributor version. For purposes of this
definition, "control" includes the right to grant patent sublicenses in
a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to make,
use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license, and
the Corresponding Source of the work is not available for anyone to
copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify or
convey a specific copy of the covered work, then the patent license you
grant is automatically extended to all recipients of the covered work
and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you are
a party to an arrangement with a third party that is in the business of
distributing software, under which you make payment to the third party
based on the extent of your activity of conveying the work, and under
which the third party grants, to any of the parties who would receive
the covered work from you, a discriminatory patent license (a) in
connection with copies of the covered work conveyed by you (or copies
made from those copies), or (b) primarily for and in connection with
specific products or compilations that contain the covered work, unless
you entered into that arrangement, or that patent license was granted,
prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any
implied license or other defenses to infringement that may otherwise be
available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not convey it at all. For example, if you agree to terms that
obligate you to collect a royalty for further conveying from those to
whom you convey the Program, the only way you could satisfy both those
terms and this License would be to refrain entirely from conveying the
Program.
#### 13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have permission
to link or combine any covered work with a work licensed under version 3
of the GNU General Public License into a single combined work, and to
convey the resulting work. The terms of this License will continue to
apply to the part which is the covered work, but the work with which it
is combined will remain governed by version 3 of the GNU General Public
License.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the option
of following the terms and conditions either of that numbered version or
of any later version published by the Free Software Foundation. If the
Program does not specify a version number of the GNU Affero General
Public License, you may choose any version ever published by the Free
Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different permissions.
However, no additional obligations are imposed on any author or
copyright holder as a result of your choosing to follow a later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above
cannot be given local legal effect according to their terms, reviewing
courts shall apply local law that most closely approximates an absolute
waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in
return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow the
GNU AGPL, see <<http://www.gnu.org/licenses/>>.
================================================
FILE: README.md
================================================
# rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
rga is a line-oriented search tool that allows you to look for a regex in a multitude of file types. rga wraps the awesome [ripgrep] and enables it to search in pdf, docx, sqlite, jpg, movie subtitles (mkv, mp4), etc.
[ripgrep]: https://github.com/BurntSushi/ripgrep
[](https://github.com/phiresky/ripgrep-all)
[](https://crates.io/crates/ripgrep-all)
[](https://www.reddit.com/r/rustjerk/top/?sort=top&t=all)
For more detail, see this introductory blogpost: https://phiresky.github.io/blog/2019/rga--ripgrep-for-zip-targz-docx-odt-epub-jpg/
rga will recursively descend into archives and match text in every file type it knows.
Here is an [example directory](https://github.com/phiresky/ripgrep-all/tree/master/exampledir/demo) with different file types:
```
demo/
├── greeting.mkv
├── hello.odt
├── hello.sqlite3
└── somearchive.zip
├── dir
│ ├── greeting.docx
│ └── inner.tar.gz
│ └── greeting.pdf
└── greeting.epub
```

## Integration with fzf

See [the wiki](https://github.com/phiresky/ripgrep-all/wiki/fzf-Integration) for instructions of integrating rga with fzf.
## INSTALLATION
Linux x64, macOS and Windows binaries are available [in GitHub Releases][latestrelease].
[latestrelease]: https://github.com/phiresky/ripgrep-all/releases/latest
### Linux
#### Arch Linux
`pacman -S ripgrep-all`
#### Gentoo Linux
`emerge sys-apps/ripgrep-all`
#### Nix
`nix-env -iA nixpkgs.ripgrep-all`
#### Debian-based
download the [rga binary][latestrelease] and get the dependencies like this:
`apt install ripgrep pandoc poppler-utils ffmpeg`
If ripgrep is not included in your package sources, get it from [here](https://github.com/BurntSushi/ripgrep/releases).
rga will search for all binaries it calls in \$PATH and the directory itself is in.
### Windows
Note that installing via [chocolatey](https://chocolatey.org/packages/ripgrep-all) or [scoop](https://github.com/ScoopInstaller/Main/blob/master/bucket/rga.json) is the only supported download method. If you download the binary from releases manually, you will not get the dependencies (for example pdftotext from poppler).
If you get an error like `VCRUNTIME140.DLL could not be found`, you need to install [vc_redist.x64.exe](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).
#### Chocolatey
```
choco install ripgrep-all
```
#### Scoop
```
scoop install rga
```
### Homebrew/Linuxbrew
`rga` can be installed with [Homebrew](https://formulae.brew.sh/formula/ripgrep-all#default):
`brew install rga`
To install the dependencies that are each not strictly necessary but very useful:
`brew install pandoc poppler ffmpeg`
### MacPorts
`rga` can also be installed on macOS via [MacPorts](https://ports.macports.org/port/ripgrep-all/):
`sudo port install ripgrep-all`
### Compile from source
rga should compile with stable Rust (v1.75.0+, check with `rustc --version`). To build it, run the following (or the equivalent in your OS):
```
~$ apt install build-essential pandoc poppler-utils ffmpeg ripgrep cargo
~$ cargo install --locked ripgrep_all
~$ rga --version # this should work now
```
## Available Adapters
rga works with _adapters_ that adapt various file formats. It comes with a few adapters integrated:
```
rga --rga-list-adapters
```
You can also add **custom adapters**. See [the wiki](https://github.com/phiresky/ripgrep-all/wiki) for more information.
<!-- this part generated by update-readme.sh -->
Adapters:
- **pandoc**
Uses pandoc to convert binary/unreadable text documents to plain markdown-like text
Runs: pandoc --from= --to=plain --wrap=none --markdown-headings=atx
Extensions: .epub, .odt, .docx, .fb2, .ipynb, .html, .htm
- **poppler**
Uses pdftotext (from poppler-utils) to extract plain text from PDF files
Runs: pdftotext - -
Extensions: .pdf
Mime Types: application/pdf
- **postprocpagebreaks**
Adds the page number to each line for an input file that specifies page breaks as ascii page break character.
Mainly to be used internally by the poppler adapter.
Extensions: .asciipagebreaks
- **ffmpeg**
Uses ffmpeg to extract video metadata/chapters, subtitles, lyrics, and other metadata
Extensions: .mkv, .mp4, .avi, .mp3, .ogg, .flac, .webm
- **zip**
Reads a zip file as a stream and recurses down into its contents
Extensions: .zip, .jar
Mime Types: application/zip
- **decompress**
Reads compressed file as a stream and runs a different extractor on the contents.
Extensions: .als, .bz2, .gz, .tbz, .tbz2, .tgz, .xz, .zst
Mime Types: application/gzip, application/x-bzip, application/x-xz, application/zstd
- **tar**
Reads a tar file as a stream and recurses down into its contents
Extensions: .tar
- **sqlite**
Uses sqlite bindings to convert sqlite databases into a simple plain text format
Extensions: .db, .db3, .sqlite, .sqlite3
Mime Types: application/x-sqlite3
The following adapters are disabled by default, and can be enabled using '--rga-adapters=+foo,bar':
- **mail**
Reads mailbox/mail files and runs extractors on the contents and attachments.
Extensions: .mbox, .mbx, .eml
Mime Types: application/mbox, message/rfc822
## USAGE:
> rga \[RGA OPTIONS\] \[RG OPTIONS\] PATTERN \[PATH \...\]
## FLAGS:
**\--rga-accurate**
> Use more accurate but slower matching by mime type
> By default, rga will match files using file extensions. Some programs,
> such as sqlite3, don\'t care about the file extension at all, so users
> sometimes use any or no extension at all. With this flag, rga will try
> to detect the mime type of input files using the magic bytes (similar
> to the \`file\` utility), and use that to choose the adapter.
> Detection is only done on the first 8KiB of the file, since we can\'t
> always seek on the input (in archives).
**\--rga-no-cache**
> Disable caching of results
> By default, rga caches the extracted text, if it is small enough, to a
> database in \${XDG_CACHE_DIR-\~/.cache}/ripgrep-all on Linux,
> _\~/Library/Caches/ripgrep-all_ on macOS, or
> C:\\Users\\username\\AppData\\Local\\ripgrep-all on Windows. This way,
> repeated searches on the same set of files will be much faster. If you
> pass this flag, all caching will be disabled.
**-h**, **\--help**
> Prints help information
**\--rga-list-adapters**
> List all known adapters
**\--rga-print-config-schema**
> Print the JSON Schema of the configuration file
**\--rg-help**
> Show help for ripgrep itself
**\--rg-version**
> Show version of ripgrep itself
**-V**, **\--version**
> Prints version information
## OPTIONS:
**\--rga-adapters=**\<adapters\>\...
> Change which adapters to use and in which priority order (descending)
> \"foo,bar\" means use only adapters foo and bar. \"-bar,baz\" means
> use all default adapters except for bar and baz. \"+bar,baz\" means
> use all default adapters and also bar and baz.
**\--rga-cache-compression-level=**\<compression-level\>
> ZSTD compression level to apply to adapter outputs before storing in
> cache db
> Ranges from 1 - 22 \[default: 12\]
**\--rga-config-file=**\<config-file-path\>
**\--rga-max-archive-recursion=**\<max-archive-recursion\>
> Maximum nestedness of archives to recurse into \[default: 5\]
**\--rga-cache-max-blob-len=**\<max-blob-len\>
> Max compressed size to cache
> Longest byte length (after compression) to store in cache. Longer
> adapter outputs will not be cached and recomputed every time.
> Allowed suffixes on command line: k M G \[default: 2000000\]
**\--rga-cache-path=**\<path\>
> Path to store cache db \[default: /home/phire/.cache/ripgrep-all\]
**-h** shows a concise overview, **\--help** shows more detail and
advanced options.
All other options not shown here are passed directly to rg, especially
\[PATTERN\] and \[PATH \...\]
<!-- end of part generated by update-readme.sh -->
## Config
The config file location leverage the mechanisms defined by
- the [XDG base directory](https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html) and
the [XDG user directory](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/) specifications on Linux (ex: `~/.config/ripgrep-all/config.jsonc`)
- the [Known Folder](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx) API on Windows (ex: `C:\Users\Alice\AppData\Roaming\ripgrep-all/config.jsonc`)
- the [Standard Directories](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW6)
guidelines on macOS (ex: `~/Library/Application Support/ripgrep-all/config.jsonc`)
## Development
To enable debug logging:
```bash
export RUST_LOG=debug
export RUST_BACKTRACE=1
```
Also remember to disable caching with `--rga-no-cache` or clear the cache
(`~/Library/Caches/rga` on macOS, `~/.cache/rga` on other Unixes,
or `C:\Users\username\AppData\Local\rga` on Windows)
to debug the adapters.
### Nix and Direnv
You can use the provided [`flake.nix`](./flake.nix) to setup all build- and
run-time dependencies:
1. Enable [Flakes](https://wiki.nixos.org/wiki/Flakes) in your Nix configuration.
1. Add [`direnv`](https://direnv.net/) to your profile:
`nix profile install nixpkgs#direnv`
1. `cd` into the directory where you have cloned this directory.
1. Allow use of [`.envrc`](./.envrc): `direnv allow`
1. After the dependencies have been installed, your shell will now have all of
the necessary development dependencies.
================================================
FILE: ci/macos-install-packages
================================================
#!/bin/sh
brew install poppler
================================================
FILE: ci/ubuntu-install-packages
================================================
#!/bin/sh
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
poppler-utils
================================================
FILE: doc/config.default.jsonc
================================================
{
// This file follows the JSON schema defined below.
// If you use an editor that supports JSON schema (e.g. VS Code),
// you should be getting IntelliSense and validation.
"$schema": "./config.v1.schema.json",
// The default config and schema will be regenerated if they are missing
// https://github.com/phiresky/ripgrep-all/blob/master/doc/config.default.jsonc
// The config options are the same as the command line options,
// but with --rga- prefix removed and - and . replaced with _.
// e.g. --rga-no-cache becomes `"no_cache": true.
// The only exception is the `custom_adapters` option, which can only be set in this file.
"custom_adapters": [
// See https://github.com/phiresky/ripgrep-all/wiki for more information
// to verify if your custom adapters are picked up correctly, run `rga --rga-list-adapters`
]
}
================================================
FILE: doc/notes.md
================================================
## schema -> ui generation
https://json-schema.org/implementations.html#web-ui-generation
- https://github.com/guillotinaweb/ngx-schema-form
- https://github.com/hamzahamidi/ajsf angular igh
- https://github.com/dashjoin/json-schema-form
- https://github.com/json-editor/json-editor
- https://github.com/jsonform/jsonform
- https://github.com/vazco/uniforms
## json schema is ridiculous
"mimetypes": {
"description": "if not null and --rga-accurate is enabled, mime type matching is used instead of file name matching",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
what the fuck????
this is the only thing required to see that json schema has horrible design
================================================
FILE: doc/update-readme.sh
================================================
#!/bin/bash
content=$(
cat <<END
<!-- this part generated by update-readme.sh -->
$(cargo run --bin rga -- --rga-list-adapters)
$(help2man -N "cargo run --bin rga --" | pandoc -f man -t markdown --markdown-headings=atx | rg --multiline "## USAGE:(.|\n)*")
<!-- end of part generated by update-readme.sh -->
END
)
rg --passthrough --multiline '.*update-readme.sh(.|\n)*update-readme.sh.*' README.md --replace "$content" | sponge README.md
prettier --write README.md
================================================
FILE: exampledir/decompress/test.log
================================================
hello world
this is a test
================================================
FILE: exampledir/encoding/utf8.txt
================================================
hello wörld!
================================================
FILE: exampledir/mail_nested.eml
================================================
To: submit.t4eseGWSvG1JST3r@spam.spamcop.net
From: 2012gdwu <2012gdwu@posteo.de>
Subject: Postbank Spam
Autocrypt: addr=2012gdwu@posteo.de; keydata=
mDMEXXjwiRYJKwYBBAHaRw8BAQdAmjXRazNXXy5tK05Dwl5mSRbdth9JkQq92V/QVyqjdgm0
I0FybmUgS2VsbGVyIDxhcm5lLmtlbGxlckBwb3N0ZW8uZGU+iJYEExYIAD4WIQR2UN3HoAGx
KI0B7Eih+UCxBQvPLgUCXXjwiQIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
CRCh+UCxBQvPLpPfAP4gs6Oky3+UO2LU2XxweeQO+YEWXK0QtM2+ajzrGaF3HAD+LBfmyB9+
Wom2KP0CwxUzI4d6zmiAMSKOnGGgzd65igm4OARdePCJEgorBgEEAZdVAQUBAQdAncxZ3Rox
wmvm+/qCkCm9+PU2HmWr08M3qdqkf2L4IngDAQgHiH4EGBYIACYWIQR2UN3HoAGxKI0B7Eih
+UCxBQvPLgUCXXjwiQIbDAUJCWYBgAAKCRCh+UCxBQvPLpQkAQCgYOlOftMNi+sfn+XQvfOc
ULQWp+cgOBMcyVCdpJEQCwD9HBuwuHobl8FPm0PbRtlCn/7GY4WK+Hh4+3BKmhRn8wU=
Message-ID: <1530ae05-33a7-fa40-9473-ca625a14385a@posteo.de>
Date: Mon, 20 Jul 2020 07:35:55 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.10.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------6670F92201FB126ED9472803"
Content-Language: de-DE
This is a multi-part message in MIME format.
--------------6670F92201FB126ED9472803
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
here you go
--------------6670F92201FB126ED9472803
Content-Type: message/rfc822;
name="postbank.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="postbank.eml"
Return-Path: <gxnwgddl@carcarry.de>
Delivered-To: arne.keller@posteo.de
Received: from proxy02.posteo.name ([127.0.0.1])
by dovecot12 (Dovecot) with LMTP id EaKBGxv9FF+9mwEAJesNpQ
for <arne.keller@posteo.de>; Mon, 20 Jul 2020 04:15:27 +0200
Received: from proxy02.posteo.de ([127.0.0.1])
by proxy02.posteo.name (Dovecot) with LMTP id 31UFGtHsFF+T4gMAGFAyLg
; Mon, 20 Jul 2020 04:15:27 +0200
Received: from mailin05.posteo.de (unknown [10.0.1.5])
by proxy02.posteo.de (Postfix) with ESMTPS id 4B950v2JYGz11fk
for <arne.keller@posteo.de>; Mon, 20 Jul 2020 04:15:27 +0200 (CEST)
Received: from mx03.posteo.de (mailin05.posteo.de [127.0.0.1])
by mailin05.posteo.de (Postfix) with ESMTPS id 4270120F15
for <arne.keller@posteo.de>; Mon, 20 Jul 2020 04:15:27 +0200 (CEST)
X-Virus-Scanned: amavisd-new at posteo.de
X-Spam-Flag: NO
X-Spam-Score: 2.639
X-Spam-Level: **
X-Spam-Status: No, score=2.639 tagged_above=-1000 required=8
tests=[AV:Heuristics.Phishing.Email.SpoofedDomain=0.1, ALL_TRUSTED=-1,
FROM_LOCAL_NOVOWEL=0.5, HK_RANDOM_ENVFROM=0.626, HK_RANDOM_FROM=0.999,
HTML_FONT_LOW_CONTRAST=0.001, HTML_IMAGE_ONLY_24=1.282,
HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, POSTEO_GENERICS_IO=0.01,
T_FILL_THIS_FORM_SHORT=0.01, T_REMOTE_IMAGE=0.01] autolearn=disabled
Received: from mout.web.de (mout.web.de [212.227.15.14])
by mx03.posteo.de (Postfix) with ESMTPS id 4B950t696Mz10nB
for <arne.keller@posteo.de>; Mon, 20 Jul 2020 04:15:26 +0200 (CEST)
Authentication-Results: mx03.posteo.de; dmarc=none (p=none dis=none) header.from=carcarry.de
Received: from [212.227.15.17] ([212.227.15.17]) by mx-ha.web.de (mxweb010
[212.227.15.17]) with ESMTPS (Nemesis) id 1MRloE-1kQNT22I4w-00T9hm for
<arne.keller@posteo.de>; Mon, 20 Jul 2020 04:15:26 +0200
Received: from mout.kundenserver.de ([212.227.17.24]) by mx-ha.web.de
(mxweb010 [212.227.15.17]) with ESMTPS (Nemesis) id 1MINbE-1k0aRm2Hzw-00EOVM
for <2012gdwu@web.de>; Mon, 20 Jul 2020 04:15:26 +0200
Received: from 217.160.251.109 ([217.160.251.109]) by mrelayeu.kundenserver.de
(mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id
1MPoPd-1kBHRt0o2F-00MqkS for <2012gdwu@web.de>; Mon, 20 Jul 2020 04:15:26
+0200
From: "=?utf-8?B?UE9TVEJBTs2fS82f?=" <gxnwgddl@carcarry.de>
Subject: BsetSign App : Y7P32-HTXU2-FRDG7
To: "2012gdwu" <2012gdwu@web.de>
Content-Type: multipart/alternative; boundary="QHebeB08yNTYquFAhtQnxv=_cOW4Xd528c"
MIME-Version: 1.0
Date: Mon, 20 Jul 2020 02:15:26 +0000
Message-ID: <1M3lHZ-1jyAPt0pTn-000u1I@mrelayeu.kundenserver.de>
X-Provags-ID: V03:K1:68TECBVA88ZKh8HcSl/N+ElwlecL1tc+1AuDDyqm9em66WO295R
IfuHqA9uG7+Vlyr99v+OneGltnr43KfsgRKj9GgOpDj2QelHphKFGPILAvvsQ8vOq6ucC2W
BW3NEOh3JhitB6o4xLEmj+dbivC0ie728/cPMcjj6TwyBzw5nT1or8mBZWoEMSF/zcu+PIr
gGpFY2puzzURN4oKX82/w==
X-Spam-Flag: NO
X-UI-Out-Filterresults: notjunk:1;V03:K0:c01ZANnvlk8=:ouSMGue72FUx2PJOSNnmEW
qI8A89gf6q3aAdJBhLX1Bhd70xio64ljpha9X5ArOYg6Q2RH1JYyvfBSMoTo3HMy37H3L8kaq
ReRCdSPOMD8+llZ/rRpPLl+7PofGOv+Hu3UO7gzgm9v0YqwLZIwh9P2w9TIu+GqVJWeDdmxrs
RDPeHY8lsRL+8AFeSGNiWBYMEHDxKofTqS5Zh7mal1Bm4JbgEEIP36V4oL3c6V1olMHQZzEH9
7D0T8U6LyLyfSbuu5M6QN2FZ+F6IDJNDUG1uwNt9K12ESY6TweMR3xInFabiZ9fMPmrjPaNwW
hlyKg67tDYL2lfk2fpa/LbhLnlfKEDqSvkgK54CZh+xbIQetju66cZUEFQyCIcGdAOWI8+nty
FdbNUzxhNpZTPBrA7H95gRuc0u2GJBfZZsxdp46jpBwG65yqmJ32pkJrATo8CNbBO9A6hpdyL
UNu5bavZBJp9dsyY6Cnm6vMOIjJ8qMy/vNkrtRXNWBrnVHhuQZ3B+osG8XWLiyq7s4hFOwDxY
WLRgjKL6HgIj+2DLParwiuSsX8TVy5+WhxDUou0UJDzD3C1JmYiryTlo4Vu4CIZFXkgAuAsEq
c55M6L2eUmD3xQNaqgMEJFksT2qXWaSb2Qw6HM7mtLBbSUhuWtSv2oeVrNwgx8XWexWYYZYFv
KAZzICpkVhxpYIntoKRiDtQZxBDejPwGmne2iG81rn34pGJwOOYojf9dFghodE5bZEqVh6KbA
f/38x9FIoYewzA2WuyngX/bXTdkLQM49W1vdlF5DQOlgYuM8Ni7NeJG888VhDZxcUn6vIIJs3
xH0jOWrWCUz0gK9uyyagjcfdXr54Zv1E7i936CTlRq5QnDKN2C9jQFH5ymD4G1W5zX6Xj/05O
M7VaU9Y3mvOM/+82zsKc5zJOFOf9MoI5JBhnPjHWeqaJgpYhNoKgGvPo3QfZFwzk/MHH2PgB1
PLGvjSE8u/cpYeGhJdzTXM00J9ai5yGRNFD71zHoHBOFGCpmZVnJJ8SD+qUd4K4BfSD+DJ5Qd
t1wsCpH5bgodnXgMcN6Zj0q3P/ODk3dnah1hsYMyIWDBFZ0cTlp2QkYhAKZh1HM5WcfSc5UwU
SrcK9HHiG7BKOFYA1r6Rx5YYqwGWeGxr9mlH7MLyfCwI8PlWtfeB7Pj4eEI1hLy9GMnHBCJDj
W8o1yDeE54rgWHR7CtIF6w+qF+quA3ZdwVSPOHwQeH7vS4OaJjeEyeeT4YOJdIMI7UknEasAG
LfMS/PKWx7+YcUNaz0xvO70NwZj1FKJuWqDS6ZTciMSvGkEFTWVOqn5nPlHi8hDbBTVn70aPa
BQi3U68hgdDpJIHlVLLvRcaCYYly3L60NQBgJroag4fRiIvDUSXfDatrDYOv+L4xBYdB3GP+s
wqtsPY82YOwXP5KlRMPVEZcuWX5tWiOuaNjePbEkXpE2iQZUqfkDQTYNUGZR+TTBqHOWjO7R3
hORQB0gOwe85gZv80G1EL32EtRjVxJxQfrHGPCGXb8HRXbvGGV3Xu3wZEE8iuJngBUJtWeDBq
q61rYwZxVuml72lfRM6Lo+OGLAsyqvobxujY9BHpokZH4FNlUstjUoPANTGoAhM+MyQb0fSAV
8HA/r6n0oJh0B8+2AxJvVokbhEbL/RlJIZIYpCeRceeA+jjBaR7EvuglUoLN3CcB9CrdDH/qz
ymHzEjPVnFar3/sqRjeKyIk71z4yotOKCPQcdD1gTbYWehZiIJwAlDFSpfPdFTQLOJMWd3wuD
0mHLep6tLtCY+hjhCYWlTyKKQ8CWiBWPTql21bPp7XVWCfc+4u8kZi5Y3dg3pvpSwwmcyRisX
+7+8a+pBzN4VOEuX+dzglKDrNd6h2OL0tBMnk1yqAV27dX9cMRrO941IvtiaZO90BjZtV92oP
XkGxvKnGQuynHus/3yblaw==
This is a multi-part message in MIME format
--QHebeB08yNTYquFAhtQnxv=_cOW4Xd528c
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Sehr geehrter Herr / Frau =E2=80=A6,
Ab dem 20. Jul 2020 aktualisiert die Postbank alle BestSign-Anwendung=
en.
=C3=96ffnen Sie den unten stehenden Aktivierungslink, um am Upgrade t=
eilzunehmen. Verkn=C3=BCpfung
https://meine.postbank.de/#/login
Wir empfehlen dringend, dieses Upgrade durchzuf=C3=BChren.
Reundliche Gr=C3=BC=C3=9Fe,
=C2=A9 2020 Postbank=E2=80=93 eine Niederlassung der Deutsche Bank AG=
Hypnotiseur/zertifizierter Hypnosecoach (DVH)
Burnoutpr=C3=A4ventionscoach
Modeberater f=C3=BCr Ma=C3=9Fhemden/Ma=C3=9Fblusen
Kurs/Seminarleiter Waldbaden/Waldcoach
Am Wiesengrund 5
24980 Schafflund
Tel.: 04639-98475
Mob.: 015117317305
Home : www.hypnosepraxis-im-norden.de
Home : www.masshemden-im-norden.de
Home : www.waldbaden-zwischen-den-meeren.de
--QHebeB08yNTYquFAhtQnxv=_cOW4Xd528c
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<html><head></head><body><p><img width=3D"174" height=3D"51" alt=3D"" =
src=3D"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Postb=
ank-Logo.svg/1200px-Postbank-Logo.svg.png"></p><p><br></p>
<div>
<div> Sehr geehrter Herr / Frau =E2=80=A6,</div>
<div> Ab dem 20. Jul 2020 aktualisiert die Postbank alle BestSign=
-Anwendungen.<br><br></div>
<div> =C3=96ffnen Sie den unten stehenden Aktivierungslink, um am=
Upgrade teilzunehmen. Verkn=C3=BCpfung</div><div><br></div>
<div> <a href=3D"https://www.astcdubai.com/.well-known/.re/">http=
s://meine.postbank.de/#/login</a></div><div><br></div>
<div> Wir empfehlen dringend, dieses Upgrade durchzuf=C3=BChren.<=
/div>
<div> Reundliche Gr=C3=BC=C3=9Fe,</div>
<div> <strong>=C2=A9</strong> 2020 <strong>Postbank</strong>=E2=80=
=93 eine Niederlassung der Deutsche Bank AG<br><br> <span style=3D"col=
or: rgb(255, 255, 255);">Hypnotiseur/zertifizierter Hypnosecoach (DVH)=
</span><br><span style=3D"color: rgb(255, 255, 255);"> Burnoutpr=C3=A4=
ventionscoach</span><br><span style=3D"color: rgb(255, 255, 255);"> Mo=
deberater f=C3=BCr Ma=C3=9Fhemden/Ma=C3=9Fblusen</span><br><span style=
=3D"color: rgb(255, 255, 255);"> Kurs/Seminarleiter Waldbaden/Waldcoac=
h</span><br><span style=3D"color: rgb(255, 255, 255);"> Am Wiesengrund=
5</span><br><span style=3D"color: rgb(255, 255, 255);"> 24980 Schaffl=
und</span><br><span style=3D"color: rgb(255, 255, 255);"> Tel.: 04639-=
98475</span><br><span style=3D"color: rgb(255, 255, 255);"> Mob.: 0151=
17317305</span><br><span style=3D"color: rgb(255, 255, 255);"> Home : =
<a style=3D"color: rgb(255, 255, 255);" href=3D"https://deref-gmx.net/=
mail/client/Pk7kcpLwLpI/dereferrer/?redirectUrl=3Dhttp%3A%2F%2Fwww.hyp=
nosepraxis-im-norden.de" target=3D"_blank" rel=3D"noopener">www.hypnos=
epraxis-im-norden.de</a></span><br><span style=3D"color: rgb(255, 255,=
255);"> Home : <a style=3D"color: rgb(255, 255, 255);" href=3D"https:=
//deref-gmx.net/mail/client/KR0VAuy5YPo/dereferrer/?redirectUrl=3Dhttp=
%3A%2F%2Fwww.masshemden-im-norden.de" target=3D"_blank" rel=3D"noopene=
r">www.masshemden-im-norden.de</a></span><br><span style=3D"color: rgb=
(255, 255, 255);"> Home : <a style=3D"color: rgb(255, 255, 255);" href=
=3D"https://deref-gmx.net/mail/client/QTybHixMVsI/dereferrer/?redirect=
Url=3Dhttp%3A%2F%2Fwww.waldbaden-zwischen-den-meeren.de" target=3D"_bl=
ank" rel=3D"noopener">www.waldbaden-zwischen-den-meeren.de</a></span><=
/div>
</div></body></html>
--QHebeB08yNTYquFAhtQnxv=_cOW4Xd528c--
--------------6670F92201FB126ED9472803--
================================================
FILE: exampledir/mail_pdf_attach.eml
================================================
Return-Path: <ebay@southpole.com>
Delivered-To: arne.keller@posteo.de
Received: from proxy02.posteo.name ([127.0.0.1])
by dovecot12.posteo.name (Dovecot) with LMTP id pSysHGDdbmB8YwEAX/Xuyw
for <arne.keller@posteo.de>; Thu, 08 Apr 2021 13:05:20 +0200
Received: from proxy02.posteo.de ([127.0.0.1])
by proxy02.posteo.name (Dovecot) with LMTP id s5NOOdLWbmCfkwIAGFAyLg
; Thu, 08 Apr 2021 13:05:20 +0200
Received: from mailin03.posteo.de (unknown [10.0.0.63])
by proxy02.posteo.de (Postfix) with ESMTPS id 4FGJMN08Csz11fX
for <arne.keller@posteo.de>; Thu, 8 Apr 2021 13:05:20 +0200 (CEST)
Received: from mx03.posteo.de (mailin03.posteo.de [127.0.0.1])
by mailin03.posteo.de (Postfix) with ESMTPS id DCF8F20C4F
for <arne.keller@posteo.de>; Thu, 8 Apr 2021 13:05:19 +0200 (CEST)
X-Virus-Scanned: amavisd-new at posteo.de
X-Spam-Flag: NO
X-Spam-Score: 3.28
X-Spam-Level: ***
X-Spam-Status: No, score=3.28 tagged_above=-1000 required=7
tests=[ATTACHMT_OFFICE_RULE_POSTEO=3, HTML_MESSAGE=0.001,
POSTEO_PH_URI02=0.0001, RCVD_IN_DNSWL_NONE=-0.0001,
RCVD_IN_MSPIKE_H2=-0.001, T_OBFU_PDF_ATTACH=0.01,
T_RCVD_IN_ABUSIX_WHITE=0.01, T_REMOTE_IMAGE=0.01, URIBL_GREY=0.25]
autolearn=disabled
Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42])
by mx03.posteo.de (Postfix) with ESMTPS id 4FGJMK3DhPz11Th
for <2012gdwu@posteo.de>; Thu, 8 Apr 2021 13:05:17 +0200 (CEST)
Authentication-Results: posteo.de; dmarc=pass (p=reject dis=none) header.from=southpole.com
Authentication-Results: posteo.de;
dkim=pass (1024-bit key) header.d=southpole.com header.i=@southpole.com header.b=HLA5ukVr;
dkim-atps=neutral
Received: by mail-wr1-f42.google.com with SMTP id e12so1654541wro.11
for <2012gdwu@posteo.de>; Thu, 08 Apr 2021 04:05:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=southpole.com; s=google;
h=mime-version:importance:from:date:message-id:subject:to;
bh=qff7ZcQHFkiA26901Rwd3B+BU8uwZ2eTNK/n8m3J+Ng=;
b=HLA5ukVrjUevyqsukSaRSyGzDHHdOilYVk+ibWh1TBy78YoTdbTdpyP4ZA4KOMyAyB
J3NicUjaRSdGEcfvtZa64Zhq4n6pOqrECZOHC1UDTOkSel03EXI3X64T02i6/C/roJvE
ib4bSoCqSsQ7GwahiAeavXHSx6VXYDeJWPqIo=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20161025;
h=x-gm-message-state:mime-version:importance:from:date:message-id
:subject:to;
bh=qff7ZcQHFkiA26901Rwd3B+BU8uwZ2eTNK/n8m3J+Ng=;
b=Upw39D0O7nKa6RP/KkusFZ9NvzRTDpbVSgFVZsbpprWRbppSEuiaYEUi+XCwB5NFBN
dY6EoUIFEAtzUI/JHmifTFIkDmFk5CxafFOxcNT3h2yh38edmK9mBPfuTSy1XSTjQqDK
MsD+FP5YkJ9xQc4+L1rf8IFycIE/Hznf5qR2f4qXkn02O/L+zP8n3C2aRbsEqyZOkdcB
7HqnQSXTD6a4gV5KONxlYgZ7Haazw5H4o3RR5KgelxJvcoBZ+hbJXnElevMgmkBJkd6C
ausYAMrD6gmERVAK/sUxTCNI+BnywUQE+qon2W1NEs5JIZYa0K0mRv//4hv89u+fzRO7
7qIA==
X-Gm-Message-State: AOAM530qdo1mLwrOc0xI8a0LtThgIf2NVgI0ECVYto1ljKPKDSWwJWm0
yV0EhTsgYDIgTHN5+KcPebgnIcKhYCAmJnMraZGnEB4/lZ8=
X-Google-Smtp-Source: ABdhPJwAJ3NVb10PbLymKdjWJcu9ZzQlfTzoSBdvfj/Zkns1VzY/73NvyCaaWP8juXXoP2E8REB/lJEEZ8VZicvxz0U=
MIME-Version: 1.0
X-Received: by 2002:a5d:4a48:: with SMTP id v8mr10230108wrs.107.1617879916745;
Thu, 08 Apr 2021 04:05:16 -0700 (PDT)
Received: from 972489997876 named unknown by gmailapi.google.com with
HTTPREST; Thu, 8 Apr 2021 04:05:15 -0700
Importance: Normal
From: ebay@southpole.com
Date: Thu, 8 Apr 2021 04:05:15 -0700
Message-ID: <CADQDGfn_irkEYDosXy35GYBta_kGjzrEtRMne54UV9cZ+KVjOw@mail.gmail.com>
Subject: =?UTF-8?Q?Vielen_Dank_f=C3=BCr_Ihren_Beitrag_zum_Ausgleich_der_CO2?=
=?UTF-8?Q?_Emissionen_Ihres_Einkaufs?=
To: 2012gdwu@posteo.de
Content-Type: multipart/mixed; boundary="000000000000ba40c005bf7405c8"
--000000000000ba40c005bf7405c8
Content-Type: multipart/alternative; boundary="000000000000ba40be05bf7405c6"
--000000000000ba40be05bf7405c6
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<http://www.southpole.com>
Sehr geehrte/r Arne Keller,
Vielen Dank f=C3=BCr Ihren Beitrag zum Ausgleich der CO2 Emissionen Ihres
Einkaufs.
Sie haben sich daf=C3=BCr entschieden, das Prony Windkraft Projekt in
Neukaledonien zu unterst=C3=BCtzen. Teil des Projekts sind sechs Windparks =
an
verschieden Orten mit einer gesch=C3=A4tzten j=C3=A4hrlichen Produktion von=
40 GWh
Strom. Das Projekt ersetzt damit Netzstrom, der zu 80% aus fossilen
Kraftwerken produziert wird. Weitere Informationen =C3=BCber das Projekt
erhalten Sie hier <https://a.southpole.com/public/media/300344/0344_DE.pdf>=
.
Gezahlter Betrag (incl.MwSt.): 1.0 EUR
Falls Sie mehr =C3=BCber CO2 Kompensation erfahren m=C3=B6chten, klicken Si=
e bitte
hier <https://www.ebay.de/cdp/help/co2-ausgleich/southpole>.
Weitere Informationen zu Klimaschutzl=C3=B6sungen finden Sie auf unserer we=
bsite
<http://www.southpole.com>.
Mit freundlichen Gr=C3=BC=C3=9Fen,
*Ihr South Pole Team*
#OurClimateJourney starts here
*South Pole*
Technoparkstrasse 1
Zurich 8005
Switzerland
--000000000000ba40be05bf7405c6
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<p>
<html class=3D"sg-campaigns">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf=
-8">
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scal=
e=3D1, minimum-scale=3D1, maximum-scale=3D1">
=20
<meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3DEdge">
=20
=20
=20
<style type=3D"text/css">
body, p, div {
font-family: arial,helvetica,sans-serif;
font-size: 14px;
}
body {
color: #000000;
}
body a {
color: #1188E6;
text-decoration: none;
}
p { margin: 0; padding: 0; }
table.wrapper {
width:100% !important;
table-layout: fixed;
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: 100%;
-moz-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
img.max-width {
max-width: 100% !important;
}
.column.of-2 {
width: 50%;
}
.column.of-3 {
width: 33.333%;
}
.column.of-4 {
width: 25%;
}
@media screen and (max-width:480px) {
.preheader .rightColumnContent,
.footer .rightColumnContent {
text-align: left !important;
}
.preheader .rightColumnContent div,
.preheader .rightColumnContent span,
.footer .rightColumnContent div,
.footer .rightColumnContent span {
text-align: left !important;
}
.preheader .rightColumnContent,
.preheader .leftColumnContent {
font-size: 80% !important;
padding: 5px 0;
}
table.wrapper-mobile {
width: 100% !important;
table-layout: fixed;
}
img.max-width {
height: auto !important;
max-width: 100% !important;
}
a.bulletproof-button {
display: block !important;
width: auto !important;
font-size: 80%;
padding-left: 0 !important;
padding-right: 0 !important;
}
.columns {
width: 100% !important;
}
.column {
display: block !important;
width: 100% !important;
padding-left: 0 !important;
padding-right: 0 !important;
margin-left: 0 !important;
margin-right: 0 !important;
}
.social-icon-column {
display: inline-block !important;
}
}
</style>
=20
</head>
<body>
<center class=3D"wrapper">
<div class=3D"webkit">
<table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" width=3D"=
100%" class=3D"wrapper" bgcolor=3D"#FFFFFF">
<tr>
<td valign=3D"top" bgcolor=3D"#FFFFFF" width=3D"100%">
<table width=3D"100%" class=3D"outer" align=3D"center" cell=
padding=3D"0" cellspacing=3D"0" border=3D"0">
<tr>
<td width=3D"100%">
<table width=3D"100%" cellpadding=3D"0" cellspacing=
=3D"0" border=3D"0">
<tr>
<td>
=20
<table width=3D"100%" cellpadding=3D"0"=
cellspacing=3D"0" border=3D"0" style=3D"width:100%;max-width:600px" align=
=3D"center">
<tr>
<td style=3D"padding:0px 0px 0px 0p=
x;color:#000000;text-align:left" bgcolor=3D"#FFFFFF" width=3D"100%" align=
=3D"left"><table class=3D"module preheader preheader-hide" border=3D"0" cel=
lpadding=3D"0" cellspacing=3D"0" width=3D"100%" style=3D"display:none!impor=
tant;opacity:0;color:transparent;height:0;width:0">
<tr>
<td>
<p></p>
</td>
</tr>
</table><table class=3D"wrapper" border=3D"0" cellpadding=3D"0" cellspaci=
ng=3D"0" width=3D"100%" style=3D"table-layout:fixed">
<tbody>
<tr>
<td style=3D"font-size:6px;line-height:10px;padding:0px 0px 0px 0px=
" valign=3D"top" align=3D"center">
=20
<a href=3D"http://www.southpole.com"><img class=3D"max-width" borde=
r=3D"0" style=3D"display:block; color:#000000; text-decoration:none; font-f=
amily:Helvetica, arial, sans-serif; font-size:16px; max-width:30% !importan=
t; width:30%; height:auto !important;" width=3D"180" alt=3D"" src=3D"http:/=
/cdn.mcauto-images-production.sendgrid.net/6bb6378b6f4b261a/c18cb9b5-e2c9-4=
d19-b836-5944a363d16d/474x96.png"></a></td>
</tr>
</tbody>
</table><table class=3D"wrapper" border=3D"0" cellpadding=3D"0" cellspaci=
ng=3D"0" width=3D"100%" style=3D"table-layout:fixed">
<tbody>
<tr>
<td style=3D"font-size:6px;line-height:10px;padding:0px 0px 0px 0px=
" valign=3D"top" align=3D"center">
<img class=3D"max-width" border=3D"0" style=3D"display:block; col=
or:#000000; text-decoration:none; font-family:Helvetica, arial, sans-serif;=
font-size:16px; max-width:100% !important; width:100%; height:auto !import=
ant;" width=3D"600" alt=3D"" src=3D"http://cdn.mcauto-images-production.sen=
dgrid.net/6bb6378b6f4b261a/c00b27d7-3269-43d9-836c-15834c29cb41/1192x446.pn=
g">
</td>
</tr>
</tbody>
</table><table class=3D"module" border=3D"0" cellpadding=3D"0" cellspacin=
g=3D"0" width=3D"100%" style=3D"table-layout:fixed">
<tbody>
<tr>
<td style=3D"padding:18px 0px 18px 0px;line-height:22px;text-align:=
inherit" height=3D"100%" valign=3D"top" bgcolor=3D""><div><div style=3D"fon=
t-family:inherit;text-align:inherit"><span style=3D"font-family:arial,helve=
tica,sans-serif">Sehr geehrte/r Arne Keller,</span></div>
<div style=3D"font-family:inherit;text-align:inherit"><span style=3D"font-f=
amily:arial,helvetica,sans-serif"><br>
Vielen Dank f=C3=BCr Ihren Beitrag zum Ausgleich der CO2 Emissionen Ihres E=
inkaufs.=C2=A0</span></div>
<div style=3D"font-family:inherit;text-align:inherit"><span style=3D"font-f=
amily:arial,helvetica,sans-serif"><br>
Sie haben sich daf=C3=BCr entschieden, das Prony Windkraft Projekt in Neuka=
ledonien zu unterst=C3=BCtzen. Teil des Projekts sind sechs Windparks an ve=
rschieden Orten mit einer gesch=C3=A4tzten j=C3=A4hrlichen Produktion von 4=
0 GWh Strom. Das Projekt ersetzt damit Netzstrom, der zu 80% aus fossilen K=
raftwerken produziert wird. Weitere Informationen =C3=BCber das Projekt erh=
alten Sie </span><a href=3D"https://a.southpole.com/public/media/300344/034=
4_DE.pdf"><span style=3D"font-family:arial,helvetica,sans-serif">hier</span=
></a><span style=3D"font-family:arial,helvetica,sans-serif">.</span></div>
<div style=3D"font-family:inherit;text-align:inherit"><br></div>
<div style=3D"font-family:inherit"><span style=3D"font-size:10.5pt;font-fam=
ily:Arial,sans-serif">Gezahlter Betrag (incl.MwSt.):=20
1.0 EUR</span> =C2=A0</div>
<div style=3D"font-family:inherit;text-align:inherit"><span style=3D"font-f=
amily:arial,helvetica,sans-serif"><br>
Falls Sie mehr =C3=BCber CO2 Kompensation erfahren m=C3=B6chten, klicken Si=
e bitte </span><a href=3D"https://www.ebay.de/cdp/help/co2-ausgleich/southp=
ole"><span style=3D"font-family:arial,helvetica,sans-serif">hier</span></a>=
<span style=3D"font-family:arial,helvetica,sans-serif">.</span></div>
<div style=3D"font-family:inherit;text-align:inherit"><span style=3D"font-f=
amily:arial,helvetica,sans-serif"><br>
</span><span style=3D"font-size:10.5pt;color:black;font-family:arial,helvet=
ica,sans-serif">Weitere Informationen zu Klimaschutzl=C3=B6sungen finden Si=
e auf unserer </span><a href=3D"http://www.southpole.com"><span style=3D"fo=
nt-size:10.5pt;font-family:arial,helvetica,sans-serif">website</span></a><s=
pan style=3D"font-size:10.5pt;color:black;font-family:arial,helvetica,sans-=
serif">.=C2=A0</span></div>
<div style=3D"font-family:inherit;text-align:inherit"><span style=3D"font-f=
amily:arial,helvetica,sans-serif"><br>
Mit freundlichen Gr=C3=BC=C3=9Fen,<br>
</span><span style=3D"font-family:arial,helvetica,sans-serif;color:#2e528f"=
><strong>Ihr South Pole Team</strong></span><span style=3D"font-family:aria=
l,helvetica,sans-serif"><br>
</span><span style=3D"font-family:arial,helvetica,sans-serif;color:#2e528f"=
>#OurClimateJourney starts here</span></div><div></div></div></td>
</tr>
</tbody>
</table><table class=3D"module" border=3D"0" cellpadding=3D"0" cellspacin=
g=3D"0" width=3D"100%" style=3D"table-layout:fixed">
<tbody>
<tr>
<td style=3D"padding:0px 0px 0px 0px" height=3D"100%" valign=3D"top=
" bgcolor=3D"">
<table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" align=3D"=
center" width=3D"100%" height=3D"1px" style=3D"line-height:1px;font-size:1p=
x">
<tbody>
<tr>
<td style=3D"padding:0px 0px 1px 0px" bgcolor=3D"#000000"><=
/td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table><table class=3D"module" border=3D"0" cellpadding=3D"0" cellspacin=
g=3D"0" width=3D"100%" style=3D"table-layout:fixed">
<tbody>
<tr>
<td style=3D"padding:18px 0px 18px 0px;line-height:22px;text-align:=
inherit" height=3D"100%" valign=3D"top" bgcolor=3D""><div><div style=3D"fon=
t-family:inherit;text-align:center"><span style=3D"font-size:9pt;font-famil=
y:Helvetica,sans-serif;color:#444444"><strong>South Pole</strong></span><sp=
an style=3D"font-size:9pt;font-family:Helvetica,sans-serif;color:#444444"><=
br>
Technoparkstrasse 1<br>
Zurich 8005<br>
Switzerland</span>=C2=A0</div><div></div></div></td>
</tr>
</tbody>
</table></td>
</tr>
</table>
=20
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</center>
</body>
</html></p>
--000000000000ba40be05bf7405c6--
--000000000000ba40c005bf7405c8
Content-Type: application/octet-stream; name="Bestatigung.pdf"
Content-Disposition: attachment; filename="Bestatigung.pdf"
Content-Transfer-Encoding: base64
X-Attachment-Id: e9780c8ba1b9c354_0.1
JVBERi0xLjMKJf////8KOSAwIG9iago8PAovUHJlZGljdG9yIDE1Ci9Db2xvcnMgMwovQml0c1Bl
ckNvbXBvbmVudCA4Ci9Db2x1bW5zIDY0Cj4+CmVuZG9iago4IDAgb2JqCjw8Ci9UeXBlIC9YT2Jq
ZWN0Ci9TdWJ0eXBlIC9JbWFnZQovQml0c1BlckNvbXBvbmVudCA4Ci9XaWR0aCA2NAovSGVpZ2h0
IDYzCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9EZWNvZGVQYXJtcyA5IDAgUgovQ29sb3JTcGFjZSAv
RGV2aWNlUkdCCi9MZW5ndGggMzQ3NQo+PgpzdHJlYW0KaEPtWQd0VFUazvSaTHonfVKYhARSSCFU
kVBCEWU9iCywILYVFCyHsx52UUFXRXFV1FU5YmFdVIK4QaoQWiAQSnpCMqmkzCSZ9Ezf780dHo+Z
tIWcs5tz9jvJy/e++93/vfvuf8t7YT24eSKLxXJwcDCbzTTBcUBuIxLC5IM57fnIxSEMIGz8GdNg
oyljGpzQVG/CSL8wCTAgvwcnMHLDyGuB2KYQpVp+AOoUAsuBzWJTCnEwQEw4WEqpM7ouOaKUPmUS
a/3RACcszQd/LMGpuI5ip+cWvzwrLuNKRa7OoEtXzHgqc/PSaSsS5MkqTZOqo5k24z6WTX380Rmr
+rS9mUmLa5qVoT5h6YppGYkL1R0tCyYv8XT2autUbVm+vVh5dcOSLTPjMgRs9orZ6xNCEwqqr+mN
ehIHYN4AIcCA3F5koxdocDncF5a+OithYZJiGpfDUwTEvLx8R1z4ZB9X/+ToGa+ufMfV0c1qNZv5
HN785KXfnfwSdxzmP17AE8gkLoFeIYrgSXGh8emxD/q5B4T4hidGTfFy9btQnGM2G5WqaieJ8+dH
dvdoe6xR7huMQcxyWDFrHW7UeupgTouZyeFwD57dt/rth+qbq2RS16iAGGshms5imUzGqqaKLw7/
DQ8DsYiu1fVFB8Tw2FwoIT7hZcprQd7ynv5unUGrN+gdxbIAz0CTyUTM94+7xkBU4ISq+hKz2UT1
DcvBVeoKsfJWWXuXurGtAVzEF0O3eCmAC7iCYG85Zb+Nzu42H4/A5rYG3KPcL+r09aNyvwh4SepT
7aTYHf994q5p9GrZ+V0HttPPskB59cjFA7fUdeBoKI5Gk9FSQsFkNrFZHHcnj5kTM3DKYcNCJaTe
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
I8+yeugM+l5tt1qjatE0qrvUWr2WCjRc/GENlDK6DRjMac9HLg5hABnROvC/jDsz9BjFSL9KAPaG
kTuBkRtGXgvk/yn038bYTyHCxi7G+Bhgsf4NiAEsdQplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2Jq
Cjw8Ci9UeXBlIC9FeHRHU3RhdGUKL2NhIDEKL0NBIDEKPj4KZW5kb2JqCjE2IDAgb2JqCjw8Ci9U
eXBlIC9FeHRHU3RhdGUKL0NBIDEKPj4KZW5kb2JqCjEyIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Q
YXJlbnQgMSAwIFIKL01lZGlhQm94IFswIDAgODQxLjg5IDU5NS4yOF0KL0NvbnRlbnRzIDEwIDAg
UgovUmVzb3VyY2VzIDExIDAgUgo+PgplbmRvYmoKMTEgMCBvYmoKPDwKL1Byb2NTZXQgWy9QREYg
L1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwKL0dzMSAxMyAwIFIK
L0dzMiAxNiAwIFIKPj4KL1hPYmplY3QgPDwKL0kxIDUgMCBSCi9JMiA2IDAgUgovSTMgNyAwIFIK
L0k0IDggMCBSCj4+Ci9Gb250IDw8Ci9GMSAxNCAwIFIKL0YyIDE1IDAgUgo+Pgo+PgplbmRvYmoK
MTAgMCBvYmoKPDwKL0xlbmd0aCAyMDIxCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4
nM1b227bRhB911fwB7LZuewNCPyQpA2ahwJt/FbkQReraNG0KAy0v9/Z5ZKibWnoFJokMGjLEiUd
zu2cmV3C4OXnBcivUILDPOw/bV6+u4fh1/vN3xsMfjwhgB9YzpH/6wk/wPD2r81PZ8/0rkSGnAby
fijzf+1t+Iy3hfjkbfTwbS/f3v3z2/7u53evh/39ZvyA+/2fm6N8IJy7oNe3/XkYCNilGCKGgZFd
xExAw618y/fyIg63x80vr7z3IAfKIRfhWY7Q/0Y5khxZjtIfb28G/3G4fb/57vZKKLk+SUxpBeVO
jr0ch5uhOEyJmIdXC+TXRxaSwGG/ar87OY6jvaopQX4BdmSx21JQQ/20zJQr7HpSM2iDf32jZnAl
R5IXxLAu5o4bB9D9PmFO17emmBAKiD0VSLlD4EdOLjaQuLjscyisQNp2C+26Zfb9b4V56I/vTOBF
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
IDAgUgovQ3JlYXRpb25EYXRlIDIwIDAgUgo+PgplbmRvYmoKMjIgMCBvYmoKPDwKL1R5cGUgL0Zv
bnREZXNjcmlwdG9yCi9Gb250TmFtZSAvQVpaWlpaK1JvYm90by1NZWRpdW0KL0ZsYWdzIDQKL0Zv
bnRCQm94IFstNzMyLjQyMTg3NSAtMjcwLjk5NjA5NCAxMTY5LjkyMTg3NSAxMDU2LjE1MjM0NF0K
L0l0YWxpY0FuZ2xlIDAKL0FzY2VudCA5MjcuNzM0Mzc1Ci9EZXNjZW50IC0yNDQuMTQwNjI1Ci9D
YXBIZWlnaHQgNzEwLjkzNzUKL1hIZWlnaHQgNTI4LjMyMDMxMwovU3RlbVYgMAovRm9udEZpbGUy
IDIxIDAgUgo+PgplbmRvYmoKMjMgMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL0NJREZv
bnRUeXBlMgovQmFzZUZvbnQgL0FaWlpaWitSb2JvdG8tTWVkaXVtCi9DSURTeXN0ZW1JbmZvIDw8
Ci9SZWdpc3RyeSAoQWRvYmUpCi9PcmRlcmluZyAoSWRlbnRpdHkpCi9TdXBwbGVtZW50IDAKPj4K
L0ZvbnREZXNjcmlwdG9yIDIyIDAgUgovVyBbMCBbOTA4IDYzMC44NTkzNzUgNTM2LjYyMTA5NCA1
MTYuMTEzMjgxIDMzMi41MTk1MzEgNTQxLjAxNTYyNSAyNTUuMzcxMDk0IDU2Ni44OTQ1MzEgNTU1
LjY2NDA2MyA1NTYuMTUyMzQ0IDI0OS4wMjM0MzggMjgyLjIyNjU2MyA1NTUuMTc1NzgxIDM1MS41
NjI1IDYzMC4zNzEwOTQgMjU1LjM3MTA5NCA4NzAuMTE3MTg4IDU0MS4wMTU2MjUgNTYyLjk4ODI4
MSA2NjUuNTI3MzQ0IDU2OC4zNTkzNzUgMjc5LjI5Njg3NSA1NjguMzU5Mzc1IDU2NS40Mjk2ODgg
NTY5LjMzNTkzOF1dCi9DSURUb0dJRE1hcCAvSWRlbnRpdHkKPj4KZW5kb2JqCjI0IDAgb2JqCjw8
Ci9MZW5ndGggMjg0Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nF2RTW+DMAyG7/wK
H7tDRfkY7SSENHUXDvvQ2E5TD5AYFGkkUQgH/v2SOGunRSKPbL82sZ2e26dWCgvpm1GsQwujkNzg
olbDEAachEyyHLhgNlrhZnOvk9Qld9ticW7lqKCuE4D03YUXazbYPXI14J33vRqORsgJdp/nLni6
VetvnFFaOCRNAxxHV+651y/9jJCG1H3LXVzYbe+yboqPTSPkwc7oSUxxXHTP0PRywqQ+uNPUoztN
gpL/C8ekYfyrBofs1MDXzSzzgOo+4FgQygAkVA+EI8VIWWFAHqtEyYkkVLMcyMkInJARooSsgpBT
zSLWjD8am4vv77cT36pfy3WMbDXGTTDsLozOD01IvK5XK+2zwvcDD9mVzwplbmRzdHJlYW0KZW5k
b2JqCjE0IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMAovQmFzZUZvbnQgL0Fa
WlpaWitSb2JvdG8tTWVkaXVtCi9FbmNvZGluZyAvSWRlbnRpdHktSAovRGVzY2VuZGFudEZvbnRz
IFsyMyAwIFJdCi9Ub1VuaWNvZGUgMjQgMCBSCj4+CmVuZG9iagoyNiAwIG9iago8PAovVHlwZSAv
Rm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9CWlpaWlorUm9ib3RvLVJlZ3VsYXIKL0ZsYWdzIDQK
L0ZvbnRCQm94IFstNzM2LjgxNjQwNiAtMjcwLjk5NjA5NCAxMTQ4LjQzNzUgMTA1Ni4xNTIzNDRd
Ci9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgOTI3LjczNDM3NQovRGVzY2VudCAtMjQ0LjE0MDYyNQov
Q2FwSGVpZ2h0IDcxMC45Mzc1Ci9YSGVpZ2h0IDUyOC4zMjAzMTMKL1N0ZW1WIDAKL0ZvbnRGaWxl
MiAyNSAwIFIKPj4KZW5kb2JqCjI3IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9DSURG
b250VHlwZTIKL0Jhc2VGb250IC9CWlpaWlorUm9ib3RvLVJlZ3VsYXIKL0NJRFN5c3RlbUluZm8g
PDwKL1JlZ2lzdHJ5IChBZG9iZSkKL09yZGVyaW5nIChJZGVudGl0eSkKL1N1cHBsZW1lbnQgMAo+
PgovRm9udERlc2NyaXB0b3IgMjYgMCBSCi9XIFswIFs5MDggNzEyLjg5MDYyNSAyNDIuNjc1Nzgx
IDUyOS43ODUxNTYgMzM4LjM3ODkwNiA4NzYuNDY0ODQ0IDMyNi42NjAxNTYgMjQ3LjU1ODU5NCA3
NTEuNDY0ODQ0IDU2My45NjQ4NDQgNTYxLjAzNTE1NiA1MTUuNjI1IDU0My45NDUzMTMgNTYxLjAz
NTE1NiAxOTYuMjg5MDYzIDU0My45NDUzMTMgNTUxLjc1NzgxMyA2MjIuNTU4NTk0IDQ4NC4zNzUg
NTcwLjMxMjUgNTUzLjcxMDkzOCA0OTUuNjA1NDY5IDYyNi45NTMxMjUgMjQyLjY3NTc4MSA1MjMu
NDM3NSA1NTAuNzgxMjUgNTUxLjI2OTUzMSA1NjEuMDM1MTU2IDIzOC43Njk1MzEgNTA2LjgzNTkz
OCA1NTEuMjY5NTMxIDI2My4xODM1OTQgNjU1Ljc2MTcxOSA2MzAuODU5Mzc1IDQ3My4xNDQ1MzEg
ODg3LjIwNzAzMSAzNDcuMTY3OTY5IDcxMi44OTA2MjUgNTk2LjY3OTY4OCA2ODcuNSAyNzEuOTcy
NjU2IDY0OC40Mzc1IDY1Mi4zNDM3NSA1NjguMzU5Mzc1IDU2MS41MjM0MzggNTYxLjUyMzQzOCA2
ODEuMTUyMzQ0IDU2MS41MjM0MzggODczLjA0Njg3NSA1NjEuNTIzNDM4IDU2MS41MjM0MzggNTkz
LjI2MTcxOSA1NjEuNTIzNDM4IDczMi40MjE4NzVdXQovQ0lEVG9HSURNYXAgL0lkZW50aXR5Cj4+
CmVuZG9iagoyOCAwIG9iago8PAovTGVuZ3RoIDM1MQovRmlsdGVyIC9GbGF0ZURlY29kZQo+Pgpz
dHJlYW0KeJxdUk1rhDAQvfsr5rg9LHZN1BZEKNuLh35Q21PpQZNxEWqU6B7894156W6poI83M2/m
xUx8rB4r0y8Uv9pR1bxQ1xtteR7PVjG1fOpNdEhI92oJzH/V0ExR7MT1Oi88VKYbqSgiovjNpefF
rrR70GPLN1vsxWq2vTnR7uNY+0h9nqZvHtgsdBuVJWnuXLunZnpuBqbYS/eVdvl+WfdOda14Xyem
xPMDLKlR8zw1im1jThwVt+4pi849ZcRG/0sHUdv9rSYHIi3p80rlnYfsHpB6yBMwDSY9JBDkOXII
ZqjMhQcOQZQkCuwAYMwLggzBDpDRxULeoK5FJvRA/wxm8+AShjIIMgg6CJIwDYbSYB0T0nACWJCo
TFEpYUiGSgySOIEEE2AiyNFMwKDEHxNoJjA2RU7AfJKWX9t9/d7MdnXbml3WQp2tdRvhd9GvwrYE
veHLuk7jtKn8+wNvpsCvCmVuZHN0cmVhbQplbmRvYmoKMTUgMCBvYmoKPDwKL1R5cGUgL0ZvbnQK
L1N1YnR5cGUgL1R5cGUwCi9CYXNlRm9udCAvQlpaWlpaK1JvYm90by1SZWd1bGFyCi9FbmNvZGlu
ZyAvSWRlbnRpdHktSAovRGVzY2VuZGFudEZvbnRzIFsyNyAwIFJdCi9Ub1VuaWNvZGUgMjggMCBS
Cj4+CmVuZG9iago0IDAgb2JqCjw8Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9UeXBlIC9DYXRhbG9n
Ci9QYWdlcyAxIDAgUgovTmFtZXMgMiAwIFIKPj4KZW5kb2JqCjEgMCBvYmoKPDwKL1R5cGUgL1Bh
Z2VzCi9Db3VudCAxCi9LaWRzIFsxMiAwIFJdCj4+CmVuZG9iagoyIDAgb2JqCjw8Ci9EZXN0cyA8
PAogIC9OYW1lcyBbCl0KPj4KPj4KZW5kb2JqCjIxIDAgb2JqCjw8Ci9MZW5ndGggMzI4MQovRmls
dGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeJx9WA90VNWZ/+59f2YmM0nmTeYPZAKZySQThImB
TCaBiJDoBMIfJRIWZygJQRIlgEuM+UOACNZGIQ1akO6eHm3xCKuuuxzevEYFq5CuyGm7KFm79GxX
tj1KrWylRZmKKJmXfve9mTCJnE7O++797r3v3t/3934vnR1drWCC3cCBdWPr+hbQf8/jU7ERB5L8
B/gUbtm6IcVfY/MPr9/WrrMkgMSzobvTk+SXI1nb3tGamn8Fn4aHtvQ+qPP0BkDWCxsf7tym89Jz
SDY+2P7Qwzpv43D9W0DYUp9t6NeFFeuy538JU43a7OnPpdtZe56svPxNYeK8aa3xUWRNQPXDAAxb
VAsObP6mUK0xrdX2Sf/l4tMMZ0kNkckozaH30F9yVi6Kf53cEHeVn8ev4oeFGuFF4aIoiXPFfeI5
w3RDvbZPLjwDTrgXhOSuWQgR6GwQkZ8JZ2E//ASfy9ABCvTBaliHa5sJD6/CaVxtV5vBTp8D69g8
yFT/GQX1gpmvAju/D6yCDHZxCjjEYbDS74DNwIMg/k4/R7bMkmEWKCSLziJKNkH6RnbV7CK3FYyz
4A0y9/bCXAm7b9B7q8t8Dtbj6u643WtnPX58TJg9I9+ZxXrihvsWlrhZz1BdnnzX+J2lVbdNZT3T
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgYBCyzHCmVuZHN0cmVhbQplbmRv
YmoKNiAwIG9iago8PAovVHlwZSAvWE9iamVjdAovU3VidHlwZSAvSW1hZ2UKL0JpdHNQZXJDb21w
b25lbnQgOAovV2lkdGggNzI2Ci9IZWlnaHQgMTQ4Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9Db2xv
clNwYWNlIC9EZXZpY2VSR0IKL1NNYXNrIDI5IDAgUgovTGVuZ3RoIDEyOTk1Cj4+CnN0cmVhbQp4
nO3dB1QU1/4H8ElMj/pir9grJcaCovReBLsmavISE5MYExNj4osp/k1MFEWKLZYYNbbYaLt0sSF2
RQQVUbFgRXZ2YVlgYafsf+4uGmMQ7t0ddsD8PuceH8fszt5Z3jnz9Zbf1esBAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGTcgoSRP8WN/jke
pwXOk/1v/WGO56TuNQAAAAAaNsorjHIJodxDsZrjIttp21gOEggAAAAAzNJo+HLKJ4LyX4bVPMPs
P98BYyAAAAAAMBMkEAAAAABYHiQQAAAAAFgeJBAAAAAAWB4kEAAAAABYHiQQAAAAAFgeJBAAAAAA
WB4kEAAAAABYHiQQAAAAAFgeJBAAAAAAWB4kEAAAAABYHiQQAAAAAFgeJBAAAAAAWB4kEAAAAABY
HiQQAAAAAFgeJBAAAAAAWB4kEAAAAABYHiQQAAAAAFgeJBAAAAAAWB4kEAAAAABYHiQQAAAAAFge
JBAAAAAAWB4kEAAAAABYHiQQAAAAAFgeJBAAAAAAWB4kEAAAAABYHiQQAAAA4GnFa8tZ5X32Rl7l
6fTyyA2aFT+q531SPH2UarKrcvQAhW8v2qdboX8fekQ/1USnog8DimZP1oTNKdu4tGK/XHflPHvv
FldawtdN3yyWQIo0FdfuFaeeuTl/24m3ghNtp21t8eZadE23MMp5iXBlyifsxcAVrd9c13vqH55z
ov+7JOWnbcejjuSdzVPcUpSUlFeKfu91gedZvrKQL7vKFx3l7mzmLn/HZU1mTnmy6X3ZA22ZPa9U
plCVCYYWRwk/M3ubsmlW7PEh7JkRXM6n3PVw/n4sr7nAl9/gdUV19EsHAADwdNNdyNDGbdMsm1v8
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
SN1xAAAAADRUG69FNo60I1iAGufcPHrgR6egBggAAAAATHSnvOD15OHtCQdA2sU4lOg0UvcdAAAA
AA1V+KX1LUlKkAmvbBY94LusUKk7DgAAAICGqlhX0knuQrQCRHixbZL/5ZLrUvcdAAAAAA3VV5nB
r0X3x48fQmsWPeCH7DCpOw4AAACAhupueWG3OPcOMoJD6DrJnRrt6MNwrNR9BwAAAEBDNf303BYx
g4hWgLwWNWDBhVVSdxwAAAAADdXF4ryu8a4dSQZA2suGWSf63YAaIAAAAAAw1YSjM1oSDoC0jLH/
+cIKqTsOAAAAgIbqiib/2Z298eOHcQtMzwSvYl2J1H0HAAAAQEM1+fisVjH2JAtQnZtGvfHDuXCp
Ow4AAACAhiru9r52MgcruRPRCpBeCV4sbIEBAAAAgKlGpk8jHQBpHj1wycV1UnccAAAAAA1Vyr30
xpF2RCtA2suGDtoz6l55odR9BwAAAECDxPJc7wSvl3ZbN43qh9+oHd2XXt4kdd8BAAAA0FAVVii3
3JD9mS/fnh+H39Zf263jGKn7DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0VP8PwT73XApl
bmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8Ci9UeXBlIC9YT2JqZWN0Ci9TdWJ0eXBlIC9JbWFn
ZQovSGVpZ2h0IDE0OAovV2lkdGggNzI2Ci9CaXRzUGVyQ29tcG9uZW50IDgKL0ZpbHRlciAvRmxh
dGVEZWNvZGUKL0NvbG9yU3BhY2UgL0RldmljZUdyYXkKL0RlY29kZSBbMCAxXQovTGVuZ3RoIDQ4
OTIKPj4Kc3RyZWFtCnic7V1tufIwDL0SJgEJSJiESZgEJEwCEpCAhElAAhJw8L6XC+yjOUmTrtuA
5fy6z2Xr+nGapkmb/PzkQFGWZdXcUf/+tctSpsOxEvZVc2pv/wja9pffa1fO4bCiqJqW0nmEy6l2
ue34GOybS4TRL1xP1dqVdTjiqE5A55Bwrou16+xwCNgdrzZKP+AS2/G2qGOqNI/rwQW24/1QNEli
usPt5HtHx3uhaIzaNILz2vFGyMJp57XjnVBn4vQdjevXjjdAqTVO63Cr126QY/Mojlk5fUfraohj
VZTTDB8MmrWb5dgwZhDUD1xcXDtWwj6vRj2Ea9eOdZDT9EFxWrt5ji3iNCenf3FxG59jYRTzaR8v
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
N18c34Ahq91K7fgOFC6oHd+HzkjtgtrxNXikPuByOTkcn4i7wfrqjhfHV+HknHZ8HWrntGMJ/Ac4
rJNjCmVuZHN0cmVhbQplbmRvYmoKNyAwIG9iago8PAovVHlwZSAvWE9iamVjdAovU3VidHlwZSAv
SW1hZ2UKL0JpdHNQZXJDb21wb25lbnQgOAovV2lkdGggNzI2Ci9IZWlnaHQgMTQ4Ci9GaWx0ZXIg
L0ZsYXRlRGVjb2RlCi9Db2xvclNwYWNlIC9EZXZpY2VSR0IKL1NNYXNrIDMwIDAgUgovTGVuZ3Ro
IDM4NzMKPj4Kc3RyZWFtCnic7ZZbjhtBDgT3knu1va73w4BhWDMaqZjMJEsR6O/KB9nd9evXbfzn
v/97/UmbBQAAgH28ddngWgIAAABnNF05uJAAAADAI5GLB1cRAACAzyR+5eA2AgAA8DnEbxfcQwAA
AD6K+I2CqwgAAMDnEL8/cA8BAAD4KOJ3Bu4hAAAAH0X8nsA9BAAA4NOIXw+4hwAAAHwU8SsBlxAA
AICPIn4T4B4CAADwacQvABOe9BAAAAA+iPh/f9qTHggAAMD9xH/3M5/0WAAAAG4m/qOf/KSHAwAA
cCfxX/yKJz0lAACAe4j/1nc96XEBAADcQPyHvvFJDw0AAGA38V/53ic9OgAAgK3Ef+Lbn/QAAQAA
9hH/fd/xpMcIcA+8gLAI1vWY+I/7pic9TIBL4O2DRbCuZ8R/2fc96ZEC3ACvHiyCdT0g/rO+9UkP
FmA9vHewCNb1XeK/6buf9HgBdsNLB4tgXd8i/oP+hCc9ZIDF8MbBIljXt4j/nT/kSc8ZYCu8brAI
1vV14v/lj3rS0wZYCe8aLIJ1fZH4H/nTnvTAAVbCuwaLYF1fIf47/swnPXYAH6qd50WDRbCuPxL/
EX/ykx4+QC/yhectg0Wwrj8S/wt/+JOeP4Cevm3nFYNFsK7Pif9/edIrAKDBs+28YrAI1vUJ8Z8v
z+8nvQgA55hXnfcLFsG6PiH+5+X5/aQXAeCEyKrzfsEiWNfviP92K1OI2zPnBRhIZM95uWARrOt3
xP+5kvLjhoPZAbJElpw3CxbBun5J/G8rrz3uP94AgJnIkvNmwSJY10fiv9rWzuNZhvQA0E1kw3mt
YBGs6yPx/6yn7Xi0UW0AyIlsOK8VLIJ1/Yf4T9ZfdTzmwE4A6kTWm3cKFsG6/kP8D5vtOZ56Zi0A
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
+/HnunKLtGEjqetuDRE2GujzHG9jOJ5hDex8tXlVil3Og25fYeMU9iLved3gVn+4PNQrqtfFXJ6j
ndH2d2GX20eWOl9n+Ec2TmEXrR+ZjYNb/eHykPofLf0beji7MGifdAcAsAy+M7AFtvQ53EAAYBd8
Z2ARbOkTuH4AwC741MAi2NIncAMBgF3wqYFdsKXfwfUDAHbB1wZ2wZZ+BzcQANgFXxtYB1v6HVw/
AGARfHBgI6zol3ADAYBF8MGBjbCiX8L1AwAWwTcHlsKKPsL1AwAWwWcH9sKK/gM3EABYBJ8d2Asr
+gjXDwDYAl8eWA0r+g9cPwBgC3x8YDus6N9wAwGALfDxgQtgRf/A9QMAtsD3By6A/fwD1w8A2AKf
ILgD9vM3XD8AYAt8heAa2M/fcP0AgBXwIYKbYD9/9dxA0pkA4EL4FgFcBtcPAFgBnyOAy+AGAgAr
4HMEcBlcPwBgBXyRAC6D6wcArICPEsBlcPcAgBXwaQK4D64fAAAA4IfrBwAAAPjh+gEAAAB+uH4A
AACAH+4eAAAA4IfrBwAAAPjh+gEAAAB+uHsAAABABK4fAAAA4Ie7BwAAAPjh7gEAAAB+uHsAAACA
H+4eAAAAb/F/cUcKXwplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8Ci9UeXBlIC9YT2JqZWN0
Ci9TdWJ0eXBlIC9JbWFnZQovSGVpZ2h0IDczMgovV2lkdGggMjYwCi9CaXRzUGVyQ29tcG9uZW50
IDgKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0NvbG9yU3BhY2UgL0RldmljZUdyYXkKL0RlY29kZSBb
MCAxXQovTGVuZ3RoIDIwNwo+PgpzdHJlYW0KeJztwQENAAAAwqD+qW8ON6AAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
eDLm1LPtCmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PAovVHlwZSAvWE9iamVjdAovU3VidHlw
ZSAvSW1hZ2UKL0JpdHNQZXJDb21wb25lbnQgOAovV2lkdGggMjYwCi9IZWlnaHQgNzMyCi9GaWx0
ZXIgL0ZsYXRlRGVjb2RlCi9Db2xvclNwYWNlIC9EZXZpY2VSR0IKL1NNYXNrIDMxIDAgUgovTGVu
Z3RoIDM2NTY2NQo+PgpzdHJlYW0KeJzsvId2W1eWrf0gHapsS6Io5pwDCIBZwa6u6nAfossSiQwQ
YFayq6v/F7ndFgngJCSScvVD3f+bax9QtLv7DcpjDwwQOjhxfWvNufaG/9//++t/f/3vr//99b+/
/vfX//7631//++t///N/MxV/vhzMloKpoj9ZDCYLwXjOH874oxl/LOsPZYOhrP/MBu+fZvwnh82n
B82hA2/ksDl26DHGec0wmoOH9YHDq6eH188Or0cOG0OZxtNs42mO1/qTTH38sDHx+nrysDF50Hx6
2HiU9Z6+aQy9ro//8XrqX6/G/3g1/P2nkTc/jWWupw+uR//1/z77438Mff/T+EFj/PX12B+vRv/1
aur19cj3V7PZ5vDB9Uim+eR1feSA942vD6//9s1PX7+5fnJQHzioPz5ofHVw/fcHn3578NNXB5++
fv3pm9efnrxuDB54wwfN2Zw/mPUHssHfv/n0Ta759wdXjw6uB/74H4Ovr58dNAbeXA0cNB7ZTrhS
vvib1z8N/uun4T9eDX5fH/n+evh1/dnr+tAb9lYfeX09cdAcf9McfVMfO2zOZ/25rD920PztQf2r
g8Zv39S/OmQ0vjps/lajMZjxvnn90+PD+qM3V085/4M642mGm8BuOXrzmW5IY/B1Y/j7+vAfrwf/
WH/Gm+8bQ4w3jVFudcabcM8l4z894BwaTzPeQMbjVJ+8aTx7c/3sTX3w9dWT15/412cZNvOeHfKw
+Hp9+FDnPJrxRjLsxx/JNR/zXHL1gVxjgMeU4aE0Bw51oLHXjdHXPKbGxGFzItOc5qIOvWGeb85z
Y7QQjOT9Z5n6YKY+kvNGCI+MP5z1J3L+ZKY5m2ms5JpzufpUts7THM1czWSbizlvll0dNgiDmaw3
RcC84SF6RJcuRIduDnH0vP80Hyxm/QWee6Y5fHg1nalPZhqrGW+BO5APnhb8KQ6d8wcyzaGcx/YD
ee9ZvjmV9+Yz3tyb+nIumOfESuFA0R8vRwMFfynnLWW9yaI3WvTGSoxgohwMlYKhcjBcDqeL4T0L
42W+4g9rS3+sGIxyrEIIDoyhbPNZpvEs6zGGst5YPhjKB48yzcf2WLl1XAJ3mLAfzTRhYeSgPnTw
aezwehgWso1hRo7zbw5nuWnXo9nGGDgcNBYPvfmDxhTP+vv/HDi4GtFR6s8OroeJrsOG4HrdGBcd
n0a/vx7ijsEad4zdvv5p7PV/Dh9cDR5cM568+fT4DZHcIJ5/e3j9dabxm8PGbw7q3xw0HoPbgffb
A/70/u77KyKTqB7KNAcy18PcQIuKJ9//9PSAsPzEGMwH4PPNm+tvDup8i2B+BPI5/0mm+ds3Pz1+
fTXwpglKA99/GnxTH3p9RWiNHzYfZT49zjee5JqPDq8HDsgATR7u6AFbEnjNgdc/Pc3UCbNvsldP
Co2/yfwEF789rHOqXx1ef5NRBGrw4IxxaAK06QzAgsP10PcctE7MD2c8Yp57O5klhglsbnJjWJ8T
gd5TXZRY4Ll8lWs8UmwoVBTwB82pg+b0QXPiTQPWhsgwWW805w3nvaGCTxQ9yzZHcv4YyYFzyDYZ
pCw+JP450OhhY/iN7v+YoCDjNccOrnhST3PNUTvEM8WqYgC+hsmfeX88743nocBbyflzBX+m0Bgp
1h+XmpMFfzbXfJbznhaaA2KQ/RMDTZ7I06xHPpklD8BCPhjgGvMBZzVVDIdzzYm8P5kPuQNT+ZDU
Cmuj4q45CRS5Jnd+kDMpCJAB9mxjpBQxnhVhIXhS8BlPi0R+tMDnHLQUjeaChXLAt8Yq4dNKNJEP
7lmYLPtTD1gY+SULg8YC8cPljxZCDv0oQ8Ik53tDyjDN8awGj0lPKgsUPLLmGGGfa7rB/RnNKdpH
MmJh/KC+IBaaM6/JgT/BAocgeCy8eQUKHlxj7Pv66PcECRmYhFlXiTlkg09Dh1djnFLmevAQFn56
/ObTk4OrexYs2BqPDr0nxO2b5tcHza8Ovb/746ev3tRhgQz85EDbOxaGLHk+Pbh6fHA1lg/J4V8L
hHh8c9h8nPEeAZdY4Fh8hfC+ItQ5H8KVN99kPpFUH2c5IiXpeuCwbju0qzj02PMA0ZVtfJ29elxo
PMqxT8dC/evD+uOMIGKwDRV2+I1V0tdXvOcOjFgyfwpf3GfijSA8uJpQlHraTDeE+89d5QERwx6D
APtNtv416GU4H10guYUSPHPgzR16U2T4Q56UN5xtWrEmMpsqSfZwxWym/ijDiV0NWE0fNRZGD+qA
QA6fzfgChHyVbTzLeyN572nO4+ijFgakL0oDSZsQJXrnc/5K1p/nTcEbKzafFgldbyanNP40T/R6
AzlBPWMsAMjMobdodQcW+FMsgEAx5ChA5Fiw17qFZcCx5gvRaDFkjJdCgvaZjeFSOEwAa4SEen/w
IVtGnB4nDAuc5FIlnKxE09X22FFrofALFqYpFsbCeDEY67MAL9wl7tgQaSRvyQQY8z4Pl+glvYzq
tDW40mkNiOAeXk/wmq1bXeC1Dg6wMNRnYeygPse9JV+p6FM+6qO5+jDpOkP5Jvtdjx3Wx940Rr63
Sn3QHBELhIRYGM58Gsp+YvuhLAmKzz+BEs+O0AKEbzLNrwlgVVtv4KD5+HXjN6+v/v711d/88T++
fkPA14eJGW5+lqdcH3xzraR3iIRA13GSyL+GqwgPWEDtXP+GwvE9EusaEJ788T+JsacaJO1PsPBE
LFBErh9Tp1QdJNJU9MnVFu2QwgaP881HRH6m8bWB8I3VC7FAZBJjxNIDFoZNfI4YC0oUnK2xMKac
Q/1tDCsXCYR4ZP0Ri6LH1AXBJTTGMv5Uxke2LZEMM/4MI+tPZlEysEN+0xiwKiAWsjofWPjmkNRU
H7e6MJlRLUDSwMK0tFlz8pBolCxxLAwpDUqGjRyICErDRE4Cey7rLWV8qsNcvjlW8J4UmhO55jxS
Kof+aYISOLB/CB1nV8VgnkStE/PHC+EodSpPEKLVQ0JrqhBM6UPe9FkQbsFSqQUCY8bCMJkfmVT0
h0vBYEFJW3uwYRuH7Ep7K4YThWC10popYgr8mUo4cxQ+K3mJBxppqhLw+WjJHy/5EyX276OgoJvT
4KDjhhjHQpU9tfr7xK4F5TOa9yYKnKQ3VeSVOticzDVGTAsN91kYFgsNpCkguDuMEuAmT5KmyP8k
UmquKsKVigJa9/urQYln6dWJNyQiJcxBpSM9spHc1Wju00SeP69GcqBxNZSRNxlQPKtaMSR6VRQa
j1+baEcdvbl+dOD+iVGHKVgYMhYo/Sr0PHSxIJQcDojAAQtmIhwZRnkakRqvDyAYSIC28RPl9usn
skLXhBAZFRYU/xlB9MRQIlcr80OEjScWfk9siAUwsYQ8bHUBDU+5mc4FhDHWAF2kWmMsPDMLRkqZ
sMo7onzOaA7ZbbE7gwkiG3x6lL0eQJFmZdaU2K0cTIkLb9INZIYUvtQvh2YPxIyKPjRJq2tXE9oS
dgK+ZV/33EDwTxB1OdUFiCBuJ7GTOm1vkPxzaDon2wScxYzPKzZh3FiYzDUXyJwFUq5vLDSms80V
CaGAqFvIA47v4nzMQMO0Tiv8iCt/WgbWmymEI5n6dJ4/Qz5ZLEUzeNtSOFmOYIGAZM8jJcQSOTmY
y4czuWAW45APF/LhXC7A8oxz6EJjuticLjbmyt5yNZqvtiar4WbhFyzMHoVYhkmNEBxmS9FUPpgp
RJPiLhoqhoOSZBpP+iyMGPLjNiACECa45HxjIl+Hi4m8yqIbs5w/aQrLnPU4pQn0IUnAivh4Tt8a
Vp6/lqDiARGl8HLQlHd7QyLyJBUOqR0eYI4UGgP5T+PFxlAOVVN3LAxLO9WfvrnW0Mby9YMo5DeN
AfO/gxn5rKcyOMKBvDclJXw1bt5QqS8bMEYkM3yzugIBf/1EWKkK4JFH0duvPw0wxC/pHQ/y6XHm
6tHhJweCjWtRkEVGemD4dUYa/klWKfSJIr9JPjFRFDuFJyZLGCj/QWxX1udCxqSHqVaeTp7qAwsK
e+WTMaVi9OHVaP+TceVAf9gEz2C2/jR7NZi9HjQWrKBoCAfsNm4Os4YyyfkzinYch/wyGmlU+pwH
6mOKwZb8PCZz7TkWyFpzWX82q2/NS8BzOU3CdbigxDthLn7EWHhih4MFrPEy22sPig3icyrnLRP5
eoL4XNyKN5P3V3PBJEq+SPT6c/IaGsgSLmdKLKCOiHyfmOegc6WQ7DpTCOaK0bReQz5ZKrcWK60J
S+OTpWi63BrDF+TDJRvL9roAGjlF4GQFvVQfKVzPFRsLJW/tKKQEEPxbD/zCtOpCAAsT2mHgWLDD
RRMCWUoM0+38yOOC/wjShQOAY5e4k55BQQbgYRG0V+DAm/FcgzIxnWvOIp+44fYgplVDA/LqM923
umV7YhVdgf5vkFVUGvB6Bx5FgTGlPhWfN0yP+SOF+qPcT0MFnjUskM+v4YvdDr+J8zx5FXWBiHVj
QCYaMRAMKNI8dX7UhAkQqGNvrmZMADBIIOwEYwULlAbGU+tvDFpyln9505iVUFfeU6DmfBL+IyX5
q28OP0HBPQ6YqYGc/yjr/T0qi0KjGuEN5oIBtdRwdh5iybiwoqBMDgtcXUAg4cseUwRN4YxgFXNq
FwgEKW2yN0rDU7VFharUcqsbLtsM5xrPcmzWGClQrNWv4L26FtKx/rhJI8cCdXnWml2T5ghkeHOq
COyfCDcwVYLH5Q48bovVhUbMAio9G7OAKkCTS4HwZLP+lHqMCK3miKqMv5AL1nLBkoaP4H9WIO0H
OIgp6R8PHMjhRAK7JX4GilxCMJtHwKCRpEYof7PFUBQU/MViwHugkOf9woI/WwiROrOlYKYEULgS
b8LKBMJpMR8s54PVYsRYLoiFeVHsz1Tbo2UwbK5U/Nmit1TxCSQqxWbee+gXJiv+WNkbL3mAQCmZ
KYYgzOGQbciwQTv50XI4VA6floKBoo9tp1KAgxtDwllESPlnfxqXkmGICHCYMRZGFKWSl6OmMZ5Z
fZ/gPhS5sajWa57dmHUJgGU644+/aYxTGtStlcNSWUdqGguDBSVA7hsyQJ5dAqMBRLxSUJA9o4dO
iflkWjL8SC4YVA+WYuGIq88bC3PqtOAN6zx0h+oTzHLG+8a6lENqSPr41mF02mupKWftMdoE8N8R
9tLYiCIMslor5PmviSUAyfvsARYgwkqDTkA5M6teByw8zrNN43Heexy7CSjwkUOw8ESmRu1rbhHf
GrX6i7AftI4c1ZYxnleSGc5ita71SYEs3Ri2wRvu5NMMZuoKC+BMAfeZuzomByGNigtezAbzGdXo
MVnCmIVBszMMdZasayR/8YCFaUFEuScHCsx+XRAL0wpy9qNuJ2l8pRCs5/01HDSZn4RZCAjI1T4L
42ZmKSg8ZdLpN+j8vDLkuKyBQh0WFkrRbDFYLoVr5Wi+FE4XxQKXPF1QgeBP6gKRM9EfY8LBHy0G
Rpk3nw9WitFKqbVUjOY5ekF/WgeVk/EWKnjh5upRhDueLoebuV+yUPbGSk3HgvkFXQInNmZQw8JQ
0QeEYcOBVwz7UCEYstJg1UGlTXejQEb6RGyP5+sTavlSFHxOjFo5aizwREbU1gtII3xxqNhE9ozk
ie36kOWxET01PYIxdbnrauUBghpTKp2DhYbKXBE9cE2ZwG5MqNEHApjupnuC8qGHTeFASB82lGkR
SK+v1PFQMvTZ4TykwAJK2FjgoY9aziSGv7Zk/kT9GfXhR9Th9EZf16n4ozLaDRNCWPU6xRGzgD5H
ApEZ5KSyziB4v800fwM1OYmlxzKVsADOyMsG9tYNtjcWKByc5BUDBFBfkoIGAt8iiobNCGBJhtRk
aEwViTc0PxF+NUJCyDcox6PCQRVhvKA/x3hjHRgyLc8F/TOcVVPa+bVZEzBk6TmxprpAEDq/OYpL
tdmlId3PhvMIk5nmYs5fIjfm/FmSj5kFhPGwPfGJrFpJ1AV1UUzbz5UCsvFq3kcULeYkb9gSFqgU
UznNXk0UwxFjgepMIn1clE7g9CbUhiJj41Wb2AEqwlopXC9HC2TmgsfnI8YCb8BkXrDAncegOsyX
EUjRRFlWGuHNacwXw8Vya76IrdD2q+XW9FF7vtpBR2EWhg+vFgl7jlj0Ew9YmCsT/EovUyWfijNt
hWYEJ0L8FzSwz1PsqtKarEQTlZAxC60qVRSvgAoynQ/tvbFQrJO3hwqaVlBZz5vqy6mlNmsFXbkO
TRj3wRqDGOFCc0h2Q8WFZ0qO4v4jYGYtd81IZ4ZkyyGeqfYvJaCKk6nPHNbnDhvzYkFNzqlsMCw1
5T+1gPzGpJfgsi7cOBiS9A7rU9wr4v+A6tCYP3TdEikl0ubf5Ly/zTX/Pmc9H3VXcNYeYn7k++tR
KzqascJlkNO4jUR4pv63r/+vpE4Wl3GtwM55j7LNrzSHRajjDhz4aombH0E4fVJbCctfoHwIq68O
rxwLj80pc1AcxyCXXAi/yvq/RXvkA65lqhSxsTonNi8waPJyVAEcjVive0C6qA4Io/0aIRAKyoRI
kTElbaJReYYbCw7zsGYBTHziPiZsA16pj1NY+MPGAhY4J4ExZxqDMaUOv8S89Ux8Et1UtsHDEgua
gFPJmC4pUBeUt0OSJKXwa9IsaqcQQsEwIpxsXAw5+tKhh00g8cLaGmxinNW9JHQjNImCudQi8nHN
Y2oOSEsvqCiEnDAyfr3gbxT8NeJcYR/NlkPndgn+aeETLJRbK0dtSgYxuXDUcoBQcUatiCyXW0ua
1Gsm8/5DFmZK0iqwwIVQNSY0IuLfNaxAA7cOCONwV8ZZyPKwZ0AYM83DmxmdoVgYLjbVnjX7QE7Q
vQWHHO5JbnpcD8WxQFHw/zcWqCPqu0qIktDkmketvTDSZ4HHzVOYyzYWM80la/dpsi+LDalbt7wh
G5jVLOpwRkV8RIOormO0AVMTHIeaA2WQ8HnWU6aov8p5v8l7X+Wbj/LNp3giNVvUZXr2/dWYtZI0
QfymTracM81AIfjqzX+i/L851DT3Y6sLj1UgPHMNapnGRZD9iIXrR5lPT2RyuWpMR30gV+dVc742
RA3lA5yRkfnAsTBgLBBayDDl1YJahVzmoGmnQVlRKkiIJ0U6jlilGFdbT9NVE1Iy6s9MFsJpdVfE
wnTGm8+SnQKzIWraUHnJZo4FbsXsoTd72FzMktul+R0IROxsVh0hbVMMFpS6w/m8urXT9ywUPHIp
qsaxMGIsfONYgMRiMIa8V/kIV6gUGWS/ihd7ThXCRfkC4kosKMGqWdQit+vEbDzL1KeNo7lya6HS
Xi8GG0V/RSNYpnxUWlPliCDnqqdL0Zjteb4SzVbCMbmAwO1zrhSBDEVkpdJGRKVKrWQpfMgCY74c
ztsO50SBQJiSK+cm+5p3QDuVNUbLvkbRdYpcgJn3MRJHNbfiWW+WU9LJuDI9btXBcTEhZDAgHnVn
+H9hYTanYJvps2AdP++eBYFmAmyOqKZ8W8dsDPdB/GQajgUZVbUr1edX65v9UPozRN31VI4HXV8k
6bF/ddFx9P6Mqpu6ZI+R9AWMiYiW/HYm9Pv6OIJNsu164o0msKYP5VPA7WshIBZ+c0CQS3IP5DTt
pTlraxYRipbWPJ1eFsF2ZYtSxMKTXONJvkk+f3KoUx2wmQJsxWPDgdevcRyUiRwVpE51JvInCq7f
otkoN01gsz9YtmBQraSYhQll+7grPqZ2pVqp07KoqrPc3nn7c8imfmwzjCos8CGY+IsZfyHjUztW
zYdykxcEgjeZbaBARnB2eekQE8ASQsgt9o/8JlSmlZnJwIo6whi/+QjtnafEmC+2dT5kTr61Qror
BDOEZSHcoBBwGjnfsnc0bXG7RGKvtB2knB7AzpngAUOy+lrJXyW9M0rBSjlaVOiGcg15j4owU2kT
tICwdBQtVlvLtc6y6SWCfKYSLRxFy5XWSilK2iEesjBb8pF5C2U2aC8fdeYqyKo2tQAWnFgaKfkO
BNzHUNmDhUkXvTlrMjuNZP5izCavOY0pylkp1AKnohJC3CWAazP+rk7BgtP/9yyMWczPiAX1h6fj
trNvDW3wIUQxSlJ0ko7Wi5s30MbsmaoDT1TYbOzAIRpbPRmtK7B/Hdf0t5q3U4f1BW4sDzeDg2iI
hYLyxrDELa6wOV7EOqEfEBv1oTyCqjln6wSm3zQm3zTcwgYGwQ8FxPxTZ2+pCAYgJGqJgsXqmC1L
IHimJN3Z7Nq9YvQGAL9AqDeoX09tfn+oz4INzLWmaBFaIIY6GlIL2q1z0I2SyLcaARdPVUpwDdej
hZgF0zy6M5OaBfC4xrl8PJydnJEZ0cKAabv2eRKyGuAK2uWMv5Txcbvr+SCRD9fz6P9QroF8Tk4u
R0Qdr2Ty9VKUKEYLOWUS68Dz3LWwbY6IJW4V/N5gyZvJa1UGf06pSxkylhwLsFMOlwrBqsqWe4j+
otZLtBhEKTFPmZg0FojktUp7iT0XfGsTecslgbBYkkaaN5mERkKcLyirt6fLAee5VInAYbXWWi1F
rhPLEcXCESyEG2x51LpnYUEL88DZn3UXWGkv4DIqndlKBxygwA1AGGFUGB5em+0nirJdk5xqIZqw
qT1NnUCEWJDQmozllg1rAgMIpzejN0og46Kgzu0afsACY1pZSCzMmh8hjJ3utaJjUVqksnszJlnn
7KFbg5E61eD9EL4g6xZ6BdIqmTo5c8paxGRmOdBsY4YtM/WRw+vxTGPGstCoVJzKzUyhOVtszko3
osfqg/n6vGm2GVPas0iCQy0bWDiIFyzJmxOrKJBipJKkHikRK5U7Zg15NPyYTbsAxbAZW2PBH8g3
xEIWXccT1AwpOxnJhwM4EccCVUNGgAM1qAs2lUPCj6f748kp++5ITh7ZvHPDpntM/GsiWDfTzSlI
9nO70AkFBSqvbpHMjGV4AvtXLKDhN/IBGTtRCJPFaK0QkMDXyi2JcwkhtWjQ6mtAlPW47RiBCYs0
Ujd7A7c5yQBvpOQRvexquRguW18I2Z8ohgk5ZaLCmyt465JVwaRljAVtEC2Vo9VKGy7kfwucrQpH
stJahiNYKHgLxcZyyVsuh8vkebK9+quijGiZldBCq/jUizW+UvFXKt4KRxcLBKc3XwnXq+2VSrRO
NB5F9yywq8WKQnQ2HhE2eabcZiCWxstOHYmF8UowfaQxd4RzR7lphnq21LIwk2FxvoanZpPjmqrg
6xOVeKDZJvnWPXoql4il+lhJZcLVDlc+9PiMBVOwHAi+KApqdlEURqyHNq4n7uYl5f5GNM0nFmaQ
EDjNrOwGEaJJczQJcYJ4psApLGGhDgvTOU2Uj1mX3iatUA5NjXxjrkA5Bk/1AQYLMoxjRHuGL3pS
bkbEitrj4ZCt63hycIUvwJopINUZlm6kDDFmULCyTvWZomQ8Tmei6D3LXU9qBrYxbCywB1sjF7hW
6qAWnvkqB/nmYIGEj/1pyMoV3T1nh74Qy8k+D5mDHs+bNTAWpoqeEmDB3IHmNz0T/N6stS/mCmgA
RTLbjNkZzooFQiu4Z2HFGk3ruWAjj3oJ1gsiAhbQ/HN2DlOut8/eTG5NxSz4BMx8pbVUaa2V2yvW
3p8rag53mTDOhyvQRCQrjYfsc53qX/YJp6WSv1YOVwnpEsrKn9crQshqUEk+mmtB20NWokwZCpJy
CtSUxrxYABmVqmljAWEG8hyXyF8vhqlylKpE6Uq4c9RKlJBViKuIXDpbCdaqnGewXgmnj774hUU5
BY5OVAf3LGAWJs04TB9FhPFYJQCEmWo4a8NYwHET0kqGsEB1AIqZkk1VaymUqsMoyopyYHZ76ihk
TJSpCB5fBAdiw8RSg3rhWJjsLxqHAliYcSo0bytDSqoIoyW8eR3LMBQrJUuARU0RjqrTrupAihs/
rE9nGnOaO/ZgYagYan4ESWb6h6NQF3jo89YDtLzdtKUvKOTmUrYxn20s5Bsziiux8FRKCVdbt5pC
kPvjtswSYaAOlVYwerAwnG3OkNWzzYV8OK73eBBem0uETYF0V2eHNi8fszClqtpUdcjVnx7WtQDS
FgMP5XxYGLSlXzp0kT8pcLDgW2tdi17InwYa3EGEJo4pKNY1alpdcOEdOGuwoD6/1i3PAKZY8NST
ROdQu9XcQLSTfJrzRsRc3sMjJGyyzLGQyGuygNAlkxNgS2Rs0rUF/DKhRYnRw+JmSg9PS5C0147a
iUo7IVvaIvYQ7YRlOi+akDQaRH5Bzczlo3CxFq0dkb2jlSNqAR6B2gGqAYPSABGTNmGNtl8EyXKE
X04W/HTRXyiihfylSrhy1OKgCyaTYAGbA3eY8WQ+SBeC7WK4W45e1dqbpYjqs37UmuegR3wrWKr4
iWp7qvKljzSDyy41J0velMmkuUo0d9SeMVc+bTYccCYqPl+ZPQrnquF0NeT9NCyUnfgn30ZTAqGF
f7e5v9B8cTAc6yveiKaJSmi2WvpqxliYUJJvSD4VPduVMrwKgXUzpqzEk64nrMRMlDEvYmG4aA4a
iDTbqNI8afqBqkRsqPQfNqY09aClCJoSKkWjrtNu01KTJZPNshtaCYDQmjYMIWsOCrJ1x8KUsfBM
ODQdC+rwZ7UQ4llGC0Vmcs6WUgWazw6ubEVxgIVHfnDaMzIyHoOHvkT8F9BIUkrjwgHHWp+wk8dv
svMR5VXrZ1qrVpMLwkHrdkZVPjR9oAkmCjos4D6ydddFn7Xu0JhpJOzDuMqlWwwjiT5tuohwJQiJ
8Hl9IjypyDYCLaosWGPTWEBBLeR9N1MGPqvgILMQrBkLK8rPvtqSOFMrUvMmhBbMki+aPiF4VBQq
rfVyCyuxYamYcF0rhslCiKBaEQs+0Z7AtyJaKuFiFRbCjWp7lfclDxxWj/QV8vOCZelJ60bCHV/Z
hLKinyh4SXRUWeKELVeP2uvVDoJqSXUkTOXhTjgvZeobueZmPtgqhttYg1KwWgqAbhV1VMUXB+CQ
PulOPmCBXD1m+meyEs4eqRDMVdu8zlhFmLLlfOPmEQBq5iiYPPImKh7fuhc/45Vw8qg1cwRi0WjJ
Y29IxBEt29AYLYVDNpswUrKpkJI1bEsIvHBUHRv8gso6gFAmJiSGbYpfflNouBbZVGzApYvGpawa
cCFxJUcTjeUo97JX41rQGKCUTPZIZsOCzSVJiCJXZvJUhAbBOV8gmOuMiVx90nI1Y6xwzSC1WodZ
ycHJthlrrc9rmrXBIZ4eflIrshgtZX1N4B7Uxw/0SyXNFVqLTEsgeHyZBkojYWO6GE3HgrAxmbkm
wQ6RfyptBX8hoIotaQHDp0UyHhtTJvLqNQ1ltIjCJqF0dU7YoEZ0mXlbh2DNHzdk/1VVfVcfJzW5
A9FEO3HuI5WxqFOSSU3E/FJRadaKoyLZVUms8ZL2Gc93TyuNayXDqjSSMrPJ4EjVXx11tZ5kbCUD
KPdaDoHeRoQTb2ietWKwVoxQSktFTRZozovzN7tBwl+UOQ0WLZgJy9WjIIlSKjYXS82FI3/xOJw7
DqdrSBEkBNsLrkQpTFaipJGCHbaGDwwGiUorddTeLLfI/OlSuFmSrpO0gzXVoAhY1qod9NhCJUCJ
rcPOUQviEpVogzeVL34BAT+pn/P8moXZ6hcWXF1YqEbzMgv+TEUN2/+BhaPIerkyC6MxCAikEAoU
saVoohwPWOAax9QXqo8XEQBiwSSx9LA9UGX7GW3WcgN2Jmzh04ganmJhXL9RCkeNhVG140K3oNG1
I9jP01zzVywgV/ACS8QDKihXn37Agv2sT7JtKj4Z/wsLch8eiREnonWe2bqbzZnL+gv9MaeglZ55
SgSqLRCuZ32URsLExowkOh82xlC5OXSUP1RujpZVBCHIsTCc/QSqKdRXVtppkIRgndhxWQkvngtD
EdkCYFcXZizG5ghsk9YTdusm5bmUCmBB65MRGzKzar9QLHhDVC9ZiPIeBOZs8Gah31+yKQnupCzw
ik0ir+U9GU+L5wWkuy0WxdUu2gMas0zFDYcFBNJ6pbWK1ClQYiSrVtQU4lFqzFkbakHC3ncDsb1Y
CZaNhY2St1r2Fo/8hVowf9KaP0aQSxkulwCBKvOFheVqa86U9nzJXy9HeOq0gWAsqOKkihSCyCQZ
haO1Vm3PlnHQKjqGAxTIOMMCX79nYZ74r9g6VS1Y/cLCfLU1rYV8VhfKHixQF+aMhdkjMfLAFLNN
axb0jlpT8tdk/sCaSPLdjgVFrHWWbPIimim35sutKZNMUk1l5BkjsGHzhgLBMolRM2NjUhq7MYLY
KDYNBM9+uxE+ZMEm8bVehQh5ZuuEx81pqi+NzFCS1M8PGfMQoXaEGoBa36U+j8S2ipQtRJkqxrMk
81lNTq3lg6lMXf6RsHErxGyFCSJhRa/+pJa115/k61OaXQ1TRoEN9aWntPiqMVaor2uJMkUhGJSD
oIo1Z+RTxMJk9mrjUIuZkZqUGFubqikAtyR12gJ1ynqPE5I3gfuEmCRaqBojuj/qNU2roae+N1pU
qlvXruE6SKJAcRLp2s0vGwtwESyaUZ3s71ndy4I00kpOvSB3W+Y0F+abDrTtVRrEAtmGY21UWhvG
gu5twUMUrVrwu6eJvlLfvtJaVLNIdWEFN0FkVlvpcpAq+2uVYMlYWD5pLR23FXIEswRSmCoF6Uor
KT8SrVfbEEFxwV9Qg5J4ZAPBsWBcwE6kVRylMIFxrmIo5A7W5Ep8QEgCSDnYkM3/0lNdArGj6J4F
Ih8KeF2wV8W2VrH+ggUTS19YmNKfLQiaP2pp1etROFmxYSBMiAXViDGT/W7Wbw7vX2nNUYkq8dLZ
GXWDpQAZbimIjciNSRvqXZfipVPUMlgYwocW1UV5yMKU2h3RrP0wyi2Jn1D7zoIh31wu6Le3CwzT
8zziuaJrHYQT5m2nChLnM1+aNpqVW8g019TdaqwjJCSqQ6Jo2ubf50xmz+soanZxSpJ5OS+ZVYt+
VdXBwyCPFOoTGtfJYkRpmK5GQzLUAUabQrCsucKr6exV8rChOlLUIklzx2aTLfJnbQmBwS6N5Fjo
f06eFAvP5Im8GW670JMvW5TLsPkv+64rJbxfESPg3HRKacFYAJMFrRHVomjnICSQ8vK5i05kigUT
Zmq4SVbNq0T6jgUinMgn0xK6sIApcypFwS9vq4e+2JdJuAbOIaFUj8hpbZZDsVD2qRHLtWj1uLVc
a2Fytc8iljlIF4NN8r8UjlhY0XxZKDMiFvhuDMIWw/QSIyU2JYQgaLkSpGqdDb5SbG4YUxvQx5sH
LKxUW4gfQh0vMF9FGoV6lcFvzfZZQCPx6liYrwZLtdaCKgjSSM56zkDQUInxY4KMiHGDYtTs8+gD
FuYrreWjNhguVsOFo5iIexym47IS3muqMZNYNnOnhtJUmcLE3rSWY9hE7KTpZzIzj0br4U33Ohbc
oq9F0wmLMrMegTevho+3yNO0JLlgeXXS/TRJNjxmYcocCiJh9rC+nAWKBsV3JdtcF03NMasaUzbH
MesmtqwPMJ7TLNtG1l881HqPVbFwTeSPF66nC9cprcZpcuueFhrL1Jecv5T1ljMUrMZcvp7ONDe0
gA1bhAAg65KffRtK1HOS6KH9ljBmwTkF2NcKT2NBP4S3fvusTeXgQF0j1E3a2qtYWC2rV7+giuCZ
gnJ1QY54rhBPECznfU5msxilqA4iTusrFktfFn8SpfNa6eEbZbrDy7ambkObebMlb0HtoHCF9HvU
4YkrAUogBXy+YkvvxEKFoA03NfxE2Vs7CtaOo5VaCyG0Wm0tsVmfhW1jIak6cs8CdSeABTDZOmpv
H7UBQSxoRJvqqQq0tFpbYbraTlCJil7K9pOqhHrzgIW1arQiI0AhiKgF9yws1QhvBfyMAl6/95Ff
qKoJtlxrOxYMBKmp+VrHWAgdC9NiQW0opBRCa+zXLGg9CXdm8UgGxI0ZeRO9IpNIazMVrTyc+rIg
pM3QnEJRLS9NUhg+6k1VWvOWpRfVUZes1cKAgl7dcoUJTdj5covGAp5uOdcknq3BgsWjkrZcvpUZ
tGBzoaVfThkLJMaFTH0Vy5BtpNHP2UYiR5loDpVUCKakuiWczHFo5n264DkW5g4bs4eNtUKg33ZR
eQvXU8XrJFGUV3thuNhc1llFq5reaiwVYbOxnVX4jVvvF7G9aLG6YGLeRaDL27b8MnQsOC6mbAnE
kPWNp8qkF25yOGvdmEXNQOm3h+i6eTdLq7qAPIhWJJZCTWDpWIaDfES4bLMDnDkUkGm3rSm0oPUV
/rxZjwU502jJelkTNmfhKu+SsZBS2g/mKwF21dyxDOyyNWMXhIlVBAvUdKWN8iFotxW6ASysw0Kt
tVprA0KiqvniRDFKF8NNY4FoJ7Y3jmAB/ysLvG40ORa2+ixs2z43K9HWEZ/rWxCUokaUg/VSgNfe
qnb4ir5VechCuFJVnFMIiH8LeKqDJX+CXFVDhWOxGvGJQDhurxx35g2EaRNUC7VOzEIVcHx7xfWw
E8iKzERgw80y29pa4tzqAhoJG96cOfKmj7wZWXLhoEHaN3PRH9Gk5jta4/o9aRNzAWuwIB4rrfFy
a9bWDyyoo958yIJbHDItDSzDuMqTKvi4sJRr6JH3UAX9pz+vX/O5hozKikYxnr5Mavm9t5ELlmEh
j/5vpkmYsFD2Rsqy/Mq3D1iYLQSD2TpbzmuFm5csRc/Iz9XWVKG+UGI/HhLiabE+XlIeRq/qly+H
9cWCHP1O1k9rAV5TQVv05pzZt8X8soElraJRH8CEuvEbuGG/EcOYqAU9ZcsMbI0ZdlXzVtM2KzGR
b87Yep4F8wsS84Sl3kSrUtetZfPUHEUpohAmVRRCWNixpTvYcC2fNjZlq21+Yd5WR8xpglgzy6tF
9UsJcowqLhiRs2xuFzBNF2lR3GqlvWa2ItmPRgvgaEuJGvsQJmqtjeP2Rq2TrKo3y/OiNqk12mch
pT5qG/2/jvkVC+EXFkwjaUs3VCxau9WOCop6uRSRQBWk2nHbbz/oI61WceWwoITvon1BARws6A0a
piUlI0yk35Zq0cqx3ptxCPHdi7X2olgABJQSZYKHDiAqLg4lMxGRjdCViRmzCRSFWbWnmlNHzZiF
fnXAdE/YAr/JGIpYKU3axMSsgWBH1w4pN1pXIPHvOxYWFeG8Km1awyeeuOQRUxpWzU+ta+YoUowV
tcB4wZKbfnOKkrf/lYHMRVFrXSjxtixHK4SXso1k3k/lFa6wMCrPIqlsCxtMTms+XROyY9nGVs5f
yahLny5HowRkrT1bbC5V/OV8c02LHuskbU5Ac6l5H8pW87jmRgoBZqJInrfQZCC8V80/WrhGy5q/
aDoduKBODj5Uq3dmS/GUovtxIjd5smRFVv0WzeTOyf7gO7T2TMveNHulnuSiJerlcmuVBFVGkwgN
SpImBawhQ05GiuNPtQTOAt7YaSXKQsZ+LyPXsGD/tG4+VxsbC0ua1bqfL7AOp3nnVXkK2VvFecna
oQj+Skj2ThyF62KhmzjuYHvXDcNUqZUutXaOWjvk82obtbOuqiEi1vlWJVRgV4ntFvBuPsBh56i9
e9Ter3VUTSrcRm9TZaK1U+uyH42HazAU7aT9QEM4tBfFgvqrDgQ2WKm10W8rgFALV2rBQhXJJOSX
DB8jSEMUiIVg6RiIVEpMbkVaehHP2QXTfbPMIWDQ9ubPHnnscM5qCiVJDsX6S2yzKGuPRgqMCz1i
h5LynljASjfUNiy5nmFzST+G0v/og2c0GasyrdFarEQLFc3UT5GiFQDqb1BlFu3DOa1O1+oO8uqs
zZIsHLXGS/4cJewIgjCJJG2Gt1zwN9wygILW0hD/hl6wXnDTsuht6X/+3M36qay/VSCWoL7FgVaL
qHe1zhDSG2qMRGtaABaulbxUyX+eD7Y151WfLXqKMS0/aCygo5DWav5Iii9rIYTPWCi4dla4YqG1
pP23pm1af6LkVm1pvn7CpvL1axeLdvOwRD7FSA53yRYbqD0eWz8t75wxrzGvbqqWXqxr0ZFur8n+
yFljE1ct5xccCyarJLRstV7ALVrVM9JY1kI4zHJoc8qReQfUu0yrZtzM5BLA65plC9Y179ZKHndg
YY3AO9J89Do+t9pJ1jrp487mcXfrhNeWWDjuCplqK1Vt9QO7lXK1TCzIPuxWBcKLk27qKEgTxuXm
1kk3eRRsQod9ka8/ZAEDuyTxE+uf1eP2qoJf03O/YmFVpkbUELdLFBRYoEz0x4I+98DBykeHsVTr
wIIaTSaWYn9xhExSTXH7XNAaJ8kkdaigqRaZ7wiMF/EoHDQDHs1oiUhwz8KCfr7tT5SbswpvlWBl
cp54ua1OI1rCCJqUcBULjDnLkyt6IuSfNl9cOWrPa9JHP/EYtwXni0ftiTKvLYW6YSshUYSC5lLB
Wyn4qT4LWglZUohKGCgYkB/6sdVyzkdgSO08YIEjspO5sjdaak6XmlKtWh4TIqpXi81E0dvPB7sE
XtlXn1DZnnjz3VLMJYizhfoahdD17RdtRcSKzbdqvb1GAFkLpotcd3pes1pq2pjnjVWKaS0OoVlg
7oBrdEjQan1CG/mqdXfGgpZeFKT/V7QEzg3hoIpgY12arTXnmrSGQ6LU2rBqsqbSH/Bwl5xM6rOw
7FggvE21Ak7a0niiEqwZCwmsca3j6sI6rkEsqARsxCwIBMcC/5qoqa2kNpRjoapJty0njaqd7aoT
SO09vlWLgChZDbdPe+lqxH7SVl+w4V9YqFkzR8kcU8xoaYHrsQV/DIL+XD1u2YhWVRp0mbax8Lkf
i6oLfRZOOqun3dWTLiIKCuar7XnL8Aviqw0IC1pVzv6jJbtj89ahWnRw4UGO4oC3XlM8XJ2diz93
dcd6vOqia3HXot3tJf0/cKSKZ82bzFhFWNRSGSXnebcN0lGLWIK1amdJczEdQwwhR2VvTWgpY6Ql
lBJ1wUYlWtdPF8XCqhbDSDPgcIWYMqTiSosNNPfqTSCElEuj7ZyPTNoyjQELq7YTLNJ4WZZno0zp
1wnDwnKxsVpo7Oa8PQKvIrcrAYOcKAcrDOHmrxa9VUGnfg4RuG6Sb03CRgubnTVw92fxlyyo+WNi
T+XDasGqNXA4gXXlEK4xkEmsteZdfT8SC2T7ddNISZOUgAwIKxXd5HWT+oxEuc1Ytt8mL/YlnPSM
uv1RQiuFNIm2pFdB5AZKLKFFGmwcuISQlgRit3IKbiCNNiz4qQVryKQ+CxSFexaoHcmTXpLSUGun
iOpaZ6vW2a6ZC6h2dgRCx1RThAriNV0NN4/bRgQ7afPqBnv44hfUyMUshMvK+YR6hItPHENcRJFa
rXUoCg4NtlzTcL1fbYx3IOYdCLxZOUEvhTb4J30CC/yT3LdcuZquKjSSYWZDLLfzKp1mWsvVFzFi
VC5X42FbKu8tKFY1BS8WagxRPG/5kPxjbxTzs5rHoZq0NGPSZ0FL1o/avPJElsqBzb8E5JZlN3cD
9dYK41hjpeacZs89AoNTTVBEJFS8laKfEAiRm9xcsOmeRU33ONkQTmkBYdP6JK0tbEXe38bxQY16
6fDiz1IXyo3JclM2wdYhTJa9pWJjpVCHhR0EfNkDKDU5y/FatVV9UV3KhNZeSn5slCQwNsoWkKo4
BHm8PsdN5t7PWiIObVVqEBeFfkWQOBGMnBUVMFiyFORcIXdvyQKbvL2pwG4ldN+4e+GaRj9Lk9iF
QytmQXdAKyWww8Kcryu2lerXtMRCEK04FqSyBKPmi9m/OWiu65csaPYNHFLVDupIZQJJI3XUMxba
W8ft9Ek3fdJLoaZqrZRl+HgcqToYF11e06oaWPIgLV3U2hIFbXvtbJ90GalfsrB60l45ba8xTtqJ
k/bGaTcFL1aAVo87K04v1aCgvX7CaDl8+iy078cq/9QfK/1iYW5C/vqeBfa2VHXJP5ozE+2UmCFg
TMXGRCXJVR/N7lmDzubrMRp8aNAdhwvHsS5VY1YT+pHJnlA9W1Uiuewlk6xuLl6AE+Flf11lApvW
XrCpeXcO7pdQ48SzbI7vMNTqGmMBwe8ihAERqlBlWY8VwwGHSMKfKCOElIS3ihKujoU5YyGhwEOT
YEl8zQHJxSD5/KVifb3Y3CsGO8iesjfJ0WHBUrFlYzXh1Scv91calMVC0qIoYZl21a3zRHnKKXtz
1kq1pZt6tXVrv6oI4YZ68i57h1bf7THZ9a5oA+JZ1KeO2slqe1WN9zBRjdThqamBkzDNv26Get5A
4w37V3fISl7yKExWA5R50pSPGj5H7RX7AYIWPxjIG7Z8Ir4Qgr/WSrJ//IIp+VTMgh2u2k7GdYHc
3mKgl9KK5E6K97U+CLVOrJSsTPCaZj/CIdo6BoTWtkDgtXM/iPOHLJDPl4neE9mBBNXnBAa5A1x4
e+24a95BgXrPAtUBpWQFIroPflASGscCBLhWTzuuZJithogvLFBrlp0rtxAlUS/1TfpyLM8kwwSp
QNCTWrBpPoKWMk12Wqk6WMLlk2j5FLkVuA0IxXk7xLx46fBYHQsCoQoIUphyZIphn+K7eORY8DXJ
YmVoRmsARMGKey/vL5XiCrp1SDQ7o75HMeLrnJKbTiIg3aylOyIFZavob5bCnVK0XdTy4w0tBgu5
bws1sWwBoGSL+Voq1RMVb7/S2qtQi9WWJ6iWjpDK5jL6LKgfHs8icQ76ZMN+jbKuVUAtaYkqPlqX
5s7H5FNkc8Em7x0L1uRBxrCHLePCLRZd0jOSdgUootRWmYoFtSIVBty9cL0aOhYcDmvWDkL8L5l5
d3VHK+VsJgtNjixBnwsKDeX5tUp7rQ+j8ahJ56TIEgLsVsrnuJuWse2AoebIYo2kDQAkLRAiG224
EAV600nXuimDZeu4J2T6dGwaEea4+SJmQcZh96y3c9rZOe0y0tVfs0CCXaphAYJ1KbG2WKtiYcQC
adyJFrb87yxY/H9hwXZicquPgxpTus/dRbMMZP57FpZMtJCrl/smfSmOSUAIORA+fbnKCF11EAj6
RZL9ZE+HhoVw6RTXEBt5J5+0cIuMWrPVLP8LC4vGAhtvYPCP/ISRvqypdsX/pP0/BqfJ2MbCkigI
kppC4kG3XXLGHuqEtStj4cjq3XFr/jiy2fnWVskn2HbLLXAgBtQSr9hJ1uR01ipSEVpjUKVkNFIV
f68cMYg3knBCWk53ZkXlTKsIZA8r8dICLUUwFlBZq/ohDNcSOY+5GlcTEYROc+Vg3dJ1ohyvz0m5
SS72U9ACtiVZsICnwzOa0axEYCIndAWIUEnJw3ID8VbB+oPSYIdr2SSaSq2WalciAltrKoRDuFkN
iSKXll2SXxcLOpN1k2obQiY2BeiodQu5lLGQNhA2tc++X7hn4TjGIc2o2jA8DaWu8xRpBXDLsbBl
gGyf8HVv+5Qj+nvnNztnXY1TbXDPQuKks37aNlWjaE+cdlKnPTRSCrF03FmTRhIIBJs2OJGOEj6G
ht7IVrf7nxOxhC7eOdDG0l3YZ6qDxqIsg36Fje5advFvHTM9cf4VW6GurGY3UP4k6vWachFVYFVo
tLR/PZHIioLreoUrsHDSmqv6RNSqZsMtPk16LZsBN+0UswAItk8lmbUjI72qOR1OWJ/bRYkmrUjx
eHV1ga9risHKerLS1jCljSTmTKTZTMkoJ4uFNg6UQoPCSWMMy/pF1TapUl3xFqVBaeSUO6AkmbCz
4qLWS16q7O+Uwm2qzxFGppW0ZLgmfiOUSdL1DLUyGYUWplUmNBJ4/5KP9JI4r2jVZcLmYVfU/9SP
YpatpaC1NxV51TWnYY4kTlKlcLPoWAitHUE66sybKUuYZVaX3nwoLHCSK9VgterHOHAP1cBpWQwL
W/sRgTqf5OcN6+QbCwrUpC2EI2mnat3EUWfVlBXlI6G54I6Kgj2OxSNvhaQEOzWrC/pXlc51W2Wt
vpNocuHdNhBMKQkN1YVUzWA57ppkMonldJTQ6NlA6vibJ7wGVhfau5SG49buyRe/kFLwE/ZSR3Bh
fqG3cdZbtZhfM/0jlWKNpiU+POstn3aXMMUnahOtnd4kGCe9RK2TYCenQeIkWD8hq0cgBlmMNQqE
jIOiZUVc6P0KFaeqbENVWjhtT5+1Z07bc8ftuRrapuUqqVuLRUrk3Njbwmlr7iSatcXtiyecDNVH
CC9ockQVB0+q/++BBb/snlUZ4pkBsJq7qUn4If82bCRrUfI4ogCtn5IEVIZMm1l/rGqO3lpeFLI1
hs3s6DKdfK12NJ1U9hLWBk8cd5eErUhci5Nea6Xkp5UnCYnORiWwmxxuYMpq+hVJohpsyJgTdbER
sJwfbVVcwIcbbFwLNCzB8oi3TA/LD9oUbUprD6LNeDFPtGVzuHyyUYKOYL3sJzjoUcgXNxDtFd91
78WL60NWYKQte1VBKCqe5QL027HQOpNt7U0aqbumFRGhgeCGMpW1NDuq8jVqqzrwG8fdJNdVI8+E
ktncarMAKJ+U9XwoAQndyc6KeTfrFLXMTSBNjYXjKIVdPb1RpnJu3VoH4BMvnKg6a9xOW8yjwXDB
lIAtswbbHAKnbLorqRJjnoJx2rUnDiydTbPMu6fdF2e9F6ca9yykz+5ZiBKxdxYLa+amV51TPqay
axntMjntrLdyKhBWBAKjt37aS5zYLKHKSmgghBZg8hcJKxlqKz3oLDl1KhaQ/cbCHENL1tVxwkFY
EztK28IqrcUieZ60l0/bi6dsHKGLlo0FJ+0WbMUIJWzOWiL2Cz41wYyFeKwLc9V6PSl0r6Ii/BUL
CDPG2rFmAFXgav0VYuRAvJKVlcSx1WIeIkXTHtaGIiHk8rV+xuRfUjlNjT6tB2NLCzyCM8n9UWyT
V4P0KbHRkhSvBMSkrQcg8BjqAW6rYY5xI4oUVzELGlb6tdjMhIdVhz4LWoeQNkA2ykHsGaUreEVl
BQkMu5WYDae9pUDEAggQycvqKljuRZyU3aIIrYugBrHxmu6Anc8JlZSraLkKu6birjasi+2kizrJ
bG7sr1kQDjELWk2kfHIs86ug1b0NErUwedJGlujm1DqulbRSjhNLWj1SdYe2NWXc6vuFllqjNTWO
9CoWIieNVImO3WinTjqOBVdEHAvPz3rPT3v7D1hInXVTZz1doKJCmRwQEme99bPuOpEvQ63cKxeg
aBQLGoifU8cCm3UJMwRV4oSIilQRTizATvp9p35AmvvurkFE3JuKWbAgby8KBBltMtWqCUVbbdvS
VRDAUmIgENqI5PT7tn1BZoHDdWW9cSiocSWutmv5SlCR05zZEQutuIwyeF56xODPhYNtmBDFweqx
b0M1wklBe77KGBt6yi0EZFI6h8qiurxyFGxYKkie9FaVsoj/lqsI6tpVXaOD6s/2IoLwTqtTp4BB
Fbge4FbcA+HPaLum1p9jQZs5CqQNXNsw7o2kNeJ1ONvqJSIqAv3aXW2TrgsJEwyRM7Can611vvQe
jVmtfyZRI+atn582Fmzxc7jlyhOCDctgEWJ3oGUXq7Fe1UjUXNvTpQiuSEmmXxdsKCDVyWc8ZEHW
4KS3edLbUtWweysWXBuzYxags6bWgdJLypqlZP5tvqKodvNuHVjgQ3cDt2ytRdr55RgHjqIHna5+
EVQ7YqGHUtJ4wELy/CZ1fptSYm8reRLYlurXjIg1CzknRRC6sLB2fnOPw5rpHwmhk07S9BXZ1Shw
Q0XBLPBDFjoErRHRVb2wnUuPAdqxW/VEOW5bVyTuHiRd9B63lbGPcSKh61+tOdxOseewEK5bA4oz
X9WWOtBaLM+QOloG7M6KU93sz7NsnnbTpx0qY/qsnTxrb5yFDGTe+om/fsyIld668mFbyOh5Uf2j
tFJ6aIldDx3xoMvnUZIZZNw6LjsRhDw4m+V0NV2BvYkdO27BQiwk1C3H3HXU9JYKihhq/Z3EdcFG
K37ohI2CPI7nzWrnvpG+rUdvqzFr1vo4kXJ23fi0ZqNaTmxv3c/P9llIVE0BIuZrarZr5/csGFZa
I6S8ja/3XV2L57kUwL11g4igTRxZL1Szw+2d0+6Wc53H98lZldTVBR6raw2lzNjqosyfCoSTdtqx
IOVvwVyVp0hZBjAWOsLBrssFtu7MsRUFG26zzT4Oto2CJ4ZFDaXutjpIvS2dZHf77EFdAISzG8fC
2kk/Vk8V6iR8sXDacnpp7Yxa0FkTCF037lnYkOnQK+8VPH2n4ESXcrL1Y/v776wbcWtnnZVTsWDz
GmQerf1Yi9WIZEkiTsjCeVulFhUXqfrY6Mc23wpdXwthkzjvWbXquLrGq1EWWV1oGRH9uyccOlti
oQsOm2jFsygJDqcBQ8bnFC6iDbuclEanz0KYVrpG85P0gpQSZkg24zXJNiBGUFlzI60Z/67NeLac
vnU1PV1zLJAG2WfbZkLjp3bfBt+8Z8ERZJvtuBz4ZfQUGMbCptYttNw+1QlUam1tnri+StcCw1av
EU79wXv9vKUGvxobYHvcU8CY77BFntJsSYvbhDQGziUw/DsW510hYHNhSbPMcd1RUePGdi2qO7/A
wVWQe53Wb/Ioh58ohJSdTOGn9XQAX8OBz4ntCByoJxjaNvvc7k+9/ZIFaqVdnW6LSzInnd3j7o4N
KvWOIWCZkEf/i7qQPOsl+yxYuD5kQSCsn3VsdFekkfogWOFInHU3zjpJiyWy4sbDgfRSzIsR/ilp
UsoN2wAWuivnoiwhySHLb4uyrPgyYvNCokDgtXdUFlsuJvkkGRed+HVNRcdYuLhZ17l112V5RK7+
FMsdvZoOtEaEbqDSb8xCd/O8mzpvwYINoGj1h6BO2hFNLStRUxpSComWY2HjAQuJE2sJGguparB9
yrOI4imemmV+Y2HT+QWxIC6s49FO1fo9Q7HQ/hULm6aKN78sy4mTqsax9pAw0ycetc+Oqz4mj3ux
inBLNKtascbrji11I70nbCQlV0x7V6IdrfDUSp5tJ/n0aNopd+HHTlt27jurG7W2k17WwOy4eysM
pfz/Gw7Hsf6JF070WUhrKrltp82B2vFMQU2JxbHAJeyd9pQNxELLsWAz0VZY7y1D/xodC9tSRJpK
2D/p7tUYnV0E0llv68zOTXHY+e8sbFhFWJNMwjsTUc4yGAvnXfLt+nmvzwJKiT9vNi4YvdRFN33R
3boglvTFeLBbGxCBH0mf32wixuzoMkdnN4yV8+7SBeFKLhUIunY9EcdLV2oN0M676XPdAVhQzlTq
6GzJ42hsGGIizioLQg4WVs/ajLWLns5TV9FTgfglC7qfChLVhS0DIWbhPLLRTp13eE3q1bi2Ch4P
BQNh5mID5d82FlQ1eNX+++sEkrBgakdE1KIdC61dx4JpJMeC9MBJ7CKdOXJSwR2rr5FiFtKmwNOW
ElXa4gIhQDi0O0/rxiioXKVwLLiFaoy9Wvt5rbNvaXZTSZiU1eOhEwN9FmIQhAwBhu09tWdnmtDZ
HGOhYyxEfUGoM9yx4sVAIzkWnOZJxdm+50y0iR+xYFnasdwyFgRC+gsLHcOhY/PI2vneWW8PhdMv
CjtnPaf/TTgZ7zrtzo7Bvt1nAVOwf9zlc12UY+GcCCQylasfsNATC3Eyt3uCarq443XjvCf9f9ZO
nHcS511YMI1E1oWFTuKyl7y8SV72WbhUcFqluOFVNuTiLmUsuIhN2VEcCPbaW7noLV8q4EkdLkVs
6rZb+TjVERmOhb2T7n7Vcjh/XvTSF/BL3ekmbcjsW/VRMCj4O4mzjrXCVLyMgj4LcvfWRtDda1ut
7Gyfd7ds9OO/tXEmCjj0hu18Q/JYRZzXtI1NMx2bMg7of7FA/VIcnkkiii8bm27S/4RobGniqRY5
nJ37TsR6Ro33TZtg4hVxtWXLZrYVQi0Nsycu325byrXGSNe5Hjfx6sSAuc7OfUVICy4Z/G2nCfsC
CbWwp6GASVvjEYGUsAtMmd7YqXbIn3vCobVrqd50S6fPgs3G6rRR8vq5jTkXtb6tqyk9b5S5oLKS
qqpKDHSUwRwUsgMW8zyCU/mFTQOBRJdyCepE8WBX1+kXnfa2Y+H8Zid+BMpj6RO3h55epRjbnPNO
jXPglZORQAIZsV+lXmhCYefsZvv8lrgiSkm5D1iwHHtqd9ISuGL44i59cZsyFlxgKDIvbhSc9rp+
3t4g+N/2UrxeaGxeEJaoKQI4ZmHzMmbBmeUNsdBzLCio0GCXNwyOwg3pV38VDmVLWNCuCMiOWDjt
Pae2nnfXztswuPH2xuG54YbR7VIiu908u9HQxEc3djp9+5Cw3e6ddPbPetu1aE+Tjx3DgdHevIQy
iJCPJqo5nLIELPBEqMWnclXOwLrHR4Rv6Qm2klRPjIwdi6PwCQNGds97uxzipLWDTMJrnOE+1Lx1
w7GcOo0XWOJS9xHDR+HLk+7z49a+gpMCge8TQbumk/U01Yd0K9MesHBspdNyI6e3Y8MZ7T5Bbec4
IMjpFhUvtUxDxJ56xeKuvWF224movUq0X209V0QRhCbhTB05F5zq96Ncx9i1thwLHFq1Tx0Yd0Nc
cxIu7MaatUyJDjNE0qhKjJuK6jav4LBz3hMLJ+ah+gfSian5c7MLC7HUBy7xZV/niasSqdCcxH5w
2+2EG3V+41iAbpWV85stwvuCUFdS/eKdL25Is9ob0XtxKwRsWH+JkO4Q58mLHlpo4/IWHJKXdxuX
vcRll9fU25sU8XPZ3bzsbl8qVpFSGxe34JC8uBULAupWeolaoHJgp03d0bX0XOZP6vLFtbTfqWPB
mpxxepeedzWOvL12hgrqUIwSpl5SKLTLm1+xsHV2w7VvmpdZix+HCpYleSFJhdUNOWnvob7kdHgE
rS2GKT3pJX3IG90TVTElxgcsnPbiRCTxY6lMFUedZOet0v16AQgaJ9Tl1o6CP7rXXZJedkrJU+f7
OsTSDuXgKCT89jlDNVViFmSXJAzae7XWrlMdx7Fr2Orj2W9GORNhwsNZCVVApcdt23jTlHzaokW/
lCeruwYFBzJG3Of6OVglel5tvyCwj3XJKjc6pY5VnO59oyYdr4VT01LNYWdPrIau9fvqPE1iKX2m
FoRzZxrm+yx3ORbQTjEL28QqyepM91kd1P7h1P8567kM09+PvujGlrWGduUp+r1W3sf/euNK4S7D
dqIIgYVzUXnPwubbu83LW5779uXd1qWVg0uNpFGTVqgTbyaH3t7ymnp7JyiIQL3XlulLSgBfl1ja
kGoyE8E+390RqLaBdiu/4E7eAnVTtYMQle9O6Q64DmfMQurUMrOBv6XsrdKQphYQThdtWEj2WXB6
6T7bpOMY7m3ez5KYj773L4zt45Y0JOMMWduOWaAunHf7w07y/NYNQEgr59ykT+Ja/JAFmReR27ae
m9LgL1g47ezZ2FU8dFLmRDhtpOmG7JVwcCxQFxSx1XD3GBnDGYqF9KlKzJZQ6vL5HuPUGiB9+6zH
bXbA2c8vbUbXh7kvZNaH3HKhbglzx/K/Y0E5hPvMnSHrUlOcrj5qoUuf8+dx1zWFFLeWexV1tgRu
67jfpzruxK2qE0WsfhdwYlMSJzKDCnJlFd2otDWLNs292pBcsVLeNR618ZY1eYQDp3TijuUuNmZh
RxI0jhnu/7aBI/yNBeHgxtkXFriuvZP+P/G5SgOn1H7YR9p6e7sVs3ALDiTz9NvPm+8+p98qktN9
CZSUIgKHm9Q7WLhJyDUr7NN89+3Nto20U01ve0krGZsipZd+K7G0ZSyk7Rq56i0DM2XmxVW6tGMh
ht31/Du2pa2hUirobYHYeTste9JTcSRoLwjaX3xFN/yczfQqtWajD0JP2YkrJc3asKzeggVppMue
lQMbv8Lh9MZGLx3XBSVee6N0LaErAaZCtip71Un3pa8thmzvxix0uPkxaxc6jY1z56purC9qrUJr
HbvTs7k2x4LIYlfAS2Z7rmzpfufYcVOozjNuuiUHZjzTD36rstX3lTECJ9ZIwX9RfQh4p39O7Faf
K69am6Kzh0b6JQvmfE1vnNodsIy905eL9zNfbgPNoVhbwCUolRvlbf5V6G2qfdcPYATP+e22brX1
Ck5V3DetySNezm+trRqXYwTS3vntPQtu7HwpFj1baKSA34u3vNm5J67/uQOEf9q9uN0WRzf3LGxf
EsbgcAMLO2/vtigT78SC6oXCmySmYe7gRuPdrWX+LyzwlR0bm4DwzsbbXvrdjX29ayyoHllowULc
CNqxLLRl2KYVonhk4qTjxpZkvAQGMkZeiXFxu8Ox+CcpmRsXsVvGggvdtHWWzBD1YhFiUi1pei9p
FLjNVCUVxtzPtu6GSaOtCyeWbJybRnIq9Pymb0BU1rfdOFEIcf+3rdCn0D9K8tZhMNW06eZxtNk9
C6ogsfoiI/WLQvKse997se3tVTtBWqiHfM+Cq2V7LgH245wPlfCtv7QR952k6jf7Wq5fFOLu+h5m
RKP38rj7klCvtfdP+800xompKecXYIF/FQu6nJR51W1L+8aUbqOdzI37RHia9HWax/pObZfiNs29
moyPZ090OVbuLYAVn3ZDXNeO0nnjHiU3/yELLoaJB4v57s6D/E+c7GMKiJYzjV3nLIwRMW5E7PRR
Yuxf3u5f3u1f3OxdPGSht/Pudufdncb7z1sCgai+/R9YeHd7z0Ly0vSSsbANCJcam1Dwvpv6wGsv
/f5m890vWOCUpAN1bt3dixvOBEg5Zz5E55iaIuETh20CfsdAwOE+P+MCBQL6jW8RUTv29e1zYvjm
S6a1OJd9eDAUn4YDb/r31liwxbq6SxCnnVBxOC4yqbWtQZkgbjs2uv3TvnEUW6rvuKepBAWAKCK5
8jaq0prPVrid4n3IgjVXN61ebNr5OJuTUOEQCCp8x23VdIkEgkosSCWeqHO7ZSzsnNjG/SDf6bOw
bXJa0zEnWseYtCDcOiXGbjTBat6cmrJX6zw/xph3XgBCrfPyqPWiiknXST5kYafW3a919+xX8/uS
KCbs73//orM1Ko2FXTvEtt2cTdctdF3Es5t0LNo1FJkSZtJ+unVxMMdDK1ViFuxOymDqE7Eg1m4c
1y7/wwIBfA+CZXuB8Py899wRcWZ42lH2SaEET1+MUQv2Lm73bTy/uH1BEJ5/YWHn7e3u+8+7H352
OGy9/9lYuBELetNjpJE9725SHz6n3t9pyDjcMVIIqsu77befv7DwsZv+eMPY/Hi3+f72ngVCbvui
t3N5Q27fvbx98e7u5bvPL4jzU1XJtMzIjQ5hNpwsvX0mUaFlhMYCX0ezORb2zrvgzHt2xQ7J4U4a
xSxc3sTj7W3Cerwb6mV1JcO4t5KISkewQGagBGzpQ2pNm7qwfdHeccPhYFTqtC9M01qK24lRMlrB
5EwxoLU0NueIk9owavosKA1+YeHYJhpOVRrEwrnNVFqQGwVq0m5DK1tKT3ZUF2TuWm4WYyceaqe4
OuK0MTJ4zySQg2v9voeg4PnCwq6GzSyoHHRe1lqvKtGLo2hffapo27Hv+jBsI3DavD43CeScQj/8
7lkQDvuWpWP1ftb3QfJrN64X5MKVzbT9iSuRBlEfKJcKpGmNBW6j2jsStFTPmAUnbGItdP5FEbkq
QPC/OCdUui/O1CHcMxnpFOyeS6SEkKJIXIgFKoLYuXnB+wd+YcdA2OP13e0e8fbuM3ke4QQj25SJ
97db727TRDUIiIVbsfCOqiFptPWWjT/vMkjaMho3G+9vkx/uUh/v0h8/w8LW297Wuxvb8+3uW/Z5
J+7efd6zI+5f3uxfIJY6lAMogAWBw85N+ewoA/T2nDQSC7cCCkYuunuXYmHXWNg67/cTzA6kYsuv
XSVkGbr9otC13p3aFNx8InNP5qWtaQUVvjYV0LHAq5TYuZkIk2GWWG6MBdV6zsFA0JTEpq3yTdnS
vpQJs6RUd9s6IWq6kmb1xO257/BFu64tpyLOrL2mmSblW2NBdQGnsG01S7N+F+3kGUopSrlpC/ut
7rb65517FhwOat2cqWOTlLLChKoAbZ9Z1rWJxV013kn17efHGi9qrW9r0cta+BwBdgILVgpPbf6x
Rmlg49b+MdF1s2fxv3XmXKrE3v5p+/lpZ9/Gnuqmu5yea0GnTZYo87u+DbfakNG60Fjq22105uXU
TZ9JJCc4f/W0yYe3rqW/afk/Zsd2sq8SQLTbKtMzxTPq4v7DvbN+tTrtOrO2b75gV7oi9sU7RgR3
Zs8E0osHdWHv42fCklh9/u7uhY3nb+9evL179fbu+fu7nQ9324T0+9tNIyJF6n5P/sdZWIS//3n/
/efnRDUbm+lef/fzxvufkx/+kv7w8xZff3+z+/7m+fubV7x+uN39IO629K8aOx9u9j90d961tt+2
dt71tmzPm+8/k9LVm5JO05+bH3629wit3tZlb1tM4fS79ipDbezc9IdMOuzwT0lKw4VwSDq7ak1s
MpgJZsWnhXqHeNu4aG28lU0wCpxn6Zp2ElkmkLrScsQ2H561dkBYX+xsMNQmVed809b4MXYZ7pdT
kjQ9zf6TZkndhtjWmQkSNy1rE0+aQjKXt+0CQ89UrKUuo+TbVvKyLVQvYk+UVt9Vawz6XZH+SjM1
38L0WcTYPHWjxbHU6TJlQkzuQ8FJ5+Vp9+VJ98VJ69Vp+PI0fHEa7UuntTXVcmp66di+ojmO7ktS
7qlklVBVvW7tn0UvT1svT1rPT9ovrLMhBCRENZeUtv4/AfZSU0Jt6w9H+4QuLCCMuZnW4jANLxnD
1/elbSgBXa2B1JOyx8c955y1rJrapAPtHbf0i4Oz7isC+Kz38rynN5fk+Ztd49Gel/In4kc1SMaw
/cK0EGPrQtlbnLqWJterls7Ndw/8wosfPr/4ePf8Xe/V+9tvP3z+9sPP377/zPiO9x9/fv4D0Xu7
8/52+50j4ib94fMWIf3+DoKef3jIgpqoGx9+Tn38S+rjz5sfPm+/pwr09t/3Xrxn570XH8Dhbp/v
fvx55+Nfdj7+197Hm/2P3d0P3d333f2PcIdVuTUi0GZ3anAxqE3g807ladNsvmk5KOjYsBmBi17c
R7U5lG3JtluxcNkjz2xowq5tsR1Xyef6BUd3Tw/CIp+q9EsWtvogbKn52XWWX8n8Fyx0k4aDdUo1
7lnYPotn2faUOXvPxUJ3XzRFW2ehDVyJbIhNMMl9OBY4n/v8tqvWawQOnBt106jXQ8QU70r8s8Mv
LKiZIxvSktgTbi31x2DhtOV02n9n4eVJ21hoPT8jbz9g4dQ1XaXHHAuvzm5ekmmViCC0w/YvT9sv
T6Ln4GCdBPW01au/TVu3fEcZu2czhjocfsRkvKJ015TYpnm9bbVEzMYaC5vqjXeU7qxublu7b1f5
v8tRjIXIVJBYeAlr592XCvubX7EAbkT+vjsiX+yzINMtcDR21PRo68/Lu99d3t6z8OpPt9/+ePvt
x953P9z+7ofPGh/vAOG7D3fffvz84oc7opSUvvf+du8Dqul25+PPux+hgA95/bz//u4Fg7JyqXCV
QIICas3Hz/sfb59/vH3JeN99xfjQe/Xh9tXHu1cff375w19e/PBfex96ex86+zbYcp/C8a5ngzd3
8TAJZ+jFys3+FevR0XhLdVAHrN+nksWWl6dkXCC9OpoHVLj2WcDpn/esvFo9PTNrQPxctjffth+A
IBY4nLHQ+e8sbF+o+yQ3ZGPzktqkA22e973/uRL7nj3l56pEPE2eV7AdsxBxejvaCXZJ5sVYoKa3
9s87Ntp7nPx5lNJoWZBb98zanvhZ9yMUx4Ks65k1hB0LF24aXdciOXcaGw0FxinlgNF5ISLaSu8W
28ZCx/kgqwudh3Xh1fnttwohNKEIfXHeeXUGR+0XStdK7Gl1sN10qpzFtn4m07VqgpRSElDE2g2J
lRj39kIyXo1NY+S5kpgm4xTPEmMduy0IsC4lxspBb191gUvoGAs9Y0HlxkmdHasmWzrQjWsoufHC
DLKGSsnNy4tbBuYCvl5e3r66vPv2gUb67t9ufvenm3/QuP39n+5+/6Mbnxn/8MPdqx9uGS9/UFQ/
/0hW5/Uzb1648eHu5fvbV/b6Um2o2/TH2y3Y+eHupX33ux9ufvdD77sPne/ed3/3ofe7Dzfffbwz
4n7+7kdwuH35p5tXP2p8++Pn3/342Ui5ewmDH35+8f6zNBuvH/TnSyzGuzvGPtrsXXfvbWf/XZei
s/cOE624VU8YC4+RNxZ2pP81di4Vt2qXvZX14P3+uQ1YOG/vXmiwt913HZftLUQ1jb791k0gOha6
9yyQb12wbTqnz7FsemVLREhfOaMBDpKjcmdEb+elvFuwexHtXABCy7xJBw+FOt2zLVFWOychFLy4
IJt1nl8SzNEmpcQaXA5PEU1oGQh7zsWrRQ9lt2oC9FnYRUByT+TFYqfv/Lt6EV9YAE+ORTh13fSH
tcU6/10jGQ5ErDTeniKw862NVwrFrjUtlYhsVVvH2s7GgvJ52+WcfUkXnYxAiAu0Wh+k5XsWdmIW
uqbrWrvOFFzcm2Kx8NKk0XeXt99e3t6zsG/SayfuB/Z+yYJElGPh1Vnv27MukW+jxxWxE+3qAQu/
//PtH/58+4+8/tvtH/50+49/uvunf/v5n//tL//y5//izT/8ePsPP9x+S9B+JGKV5L/94TNx/kJo
3Lz6ePPth1vC+9sPlJI7Ptn78fb5j7dWa+5+B1M/9H7/Q/f3Hzq//9D9w8feHz7e/P6Huz/8+Pkf
NX7+9sfeqz/1vvvTzXc/9n4Hhn/67DD8Hf/08bMJtnh89/Hnb40OytD+u97+u87z950Xpr723+rR
7+Km30LKZxvAcrP3rrd32SG78rp7Icct8y6no+eyb8/x+UWb8eJt++U79sZ+ejYMBPMjO+qn6cFJ
3CJRoIDkbCzIXMOXENNmVp56Ww9Y2LZ+l+tUEGzPZfaDvbfR3tv2bnzOXR3O4qTPQvScxHspFl7Y
aVO2NC5cbPeE2JkyrQNh12YhbeblzoKh7fB3LOz0Wdh9yMJpTxrJfu27T1q4cNLFNnOrp/p94z3r
aSuXnrF9x2QbWZoocix0HQuE3I7NHDn7fF8XCFRyuLHQdkVBzF64rKWhjqJKQ6zwYUGTnpyzsbBn
LLywEvBCe7tBa/H66vyGAH51wcAvkPYlivZdF8Wco/qlMQ43+/32KeM7IDppf3fW+85w+B2fUBQM
q3sW/unfb//53+/+5f/7+Z///fM//VnjX/78l//z5//6P//2XxABGn/40x1EfPex97sfbwnvf/jT
X777kewtEL5j/P9svWl3Y1eSJPjvKltSRDC4byD2fSMZIVV29znzpSulIPZ9B7hEhJSVlTU1f2Aq
RQJvfw8AI5TVPT9nzPw+kFR1n+MHBwSxEXS7Zubu96JuCIMwtus6cnsb6d3S91vmYcs8ahrHTe2o
zjiu68cN47hhHjctXjasnfp8u7nYbRt7TW0fMGwBIHgIYbJXsxhVa1dir2bvgRrKxuuS9gZ5W354
W5nvyBuA+npVMV6VBQgV+wkLoIy3Zf1NScMC+4qLPxZhSdoyi1dYD7eutK0rXC62y4iH7fL9K67S
DJXbBA7MS4XlYojbb2G1IH6kEkulBMEAADIUFmDqqaghzHg3Vp8EC1cG1bIyAqV7iTlxWuJjn9L1
O1ERSJs3V9qbK4BUUQPTFeJEqnCGVKTxtBtzrULVlsUf/eGD4gVhHIJa/3aT6t8Jgv4TFvirnzYo
8BGxKeBLLr3+SdTIjzQXrwQdlOs/znd+fNgBLzAVdb+mupln+4M8lUAGOTx/LX+UAAHrg6Yy9g/C
49+oYuBPfpvsW8pX/Dm+z2KzQKwBcvWt2OTXoo7Ues4rH7Rt+T9CnL9mh4vFxn8QXDxDQJy1hEEI
/I9nLOyVDNFL+kssnHTNE2ChYx23zSNEyzoBKTSd44Zz3LSP29Zxyz6kdtIBin1cbzv7LWuPuDD2
AA2s8ISMA0TsNPSdFoCg7bX0w7YJcJ22jdOWftpEGBLmadNiNMxTEsd8t7046JqHHd75uOOc8NWB
FPuwZh3UrMOafcAruHT2q9YWcrusb7EqpQEF8urmDhiqKqUwgcOriv2KRgb6zdjBPa/wcT0ADlyE
S1J6KusA1FZJf1s23pY1AGG3vNgp/7p99TcCgTiiPYdP+Q4+pWr/Q9VWqy54h/8suVTtEqaowoKw
w3+RXsw/iEP5Vn713ZUuTkoXVQYIzCnGGIuNHmPzQrBgqGx8g4dc6YIFIEJ7rShMnuob9UIvsYCH
EAuMP7CM8PCEBfX8ZEPJdgqGzbEPUAss8ggWvhHBL6wk+lw1bVXHn7zA5Bde4PXvpIyz/af59p/u
t2EZfuL6/0rq/H+Q5sI/SFPyW5HlyFXovdd4AyyszekU+Llp/yCTA6QG8UoKelL5pGMSymbpdUsY
Ybdk7JZMyXxiQWyCr5G2rwAQYoEqqGTy/3LFeCXtM9VQw+24QrCAAiD2/sfDLoDA92Zsl0xwIsh6
5wUWTjsm4oQ5DyBg0TZPW/Zp00GcNG3cftIBImxg5KgNIBALey0Lkma3ifXcOgAQWs5Ryzlo2uCC
PSzykFuS28DXSds8aRknLfOEEDADLSvQtAMtO9CwT4md+XbrYa+j7bd1POSgA1iBTYwDiiuEdVB/
gYWavVMxd6vmXs3YrWl7de1AcVZNf1MBQOhZsD7gylvoK5KUgSTfvnp4K/GmvHhd0b5ljdd4XV4A
BUDKTlU7qGr78DLlX3dKf3tdWrzBb8EyFdAKIGZ+WzX/UKVDeYX8ZLMPksy//I75qT1hQbonuqx4
DAAKcPhOJfYVPvMFs4LSSOhJGWdhme9K/N/hH6cykPmP9dZHBLJizuCTcJFXPEIDIsacOXylsKBe
V/kjzecFWnjfO0tFi352S7DwVmQMDQL9LEP6JuQFrtKyMnNxlgIOq5ckCDYItn6cb/3Tr1v/xALU
GxYfSBZ4//9lM0r3jQj4Lb7/ORGNj+InhQWpo7IHNxdQUOF/ozhL8v8VGQHSCI8CX+tM1ytjr2Tu
lqlk4HPpQaTuQaolOhYbLOhbsgx+w24X/i+m6CtNYeE1By34QYEHX//TguKKlplY4KuUzJe8cNax
zjp2oO0gTltcsc9azlnLC7W9AGRSxyEQEB2EI+Hute0dJGHL2m/bB22XWJDLw46z1zb321jnreOu
TcXVMsg1hBI8iAWUBdreWWcZaHnA2l5L224/7HQgkxa7XWOva+53ENYeMCX2Afg6aKgA9bhkijrI
Qt+vPhzW50DZUcM4qC2Q0lBo+w2bta8KkGLC4+zWFgflxX55vlee75bn2+U51NSbqg6ng+s7uLEC
I7OAcjvkPX89rM63Sw+7+G0Nn61vzL+tLL6t6ix/lfXtikn5yn+EsVVifHcF9aLxEqqmIqYeqqYM
BmHgxzclXWke6LHtkqBG/DIsADiF67aiDyn0SVb4po92DwvaT4pQ5N9dMuR/SitKL0mzo4s8MHxR
xydnu5y8drWAaHzNPFyIDbn/9p8eoN6xwm/DQv5psSPG+RupdwECqrvHIMqY9qqSr2r4ajWm3/zT
4i0g8E///hpY+OmB+o1Ox1/bBUd8/4JlvOcH6M+3JXLcd0o0SmOU/U02TGUI54N/f8EOXpplNH5W
XPO1t1f6tk8BTP6nEOWDfF5sl/D8GmKLbE5q+OZKWED6C0ABgtTgs49Yaf7vTGBnu2zulA3E2xf9
hWDXDnadYNclIrhum8GWAyBEOstgxz0lKYARsM7bp133pAd0IP8txOEGHWCK4zbNBa8DArAeuOyA
ZfTDpoZ1/kgxDp687Qa7q1B3FSQcXNDBTkcjCjoAgrXftQ+61kEX1GP5ATIS0pFwoZ0QyP/D+uIE
uqsFM6If1jVQg8LCXl2MBq7XYfkXB9XFIZZ9hs4SVlXfps0x9kkH+oGQArBwVNMAhJM6mEIDFiC6
3la1rar+uqZ/W128kvrANuHA1ckPwQJ4BHJLLhdvQUxMftgZnQDhFQPw2cZlSd8p4WM3WQ3mr4CC
ubr8RizDd0xyQwbGTFUMf+MbQM3HApa1khSumVoLlaXCHS+wQLoB18CY60QEe/pcbFXD4pU8hCn9
Agvf4m4/zWVBnssMpKY6X0IEmq/VNwVMwQIePt/606+v//QrlOcrJcB+UnMpmsKCDDYAuchkyHvA
gewgrkdKPex1zlWFzc9V+TyxPkO1qgIasPD2BRYAky2WIDZxpVYAExDYFiC8lY/6NQuMDGEN9hck
5623FQt3fq34AhyB62ULd5bOMiX3SyyE+w6j54S6dqjjhDt2pOdFul6kt8SVcM8NdC2IqEDXPuu7
pz2HSQ4XgBu7NpAS6DqnHSfQcc7aNtTUSU+ia9GDtA3EKVwDcNRmgHrOOh6AEOosz1oush1csNuz
AYTDnn3kh3NMNFlHHQagdwIf0XGPgTiY7qZ51NCOG3qgbZ7Rj0DRqcxnAQr0IWFRPjUAE/2oDuAg
zIM6yMLcpb4yDqv6cc08qhlHNRgZ6wSOvq7BzuzXKM/26vpuTd9tmNt1tsXf4skBn5pJaiAcdNAr
V5WKpTL/d1jAZ1vxP2T8g3Yr1l7FAsvvchUyaUbYrzdhXrCOSXVI/0YVc4QamPBSAHz9v2PhSlhG
iAaZqVJF0CHPKXD4VtrxQJxgQftPWFDKn1iA5GaqA3oLBPCllnflNF9/eF6Nn1wqjepPmugrkMvD
a3p8PJayjViQ3sRmQG6DhQ/ztz/dbyFEKdHyCO98o2aP1VCQLPgqyYEFVcrgY+HmhB22r16gQN4b
P58SPnnrLUnhmRdEJFtbVXvrCuLHYOObSxb+a0TZFknZ4KSQOAsIqm+lPo//yMu+c2zoRgdOpOdE
+m5s4MUHy8RwFR+s4v1lrM9fhft2uG9FcDlwggP7rGeedc1Qz5KwASJGlyAKdi38NtA1T7tmoGcF
e3ao74T6brAHCNibcEA3QSCi7UGAgVwOu7w8BgQEBYImCwE4iOkAHwELDkABZgEWjhsaGEHoDERj
BkAfflsEV0gfR7Qw5iEoo0ERdcTKFYtXh6xQASPmSdUI1M2TunVSNwnhFp/zuKXubBzU9f26fgBP
1NC3avMd9Tx1Y6e02CvTsu2Vkd7GPtsfus8F+I+IYdli797eojfnP3SvbB5UrH1cls19fvKgjIWw
A9SahRx+VTG/K+n+gl8iFrZKamXzJ8de+9mlUWvxnpQfb30saM9YkGqwtFTIC2CcVyW/8K6e6rXS
PAoLPwoWWPL99dWHezznqw9s8JGeQBM/ypMTEeZzxQYrwAeOVeBRW6p6U2bxmTKPQ8Vz32v7thf3
B4/AX/+Nl1RKYDpdUY+qWVEdsQsmiqUEXjC2ypoKrDkMWfa3S78DwmuxyWq136LpIxy28GGSnckO
b+AW/fcMNtFYKiQQcClVd5kLpY8DFiq29HCtl33n5MRDJEYuIjnyUuNlerxKjZap0So5dOMjOzFy
EmNGfOzEECMnNrSjfSvWt+IDOz5wEkMvMfASgFLPivTMUBeJagApkYEbGXqAwxkw0rWCHZvU03XA
PqGOG+64AWow8A511wkSXuq65BRiQRCh2KdLxmFVquOctmE6jEAHLwFIGoG2cQafTmNiH7bgSkSt
tYEF47A5P2wwjQUIMO/2qR9WqG6H6/ZZ3TytG9CE9B1NnZU0lnyR9vpRQ4csPGjqe435fos0BCm1
V37Yr+i7JR3pfSDpvcOVH5c6AqZ+p2Ig9qrWdpn1qx2ixjgsm4jjsnVUMWHe2Rmpwko8gG5eVRZb
7LZTg8Haq9gq0xow82miDWUcXmIBK+fOh4UkGBEnaaCwwBEpMAJ9NEyoQEwyx+RS+UEyxO806TsI
eM+rX99e3e9UwHQMZM6bn6Cd5uQd1YoCA5YMAuFKqvo/6UJGfBvwU6qbCQvD0TgZo3qt9BXf3pxA
+NPfdn562JXHcl7CJzhT9J4pKIDUofJ/S+5gfWOrouCgSZXPUEQsukh/JeoIf87riuq9wscxtlTl
XPTqVlm1HnSJB/EUGv472yVVf2CV9RUWkIr1qmq/qjmAA4jjCQupmZueLTOzVWa6zEy89MTLTFaZ
8TI7WcuPTmbmZa6X6ZmXmrrJqYNITdzU2EmNnPTIyYzV/b0scDR0EgNiBEiJDuzY0IsOPQgwLOBY
xoVB3DB0V9dFRDpuCOzQXSIUIiTnFRaetJYPBMECVBaJ4LQNgaQFuzoQd0bQKeJwRUcxSCLw760F
EcEeB+u0sO1nDCfYtKNNJ9pwQxssnNLRGBRmUEqEgw6aOIFFIhwWBy16E/wK7mO/rB3IUn8ocNir
GAdVa7/CK/tVXu6WdbnFAmT2gBrBwlHJOLwyDsH7dQ1E87YOY/srrr+q3G/VFq9ri906cuD+TZnx
Fja/onO5u2I3doMF5sMb0WDI/x0CbUGD6WNB8ytabAuyy/aHH++/FYH0WnmKD9Tk1DwfGDsfDCyG
uyU8w9+2P/xtp/Sw/eFhm/IeKHh4KxQALlDGWZEC/Y6MMRCVAAJeEVgoseeOF1XkpQqhUvYnL+z8
+OvOn/62+9PD3hXeMFu9/jSdv8uAl2+uxEwBC1fzNyUfC2/Kc8Khoore9GVqwkdIQRpJFTaSXrPN
NN/CelLGWwI1cBkBO+9IN5nx4WFXgLCPBaqiCaiBO50CDPRRpaACO7/+PRaQ6vmbdW62ys6W2dkq
N1tnJ8vcdJWburmZk7v2crerLOJmmZHIXi955ynus8xPV4XpY36yyo+XmZGbkkgKy8THS0SUGsyN
DLxIn0E4dJ0IsEBELMNipWkiul6AKY3EFiz0nRPaE9dXR+IaAqKyQAqB9uKsswh2FSLEjxBKHqtV
bTfQ8856eCpDehYsCJ+0bGAh2LJDLSfcAhCcWNMJN6wAi2ZWoMW2OyVZbQ4snIIjmlqgA6VnHbe1
4/Yi0NTwq+OaBiwcV+0jiUOBADsgSP6qicsNFkygYx//grJxVLFOKuYJrlzph0iJ5nyrfr/deHhV
/n/f1h9eV/+2DRTUHnZq91uVf9+q/LpV/nWnOodb2a5w2fexwCkCHwtbIh52rxg7T1iANfCxAJnE
2tRL7yy1F6JJrZbbUhHa5Xwm0v7ftz/8+87Vr9sfRMn89AAs+Dnz4cmViECigGcD/fUGC99WFt+U
F3+ocFxZNL/BpjDLO0IieJM/3u/+6W97wMIHjdTgvwHOAr3azOO9ZcmUgnObHPfAxK4sBAsLwQID
RKB4RIXfUX3GAsc+n8TVNj95c6/Ey90Pc/y/dsuL/aq+V1lgXcLqpD46OjhO3Nk7VRqHJyxkbr3M
LdLbw/qfmzHJ89er/GxZwI9TNz11MlOXyX+DWEks87frHLADBF2vCjePxZsv+WtAaZmZemmQy3SF
S8ZslZqtU9NVcrxMjLz4EH7EiQ4s0VdmtGdEu3a040QBjY4V6dJ9wFmEek6w78KnI58DtOcWg4rI
RNqHxJUEoZE6BsRYCM6FAsw8k8cCTYggsEBHbwYRbTPUsYItk8KsZUXaTqRlhZqMM6R9XQ80QA06
4IB7njaQ9gaun7Z0en8aFogl7Qw/1uYnNf2w8nDaAGSME1jvKuSQflC3YKt38WnzR2NXLvHf4S01
evaTmnFc1Q9Li6PSfL82367e71TxT/91uzZ/U3t429C2GovX1YdXlV9fVx7eChCk4c5yn99ooJaW
FZK9D7rybQpsX65Ir5yFWW7ULbOaBA3wHRmBTdUtf6RTxm/UOr+ZatsCFj7cvyUK5qJqFtsf5tsf
FjvQSyr/fx/ywDmD1Z6H11cPr67m3wGJ5adWiKrBck3exTv88LAlz481f1u0ysYOa1IponDa+6Af
fNAPP2gHP1FWQf9vlUAQczpiLvIik+TV5W8Bu5mvZXMBe0BUREx+/Bd2y/Pd0sN+aXFY0Y/wT6kY
RzUby9FuRfqtJVlAWM3DiyI0XNkVfYvAB/iEhfStl76BCgIWCASQAhK7cL08v/bylE8M/DZ77eZx
C4BwTSwwblaF23Xx4xeEoGOZvQF3rDPXK8bNOnv7JXuDeMzM1hBgqbGbHNsSVmJkxId6omfGu3ai
a+FKom/CfcQG9O/Rgc8gsBhBSf5Qzwz3jTDcOh2HHabiwqWlIsjf2lINc0NEE7DgBtp2uG1G2ka0
Y4VaegTP0zJCBAIAQr0UaJlnTUNuNKNtRqCln7VoQAId08dC1zxs88bT+uIU2qn6EGjZJwBRA77b
UIZdylMsPe1vSlVbHPrV91jLMo9UzbYyB44OKnAcD3vV+U5tsQ29hGhqrxsap9ari1dVbZvPwyVr
v2rh38SSkdLAFZNF3aohXkNXFd233GlC9cvxDBll/4PaVyJ0ACJQcggL8o4AgU6BPSxNOtqQ7vO3
PykUaEqxAwi0q1cUOTsl42U1SfTVAuL/7Y/3DDhiFj/VHAu9zGs11kIeoZraoRfAoo3EvseC/7Y0
36Ykm++w78liEV5394O2/5N29JN28iOCJuit7xSE71RBqUw5t0fBIwKP1VdDNhdQL70tWzsgAq75
94elX49L9ydlfMigg/kR2LmKVOcAj2oo7KiGAsSeAoXELjXY8762zN06fYvsXWau19nrL7nrL4Xr
x8L1ushlXzBy7WZuiAWIpcLNknG7UlG8ezz/9BVYKNyti3erwsdl/qObv3Pyd17+4yr/8ZFxh/ia
u33MXq9gOhhTNzVxCIqBk+y7yb6dGtpwH8mhAycuWFhG+qqiK5qKNS44cXgQ1y9b8RYnTJoww+AL
VrSEULrw6QjaECneCtcgt7Hsd6wz+O4mEltcvAQLyB1wkxVrGQhgAezAe3YtVpJ7DMABN541NYWI
YNuBxThruYEmB7c4oNIwJayjJq6zwCvTKQZ7hRssHG2wwP+UNM136xrtQ33xprb4rqYh3tQEC9LL
oA0XayA6gf99agb4xCrk9OKtqKNtNSpf8vcMgutVx+1bKdK+oWjnAAOW6B3iQpdc0tXowpZcbgsQ
NokhKNhggW7691jgcgoFJVgAEHZKSjhpT3CQHhmdBVUWX+tht/ywU7rfKePKfK+02MMtH+7ZcVBj
YJQr+gGcFKiBkxWL7bKmChE7T3Wksr53xdglHMTF4L1VuLlgp2zBWcP1gBEOyg/HKq7u90rgiMV+
ydijoYNwtXFPxH7Flvr2f8YCPuEXvPCYul5ByaRnWMC/5m9+y998hfIpXK+ggoACKqi7FSyDBJSS
RwcBXAALHx/PPz4WP6555dPj+We3+Nk8/9k+/9k9/3lZ/HlV/Pnx/Jev5z//vfD5a+Ej2GQlDLIC
LiioWLNCuCpSIzsxsON9J973YqzorqKMpRgNG+KKEqvvRhhORHgBGglYACIghEKs1jpB6V+whdFd
QfCfDVw1bQUPDnt+BAnUdQGKM5BCywy3zEjLjLWteMuMgxEAGaiptiVkZEN3Bfo24CAqSw/jUU0t
1HGBJlwG2StxpVlvS/DKSdM+AhzYNOd8yCFHEI2Tug6vccTGH+OgtoBY2kXUFzv1xdsaLAM8NYCg
kV9UT5CDhQu/ulhRobEDSKu48L1ziSUUaWqQ6NU0CIJN8Cu/qMtswX//SveDiaokkAoSwa7c5yl2
rp7uIJZZ6kiUPUjdD3MGXr20SdoNHN5KY32H40O+Sd+9eti/uldxUJoflhcQioesCbBZ/4Zvnuy2
TQ0vKz+eszSX0Pbodk2+GfivknFYMpDbu1e+XsJSf9BwWKAgmh4Qh+X5SWVxXNaOrh7EF0gACxJq
fmmvbOyzEi6Gomyo2Gef6NkvxCdebOwmxsvkZJWaEA652dcC2AEi52aVvl1m7lbZj49+wEFTL3lA
BLmAAglYWJ1/XF18erz47F78Ylz8Yl3+4lz84l38sjz/ZX0BLPzyFaAofAJ2lkUyyGPh9hFuPXut
YgnQZaduZsLCVGropgZecrBKDtaJwTreX0E4RWk0zAjLU+LEoYh6ZqRn4Ra6BvoCHwuh7jLY9kLS
zjuA3RgtD7vWYZf9i5Oes9/QT0AcyG0kfNsMUxpZ8baV7NgpJjwjxKeS8m+PcDgj6KivRGXp4a7L
B3bdEIxJh6gBsgItTltBO51I8fawZR2wwSHDXU069NM6EGEojgAWFBz264uDOjkCkkkC12EWFByw
+i12KrgkNIiOqo+Ft5XFrtReuDKLYN5ma5VzIK/ERL+WTJPeh67KklKu5zKuVsVNnmvULcxqJjZ+
tUe9YTGZySks/gitmIIFus69kravyjKb1dt/wqdlVkKVcQ6uFselOZLz8OoeXumkrCFOBd0cUGEJ
lNUAsh7LqiCjh52r+V55gSenycWTE6f60RVj/4Py+wK3CjyahZzfv9L2ibiHw9L8uLw4wZ35Dvme
1XvYExDtEcj8xPDmWQOs2qokjjgEcVTtJyxERm6YmebGhsv4ED73MTN5zE5X9MLXq+TNKnWzllil
EVJcTcMa3FICFYAFUUfnd8TC5S/e5Z+N85+14mfjHIj4s3v+i1f47BY+e8XPy8KnZfGTQObTlwvw
yN06D7oh43i5Wzd/4+RhSaYeIjdaZkerzGidHq6Tw2Vi4EI7xYkFMzq0YyMIJJNYIFk4ihfokZmc
kE/PWNgHCgaezDiZRzIiddAEFmxqp44VhmHv2PGOnQQWEC0j3LLDwELLfsKCCnBQqG1EIMPaOuQZ
bLvoNKBAV/YchHJc145ri1Nab1uaHRwgOWmBgFi/OqNVN1UvD4g4llCj7Id1DaqJwb0ebPOx8c3e
N6dH9ujKpQ8ODwLuqGo7HCbU98q4RFbArXMEi0XFsuor6dJ0eKox6nDcnF0UaGzLSr7Jc+QbUABM
SUhi+7mt6qhXulpdFafss0Ss75cFDmVtryzp6oNIccqmSkNEGEjL09Li+Gp++OHhuLQAChABma58
XdFfl+UNixUitdG532OFh5Tik5f8YPZ+mO/9+LD34/3Oj3PuQbhS0FscXWnHJY1wEyBIaEdq3GWD
331yin5cNo6ILNgK/bBqwVYfkB1IE2wVvcBCcMC+MIVHz0PEB0ukX2rkZiBapsv4bBXH5WQZJ3e4
iYmXmCxTs2UaPoI1pTXd9M2qeLu+uPtyAV30i5X/pOc/GYXPlgJC7qOd/+QAC4jzn9fvfvny/pev
73/+8u7Tuvhpmfvk5T46uTsrf2sVbuzitXN+7RYnXmG8LIxX2fEqPVqmR14SbmIEjWTFhnZ85Bej
hCxsIIK52gE0XFBDpL8KSi8v1PEOuyYHnDrmQVs/7lrsViBvmcxM4HDLiLYMqKNE00g2jGRdi7ac
aMuOABEd6aT3xKH35SW6eEU8LRER7OikJGinNiQTLIYO7XRSXyA4zSXTjPARJxxEdCClwoimHZL2
txpKl7kvjkGeCF+wx8dBEZ0t7wY3GCJ2G/phjXHAaSs/WGWq6ocVrG/4t5oHVXOPDhFwAEGw9LQt
SntLYQEQkD22cNyvK+AUym9Zt5mxSLM9DugqWbJ4WuR3/IVd6i3kAq6uuwKEAwABsl+CoKjoEqq3
Yu69wALS7PCKQDi6Whx+mJ+UAATjuGKeVFki264SpJzy4qZIXTZFMr33wAtX8/2rOZO2YiBw5QQJ
fwXxo8FWwFwciMIB7nAjsHZamp+WF6cV7aTCnD+QFrbCAs1ICUwxD1Y0hPrEjuRDO6gQCCKTAArr
eU6VMxIEgt8C67qxnpPoQ6vYiZEbGXkR5N7QDzadR0REcopYpqcehE124rIGew1P7eQ+mvlPCIvx
2c5/dvI+L8A7rC9/+fL9P//2j3/57R///OV7/rgq/nlZ+NkpfLIKd2bx1jy/sc8Bh6l7PlkWJ8v8
ZJll148vlJ46AGNcut7xEa7I6IhQQ2wIi40rHqghOlhxzZem3nHP2u+auDxq66cQ/6xHOWFAhpNX
lmBBjzeNRMtMtaxM04x1vGjbjbadSEc6IMII6iWiPTvWd8NAQV+w0CcWIl2YCC3U0oJw1nDlTR36
Cp8hB6hk7jdISLoRYsEKNgw1lMVhXWn8BQEQ3N7k9VPubzIOuUmEQNhrGbtNNUnFkIErPw7q5nEN
ecJ/LkNm2neAiKqs6koRSeYDAlvcn6tzL7nsAdyWvjnVDpMc+f8gMQdBqLVdYWFPHDed9U9wB7pa
QilIsLQKEHbpT1m9V3jcV5fUNmo9J4kAC0eEg0ZQcGVGouJ2vBBFIF5xtyJFs5op+yKpuw790AR3
jMOyEShpAaztyGrqLmoe8cXG8YeHkw/3p1f3gdL8rGKcVa1j6B9psu9QI/E9gA6OSw+Rqhat6Sd1
+4jKShcNpgkWfEPxvJen7wUGyzP2pySgh7sOB436FgeQ+l4QySMR5kwFI8qGshuTlgHcbmbk5pC3
02UW8unaydy42Vs3d+dmER+BhWX+8zr/87r485eLP399/5e///Ff/uO//fV//ve//sf3f/168a9f
Lv/vLxd/cS9+tt79bL//7F7e2ucz+3zinE/c4tQrTAk06W646amdnDASLEM5iaHFGDlsXgzcBN6V
jFRFe06M7tujnlETU11biA/Wm/eJdGWd79jRthGXSHbtTNdJtN1Ex0HEuSC4IAIBmlS3+jD1drRr
gI/CvIRbAUcswp15uLMItuagDOILH13XOWrDqjv8JKUmzJ4IxFLTeGIEOAhAA0wRbpghXjeDsrmD
hqJl7jW0vaYGZ71Xne/XFkcNTVHGgXDEUd0I1K2Tqn5U0VhOr1tw69zTUcUSzUzjTAXnbLXvqtqr
6uI1jDn35OpbVSQ/R6pE7SC9F3uVB1DDXoUz7XQBHKDaaOySMsuaKuMguFzDAgMCpfmeXB6UF0dV
47BqyJKrq2WcASCotPezWmAL4JQY0CpqC9U2AAgXXJXaDkUXh4qPagbHJuvmYc0k6eBRUD54hhKf
ds/vDlChHVzdH179ilSnOqrqx1WTwKxwJPU1R7IpII8rxklVC9a0YHWOTwxAJtBKxOYBQEqEUiw9
YeGg750MlkDEaX952lsFestAzw1ADPet4MAJ4JYubgFY3FDPB4WM2wEskl1dKzlwoWSoZybrxHhF
Dz5dZa7X8BeZ21Xu02Pu0zr3eVX4vD6HQAIv/Mvf//u//q//69/+vx/+7e8AwuX/8/XdX5fv/8X9
47+u//iX9fefnfcfvXe3y8ub5eXt+vxmWUTcesU7N3dtZ6/tzMxKT83M1M5O7cwYYaVHbnroIVIS
eD9+9L1kz00wHLl0430PgUUeWIhhqe8Y7G50zWTPSYMK23DQdqorlV6OKTrS8rBiXTPWNRh9M963
VMRoWBaR3hyICLYffC8v476HbNVZQdZ41QiWBEdq1W4mtvlCDT3UMCJ1I1TTg3UwixFqyxBI2zpo
aPtNnZv+qg97ggViRAIuAzY8WDVPKzpVAXIANNEwwR2ACXKJmzu49VV7W9OAglc17U1d367znBOa
8fLigBkLWjGJher9fnWxpxpVZeUITMiMl7HPDCSPHFzNIc6Rewel+4Myy5j7pQdWhwhJgEI7Ijz1
Y2oVxr6s/3tEqMChrOHG0wpHHLfUXiqZV6F7JdCQ3vP96vygtsCfcMS/CLoLRuZ+l0wESlI+hQ5l
T8pBB36ZGn8RQISnUrZFl04cTzTalVFkSNAAfFzl/rg8B3zEUyxAImCrk7JxWjEPX2Dh2EeBe9rz
JOe9IHPeCQ9sEMFZb3XWxY3LoMLCBhHyX5ZSf8cSTeWmkHvDJQ34aJUYrZLTdXK2Tl2vM3df0rer
9J2XvVvmP63PP3+5/OXrD3/+jz/+5T/O//I1/5fH879+vfzr4w//+uW//tt//Ld//fsf//LlvwIv
P//2/eevP/z893effoMxL955xY8eL++8/I2bv7YL1y5j6uQnTm7s5cZLCVzxsiOXMXTSg2W6v0zh
vfWcpIID0AHi6DuCBQbeNiIz8DJAdBdAsNM9JzUgphJDUI8TH1rxroGQhqAFHkQkARPQxFCL9ufR
vhbpzqPAQteQSq8tk+pmyJ/ghfuwpJFhnYnLZiDzIagaerShRxpGsKGx69fmuGygY3HCtm0etPRD
MEJDP27KrCCnpIzThsG5kQqSanHC0E7A/nTlJqfTq9yycVDT9tjs07blDBN14M/b6mKb7kBhgWs4
dzlV7kEKe2U41v8DFvZlbVdxwCWdyvwE1MAa6b1g4f6wPD8CEH6PhROI/DL5gjPwNSzXhhI/xAJZ
SdsVA463gcX8tGoflYxjvvTTARGaQNsQwhI3XRJeKCvzzrYyQISX49+7wcIReQSyZ6HG5sk4Mhtw
WjXOatpZlZ/VUekBa4jCAq19BUuKefSiphroe2f9JQhdUICcZ3sLqjg6pK4463hsWvWUiFqG+gwI
J446dP3/NeQEtDTnVPvLaG8ZG6wQ8fFjfPKYmD6mbr4mr1eJmZOcsWeXu13m75bnH9eIzJ2bhHGG
a/jn1bu/rH746/qHf3n8x79++eNf/v7Dn3/7/pe///DP/+v7P//Py89fLz+vERcfl5cfV5cf15d3
q8vb5cW1e3HtXcK5T5d+TBzG2C6OrcLIkgx/CjctaZ8eulztJauR0unRKjta5kZL3qfvpiUIkKHM
VrFX7kIEZoZ4OPjCVoHfJqkS9dhgHhtosf4iMQB36CAO0E2IjQ+Lwoy8CTNuIKDHzuiyFwj4i5BE
tKlHBRdnbPPBRC/OOtZxSyapyCPGKXfIGidNBotUTROcAicYqGCtW5xWtVPBwglH2Z+wsICy2uXI
n77TMHcAh+ocsUMK0Ogcf4eFe2KB7Vqm2aFI7kPWG5+xIPeH9sZCOkccsUZ6f0RG2ABBYaGiqWLO
CaFKlwqdgziqGEdCFsBIADq/rCDD2k6gaiItAZAzzm7hzWuqXKBcktpsdUSpYzI46LiRYbhS5Z6s
fcHCUQ38aFCwVfyGHfACDAKYWDeCNT1SMwIE6fysauAyWLNZ4AUWRCa98M7CBV0s+F7Ib/Wyzxuj
JLYDHZc7DoAUBRbcGQ5isBQ9rOZOKcJjfiy5A6i/jgAUw1V0tIqN10BEfLqKTdz4xIXdhulOydhS
euLhlsjEis/s1K2d++QWfvaKP3vnvywvPi8vPq0FAr9dghp+/vv7X357/8vXd5/WDMDhbvXu4/r9
x8d3t4/v7x4vr1cSy8uZdzlzLqb2xcQ8H5u5oZsbeowRx2izY49ZzQa3jUjzRy8zXgEF2eEqO1hm
ecVj2iNwz4nH2d3ZqjBd0cWPPMAhDSD0pQkyhF3S4v37+ABAWKSGZqKnp/pmCnzRs6JdEwHG5JBJ
20DEO2ako4dbi3BrHm3r0Q7CiDHMcNsIChZOARAWu2QDFCdyOZR+ShCRUDgo1dQDDT1c1UJVrHVa
oIbQZZ7QkB1JuirSHkiwQtu09gQLO9X5nuzmw/pJeY+llbnnj4UAFyLpfSwcyaXCAnW+iLGXWIBS
Oq3qJ1URaVWNUZGQ2qbqIxyVpdhVEQPLcpB+WtKR86eilCT0s6oZrCJLtSASvqqJIdLADhLzXdqZ
ByALkAnIQ47Lz8HpL25RJHaIBS4LDFX1PeQT4iHaWQWflRGtWcGqjgUkWEP+z0M1ABDrCa6z+vSE
hdAAXOAIBJZh2csm+3rMWF+LcjOCy+hxUo7Dcn33tO8EBu4xdxZYQRkBkr4wSMFTgxOR/oq3DLwI
zOzIi42XsbEbHTlRqUFJIVSib8OGBwdWeGRFx0Z8aiRvrNSNlb6xMtcWnDI71Ner3M1j8e63Cyil
j1/oHW6X5zce4vIOWPj6TuI9ECGgYNyuL2+8i5l9MbVUt4IiauJkpxK84qbHAIKTna04jjsRLAyW
ueEKqZ4ZOsALUINfqZHd3PWaBd6Rm8ftVFPkF3IHqJBYeEgMtGR/kR5aqZ6R6dvwHfGeHe9CWVkQ
ZnDl6a6FSEGVgTg6WqyziPcMyi0/IKsABz3cMUEcYXy8bZkY6Sgs4EYZL2QdmGOEZw09VjeidXgN
PVTXz/zxQoYgAjQBNUVNBX111DRhuveQWjW15AIvFhZMLNpHTKH5YVWiIi6YC/gzFpTthR2AGqES
qywClXmgPD8u359W5mdYaSX3wE3wp8i6Ux8LwMviVBleOl+xDyVi4aykBzdYCGywcCZYwOUx349x
CI0E11CFl0dwZAW/Cm2woFTNqYz+qs28B/hz6uAgvId5oIp3BS2Et8o7k3TwEmUtXNYiFZgsvn8O
6vtYWJxVzICw1RMWwn3QgYMcjmIx58wDlncHpJDo6/GBqcbkkNghbmpzzgZuAJdD56TPHTdnfTvI
qiOng56mI+QhTmTgRIaOYIF97ejQi8jktozPuWEWeUhDsCHhkRce2eGRER7pkZERndixiZ2YusnJ
MjHk9qLMZJWbrnPw42MbyZybefmZV7iGp14Xb76c3/12eff18u4LQfHpt/efgI41FRTQxOqTl712
MjMnjYDvZpkLT2gjclMyRX78Egt2eggzDuzImOI1G47ZmVsYO8WRSzgIy2SVmoIBGRrJoZ4aGqm+
kcUD+3a27/BXkFjgDl7nj9m+l8Vlz04NjE2Y6RFHsFJDOz7gBihQBixMuKPHht5mpETyX66H1Tgi
bmwb4ZaRaFrxphVrmpGmGabEMoMyUhJoquN3fDioOKrLylkXFQEv2bBADcd1W36k/YSyOuLabqr6
P/Qz59IrltI28iu6kkBVC4KMKvPTykOgugAGT6sQaQvhJi2AVbeqExEEArFwLGYZqy4takkPAAgl
PcQfxVOIgDnFKo23hEfVDNoNgcNRTTtmCRRvFX+RFWnYkZoJOASRuhIQNiewM3Vnv+HuN2wWmQFG
vJMqxA9BelbVISNDFSMMHJX1MOGAW2ATnrAAmODPsQIC1ee+c99TQIj1Vwju8WQRxkoOjMTQkho+
l/HQwA4O7dDQ4eXIBRwCA+sMN3JqTur8fVnqZRcPaCWCx46Q1S4iOnIFccIvEF1dXF+F+2tchuBB
BiugLMSnxUtYZ0MrPLQBouiQdaqYMrx9VoqSQys5NJMjKzVCMns5f91+lLnx9fntl4uPXy8//Xb5
CQDBj8vsrZe5c7K3TubWSd+6abnCW6bAlJUDIkYOsJAbSQxXmRELU1liwWUALFM3O3PyQ6cwVJdA
xDI/WkuskmMrPeabSQ2s7JCskUPa90gNyqHwluHyfLxGFIZLAhlPOHGFngBJzmLRaPSV77ZAxInR
yu9r9J5nceVHJ9pjNTjasZMtJ9Gy4y071rKjLUuag3aQoyA65883HHEqXlu0Ey+RWnLFOq6bJw2H
3T1qpPsj+ErkXo1AOK3Zx1XrRC6JDpFAWPZPQEA1PQREgBoqD3SjZIr5KVZjwQJ+VEl4JrIE4jwg
K3OgYmH5BR0gwmUjUjZPlF9gkcfkO6nJqk538OSCFRbwJnkkS6RuRpHSFR0BOIQqpqznJoCwW3d2
YZk5Qo9X14K1Rag2h3pE2iPCFSNSNSMVU17X4I3VRbiOt7QAIiCZwA5nld9hIQUi6LlSO+KwNMcw
hlJ76TsJf3wa67lLXkD+D+3jgXkCXhg6p0OiIzwgCiiMe3YMKBhwRkgNS0TwK3boAARHhhlc6XO5
vivh0N0yTNLhk4dxt6HHbQvgnb70NXq8c6TrRgHVHgwv0GrTnIKzuK66OaTxZJ2frAuI6bpIUHwp
3nFuNn+3zt0tMxxHd9I3LiLzcZm5Y+CW3LXLbUqUTC68AB8+ecyP14AGIjt2JWAlPFZrEX0nP/Ly
lEngBbc4/VLEy01XWNsJHNx55Khf5YGIvpUbOIj8wC7iziPvYrI6n0HgfcnP3OK1V5hJTL3CBE8I
1FjpniFGw8JlZkhkIRJ9Q5YXrjBxXLJY58U6dkzmRhJyGWvb0bYVblsR2W8ebWkIuI8wZJWMoJ80
F6fNRUBcxqnIJ/+yacGMH9fnJ/UFN3HUjdO6LNFI/rJwhIqahJRtiQXQAbFACJxInNaRxgzirs6c
PFGSSWSV+Ah6fKAjXNEjFS0CZVLGM2ANN6iOGNYpO2VABEnqGM9ZI9ecEX2EWEjKzmeiwSh7avZp
3Wb/mm1H0BbuDJjMo1U9WtFiXPw1MSB4RSNaNaMVRoLGBJKMz3ZGUjOo8YALIvrFXp6+l2BDAQnp
EgtY7kYrACTVxWq8kvFpKP8lcjU0dIGFo4F5NLRPhjZ4AaQQZn6yXAltHCdByNQQhyWczb/SxwJ1
ETSS2ArVF5bmlxNTu96Gq/BgddYXOPQ92Zvme3nxIPTmnLvAkxMLFuxtbkRhkx+u87yEvV3nZ+v8
LafEcx/X2Y+rzO0yfQ0sABFu9uM6c8t+B27xd2HMPCz++Yknm/JgCtbkBaa3+AVu01ulh0sEVni1
cQ+RAzvMHouzZYESyy1MPAlcYf2qMLLyQ5OCauicD53LsXc5WV7MVgBC4RZYcM4Z7vnUO5+455Re
dmFo53pGbmAzhnx4fmznRlZmaMaHDrcHDmjVE32HzNizk/6ODztBY+7EVPTcWNdOtrVEW4vTlcN9
cLvTWUc/a2lBvzOukTj8oE8HTM5abJcDKQFJZop/1mkNBldmizwix4+csmPFpZX1ySqS9uFE7elo
aOpkEmXeESfSBFGjuUc0v9D8i0hNi9QWkcpDqPIQhG5HWpJBkORYnGFsLSDrqHp/Wn3g8l7X2H+R
Vww1jCATWBd8mad10BZkHrCwOGpApD3AN0XLD4mKnqhoCXoQ4Evnsl81w8ILsYqZrFkBVrd0oCxY
1wI0WXg2cf3V5xmMDEWRFxSrC7GaHHup0ZLNJraclrHBkr3agYv1H1gICgQCvPw9FqRuHyeVsycr
g0NOnJUWT1KdjECz4GNB7UrgkEMUwdM2oIgAt2cssFrlF7XEsPTADrDnVgyKYkAspOBzpS8AqZ/p
OQiqFOTwTLYU3a6yd2sfC9cuQgGBWLjxCmov0gzGGUBAniPJV8TCWDTSBOEpW80JEEAA2T5bq7TP
j53CFNTA1kaOPXE3P3UABMT51MHtRVwZO+eT5bspwns3W11Cv93g5WBz7OLMFiy4ggVGEZwytCnA
Rm4RT87nJ7jg92VfuQtbwYoWCcvLwtpLLQs2H3+vVHq9lB/4EODQjUTHiHcMJbo4PABjzoFzkAU7
49yg0TakKgUgPARbi2BzftaYc4NG0wg2dCReqMFJwrMmD8vi/C0PxdUVFkIiRQKwqDVyykljcVSf
H9bnPJyk6SuxU+h8GbU6ZrLRUwRrWriuh5HkCgvlhzCECqWUJuMTWLQt4Zr7wAYL4YaOh+DlQnWh
BqiaGpZxP45r1n5dYzumNo/W9Xh1kawaCKz/9AI1OGVjgwUjVjXj1f+EBW2DhcXvsCCiSGo+yzjP
wfA
gitextract_jwvrvi_c/
├── .cargo/
│ └── audit.toml
├── .envrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── .typos.toml
├── .vscode/
│ └── launch.json
├── CHANGELOG.md
├── Cargo.toml
├── LICENSE.md
├── README.md
├── ci/
│ ├── macos-install-packages
│ └── ubuntu-install-packages
├── doc/
│ ├── config.default.jsonc
│ ├── notes.md
│ └── update-readme.sh
├── exampledir/
│ ├── decompress/
│ │ ├── test.log
│ │ ├── test.log.bz2
│ │ ├── test.log.xz
│ │ ├── test.log.zst
│ │ └── testlogbutwithoutextension
│ ├── demo/
│ │ ├── greeting.mkv
│ │ ├── hello.odt
│ │ └── hello.sqlite3
│ ├── encoding/
│ │ ├── utf16le.txt
│ │ └── utf8.txt
│ ├── formatting.epub
│ ├── mail_nested.eml
│ ├── mail_pdf_attach.eml
│ ├── sqlitedb
│ ├── tar/
│ │ └── test.tar.bz2
│ ├── test/
│ │ ├── github_email.eml
│ │ ├── hello.sqlite3
│ │ ├── mail_with_attachment.mbox
│ │ └── test.mbx
│ ├── test.djvu
│ ├── wasteland.docx
│ ├── wasteland.epub
│ ├── wasteland.fb2
│ ├── wasteland.mkv
│ ├── wasteland.mobi
│ └── wasteland.odt
├── flake.nix
├── rust-toolchain.toml
└── src/
├── adapted_iter.rs
├── adapters/
│ ├── custom.rs
│ ├── decompress.rs
│ ├── ffmpeg.rs
│ ├── mbox.rs
│ ├── postproc.rs
│ ├── sqlite.rs
│ ├── tar.rs
│ ├── writing.rs
│ └── zip.rs
├── adapters.rs
├── bin/
│ ├── rga-fzf-open.rs
│ ├── rga-fzf.rs
│ ├── rga-preproc.rs
│ └── rga.rs
├── caching_writer.rs
├── config.rs
├── expand.rs
├── lib.rs
├── matching.rs
├── preproc.rs
├── preproc_cache.rs
├── recurse.rs
└── test_utils.rs
SYMBOL INDEX (169 symbols across 24 files)
FILE: src/adapted_iter.rs
type AdaptedFilesIter (line 7) | pub trait AdaptedFilesIter: Stream<Item = anyhow::Result<AdaptInfo>> + S...
type AdaptedFilesIterBox (line 10) | pub type AdaptedFilesIterBox = Pin<Box<dyn AdaptedFilesIter>>;
function one_file (line 12) | pub fn one_file(ai: AdaptInfo) -> AdaptedFilesIterBox {
FILE: src/adapters.rs
type ReadBox (line 28) | pub type ReadBox = Pin<Box<dyn AsyncRead + Send>>;
type AdapterMeta (line 29) | pub struct AdapterMeta {
method get_matchers (line 51) | pub fn get_matchers<'a>(
type GetMetadata (line 78) | pub trait GetMetadata {
method metadata (line 79) | fn metadata(&self) -> &AdapterMeta;
type FileAdapter (line 83) | pub trait FileAdapter: GetMetadata + Send + Sync {
method adapt (line 87) | async fn adapt(
type AdaptInfo (line 94) | pub struct AdaptInfo {
type AdaptersTuple (line 110) | type AdaptersTuple = (Vec<Arc<dyn FileAdapter>>, Vec<Arc<dyn FileAdapter...
function get_all_adapters (line 112) | pub fn get_all_adapters(custom_adapters: Option<Vec<CustomAdapterConfig>...
function get_adapters_filtered (line 150) | pub fn get_adapters_filtered<T: AsRef<str>>(
FILE: src/adapters/custom.rs
type CustomAdapterConfig (line 27) | pub struct CustomAdapterConfig {
method to_adapter (line 282) | pub fn to_adapter(&self) -> CustomSpawningFileAdapter {
function strs (line 75) | fn strs(arr: &[&str]) -> Vec<String> {
function map_exe_error (line 155) | pub fn map_exe_error(err: std::io::Error, exe_name: &str, help: &str) ->...
function proc_wait (line 163) | fn proc_wait(mut child: Child, context: impl FnOnce() -> String) -> impl...
function pipe_output (line 175) | pub fn pipe_output(
type CustomSpawningFileAdapter (line 201) | pub struct CustomSpawningFileAdapter {
method command (line 227) | fn command(
method metadata (line 208) | fn metadata(&self) -> &AdapterMeta {
function arg_replacer (line 212) | fn arg_replacer(arg: &str, filepath_hint: &Path) -> Result<String> {
method adapt (line 244) | async fn adapt(
function poppler (line 326) | async fn poppler() -> Result<()> {
function streaming (line 355) | async fn streaming() -> anyhow::Result<()> {
FILE: src/adapters/decompress.rs
type DecompressAdapter (line 41) | pub struct DecompressAdapter;
method new (line 44) | pub fn new() -> Self {
method metadata (line 49) | fn metadata(&self) -> &AdapterMeta {
function decompress_any (line 54) | fn decompress_any(reason: &FileMatcher, inp: ReadBox) -> Result<ReadBox> {
function get_inner_filename (line 80) | fn get_inner_filename(filename: &Path) -> PathBuf {
method adapt (line 98) | async fn adapt(
function test_inner_filename (line 124) | fn test_inner_filename() {
function gz (line 139) | async fn gz() -> Result<()> {
function pdf_gz (line 152) | async fn pdf_gz() -> Result<()> {
FILE: src/adapters/ffmpeg.rs
type FFmpegAdapter (line 38) | pub struct FFmpegAdapter;
method new (line 41) | pub fn new() -> Self {
method metadata (line 46) | fn metadata(&self) -> &AdapterMeta {
type FFprobeOutput (line 52) | struct FFprobeOutput {
type FFprobeStream (line 56) | struct FFprobeStream {
method adapt_write (line 62) | async fn adapt_write(
FILE: src/adapters/mbox.rs
type MboxAdapter (line 38) | pub struct MboxAdapter;
method new (line 41) | pub fn new() -> Self {
method metadata (line 46) | fn metadata(&self) -> &AdapterMeta {
method adapt (line 53) | async fn adapt(
function mail_simple (line 140) | async fn mail_simple() -> Result<()> {
function mbox_simple (line 173) | async fn mbox_simple() -> Result<()> {
function mbox_attachment (line 204) | async fn mbox_attachment() -> Result<()> {
FILE: src/adapters/postproc.rs
function add_newline (line 26) | fn add_newline(ar: impl AsyncRead + Send) -> impl AsyncRead + Send {
type PostprocPrefix (line 30) | pub struct PostprocPrefix {}
method metadata (line 32) | fn metadata(&self) -> &super::AdapterMeta {
method adapt (line 50) | async fn adapt(
function postproc_encoding (line 82) | async fn postproc_encoding(
function postproc_prefix (line 132) | pub fn postproc_prefix<T: AsyncRead + Send>(
type PostprocPageBreaks (line 159) | pub struct PostprocPageBreaks {}
method metadata (line 162) | fn metadata(&self) -> &super::AdapterMeta {
method adapt (line 180) | async fn adapt(
function postproc_pagebreaks (line 204) | pub fn postproc_pagebreaks(input: impl AsyncRead + Send) -> impl AsyncRe...
function test_with_pagebreaks (line 258) | async fn test_with_pagebreaks() {
function test_with_pagebreaks_chunks (line 273) | async fn test_with_pagebreaks_chunks() {
function test_pdf_twoblank (line 291) | async fn test_pdf_twoblank() -> Result<()> {
function test_postproc_prefix (line 314) | async fn test_postproc_prefix() {
function test_from_strs (line 325) | async fn test_from_strs(
function test_from_bytes (line 334) | async fn test_from_bytes(
function test_utf16 (line 357) | async fn test_utf16() -> Result<()> {
function post1 (line 374) | async fn post1() -> Result<()> {
function test_binary_content (line 396) | async fn test_binary_content() -> Result<()> {
FILE: src/adapters/sqlite.rs
type SqliteAdapter (line 36) | pub struct SqliteAdapter;
method new (line 39) | pub fn new() -> Self {
method metadata (line 44) | fn metadata(&self) -> &AdapterMeta {
function format_blob (line 49) | fn format_blob(b: ValueRef) -> String {
function synchronous_dump_sqlite (line 66) | fn synchronous_dump_sqlite(ai: AdaptInfo, mut s: impl Write) -> Result<(...
method adapt_write (line 120) | async fn adapt_write(
function simple (line 144) | async fn simple() -> Result<()> {
FILE: src/adapters/tar.rs
type TarAdapter (line 36) | pub struct TarAdapter;
method new (line 39) | pub fn new() -> Self {
method metadata (line 44) | fn metadata(&self) -> &AdapterMeta {
method adapt (line 51) | async fn adapt(
function test_simple_tar (line 106) | async fn test_simple_tar() -> Result<()> {
FILE: src/adapters/writing.rs
type WritingFileAdapter (line 11) | pub trait WritingFileAdapter: GetMetadata + Send + Sync + Clone {
method adapt_write (line 12) | async fn adapt_write(
method adapt (line 49) | async fn adapt(
FILE: src/adapters/zip.rs
type ZipAdapter (line 28) | pub struct ZipAdapter;
method new (line 31) | pub fn new() -> Self {
method metadata (line 36) | fn metadata(&self) -> &AdapterMeta {
method adapt (line 43) | async fn adapt(
function create_zip (line 204) | async fn create_zip(fname: &str, content: &str, add_inner: bool) -> Resu...
function only_seek_zip_fs (line 225) | async fn only_seek_zip_fs() -> Result<()> {
function recurse (line 243) | async fn recurse() -> Result<()> {
FILE: src/bin/rga-fzf-open.rs
function main (line 7) | fn main() -> anyhow::Result<()> {
FILE: src/bin/rga-fzf.rs
function main (line 9) | fn main() -> anyhow::Result<()> {
FILE: src/bin/rga-preproc.rs
function main (line 12) | async fn main() -> anyhow::Result<()> {
FILE: src/bin/rga.rs
function list_adapters (line 14) | fn list_adapters(args: RgaConfig) -> Result<()> {
function main (line 59) | fn main() -> anyhow::Result<()> {
function add_exe_to_path (line 144) | fn add_exe_to_path() -> Result<()> {
FILE: src/caching_writer.rs
type FinishHandler (line 13) | type FinishHandler =
function async_read_and_write_to_cache (line 20) | pub fn async_read_and_write_to_cache<'a>(
FILE: src/config.rs
function is_default (line 12) | fn is_default<T: Default + PartialEq>(t: &T) -> bool {
type CacheCompressionLevel (line 16) | pub struct CacheCompressionLevel(pub i32);
method fmt (line 19) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method default (line 24) | fn default() -> Self {
type MaxArchiveRecursion (line 29) | pub struct MaxArchiveRecursion(pub i32);
method fmt (line 32) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method default (line 37) | fn default() -> Self {
type CachePath (line 43) | pub struct CachePath(pub String);
method fmt (line 46) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method default (line 51) | fn default() -> Self {
type CacheMaxBlobLen (line 59) | pub struct CacheMaxBlobLen(pub usize);
method fmt (line 62) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
method default (line 67) | fn default() -> Self {
type Err (line 73) | type Err = anyhow::Error;
method from_str (line 74) | fn from_str(s: &str) -> Result<Self, Self::Err> {
type RgaConfig (line 114) | pub struct RgaConfig {
type CacheConfig (line 200) | pub struct CacheConfig {
function json_merge (line 258) | fn json_merge(a: &mut Value, b: &Value) {
function read_config_file (line 271) | fn read_config_file(path_override: Option<String>) -> Result<(String, Va...
function read_config_env (line 318) | fn read_config_env() -> Result<Value> {
function parse_args (line 326) | pub fn parse_args<I>(args: I, is_rga_preproc: bool) -> Result<RgaConfig>
function split_args (line 390) | pub fn split_args(is_rga_preproc: bool) -> Result<(RgaConfig, Vec<OsStri...
FILE: src/expand.rs
function find_byte (line 7) | pub fn find_byte(needle: u8, haystack: &[u8]) -> Option<usize> {
function expand_str_ez (line 22) | pub fn expand_str_ez<'a, F>(replacement: &'a str, lambda: F) -> Result<S...
function expand_str_lambda (line 31) | pub fn expand_str_lambda<'a, F>(cap: F, replacement: &'a str, dst: &mut ...
type CaptureRef (line 71) | struct CaptureRef<'a> {
function find_cap_ref (line 80) | fn find_cap_ref(replacement: &[u8]) -> Option<CaptureRef<'_>> {
function find_cap_ref_braced (line 104) | fn find_cap_ref_braced(rep: &[u8], mut i: usize) -> Option<CaptureRef<'_...
function is_valid_cap_letter (line 124) | fn is_valid_cap_letter(b: &u8) -> bool {
FILE: src/lib.rs
function project_dirs (line 23) | pub fn project_dirs() -> Result<ProjectDirs> {
function meh (line 30) | fn meh(float: f32, precision: usize) -> usize {
function print_dur (line 51) | pub fn print_dur(start: Instant) -> String {
function print_bytes (line 62) | pub fn print_bytes(bytes: impl Into<f64>) -> String {
function to_io_err (line 66) | pub fn to_io_err(e: anyhow::Error) -> std::io::Error {
function init (line 72) | fn init() {
function join_handle_to_stream (line 77) | pub fn join_handle_to_stream(join: JoinHandle<std::io::Result<()>>) -> i...
FILE: src/matching.rs
type FastFileMatcher (line 16) | pub enum FastFileMatcher {
type FileMatcher (line 28) | pub enum FileMatcher {
method from (line 38) | fn from(t: FastFileMatcher) -> Self {
type FileMeta (line 43) | pub struct FileMeta {
function extension_to_regex (line 51) | pub fn extension_to_regex(extension: &str) -> Regex {
function adapter_matcher (line 57) | pub fn adapter_matcher(
FILE: src/preproc.rs
type ActiveAdapters (line 27) | pub type ActiveAdapters = Vec<Arc<dyn FileAdapter>>;
function choose_adapter (line 29) | async fn choose_adapter(
type Ret (line 61) | enum Ret {
function buf_choose_adapter (line 65) | async fn buf_choose_adapter(ai: AdaptInfo) -> Result<Ret> {
function rga_preproc (line 113) | pub async fn rga_preproc(ai: AdaptInfo) -> Result<ReadBox> {
function adapt_caching (line 130) | async fn adapt_caching(
function read_discard (line 197) | async fn read_discard(mut x: ReadBox) -> Result<()> {
function loop_adapt (line 208) | pub fn loop_adapt(
function loop_adapt_inner (line 215) | pub async fn loop_adapt_inner(
FILE: src/preproc_cache.rs
type CacheKey (line 11) | pub struct CacheKey {
method new (line 20) | pub fn new(
type PreprocCache (line 56) | pub trait PreprocCache {
method get (line 57) | async fn get(&self, key: &CacheKey) -> Result<Option<Vec<u8>>>;
method set (line 58) | async fn set(&mut self, key: &CacheKey, value: Vec<u8>) -> Result<()>;
method get (line 127) | async fn get(&self, key: &CacheKey) -> Result<Option<Vec<u8>>> {
method set (line 158) | async fn set(&mut self, key: &CacheKey, value: Vec<u8>) -> Result<()> {
function connect_pragmas (line 61) | async fn connect_pragmas(db: &Connection) -> Result<()> {
type SqliteCache (line 102) | struct SqliteCache {
method new (line 106) | async fn new(path: &Path) -> Result<Self> {
function open_cache_db (line 191) | pub async fn open_cache_db(path: &Path) -> Result<impl PreprocCache + us...
function test_read_write (line 202) | async fn test_read_write() -> anyhow::Result<()> {
FILE: src/recurse.rs
function concat_read_streams (line 6) | pub fn concat_read_streams(input: AdaptedFilesIterBox) -> ReadBox {
FILE: src/test_utils.rs
function test_data_dir (line 16) | pub fn test_data_dir() -> PathBuf {
function simple_fs_adapt_info (line 22) | pub async fn simple_fs_adapt_info(filepath: &Path) -> Result<(AdaptInfo,...
function simple_adapt_info (line 29) | pub fn simple_adapt_info(filepath: &Path, inp: ReadBox) -> (AdaptInfo, F...
function simple_adapt_info_full (line 33) | pub fn simple_adapt_info_full(
function adapted_to_vec (line 59) | pub async fn adapted_to_vec(adapted: AdaptedFilesIterBox) -> Result<Vec<...
function poppler_adapter (line 67) | pub fn poppler_adapter() -> CustomSpawningFileAdapter {
function init_logging (line 77) | pub fn init_logging() {
Condensed preview — 70 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,081K chars).
[
{
"path": ".cargo/audit.toml",
"chars": 109,
"preview": "[yanked]\nenabled = false # doesn't work in Nix sandbox\nupdate_index = false # crates.io index managed by Nix\n"
},
{
"path": ".envrc",
"chars": 10,
"preview": "use flake\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 337,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/workflows/ci.yml",
"chars": 686,
"preview": "# Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md\n#\n# While our \"example\" application has "
},
{
"path": ".github/workflows/release.yml",
"chars": 7830,
"preview": "# adapted from https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml\n# The way this works is a"
},
{
"path": ".gitignore",
"chars": 96,
"preview": "/result\n/target\n/exampledir.2\n/.idea\n/.pre-commit-config.yaml\n/.vscode/settings.json\n**/*.rs.bk\n"
},
{
"path": ".typos.toml",
"chars": 78,
"preview": "[default.extend-words]\nals = \"als\"\n\n[files]\nextend-exclude = [\"exampledir/*\"]\n"
},
{
"path": ".vscode/launch.json",
"chars": 2096,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n //"
},
{
"path": "CHANGELOG.md",
"chars": 2824,
"preview": "# 0.10.5 (2024-01-16)\n\n- return the same exit status as rg\n\n# 0.10.4 (2024-01-16)\n\n- add `--rga-no-prefix-filenames` fla"
},
{
"path": "Cargo.toml",
"chars": 2132,
"preview": "[package]\nauthors = [\"phiresky <phireskyde+git@gmail.com>\"]\ndescription = \"rga: ripgrep, but also search in PDFs, E-Book"
},
{
"path": "LICENSE.md",
"chars": 34529,
"preview": "I like the concept of giving back, so I settled on the AGPL as the\ndefault license for all my personal projects.\n\nThis i"
},
{
"path": "README.md",
"chars": 9950,
"preview": "# rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.\n\nrga is a line-oriented search too"
},
{
"path": "ci/macos-install-packages",
"chars": 32,
"preview": "#!/bin/sh\n\nbrew install poppler\n"
},
{
"path": "ci/ubuntu-install-packages",
"chars": 99,
"preview": "#!/bin/sh\n\nsudo apt-get update\nsudo apt-get install -y --no-install-recommends \\\n poppler-utils\n"
},
{
"path": "doc/config.default.jsonc",
"chars": 857,
"preview": "{\n // This file follows the JSON schema defined below.\n // If you use an editor that supports JSON schema (e.g. VS Cod"
},
{
"path": "doc/notes.md",
"chars": 785,
"preview": "## schema -> ui generation\n\nhttps://json-schema.org/implementations.html#web-ui-generation\n\n- https://github.com/guill"
},
{
"path": "doc/update-readme.sh",
"chars": 472,
"preview": "#!/bin/bash\n\ncontent=$(\n cat <<END\n<!-- this part generated by update-readme.sh -->\n$(cargo run --bin rga -- --rga-li"
},
{
"path": "exampledir/decompress/test.log",
"chars": 27,
"preview": "hello world\nthis is a test\n"
},
{
"path": "exampledir/encoding/utf8.txt",
"chars": 13,
"preview": "hello wörld!\n"
},
{
"path": "exampledir/mail_nested.eml",
"chars": 10167,
"preview": "To: submit.t4eseGWSvG1JST3r@spam.spamcop.net\r\nFrom: 2012gdwu <2012gdwu@posteo.de>\r\nSubject: Postbank Spam\r\nAutocrypt: ad"
},
{
"path": "exampledir/mail_pdf_attach.eml",
"chars": 574718,
"preview": "Return-Path: <ebay@southpole.com>\r\nDelivered-To: arne.keller@posteo.de\r\nReceived: from proxy02.posteo.name ([127.0.0.1])"
},
{
"path": "exampledir/test/github_email.eml",
"chars": 3358,
"preview": "Return-Path: <noreply@github.com>\r\nDate: Mon, 31 Jul 2023 01:34:57 -0700\r\nFrom: \"github-actions[bot]\" <notifications@git"
},
{
"path": "exampledir/test/mail_with_attachment.mbox",
"chars": 74808,
"preview": "From - Mon Jul 31 15:15:47 2023\nX-Mozilla-Status: 0001\nX-Mozilla-Status2: 00000000\nX-Mozilla-Keys: "
},
{
"path": "exampledir/test/test.mbx",
"chars": 2551,
"preview": "From \r\nMessage-ID: <55a23774-4da7-057c-77a7-ec390fed487b@posteo.de>\r\nDate: Mon, 27 Feb 2023 12:05:46 +0100\r\nMIME-Version"
},
{
"path": "exampledir/wasteland.fb2",
"chars": 182026,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://w"
},
{
"path": "flake.nix",
"chars": 3025,
"preview": "{\n inputs = {\n nixpkgs.url = \"github:NixOS/nixpkgs\";\n flake-parts = {\n url = \"github:hercules-ci/flake-parts"
},
{
"path": "rust-toolchain.toml",
"chars": 31,
"preview": "[toolchain]\nchannel = \"stable\"\n"
},
{
"path": "src/adapted_iter.rs",
"chars": 414,
"preview": "use std::pin::Pin;\n\nuse tokio_stream::Stream;\n\nuse crate::adapters::AdaptInfo;\n\npub trait AdaptedFilesIter: Stream<Item "
},
{
"path": "src/adapters/custom.rs",
"chars": 13664,
"preview": "use super::*;\nuse super::{AdaptInfo, AdapterMeta, FileAdapter, GetMetadata};\nuse crate::adapted_iter::one_file;\n\nuse cra"
},
{
"path": "src/adapters/decompress.rs",
"chars": 5209,
"preview": "use crate::adapted_iter::one_file;\n\nuse super::*;\n\nuse anyhow::Result;\nuse lazy_static::lazy_static;\nuse tokio::io::BufR"
},
{
"path": "src/adapters/ffmpeg.rs",
"chars": 6431,
"preview": "use super::*;\nuse super::{custom::map_exe_error, writing::async_writeln};\nuse anyhow::*;\nuse async_trait::async_trait;\nu"
},
{
"path": "src/adapters/mbox.rs",
"chars": 7986,
"preview": "use super::*;\n\nuse anyhow::Result;\nuse async_stream::stream;\nuse lazy_static::lazy_static;\nuse mime2ext::mime2ext;\nuse r"
},
{
"path": "src/adapters/postproc.rs",
"chars": 14817,
"preview": "//trait RunFnAdapter: GetMetadata {}\n\n//impl<T> FileAdapter for T where T: RunFnAdapter {}\n\nuse anyhow::Result;\nuse asyn"
},
{
"path": "src/adapters/sqlite.rs",
"chars": 5042,
"preview": "use super::{writing::WritingFileAdapter, *};\nuse anyhow::Result;\nuse async_trait::async_trait;\nuse lazy_static::lazy_sta"
},
{
"path": "src/adapters/tar.rs",
"chars": 3922,
"preview": "use crate::{\n adapted_iter::AdaptedFilesIterBox,\n adapters::AdapterMeta,\n matching::{FastFileMatcher, FileMatch"
},
{
"path": "src/adapters/writing.rs",
"chars": 2476,
"preview": "use std::pin::Pin;\n\nuse crate::{adapted_iter::one_file, join_handle_to_stream, to_io_err};\n\nuse super::{AdaptInfo, FileA"
},
{
"path": "src/adapters/zip.rs",
"chars": 9834,
"preview": "use super::*;\nuse crate::print_bytes;\nuse anyhow::*;\nuse async_stream::stream;\nuse lazy_static::lazy_static;\nuse log::*;"
},
{
"path": "src/adapters.rs",
"chars": 7928,
"preview": "pub mod custom;\npub mod decompress;\npub mod ffmpeg;\npub mod mbox;\npub mod postproc;\nuse std::sync::Arc;\npub mod sqlite;\n"
},
{
"path": "src/bin/rga-fzf-open.rs",
"chars": 984,
"preview": "use anyhow::Context;\n\nuse std::process::Command;\n\n// TODO: add --rg-params=..., --rg-preview-params=... and --fzf-params"
},
{
"path": "src/bin/rga-fzf.rs",
"chars": 2339,
"preview": "use anyhow::Context;\nuse rga::adapters::custom::map_exe_error;\nuse ripgrep_all as rga;\n\nuse std::process::{Command, Stdi"
},
{
"path": "src/bin/rga-preproc.rs",
"chars": 1633,
"preview": "use rga::adapters::*;\nuse rga::preproc::*;\nuse rga::print_dur;\nuse ripgrep_all as rga;\n\nuse anyhow::Context;\nuse log::de"
},
{
"path": "src/bin/rga.rs",
"chars": 5326,
"preview": "use anyhow::Result;\nuse rga::adapters::custom::map_exe_error;\nuse rga::adapters::*;\nuse rga::config::{RgaConfig, split_a"
},
{
"path": "src/caching_writer.rs",
"chars": 2677,
"preview": "use std::{future::Future, pin::Pin};\n\nuse anyhow::{Context, Result};\nuse async_compression::tokio::write::ZstdEncoder;\nu"
},
{
"path": "src/config.rs",
"chars": 16153,
"preview": "use crate::{adapters::custom::CustomAdapterConfig, project_dirs};\nuse anyhow::{Context, Result};\nuse derive_more::FromSt"
},
{
"path": "src/expand.rs",
"chars": 4070,
"preview": "use std::borrow::Cow;\n\nuse anyhow::Result;\n\n// from https://github.com/phiresky/timetrackrs/blob/1c3df09ba2c1fda6065f292"
},
{
"path": "src/lib.rs",
"chars": 2321,
"preview": "#![warn(clippy::all)]\n\npub mod adapted_iter;\npub mod adapters;\nmod caching_writer;\npub mod config;\npub mod expand;\npub m"
},
{
"path": "src/matching.rs",
"chars": 4596,
"preview": "/**\n * Module for matching adapters to files based on file name or mime type\n */\nuse crate::adapters::*;\n\nuse anyhow::*;"
},
{
"path": "src/preproc.rs",
"chars": 9561,
"preview": "use crate::adapted_iter::AdaptedFilesIterBox;\nuse crate::adapters::*;\nuse crate::caching_writer::async_read_and_write_to"
},
{
"path": "src/preproc_cache.rs",
"chars": 7968,
"preview": "use crate::{adapters::FileAdapter, preproc::ActiveAdapters};\nuse anyhow::{Context, Result};\nuse log::warn;\nuse path_clea"
},
{
"path": "src/recurse.rs",
"chars": 512,
"preview": "use tokio_util::io::{ReaderStream, StreamReader};\n\nuse crate::{adapted_iter::AdaptedFilesIterBox, adapters::*, to_io_err"
},
{
"path": "src/test_utils.rs",
"chars": 2085,
"preview": "use crate::{\n adapted_iter::AdaptedFilesIterBox,\n adapters::{\n AdaptInfo, ReadBox,\n custom::{BUILTIN"
}
]
// ... and 18 more files (download for full content)
About this extraction
This page contains the full source code of the phiresky/ripgrep-all GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 70 files (1.0 MB), approximately 598.2k tokens, and a symbol index with 169 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.