You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by pa...@apache.org on 2026/02/25 03:00:24 UTC

(arrow-nanoarrow) branch asf-site updated: update docs to 0.8.0

This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new f6eef612 update docs to 0.8.0
f6eef612 is described below

commit f6eef612709b64fb9ffe418611730aa76c643166
Author: Dewey Dunnington <de...@wherobots.com>
AuthorDate: Tue Feb 24 21:00:12 2026 -0600

    update docs to 0.8.0
---
 {latest => 0.8.0}/.buildinfo                       |     2 +-
 0.8.0/.doctrees/environment.pickle                 |   Bin 0 -> 1149646 bytes
 .../.doctrees/getting-started/cpp.doctree          |   Bin 62111 -> 61519 bytes
 0.8.0/.doctrees/getting-started/index.doctree      |   Bin 0 -> 5621 bytes
 0.8.0/.doctrees/getting-started/python.doctree     |   Bin 0 -> 36542 bytes
 0.8.0/.doctrees/getting-started/r.doctree          |   Bin 0 -> 27376 bytes
 0.8.0/.doctrees/index.doctree                      |   Bin 0 -> 30385 bytes
 0.8.0/.doctrees/reference/c.doctree                |   Bin 0 -> 1002857 bytes
 0.8.0/.doctrees/reference/cpp.doctree              |   Bin 0 -> 137471 bytes
 0.8.0/.doctrees/reference/device.doctree           |   Bin 0 -> 220289 bytes
 0.8.0/.doctrees/reference/index.doctree            |   Bin 0 -> 5843 bytes
 0.8.0/.doctrees/reference/ipc.doctree              |   Bin 0 -> 293763 bytes
 0.8.0/.doctrees/reference/python/advanced.doctree  |   Bin 0 -> 98171 bytes
 .../reference/python/array-stream.doctree          |   Bin 0 -> 43620 bytes
 0.8.0/.doctrees/reference/python/array.doctree     |   Bin 0 -> 87782 bytes
 0.8.0/.doctrees/reference/python/index.doctree     |   Bin 0 -> 6919 bytes
 0.8.0/.doctrees/reference/python/schema.doctree    |   Bin 0 -> 321638 bytes
 0.8.0/.doctrees/reference/r.doctree                |   Bin 0 -> 5573 bytes
 0.8.0/.doctrees/reference/testing.doctree          |   Bin 0 -> 155991 bytes
 0.8.0/.doctrees/roadmap.doctree                    |   Bin 0 -> 24007 bytes
 0.8.0/_sources/getting-started/cpp.rst.txt         |   542 +
 0.8.0/_sources/getting-started/index.rst.txt       |    26 +
 0.8.0/_sources/getting-started/python.rst.txt      |   426 +
 0.8.0/_sources/getting-started/r.rst.txt           |   286 +
 0.8.0/_sources/index.rst.txt                       |    28 +
 0.8.0/_sources/reference/c.rst.txt                 |    78 +
 0.8.0/_sources/reference/cpp.rst.txt               |    50 +
 0.8.0/_sources/reference/device.rst.txt            |    41 +
 0.8.0/_sources/reference/index.rst.txt             |    30 +
 0.8.0/_sources/reference/ipc.rst.txt               |    33 +
 0.8.0/_sources/reference/python/advanced.rst.txt   |    37 +
 .../_sources/reference/python/array-stream.rst.txt |    22 +
 0.8.0/_sources/reference/python/array.rst.txt      |    22 +
 0.8.0/_sources/reference/python/index.rst.txt      |    29 +
 0.8.0/_sources/reference/python/schema.rst.txt     |    22 +
 0.8.0/_sources/reference/r.rst.txt                 |    21 +
 0.8.0/_sources/reference/testing.rst.txt           |    27 +
 0.8.0/_sources/roadmap.rst.txt                     |   103 +
 0.8.0/_static/base-stemmer.js                      |   476 +
 0.8.0/_static/basic.css                            |   906 ++
 {latest => 0.8.0}/_static/doctools.js              |    11 +-
 0.8.0/_static/documentation_options.js             |    13 +
 0.8.0/_static/english-stemmer.js                   |  1066 ++
 0.8.0/_static/file.png                             |   Bin 0 -> 286 bytes
 0.8.0/_static/language_data.js                     |    13 +
 0.8.0/_static/minus.png                            |   Bin 0 -> 90 bytes
 0.8.0/_static/plus.png                             |   Bin 0 -> 90 bytes
 0.8.0/_static/pygments.css                         |   152 +
 0.8.0/_static/scripts/bootstrap.js                 |     3 +
 0.8.0/_static/scripts/bootstrap.js.LICENSE.txt     |     5 +
 0.8.0/_static/scripts/bootstrap.js.map             |     1 +
 0.8.0/_static/scripts/fontawesome.js               |     3 +
 0.8.0/_static/scripts/fontawesome.js.LICENSE.txt   |     5 +
 0.8.0/_static/scripts/fontawesome.js.map           |     1 +
 0.8.0/_static/scripts/pydata-sphinx-theme.js       |     2 +
 0.8.0/_static/scripts/pydata-sphinx-theme.js.map   |     1 +
 {latest => 0.8.0}/_static/searchtools.js           |   172 +-
 {latest => 0.8.0}/_static/sphinx_highlight.js      |    67 +-
 0.8.0/_static/styles/pydata-sphinx-theme.css       |    32 +
 0.8.0/_static/styles/pydata-sphinx-theme.css.map   |     1 +
 0.8.0/_static/styles/theme.css                     |     2 +
 .../vendor/fontawesome/webfonts/fa-brands-400.ttf  |   Bin 0 -> 209128 bytes
 .../fontawesome/webfonts/fa-brands-400.woff2       |   Bin 0 -> 117852 bytes
 .../vendor/fontawesome/webfonts/fa-regular-400.ttf |   Bin 0 -> 67860 bytes
 .../fontawesome/webfonts/fa-regular-400.woff2      |   Bin 0 -> 25392 bytes
 .../vendor/fontawesome/webfonts/fa-solid-900.ttf   |   Bin 0 -> 420332 bytes
 .../vendor/fontawesome/webfonts/fa-solid-900.woff2 |   Bin 0 -> 156400 bytes
 0.8.0/_static/webpack-macros.html                  |    24 +
 {latest => 0.8.0}/genindex.html                    |    30 +-
 {latest => 0.8.0}/getting-started/cpp.html         |    10 +-
 {latest => 0.8.0}/getting-started/index.html       |    10 +-
 {latest => 0.8.0}/getting-started/python.html      |    10 +-
 {latest => 0.8.0}/getting-started/r.html           |    10 +-
 {latest => 0.8.0}/index.html                       |    12 +-
 0.8.0/objects.inv                                  |   Bin 0 -> 22193 bytes
 {latest => 0.8.0}/py-modindex.html                 |    10 +-
 {latest => 0.8.0}/r/404.html                       |     4 +-
 0.8.0/r/404.md                                     |     3 +
 {latest => 0.8.0}/r/LICENSE.html                   |     4 +-
 0.8.0/r/LICENSE.md                                 |   206 +
 {latest => 0.8.0}/r/authors.html                   |    12 +-
 0.8.0/r/authors.md                                 |    28 +
 .../r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js |     7 +
 .../bootstrap-5.3.1/bootstrap.bundle.min.js.map    |     1 +
 .../r/deps/bootstrap-5.3.1/bootstrap.min.css       |     2 +-
 .../deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js  |     5 +
 0.8.0/r/deps/clipboard.js-2.0.11/clipboard.min.js  |     7 +
 0.8.0/r/deps/data-deps.txt                         |    13 +
 0.8.0/r/deps/font-awesome-6.5.2/css/all.css        |  8028 ++++++++++++++
 0.8.0/r/deps/font-awesome-6.5.2/css/all.min.css    |     9 +
 0.8.0/r/deps/font-awesome-6.5.2/css/v4-shims.css   |  2194 ++++
 .../r/deps/font-awesome-6.5.2/css/v4-shims.min.css |     6 +
 .../font-awesome-6.5.2/webfonts/fa-brands-400.ttf  |   Bin 0 -> 209128 bytes
 .../webfonts/fa-brands-400.woff2                   |   Bin 0 -> 117852 bytes
 .../font-awesome-6.5.2/webfonts/fa-regular-400.ttf |   Bin 0 -> 67860 bytes
 .../webfonts/fa-regular-400.woff2                  |   Bin 0 -> 25392 bytes
 .../font-awesome-6.5.2/webfonts/fa-solid-900.ttf   |   Bin 0 -> 420332 bytes
 .../font-awesome-6.5.2/webfonts/fa-solid-900.woff2 |   Bin 0 -> 156400 bytes
 .../webfonts/fa-v4compatibility.ttf                |   Bin 0 -> 10832 bytes
 .../webfonts/fa-v4compatibility.woff2              |   Bin 0 -> 4792 bytes
 0.8.0/r/deps/headroom-0.11.0/headroom.min.js       |     7 +
 .../r/deps/headroom-0.11.0/jQuery.headroom.min.js  |     7 +
 0.8.0/r/deps/jquery-3.6.0/jquery-3.6.0.js          | 10881 +++++++++++++++++++
 0.8.0/r/deps/jquery-3.6.0/jquery-3.6.0.min.js      |     2 +
 0.8.0/r/deps/jquery-3.6.0/jquery-3.6.0.min.map     |     1 +
 .../r/deps/search-1.0.0/autocomplete.jquery.min.js |     7 +
 0.8.0/r/deps/search-1.0.0/fuse.min.js              |     9 +
 0.8.0/r/deps/search-1.0.0/mark.min.js              |     7 +
 {latest => 0.8.0}/r/index.html                     |     4 +-
 0.8.0/r/index.md                                   |   258 +
 {latest => 0.8.0}/r/katex-auto.js                  |     4 +-
 {latest => 0.8.0}/r/lightswitch.js                 |     4 +-
 0.8.0/r/link.svg                                   |    12 +
 0.8.0/r/llms.txt                                   |   360 +
 {latest => 0.8.0}/r/news/index.html                |    17 +-
 0.8.0/r/news/index.md                              |   174 +
 0.8.0/r/pkgdown.js                                 |   162 +
 0.8.0/r/pkgdown.yml                                |     5 +
 .../r/reference/array_stream_set_finalizer.html    |     4 +-
 0.8.0/r/reference/array_stream_set_finalizer.md    |    44 +
 .../r/reference/as_nanoarrow_array.html            |     4 +-
 0.8.0/r/reference/as_nanoarrow_array.md            |    80 +
 .../r/reference/as_nanoarrow_array_stream.html     |     4 +-
 0.8.0/r/reference/as_nanoarrow_array_stream.md     |    88 +
 .../r/reference/as_nanoarrow_buffer.html           |     4 +-
 0.8.0/r/reference/as_nanoarrow_buffer.md           |    44 +
 .../r/reference/as_nanoarrow_schema.html           |     4 +-
 0.8.0/r/reference/as_nanoarrow_schema.md           |    81 +
 .../as_nanoarrow_schema.python.builtin.object.html |   141 +
 .../as_nanoarrow_schema.python.builtin.object.md   |    79 +
 .../r/reference/as_nanoarrow_vctr.html             |     4 +-
 0.8.0/r/reference/as_nanoarrow_vctr.md             |    77 +
 .../r/reference/basic_array_stream.html            |     4 +-
 0.8.0/r/reference/basic_array_stream.md            |    46 +
 {latest => 0.8.0}/r/reference/convert_array.html   |     6 +-
 0.8.0/r/reference/convert_array.md                 |   128 +
 .../r/reference/convert_array_stream.html          |     4 +-
 0.8.0/r/reference/convert_array_stream.md          |    94 +
 .../r/reference/example_ipc_stream.html            |     4 +-
 0.8.0/r/reference/example_ipc_stream.md            |    30 +
 {latest => 0.8.0}/r/reference/index.html           |    74 +-
 0.8.0/r/reference/index.md                         |   100 +
 .../r/reference/infer_nanoarrow_ptype.html         |     6 +-
 0.8.0/r/reference/infer_nanoarrow_ptype.md         |    69 +
 .../reference/infer_nanoarrow_ptype_extension.html |     4 +-
 .../r/reference/infer_nanoarrow_ptype_extension.md |    52 +
 {latest => 0.8.0}/r/reference/na_type.html         |     4 +-
 0.8.0/r/reference/na_type.md                       |   240 +
 {latest => 0.8.0}/r/reference/na_vctrs.html        |     4 +-
 0.8.0/r/reference/na_vctrs.md                      |    45 +
 .../r/reference/nanoarrow-package.html             |     4 +-
 0.8.0/r/reference/nanoarrow-package.md             |    31 +
 .../r/reference/nanoarrow_array_init.html          |     4 +-
 0.8.0/r/reference/nanoarrow_array_init.md          |    86 +
 .../r/reference/nanoarrow_buffer_init.html         |     4 +-
 0.8.0/r/reference/nanoarrow_buffer_init.md         |    49 +
 .../r/reference/nanoarrow_extension_array.html     |     4 +-
 0.8.0/r/reference/nanoarrow_extension_array.md     |    49 +
 .../r/reference/nanoarrow_extension_spec.html      |     4 +-
 0.8.0/r/reference/nanoarrow_extension_spec.md      |    57 +
 .../r/reference/nanoarrow_pointer_is_valid.html    |     4 +-
 0.8.0/r/reference/nanoarrow_pointer_is_valid.md    |   109 +
 .../r/reference/nanoarrow_version.html             |     6 +-
 0.8.0/r/reference/nanoarrow_version.md             |    31 +
 {latest => 0.8.0}/r/reference/read_nanoarrow.html  |     4 +-
 0.8.0/r/reference/read_nanoarrow.md                |    69 +
 0.8.0/r/search.json                                |     1 +
 {latest => 0.8.0}/r/sitemap.xml                    |     1 +
 {latest => 0.8.0}/reference/c.html                 |    24 +-
 {latest => 0.8.0}/reference/cpp.html               |    10 +-
 {latest => 0.8.0}/reference/device.html            |    10 +-
 {latest => 0.8.0}/reference/index.html             |    10 +-
 {latest => 0.8.0}/reference/ipc.html               |    17 +-
 {latest => 0.8.0}/reference/python/advanced.html   |    26 +-
 .../reference/python/array-stream.html             |    20 +-
 {latest => 0.8.0}/reference/python/array.html      |    32 +-
 {latest => 0.8.0}/reference/python/index.html      |    12 +-
 {latest => 0.8.0}/reference/python/schema.html     |   382 +-
 {latest => 0.8.0}/reference/r.html                 |    10 +-
 {latest => 0.8.0}/reference/testing.html           |    10 +-
 {latest => 0.8.0}/roadmap.html                     |    10 +-
 {latest => 0.8.0}/search.html                      |    10 +-
 0.8.0/searchindex.js                               |     1 +
 docs.tgz                                           |   Bin 0 -> 4054964 bytes
 latest/.buildinfo                                  |     2 +-
 latest/.doctrees/environment.pickle                |   Bin 1162153 -> 1149646 bytes
 latest/.doctrees/getting-started/cpp.doctree       |   Bin 62111 -> 61519 bytes
 latest/.doctrees/getting-started/index.doctree     |   Bin 5650 -> 5621 bytes
 latest/.doctrees/getting-started/python.doctree    |   Bin 37048 -> 36542 bytes
 latest/.doctrees/getting-started/r.doctree         |   Bin 27686 -> 27376 bytes
 latest/.doctrees/index.doctree                     |   Bin 31064 -> 30385 bytes
 latest/.doctrees/reference/c.doctree               |   Bin 1024262 -> 1002857 bytes
 latest/.doctrees/reference/cpp.doctree             |   Bin 140890 -> 137471 bytes
 latest/.doctrees/reference/device.doctree          |   Bin 226430 -> 220289 bytes
 latest/.doctrees/reference/index.doctree           |   Bin 5872 -> 5843 bytes
 latest/.doctrees/reference/ipc.doctree             |   Bin 299836 -> 293763 bytes
 latest/.doctrees/reference/python/advanced.doctree |   Bin 102599 -> 98171 bytes
 .../reference/python/array-stream.doctree          |   Bin 45864 -> 43620 bytes
 latest/.doctrees/reference/python/array.doctree    |   Bin 92221 -> 87782 bytes
 latest/.doctrees/reference/python/index.doctree    |   Bin 7066 -> 6919 bytes
 latest/.doctrees/reference/python/schema.doctree   |   Bin 314033 -> 321638 bytes
 latest/.doctrees/reference/r.doctree               |   Bin 5587 -> 5573 bytes
 latest/.doctrees/reference/testing.doctree         |   Bin 159780 -> 155991 bytes
 latest/.doctrees/roadmap.doctree                   |   Bin 24217 -> 24007 bytes
 latest/_static/base-stemmer.js                     |   476 +
 latest/_static/doctools.js                         |    11 +-
 latest/_static/english-stemmer.js                  |  1066 ++
 latest/_static/language_data.js                    |   193 +-
 latest/_static/searchtools.js                      |   172 +-
 latest/_static/sphinx_highlight.js                 |    67 +-
 latest/genindex.html                               |    30 +-
 latest/getting-started/cpp.html                    |    10 +-
 latest/getting-started/index.html                  |    10 +-
 latest/getting-started/python.html                 |    10 +-
 latest/getting-started/r.html                      |    10 +-
 latest/index.html                                  |    12 +-
 latest/objects.inv                                 |   Bin 22093 -> 22193 bytes
 latest/py-modindex.html                            |    10 +-
 latest/r/404.html                                  |     4 +-
 latest/r/404.md                                    |     3 +
 latest/r/LICENSE.html                              |     4 +-
 latest/r/LICENSE.md                                |   206 +
 latest/r/authors.html                              |    12 +-
 latest/r/authors.md                                |    28 +
 latest/r/deps/bootstrap-5.3.1/bootstrap.min.css    |     2 +-
 latest/r/index.html                                |     4 +-
 latest/r/index.md                                  |   258 +
 latest/r/katex-auto.js                             |     4 +-
 latest/r/lightswitch.js                            |     4 +-
 latest/r/llms.txt                                  |   360 +
 latest/r/news/index.html                           |    17 +-
 latest/r/news/index.md                             |   174 +
 latest/r/pkgdown.js                                |   192 +-
 latest/r/pkgdown.yml                               |     4 +-
 latest/r/reference/array_stream_set_finalizer.html |     4 +-
 latest/r/reference/array_stream_set_finalizer.md   |    44 +
 latest/r/reference/as_nanoarrow_array.html         |     4 +-
 latest/r/reference/as_nanoarrow_array.md           |    80 +
 latest/r/reference/as_nanoarrow_array_stream.html  |     4 +-
 latest/r/reference/as_nanoarrow_array_stream.md    |    88 +
 latest/r/reference/as_nanoarrow_buffer.html        |     4 +-
 latest/r/reference/as_nanoarrow_buffer.md          |    44 +
 latest/r/reference/as_nanoarrow_schema.html        |     4 +-
 latest/r/reference/as_nanoarrow_schema.md          |    81 +
 .../as_nanoarrow_schema.python.builtin.object.html |   141 +
 .../as_nanoarrow_schema.python.builtin.object.md   |    79 +
 latest/r/reference/as_nanoarrow_vctr.html          |     4 +-
 latest/r/reference/as_nanoarrow_vctr.md            |    77 +
 latest/r/reference/basic_array_stream.html         |     4 +-
 latest/r/reference/basic_array_stream.md           |    46 +
 latest/r/reference/convert_array.html              |     6 +-
 latest/r/reference/convert_array.md                |   128 +
 latest/r/reference/convert_array_stream.html       |     4 +-
 latest/r/reference/convert_array_stream.md         |    94 +
 latest/r/reference/example_ipc_stream.html         |     4 +-
 latest/r/reference/example_ipc_stream.md           |    30 +
 latest/r/reference/index.html                      |    74 +-
 latest/r/reference/index.md                        |   100 +
 latest/r/reference/infer_nanoarrow_ptype.html      |     6 +-
 latest/r/reference/infer_nanoarrow_ptype.md        |    69 +
 .../reference/infer_nanoarrow_ptype_extension.html |     4 +-
 .../r/reference/infer_nanoarrow_ptype_extension.md |    52 +
 latest/r/reference/na_type.html                    |     4 +-
 latest/r/reference/na_type.md                      |   240 +
 latest/r/reference/na_vctrs.html                   |     4 +-
 latest/r/reference/na_vctrs.md                     |    45 +
 latest/r/reference/nanoarrow-package.html          |     4 +-
 latest/r/reference/nanoarrow-package.md            |    31 +
 latest/r/reference/nanoarrow_array_init.html       |     4 +-
 latest/r/reference/nanoarrow_array_init.md         |    86 +
 latest/r/reference/nanoarrow_buffer_init.html      |     4 +-
 latest/r/reference/nanoarrow_buffer_init.md        |    49 +
 latest/r/reference/nanoarrow_extension_array.html  |     4 +-
 latest/r/reference/nanoarrow_extension_array.md    |    49 +
 latest/r/reference/nanoarrow_extension_spec.html   |     4 +-
 latest/r/reference/nanoarrow_extension_spec.md     |    57 +
 latest/r/reference/nanoarrow_pointer_is_valid.html |     4 +-
 latest/r/reference/nanoarrow_pointer_is_valid.md   |   109 +
 latest/r/reference/nanoarrow_version.html          |     6 +-
 latest/r/reference/nanoarrow_version.md            |    31 +
 latest/r/reference/read_nanoarrow.html             |     4 +-
 latest/r/reference/read_nanoarrow.md               |    69 +
 latest/r/search.json                               |     2 +-
 latest/r/sitemap.xml                               |     1 +
 latest/reference/c.html                            |    24 +-
 latest/reference/cpp.html                          |    10 +-
 latest/reference/device.html                       |    10 +-
 latest/reference/index.html                        |    10 +-
 latest/reference/ipc.html                          |    17 +-
 latest/reference/python/advanced.html              |    26 +-
 latest/reference/python/array-stream.html          |    20 +-
 latest/reference/python/array.html                 |    32 +-
 latest/reference/python/index.html                 |    12 +-
 latest/reference/python/schema.html                |   382 +-
 latest/reference/r.html                            |    10 +-
 latest/reference/testing.html                      |    10 +-
 latest/roadmap.html                                |    10 +-
 latest/search.html                                 |    10 +-
 latest/searchindex.js                              |     2 +-
 switcher.json                                      |     6 +-
 300 files changed, 34803 insertions(+), 1229 deletions(-)

diff --git a/latest/.buildinfo b/0.8.0/.buildinfo
similarity index 82%
copy from latest/.buildinfo
copy to 0.8.0/.buildinfo
index f2bcd9f9..7a56b43a 100644
--- a/latest/.buildinfo
+++ b/0.8.0/.buildinfo
@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 8b7a28439724fc3a2af30f3dc5e6a07f
+config: 1174389cbc70ef9d7d08bd8bf84e2271
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/0.8.0/.doctrees/environment.pickle b/0.8.0/.doctrees/environment.pickle
new file mode 100644
index 00000000..ac3c9096
Binary files /dev/null and b/0.8.0/.doctrees/environment.pickle differ
diff --git a/latest/.doctrees/getting-started/cpp.doctree b/0.8.0/.doctrees/getting-started/cpp.doctree
similarity index 50%
copy from latest/.doctrees/getting-started/cpp.doctree
copy to 0.8.0/.doctrees/getting-started/cpp.doctree
index cb9c1a7f..dce28de3 100644
Binary files a/latest/.doctrees/getting-started/cpp.doctree and b/0.8.0/.doctrees/getting-started/cpp.doctree differ
diff --git a/0.8.0/.doctrees/getting-started/index.doctree b/0.8.0/.doctrees/getting-started/index.doctree
new file mode 100644
index 00000000..12a7e542
Binary files /dev/null and b/0.8.0/.doctrees/getting-started/index.doctree differ
diff --git a/0.8.0/.doctrees/getting-started/python.doctree b/0.8.0/.doctrees/getting-started/python.doctree
new file mode 100644
index 00000000..dfa285c5
Binary files /dev/null and b/0.8.0/.doctrees/getting-started/python.doctree differ
diff --git a/0.8.0/.doctrees/getting-started/r.doctree b/0.8.0/.doctrees/getting-started/r.doctree
new file mode 100644
index 00000000..71a7fdc1
Binary files /dev/null and b/0.8.0/.doctrees/getting-started/r.doctree differ
diff --git a/0.8.0/.doctrees/index.doctree b/0.8.0/.doctrees/index.doctree
new file mode 100644
index 00000000..02b76fb7
Binary files /dev/null and b/0.8.0/.doctrees/index.doctree differ
diff --git a/0.8.0/.doctrees/reference/c.doctree b/0.8.0/.doctrees/reference/c.doctree
new file mode 100644
index 00000000..56ed3e9a
Binary files /dev/null and b/0.8.0/.doctrees/reference/c.doctree differ
diff --git a/0.8.0/.doctrees/reference/cpp.doctree b/0.8.0/.doctrees/reference/cpp.doctree
new file mode 100644
index 00000000..5bc4f5f4
Binary files /dev/null and b/0.8.0/.doctrees/reference/cpp.doctree differ
diff --git a/0.8.0/.doctrees/reference/device.doctree b/0.8.0/.doctrees/reference/device.doctree
new file mode 100644
index 00000000..6bdf9566
Binary files /dev/null and b/0.8.0/.doctrees/reference/device.doctree differ
diff --git a/0.8.0/.doctrees/reference/index.doctree b/0.8.0/.doctrees/reference/index.doctree
new file mode 100644
index 00000000..146eab90
Binary files /dev/null and b/0.8.0/.doctrees/reference/index.doctree differ
diff --git a/0.8.0/.doctrees/reference/ipc.doctree b/0.8.0/.doctrees/reference/ipc.doctree
new file mode 100644
index 00000000..3cd42b06
Binary files /dev/null and b/0.8.0/.doctrees/reference/ipc.doctree differ
diff --git a/0.8.0/.doctrees/reference/python/advanced.doctree b/0.8.0/.doctrees/reference/python/advanced.doctree
new file mode 100644
index 00000000..a7cbb2e3
Binary files /dev/null and b/0.8.0/.doctrees/reference/python/advanced.doctree differ
diff --git a/0.8.0/.doctrees/reference/python/array-stream.doctree b/0.8.0/.doctrees/reference/python/array-stream.doctree
new file mode 100644
index 00000000..a9170cac
Binary files /dev/null and b/0.8.0/.doctrees/reference/python/array-stream.doctree differ
diff --git a/0.8.0/.doctrees/reference/python/array.doctree b/0.8.0/.doctrees/reference/python/array.doctree
new file mode 100644
index 00000000..97d1e1ef
Binary files /dev/null and b/0.8.0/.doctrees/reference/python/array.doctree differ
diff --git a/0.8.0/.doctrees/reference/python/index.doctree b/0.8.0/.doctrees/reference/python/index.doctree
new file mode 100644
index 00000000..eec543f2
Binary files /dev/null and b/0.8.0/.doctrees/reference/python/index.doctree differ
diff --git a/0.8.0/.doctrees/reference/python/schema.doctree b/0.8.0/.doctrees/reference/python/schema.doctree
new file mode 100644
index 00000000..c686321e
Binary files /dev/null and b/0.8.0/.doctrees/reference/python/schema.doctree differ
diff --git a/0.8.0/.doctrees/reference/r.doctree b/0.8.0/.doctrees/reference/r.doctree
new file mode 100644
index 00000000..908f091a
Binary files /dev/null and b/0.8.0/.doctrees/reference/r.doctree differ
diff --git a/0.8.0/.doctrees/reference/testing.doctree b/0.8.0/.doctrees/reference/testing.doctree
new file mode 100644
index 00000000..c22fe548
Binary files /dev/null and b/0.8.0/.doctrees/reference/testing.doctree differ
diff --git a/0.8.0/.doctrees/roadmap.doctree b/0.8.0/.doctrees/roadmap.doctree
new file mode 100644
index 00000000..5f2179aa
Binary files /dev/null and b/0.8.0/.doctrees/roadmap.doctree differ
diff --git a/0.8.0/_sources/getting-started/cpp.rst.txt b/0.8.0/_sources/getting-started/cpp.rst.txt
new file mode 100644
index 00000000..8d4008d4
--- /dev/null
+++ b/0.8.0/_sources/getting-started/cpp.rst.txt
@@ -0,0 +1,542 @@
+.. raw:: html
+
+   <!---
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF licenses this file
+     to you under the Apache License, Version 2.0 (the
+     "License"); you may not use this file except in compliance
+     with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing,
+     software distributed under the License is distributed on an
+     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     KIND, either express or implied.  See the License for the
+     specific language governing permissions and limitations
+     under the License.
+   -->
+
+Getting started with nanoarrow in C/C++
+=======================================
+
+This tutorial provides a short example of writing a C++ library that
+exposes an Arrow-based API and uses nanoarrow to implement a simple text
+file reader/writer. In general, nanoarrow can help you write a library
+or application that:
+
+-  exposes an Arrow-based API to read from a data source or format,
+-  exposes an Arrow-based API to write to a data source or format,
+-  exposes one or more compute functions that operates on and produces
+   data in the form of Arrow arrays, and/or
+-  exposes an extension type implementation.
+
+Because Arrow has bindings in many languages, it means that you or
+others can easily bind or use your tool in higher-level runtimes like R,
+Java, C++, Python, Rust, Julia, Go, or Ruby, among others.
+
+The nanoarrow library is not the only way that an Arrow-based API can be
+implemented: Arrow C++, Rust, and Go are all excellent choices and can
+compile into static libraries that are C-linkable from other languages;
+however, existing Arrow implementations produce relatively large static
+libraries and can present complex build-time or run-time linking
+requirements depending on the implementation and features used. If the
+set of libraries you’re working with already provide the conveniences
+you require, nanoarrow may provide all the functionality you need.
+
+Now that we’ve talked about why you might want to build a library with
+nanoarrow…let’s build one!
+
+.. note::
+  This tutorial also goes over some of the basic structure of writing a C++ library.
+  If you already know how to do this, feel free to scroll to the code examples provided
+  below or take a look at the
+  `final example project <https://github.com/apache/arrow-nanoarrow/tree/main/examples/linesplitter>`__.
+The library
+-----------
+
+The library we’ll write in this tutorial is a simple text processing
+library that splits and reassembles lines of text. It will be able to:
+
+-  Read text from a buffer into an ``ArrowArray`` as one element per
+   line, and
+-  Write elements of an ``ArrowArray`` into a buffer, inserting line
+   breaks after every element.
+
+For the sake of argument, we’ll call it ``linesplitter``.
+
+The development environment
+---------------------------
+
+There are many excellent IDEs that can be used to develop C and C++
+libraries. For this tutorial, we will use
+`VSCode <https://code.visualstudio.com/>`__ and
+`CMake <https://cmake.org/>`__. You’ll need both installed to follow
+along: VSCode can be downloaded from the official site for most
+platforms; CMake is typically installed via your favourite package
+manager (e.g., ``brew install cmake``, ``apt-get install cmake``,
+``dnf install cmake``, etc.). You will also need a C and C++ compiler:
+on MacOS these can be installed using ``xcode-select --install``; on
+Linux you will need the packages that provide ``gcc``, ``g++``, and
+``make`` (e.g., ``apt-get install build-essential``); on Windows you
+will need to install `Visual
+Studio <https://visualstudio.microsoft.com/downloads/>`__ and CMake from
+the official download pages.
+
+Once you have VSCode installed, ensure you have the **CMake Tools** and
+**C/C++** extensions installed. Once your environment is set up, create
+a folder called ``linesplitter`` and open it using **File -> Open
+Folder**.
+
+The interface
+-------------
+
+We’ll expose the interface to our library as a header called
+``linesplitter.h``. To ensure the definitions are only included once in
+any given source file, we’ll add the following line at the top:
+
+.. code:: cpp
+
+   #pragma once
+
+Then, we need the `Arrow C Data
+interface <https://arrow.apache.org/docs/format/CDataInterface.html#structure-definitions>`__
+itself, since it provides the type definitions that are recognized by
+other Arrow implementations on which our API will be built. It’s
+designed to be copy and pasted in this way - there’s no need to put it
+in another file include something from another project.
+
+.. code:: cpp
+
+   #include <stdint.h>
+
+   #ifndef ARROW_C_DATA_INTERFACE
+   #define ARROW_C_DATA_INTERFACE
+
+   #define ARROW_FLAG_DICTIONARY_ORDERED 1
+   #define ARROW_FLAG_NULLABLE 2
+   #define ARROW_FLAG_MAP_KEYS_SORTED 4
+
+   struct ArrowSchema {
+     // Array type description
+     const char* format;
+     const char* name;
+     const char* metadata;
+     int64_t flags;
+     int64_t n_children;
+     struct ArrowSchema** children;
+     struct ArrowSchema* dictionary;
+
+     // Release callback
+     void (*release)(struct ArrowSchema*);
+     // Opaque producer-specific data
+     void* private_data;
+   };
+
+   struct ArrowArray {
+     // Array data description
+     int64_t length;
+     int64_t null_count;
+     int64_t offset;
+     int64_t n_buffers;
+     int64_t n_children;
+     const void** buffers;
+     struct ArrowArray** children;
+     struct ArrowArray* dictionary;
+
+     // Release callback
+     void (*release)(struct ArrowArray*);
+     // Opaque producer-specific data
+     void* private_data;
+   };
+
+   #endif  // ARROW_C_DATA_INTERFACE
+
+Next, we’ll provide definitions for the functions we’ll implement below:
+
+.. code:: c
+
+   // Builds an ArrowArray of type string that will contain one element for each line
+   // in src and places it into out.
+   //
+   // On success, returns {0, ""}; on error, returns {<errno code>, <error message>}
+   std::pair<int, std::string> linesplitter_read(const std::string& src,
+                                                 struct ArrowArray* out);
+
+   // Concatenates all elements of a string ArrowArray inserting a newline between
+   // elements.
+   //
+   // On success, returns {0, <result>}; on error, returns {<errno code>, <error message>}
+   std::pair<int, std::string> linesplitter_write(struct ArrowArray* input);
+
+.. note::
+  You may notice that we don't include or mention nanoarrow in any way in the header
+  that is exposed to users. Because nanoarrow is designed to be vendored and is not
+  distributed as a system library, it is not safe for users of your library to
+  ``#include "nanoarrow.h"`` because it might conflict with another library that does
+  the same (with possibly a different version of nanoarrow).
+Arrow C data/nanoarrow interface basics
+---------------------------------------
+
+Now that we’ve seen the functions we need to implement and the Arrow
+types exposed in the C data interface, let’s unpack a few basics about
+using the Arrow C data interface and a few conventions used in the
+nanoarrow implementation.
+
+First, let’s discuss the ``ArrowSchema`` and the ``ArrowArray``. You can
+think of an ``ArrowSchema`` as an expression of a data type, whereas an
+``ArrowArray`` is the data itself. These structures accommodate nested
+types: columns are encoded in the ``children`` member of each. You
+always need to know the data type of an ``ArrowArray`` before accessing
+its contents. In our case we only operate on arrays of one type
+(“string”) and document that in our interface; for functions that
+operate on more than one type of array you will need to accept an
+``ArrowSchema`` and inspect it (e.g., using nanoarrow’s helper
+functions).
+
+Second, let’s discuss error handling. You may have noticed in the
+function definitions above that we return ``int``, which is an
+errno-compatible error code or ``0`` to indicate success. Functions in
+nanoarrow that need to communicate more detailed error information
+accept an ``ArrowError*`` argument (which can be ``NULL`` if the caller
+does care about the extra information). Any nanoarrow function that
+might fail communicates errors in this way. To avoid verbose code like
+the following:
+
+.. code:: c
+
+   int init_string_non_null(struct ArrowSchema* schema) {
+     int code = ArrowSchemaInitFromType(&schema, NANOARROW_TYPE_STRING);
+     if (code != NANOARROW_OK) {
+       return code;
+     }
+
+     schema->flags &= ~ARROW_FLAG_NULLABLE;
+     return NANOARROW_OK;
+   }
+
+…you can use the ``NANOARROW_RETURN_NOT_OK()`` macro:
+
+.. code:: c
+
+   int init_string_non_null(struct ArrowSchema* schema) {
+     NANOARROW_RETURN_NOT_OK(ArrowSchemaInitFromType(&schema, NANOARROW_TYPE_STRING));
+     schema->flags &= ~ARROW_FLAG_NULLABLE;
+     return NANOARROW_OK;
+   }
+
+This works as long as your internal functions that use nanoarrow also
+return ``int`` and/or an ``ArrowError*`` argument. This usually means
+that there is an outer function that presents a more idiomatic interface
+(e.g., returning ``std::optional<>`` or throwing an exception) and an
+inner function that uses nanoarrow-style error handling. Embracing
+``NANOARROW_RETURN_NOT_OK()`` is key to happiness when using the
+nanoarrow library.
+
+Third, let’s discuss memory management. Because nanoarrow is implemented
+in C and provides a C interface, the library by default uses C-style
+memory management (i.e., if you allocate it, you clean it up). This is
+unnecessary when you have C++ at your disposal, so nanoarrow also
+provides a C++ header (``nanoarrow.hpp``) with
+``std::unique_ptr<>``-like wrappers around anything that requires
+explicit clean up. Whereas in C you might have to write code like this:
+
+.. code:: c
+
+   struct ArrowSchema schema;
+   struct ArrowArray array;
+
+   // Ok: if this returns, array was not initialized
+   NANOARROW_RETURN_NOT_OK(ArrowSchemaInitFromType(&schema, NANOARROW_TYPE_STRING));
+
+   // Verbose: if this fails, we need to release schema before returning
+   // or it will leak.
+   int code = ArrowArrayInitFromSchema(&array, &schema, NULL);
+   if (code != NANOARROW_OK) {
+     ArrowSchemaRelease(&schema);
+     return code;
+   }
+
+…using the ``nanoarrow.hpp`` types we can do:
+
+.. code:: cpp
+
+   nanoarrow::UniqueSchema schema;
+   nanoarrow::UniqueArray array;
+
+   NANOARROW_RETURN_NOT_OK(ArrowSchemaInitFromType(schema.get(), NANOARROW_TYPE_STRING));
+   NANOARROW_RETURN_NOT_OK(ArrowArrayInitFromSchema(array.get(), schema.get(), NULL));
+
+Building the library
+--------------------
+
+Our library implementation will live in ``linesplitter.cc``. Before
+writing the actual implementations, let’s add just enough to our project
+that we can build it using VSCode’s C/C++/CMake integration:
+
+.. code:: cpp
+
+   #include <cerrno>
+   #include <cstdint>
+   #include <sstream>
+   #include <string>
+   #include <utility>
+
+   #include "nanoarrow/nanoarrow.hpp"
+
+   #include "linesplitter.h"
+
+   std::pair<int, std::string> linesplitter_read(const std::string& src,
+                                                 struct ArrowArray* out) {
+     return {ENOTSUP, ""};
+   }
+
+   std::pair<int, std::string> linesplitter_write(struct ArrowArray* input) {
+     return {ENOTSUP, ""};
+   }
+
+We also need a ``CMakeLists.txt`` file that tells CMake and VSCode what
+to build. CMake has a lot of options and can scale to coordinate very
+large projects; however we only need a few lines to leverage VSCode’s
+integration.
+
+.. code:: cmake
+
+   project(linesplitter)
+
+   set(CMAKE_CXX_STANDARD 11)
+
+   include(FetchContent)
+
+   FetchContent_Declare(
+     nanoarrow
+     URL https://github.com/apache/arrow-nanoarrow/releases/download/apache-arrow-nanoarrow-0.2.0/apache-arrow-nanoarrow-0.2.0.tar.gz
+     URL_HASH SHA512=38a100ae5c36a33aa330010eb27b051cff98671e9c82fff22b1692bb77ae61bd6dc2a52ac6922c6c8657bd4c79a059ab26e8413de8169eeed3c9b7fdb216c817)
+   FetchContent_MakeAvailable(nanoarrow)
+
+   add_library(linesplitter linesplitter.cc)
+   target_link_libraries(linesplitter PRIVATE nanoarrow_static)
+
+After saving ``CMakeLists.txt``, you may have to close and re-open the
+``linesplitter`` directory in VSCode to activate the CMake integration.
+From the command palette (i.e., Control/Command-Shift-P), choose
+**CMake: Build**. If all went well, you should see a few lines of output
+indicating progress towards building and linking ``linesplitter``.
+
+.. note::
+  Depending on your version of CMake you might also see a few warnings. This CMakeLists.txt
+  is intentionally minimal and as such does not attempt to silence them.
+.. note::
+  If you're not using VSCode, you can accomplish the equivalent task in in a terminal
+  with ``mkdir build && cd build && cmake .. && cmake --build .``.
+Building an ArrowArray
+----------------------
+
+The input for our ``linesplitter_read()`` function is an
+``std::string``, which we’ll iterate over and add each detected line as
+its own element. First, we’ll define a function for the core logic of
+detecting the number of characters until the next ``\n`` or
+end-of-string.
+
+.. code:: cpp
+
+   static int64_t find_newline(const ArrowStringView& src) {
+     for (int64_t i = 0; i < src.size_bytes; i++) {
+       if (src.data[i] == '\n') {
+         return i;
+       }
+     }
+
+     return src.size_bytes;
+   }
+
+The next function we’ll define is an internal function that uses
+nanoarrow-style error handling. This uses the ``ArrowArrayAppend*()``
+family of functions provided by nanoarrow to build the array:
+
+.. code:: cpp
+
+   static int linesplitter_read_internal(const std::string& src, ArrowArray* out,
+                                         ArrowError* error) {
+     nanoarrow::UniqueArray tmp;
+     NANOARROW_RETURN_NOT_OK(ArrowArrayInitFromType(tmp.get(), NANOARROW_TYPE_STRING));
+     NANOARROW_RETURN_NOT_OK(ArrowArrayStartAppending(tmp.get()));
+
+     ArrowStringView src_view = {src.data(), static_cast<int64_t>(src.size())};
+     ArrowStringView line_view;
+     int64_t next_newline = -1;
+     while ((next_newline = find_newline(src_view)) >= 0) {
+       line_view = {src_view.data, next_newline};
+       NANOARROW_RETURN_NOT_OK(ArrowArrayAppendString(tmp.get(), line_view));
+       src_view.data += next_newline + 1;
+       src_view.size_bytes -= next_newline + 1;
+     }
+
+     NANOARROW_RETURN_NOT_OK(ArrowArrayFinishBuildingDefault(tmp.get(), error));
+
+     ArrowArrayMove(tmp.get(), out);
+     return NANOARROW_OK;
+   }
+
+Finally, we define a wrapper that corresponds to the outer function
+definition.
+
+.. code:: cpp
+
+   std::pair<int, std::string> linesplitter_read(const std::string& src, ArrowArray* out) {
+     ArrowError error;
+     int code = linesplitter_read_internal(src, out, &error);
+     if (code != NANOARROW_OK) {
+       return {code, std::string(ArrowErrorMessage(&error))};
+     } else {
+       return {NANOARROW_OK, ""};
+     }
+   }
+
+Reading an ArrowArray
+---------------------
+
+The input for our ``linesplitter_write()`` function is an
+``ArrowArray*`` like the one we create in ``linesplitter_read()``. Just
+as nanoarrow provides helpers to build arrays, it also provides helpers
+to read them via the ``ArrowArrayView*()`` family of functions. Again,
+we first define an internal function that uses nanoarrow-style error
+handling:
+
+.. code:: cpp
+
+   static int linesplitter_write_internal(ArrowArray* input, std::stringstream& out,
+                                          ArrowError* error) {
+     nanoarrow::UniqueArrayView input_view;
+     ArrowArrayViewInitFromType(input_view.get(), NANOARROW_TYPE_STRING);
+     NANOARROW_RETURN_NOT_OK(ArrowArrayViewSetArray(input_view.get(), input, error));
+
+     ArrowStringView item;
+     for (int64_t i = 0; i < input->length; i++) {
+       if (ArrowArrayViewIsNull(input_view.get(), i)) {
+         out << "\n";
+       } else {
+         item = ArrowArrayViewGetStringUnsafe(input_view.get(), i);
+         out << std::string(item.data, item.size_bytes) << "\n";
+       }
+     }
+
+     return NANOARROW_OK;
+   }
+
+Then, provide an outer wrapper that corresponds to the outer function
+definition.
+
+.. code:: cpp
+
+   std::pair<int, std::string> linesplitter_write(ArrowArray* input) {
+     std::stringstream out;
+     ArrowError error;
+     int code = linesplitter_write_internal(input, out, &error);
+     if (code != NANOARROW_OK) {
+       return {code, std::string(ArrowErrorMessage(&error))};
+     } else {
+       return {NANOARROW_OK, out.str()};
+     }
+   }
+
+Testing
+-------
+
+We have an implementation, but does it work? Unlike higher-level
+runtimes like R and Python, we can’t just open a prompt and type some
+code to find out. For C and C++ libraries, the
+`googletest <https://google.github.io/googletest/quickstart-cmake.html>`__
+framework provides a quick and easy way to do this that scales nicely as
+the complexity of your project grows.
+
+First, we’ll add a stub test and some CMake to get going. In
+``linesplitter_test.cc``, add the following:
+
+.. code:: cpp
+
+   #include <gtest/gtest.h>
+
+   #include "nanoarrow/nanoarrow.hpp"
+
+   #include "linesplitter.h"
+
+   TEST(Linesplitter, LinesplitterRoundtrip) {
+     EXPECT_EQ(4, 4);
+   }
+
+Then, add the following to your ``CMakeLists.txt``:
+
+.. code:: cmake
+
+   FetchContent_Declare(
+     googletest
+     URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.zip
+   )
+   FetchContent_MakeAvailable(googletest)
+
+   enable_testing()
+
+   add_executable(linesplitter_test linesplitter_test.cc)
+   target_link_libraries(linesplitter_test linesplitter GTest::gtest_main)
+
+   include(GoogleTest)
+   gtest_discover_tests(linesplitter_test)
+
+After you’re done, build the project again using the **CMake: Build**
+command from the command palette. If all goes well, choose **CMake:
+Refresh Tests** and then **Test: Run All Tests** from the command
+palette to run them! You should see some output indicating that tests
+ran successfully, or you can use VSCode’s “Testing” panel to visually
+inspect which tests passed.
+
+.. note::
+  If you're not using VSCode, you can accomplish the equivalent task in in a terminal
+  with ``cd build && ctest .``.
+Now we’re ready to fill in the test! Our two functions happen to round
+trip, so a useful first test might be to check.
+
+.. code:: cpp
+
+   TEST(Linesplitter, LinesplitterRoundtrip) {
+     nanoarrow::UniqueArray out;
+     auto result = linesplitter_read("line1\nline2\nline3", out.get());
+     ASSERT_EQ(result.first, 0);
+     ASSERT_EQ(result.second, "");
+
+     ASSERT_EQ(out->length, 3);
+
+     nanoarrow::UniqueArrayView out_view;
+     ArrowArrayViewInitFromType(out_view.get(), NANOARROW_TYPE_STRING);
+     ASSERT_EQ(ArrowArrayViewSetArray(out_view.get(), out.get(), nullptr), 0);
+     ArrowStringView item;
+
+     item = ArrowArrayViewGetStringUnsafe(out_view.get(), 0);
+     ASSERT_EQ(std::string(item.data, item.size_bytes), "line1");
+
+     item = ArrowArrayViewGetStringUnsafe(out_view.get(), 1);
+     ASSERT_EQ(std::string(item.data, item.size_bytes), "line2");
+
+     item = ArrowArrayViewGetStringUnsafe(out_view.get(), 2);
+     ASSERT_EQ(std::string(item.data, item.size_bytes), "line3");
+
+
+     auto result2 = linesplitter_write(out.get());
+     ASSERT_EQ(result2.first, 0);
+     ASSERT_EQ(result2.second, "line1\nline2\nline3\n");
+   }
+
+Writing tests in this way also opens up a relatively straightforward
+debug path via the **CMake: Set Debug target** and **CMake: Debug**
+commands. If the first thing that happens when you write run your test
+is a crash, running the tests with the debugger turned on will
+automatically pause at the line of code that caused the crash. For more
+fine-tuned debugging, you can set breakpoints and step through code.
+
+Summary
+-------
+
+This tutorial covered the basics of writing and testing a C++ library
+exposing an Arrow-based API implemented using the nanoarrow C library.
diff --git a/0.8.0/_sources/getting-started/index.rst.txt b/0.8.0/_sources/getting-started/index.rst.txt
new file mode 100644
index 00000000..3ca7140d
--- /dev/null
+++ b/0.8.0/_sources/getting-started/index.rst.txt
@@ -0,0 +1,26 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Getting Started
+===============
+
+.. toctree::
+   :maxdepth: 2
+
+   C/C++ <cpp>
+   Python <python>
+   R <r>
diff --git a/0.8.0/_sources/getting-started/python.rst.txt b/0.8.0/_sources/getting-started/python.rst.txt
new file mode 100644
index 00000000..5a09cfc7
--- /dev/null
+++ b/0.8.0/_sources/getting-started/python.rst.txt
@@ -0,0 +1,426 @@
+.. raw:: html
+
+   <!---
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF licenses this file
+     to you under the Apache License, Version 2.0 (the
+     "License"); you may not use this file except in compliance
+     with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing,
+     software distributed under the License is distributed on an
+     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     KIND, either express or implied.  See the License for the
+     specific language governing permissions and limitations
+     under the License.
+   -->
+
+.. raw:: html
+
+   <!-- Render with jupyter nbconvert --to markdown README.ipynb -->
+
+nanoarrow for Python
+====================
+
+The nanoarrow Python package provides bindings to the nanoarrow C
+library. Like the nanoarrow C library, it provides tools to facilitate
+the use of the `Arrow C
+Data <https://arrow.apache.org/docs/format/CDataInterface.html>`__ and
+`Arrow C
+Stream <https://arrow.apache.org/docs/format/CStreamInterface.html>`__
+interfaces.
+
+Installation
+------------
+
+The nanoarrow Python bindings are available from
+`PyPI <https://pypi.org/>`__ and
+`conda-forge <https://conda-forge.org/>`__:
+
+.. code:: shell
+
+   pip install nanoarrow
+   conda install nanoarrow -c conda-forge
+
+Development versions (based on the ``main`` branch) are also available:
+
+.. code:: shell
+
+   pip install --extra-index-url https://pypi.fury.io/arrow-nightlies/ \
+       --prefer-binary --pre nanoarrow
+
+If you can import the namespace, you’re good to go!
+
+.. code:: python
+
+   import nanoarrow as na
+
+Data types, arrays, and array streams
+-------------------------------------
+
+The Arrow C Data and Arrow C Stream interfaces are comprised of three
+structures: the ``ArrowSchema`` which represents a data type of an
+array, the ``ArrowArray`` which represents the values of an array, and
+an ``ArrowArrayStream``, which represents zero or more ``ArrowArray``\ s
+with a common ``ArrowSchema``. These concepts map to the
+``nanoarrow.Schema``, ``nanoarrow.Array``, and ``nanoarrow.ArrayStream``
+in the Python package.
+
+.. code:: python
+
+   na.int32()
+
+::
+
+   <Schema> int32
+
+.. code:: python
+
+   na.Array([1, 2, 3], na.int32())
+
+::
+
+   nanoarrow.Array<int32>[3]
+   1
+   2
+   3
+
+The ``nanoarrow.Array`` can accommodate arrays with any number of
+chunks, reflecting the reality that many array containers (e.g.,
+``pyarrow.ChunkedArray``, ``polars.Series``) support this.
+
+.. code:: python
+
+   chunked = na.Array.from_chunks([[1, 2, 3], [4, 5, 6]], na.int32())
+   chunked
+
+::
+
+   nanoarrow.Array<int32>[6]
+   1
+   2
+   3
+   4
+   5
+   6
+
+Whereas chunks of an ``Array`` are always fully materialized when the
+object is constructed, the chunks of an ``ArrayStream`` have not
+necessarily been resolved yet.
+
+.. code:: python
+
+   stream = na.ArrayStream(chunked)
+   stream
+
+::
+
+   nanoarrow.ArrayStream<int32>
+
+.. code:: python
+
+   with stream:
+       for chunk in stream:
+           print(chunk)
+
+::
+
+   nanoarrow.Array<int32>[3]
+   1
+   2
+   3
+   nanoarrow.Array<int32>[3]
+   4
+   5
+   6
+
+The ``nanoarrow.ArrayStream`` also provides an interface to nanoarrow’s
+`Arrow
+IPC <https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc>`__
+reader:
+
+.. code:: python
+
+   url = "https://github.com/apache/arrow-experiments/raw/main/data/arrow-commits/arrow-commits.arrows"
+   na.ArrayStream.from_url(url)
+
+::
+
+   nanoarrow.ArrayStream<non-nullable struct<commit: string, time: timestamp('us', 'UTC'), files: int3...>
+
+These objects implement the `Arrow PyCapsule
+interface <https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html>`__
+for both producing and consuming and are interchangeable with
+``pyarrow`` objects in many cases:
+
+.. code:: python
+
+   import pyarrow as pa
+
+   pa.field(na.int32())
+
+::
+
+   pyarrow.Field<: int32>
+
+.. code:: python
+
+   pa.chunked_array(chunked)
+
+::
+
+   <pyarrow.lib.ChunkedArray object at 0x12a49a250>
+   [
+     [
+       1,
+       2,
+       3
+     ],
+     [
+       4,
+       5,
+       6
+     ]
+   ]
+
+.. code:: python
+
+   pa.array(chunked.chunk(1))
+
+::
+
+   <pyarrow.lib.Int32Array object at 0x11b552500>
+   [
+     4,
+     5,
+     6
+   ]
+
+.. code:: python
+
+   na.Array(pa.array([10, 11, 12]))
+
+::
+
+   nanoarrow.Array<int64>[3]
+   10
+   11
+   12
+
+.. code:: python
+
+   na.Schema(pa.string())
+
+::
+
+   <Schema> string
+
+Low-level C library bindings
+----------------------------
+
+The nanoarrow Python package also provides lower level wrappers around
+Arrow C interface structures. You can create these using
+``nanoarrow.c_schema()``, ``nanoarrow.c_array()``, and
+``nanoarrow.c_array_stream()``.
+
+Schemas
+~~~~~~~
+
+Use ``nanoarrow.c_schema()`` to convert an object to an ``ArrowSchema``
+and wrap it as a Python object. This works for any object implementing
+the `Arrow PyCapsule
+Interface <https://arrow.apache.org/docs/format/CDataInterface.html>`__
+(e.g., ``pyarrow.Schema``, ``pyarrow.DataType``, and ``pyarrow.Field``).
+
+.. code:: python
+
+   na.c_schema(pa.decimal128(10, 3))
+
+::
+
+   <nanoarrow.c_schema.CSchema decimal128(10, 3)>
+   - format: 'd:10,3'
+   - name: ''
+   - flags: 2
+   - metadata: NULL
+   - dictionary: NULL
+   - children[0]:
+
+Using ``c_schema()`` is a good fit for testing and for ephemeral schema
+objects that are being passed from one library to another. To extract
+the fields of a schema in a more convenient form, use ``Schema()``:
+
+.. code:: python
+
+   schema = na.Schema(pa.decimal128(10, 3))
+   schema.precision, schema.scale
+
+::
+
+   (10, 3)
+
+The ``CSchema`` object cleans up after itself: when the object is
+deleted, the underlying ``ArrowSchema`` is released.
+
+Arrays
+~~~~~~
+
+You can use ``nanoarrow.c_array()`` to convert an array-like object to
+an ``ArrowArray``, wrap it as a Python object, and attach a schema that
+can be used to interpret its contents. This works for any object
+implementing the `Arrow PyCapsule
+Interface <https://arrow.apache.org/docs/format/CDataInterface.html>`__
+(e.g., ``pyarrow.Array``, ``pyarrow.RecordBatch``).
+
+.. code:: python
+
+   na.c_array(["one", "two", "three", None], na.string())
+
+::
+
+   <nanoarrow.c_array.CArray string>
+   - length: 4
+   - offset: 0
+   - null_count: 1
+   - buffers: (4754305168, 4754307808, 4754310464)
+   - dictionary: NULL
+   - children[0]:
+
+Using ``c_array()`` is a good fit for testing and for ephemeral array
+objects that are being passed from one library to another. For a higher
+level interface, use ``Array()``:
+
+.. code:: python
+
+   array = na.Array(["one", "two", "three", None], na.string())
+   array.to_pylist()
+
+::
+
+   ['one', 'two', 'three', None]
+
+.. code:: python
+
+   array.buffers
+
+::
+
+   (nanoarrow.c_lib.CBufferView(bool[1 b] 11100000),
+    nanoarrow.c_lib.CBufferView(int32[20 b] 0 3 6 11 11),
+    nanoarrow.c_lib.CBufferView(string[11 b] b'onetwothree'))
+
+Advanced users can create arrays directly from buffers using
+``c_array_from_buffers()``:
+
+.. code:: python
+
+   na.c_array_from_buffers(
+       na.string(),
+       2,
+       [None, na.c_buffer([0, 3, 6], na.int32()), b"abcdef"]
+   )
+
+::
+
+   <nanoarrow.c_array.CArray string>
+   - length: 2
+   - offset: 0
+   - null_count: 0
+   - buffers: (0, 5002908320, 4999694624)
+   - dictionary: NULL
+   - children[0]:
+
+Array streams
+~~~~~~~~~~~~~
+
+You can use ``nanoarrow.c_array_stream()`` to wrap an object
+representing a sequence of ``CArray``\ s with a common ``CSchema`` to an
+``ArrowArrayStream`` and wrap it as a Python object. This works for any
+object implementing the `Arrow PyCapsule
+Interface <https://arrow.apache.org/docs/format/CDataInterface.html>`__
+(e.g., ``pyarrow.RecordBatchReader``, ``pyarrow.ChunkedArray``).
+
+.. code:: python
+
+   pa_batch = pa.record_batch({"col1": [1, 2, 3]})
+   reader = pa.RecordBatchReader.from_batches(pa_batch.schema, [pa_batch])
+   array_stream = na.c_array_stream(reader)
+   array_stream
+
+::
+
+   <nanoarrow.c_array_stream.CArrayStream>
+   - get_schema(): struct<col1: int64>
+
+You can pull the next array from the stream using ``.get_next()`` or use
+it like an iterator. The ``.get_next()`` method will raise
+``StopIteration`` when there are no more arrays in the stream.
+
+.. code:: python
+
+   for array in array_stream:
+       print(array)
+
+::
+
+   <nanoarrow.c_array.CArray struct<col1: int64>>
+   - length: 3
+   - offset: 0
+   - null_count: 0
+   - buffers: (0,)
+   - dictionary: NULL
+   - children[1]:
+     'col1': <nanoarrow.c_array.CArray int64>
+       - length: 3
+       - offset: 0
+       - null_count: 0
+       - buffers: (0, 2642948588352)
+       - dictionary: NULL
+       - children[0]:
+
+Use ``ArrayStream()`` for a higher level interface:
+
+.. code:: python
+
+   reader = pa.RecordBatchReader.from_batches(pa_batch.schema, [pa_batch])
+   na.ArrayStream(reader).read_all()
+
+::
+
+   nanoarrow.Array<non-nullable struct<col1: int64>>[3]
+   {'col1': 1}
+   {'col1': 2}
+   {'col1': 3}
+
+Development
+-----------
+
+Python bindings for nanoarrow are managed with
+`setuptools <https://setuptools.pypa.io/en/latest/index.html>`__. This
+means you can build the project using:
+
+.. code:: shell
+
+   git clone https://github.com/apache/arrow-nanoarrow.git
+   cd arrow-nanoarrow/python
+   # Build dependencies:
+   # pip install meson meson-python cython
+   pip install -e . --no-build-isolation
+
+Tests use `pytest <https://docs.pytest.org/>`__:
+
+.. code:: shell
+
+   # Install dependencies
+   pip install -e ".[test]"
+
+   # Run tests
+   pytest -vvx
+
+CMake is currently required to ensure that the vendored copy of
+nanoarrow in the Python package stays in sync with the nanoarrow sources
+in the working tree.
diff --git a/0.8.0/_sources/getting-started/r.rst.txt b/0.8.0/_sources/getting-started/r.rst.txt
new file mode 100644
index 00000000..5153b18d
--- /dev/null
+++ b/0.8.0/_sources/getting-started/r.rst.txt
@@ -0,0 +1,286 @@
+.. raw:: html
+
+   <!---
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF licenses this file
+     to you under the Apache License, Version 2.0 (the
+     "License"); you may not use this file except in compliance
+     with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing,
+     software distributed under the License is distributed on an
+     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     KIND, either express or implied.  See the License for the
+     specific language governing permissions and limitations
+     under the License.
+   -->
+
+.. raw:: html
+
+   <!-- README.md is generated from README.Rmd. Please edit that file -->
+
+nanoarrow
+=========
+
+.. raw:: html
+
+   <!-- badges: start -->
+
+.. raw:: html
+
+   <!-- badges: end -->
+
+The goal of nanoarrow is to provide minimal useful bindings to the
+`Arrow C
+Data <https://arrow.apache.org/docs/format/CDataInterface.html>`__ and
+`Arrow C
+Stream <https://arrow.apache.org/docs/format/CStreamInterface.html>`__
+interfaces using the `nanoarrow C
+library <https://arrow.apache.org/nanoarrow/>`__.
+
+Installation
+------------
+
+You can install the released version of nanoarrow from
+`CRAN <https://cran.r-project.org/>`__ with:
+
+.. code:: r
+
+   install.packages("nanoarrow")
+
+You can install the development version of nanoarrow from
+`GitHub <https://github.com/>`__ with:
+
+.. code:: r
+
+   # install.packages("remotes")
+   remotes::install_github("apache/arrow-nanoarrow/r")
+
+If you can load the package, you’re good to go!
+
+.. code:: r
+
+   library(nanoarrow)
+
+Example
+-------
+
+The Arrow C Data and Arrow C Stream interfaces are comprised of three
+structures: the ``ArrowSchema`` which represents a data type of an
+array, the ``ArrowArray`` which represents the values of an array, and
+an ``ArrowArrayStream``, which represents zero or more ``ArrowArray``\ s
+with a common ``ArrowSchema``. All three can be wrapped by R objects
+using the nanoarrow R package.
+
+Schemas
+~~~~~~~
+
+Use ``infer_nanoarrow_schema()`` to get the ArrowSchema object that
+corresponds to a given R vector type; use ``as_nanoarrow_schema()`` to
+convert an object from some other data type representation (e.g., an
+arrow R package ``DataType`` like ``arrow::int32()``); or use
+``na_XXX()`` functions to construct them.
+
+.. code:: r
+
+   infer_nanoarrow_schema(1:5)
+   #> <nanoarrow_schema int32>
+   #>  $ format    : chr "i"
+   #>  $ name      : chr ""
+   #>  $ metadata  : list()
+   #>  $ flags     : int 2
+   #>  $ children  : list()
+   #>  $ dictionary: NULL
+   as_nanoarrow_schema(arrow::schema(col1 = arrow::float64()))
+   #> <nanoarrow_schema struct>
+   #>  $ format    : chr "+s"
+   #>  $ name      : chr ""
+   #>  $ metadata  : list()
+   #>  $ flags     : int 0
+   #>  $ children  :List of 1
+   #>   ..$ col1:<nanoarrow_schema double>
+   #>   .. ..$ format    : chr "g"
+   #>   .. ..$ name      : chr "col1"
+   #>   .. ..$ metadata  : list()
+   #>   .. ..$ flags     : int 2
+   #>   .. ..$ children  : list()
+   #>   .. ..$ dictionary: NULL
+   #>  $ dictionary: NULL
+   na_int64()
+   #> <nanoarrow_schema int64>
+   #>  $ format    : chr "l"
+   #>  $ name      : chr ""
+   #>  $ metadata  : list()
+   #>  $ flags     : int 2
+   #>  $ children  : list()
+   #>  $ dictionary: NULL
+
+Arrays
+~~~~~~
+
+Use ``as_nanoarrow_array()`` to convert an object to an ArrowArray
+object:
+
+.. code:: r
+
+   as_nanoarrow_array(1:5)
+   #> <nanoarrow_array int32[5]>
+   #>  $ length    : int 5
+   #>  $ null_count: int 0
+   #>  $ offset    : int 0
+   #>  $ buffers   :List of 2
+   #>   ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>   ..$ :<nanoarrow_buffer data<int32>[5][20 b]> `1 2 3 4 5`
+   #>  $ dictionary: NULL
+   #>  $ children  : list()
+   as_nanoarrow_array(data.frame(col1 = c(1.1, 2.2)))
+   #> <nanoarrow_array struct[2]>
+   #>  $ length    : int 2
+   #>  $ null_count: int 0
+   #>  $ offset    : int 0
+   #>  $ buffers   :List of 1
+   #>   ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>  $ children  :List of 1
+   #>   ..$ col1:<nanoarrow_array double[2]>
+   #>   .. ..$ length    : int 2
+   #>   .. ..$ null_count: int 0
+   #>   .. ..$ offset    : int 0
+   #>   .. ..$ buffers   :List of 2
+   #>   .. .. ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>   .. .. ..$ :<nanoarrow_buffer data<double>[2][16 b]> `1.1 2.2`
+   #>   .. ..$ dictionary: NULL
+   #>   .. ..$ children  : list()
+   #>  $ dictionary: NULL
+
+You can use ``as.vector()`` or ``as.data.frame()`` to get the R
+representation of the object back:
+
+.. code:: r
+
+   array <- as_nanoarrow_array(data.frame(col1 = c(1.1, 2.2)))
+   as.data.frame(array)
+   #>   col1
+   #> 1  1.1
+   #> 2  2.2
+
+Even though at the C level the ArrowArray is distinct from the
+ArrowSchema, at the R level we attach a schema wherever possible. You
+can access the attached schema using ``infer_nanoarrow_schema()``:
+
+.. code:: r
+
+   infer_nanoarrow_schema(array)
+   #> <nanoarrow_schema struct>
+   #>  $ format    : chr "+s"
+   #>  $ name      : chr ""
+   #>  $ metadata  : list()
+   #>  $ flags     : int 0
+   #>  $ children  :List of 1
+   #>   ..$ col1:<nanoarrow_schema double>
+   #>   .. ..$ format    : chr "g"
+   #>   .. ..$ name      : chr "col1"
+   #>   .. ..$ metadata  : list()
+   #>   .. ..$ flags     : int 2
+   #>   .. ..$ children  : list()
+   #>   .. ..$ dictionary: NULL
+   #>  $ dictionary: NULL
+
+Array Streams
+~~~~~~~~~~~~~
+
+The easiest way to create an ArrowArrayStream is from a list of arrays
+or objects that can be converted to an array using
+``as_nanoarrow_array()``:
+
+.. code:: r
+
+   stream <- basic_array_stream(
+     list(
+       data.frame(col1 = c(1.1, 2.2)),
+       data.frame(col1 = c(3.3, 4.4))
+     )
+   )
+
+You can pull batches from the stream using the ``$get_next()`` method.
+The last batch will return ``NULL``.
+
+.. code:: r
+
+   stream$get_next()
+   #> <nanoarrow_array struct[2]>
+   #>  $ length    : int 2
+   #>  $ null_count: int 0
+   #>  $ offset    : int 0
+   #>  $ buffers   :List of 1
+   #>   ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>  $ children  :List of 1
+   #>   ..$ col1:<nanoarrow_array double[2]>
+   #>   .. ..$ length    : int 2
+   #>   .. ..$ null_count: int 0
+   #>   .. ..$ offset    : int 0
+   #>   .. ..$ buffers   :List of 2
+   #>   .. .. ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>   .. .. ..$ :<nanoarrow_buffer data<double>[2][16 b]> `1.1 2.2`
+   #>   .. ..$ dictionary: NULL
+   #>   .. ..$ children  : list()
+   #>  $ dictionary: NULL
+   stream$get_next()
+   #> <nanoarrow_array struct[2]>
+   #>  $ length    : int 2
+   #>  $ null_count: int 0
+   #>  $ offset    : int 0
+   #>  $ buffers   :List of 1
+   #>   ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>  $ children  :List of 1
+   #>   ..$ col1:<nanoarrow_array double[2]>
+   #>   .. ..$ length    : int 2
+   #>   .. ..$ null_count: int 0
+   #>   .. ..$ offset    : int 0
+   #>   .. ..$ buffers   :List of 2
+   #>   .. .. ..$ :<nanoarrow_buffer validity<bool>[0][0 b]> ``
+   #>   .. .. ..$ :<nanoarrow_buffer data<double>[2][16 b]> `3.3 4.4`
+   #>   .. ..$ dictionary: NULL
+   #>   .. ..$ children  : list()
+   #>  $ dictionary: NULL
+   stream$get_next()
+   #> NULL
+
+You can pull all the batches into a ``data.frame()`` by calling
+``as.data.frame()`` or ``as.vector()``:
+
+.. code:: r
+
+   stream <- basic_array_stream(
+     list(
+       data.frame(col1 = c(1.1, 2.2)),
+       data.frame(col1 = c(3.3, 4.4))
+     )
+   )
+
+   as.data.frame(stream)
+   #>   col1
+   #> 1  1.1
+   #> 2  2.2
+   #> 3  3.3
+   #> 4  4.4
+
+After consuming a stream, you should call the release method as soon as
+you can. This lets the implementation of the stream release any
+resources (like open files) it may be holding in a more predictable way
+than waiting for the garbage collector to clean up the object.
+
+Integration with the arrow package
+----------------------------------
+
+The nanoarrow package implements ``as_nanoarrow_schema()``,
+``as_nanoarrow_array()``, and ``as_nanoarrow_array_stream()`` for most
+arrow package types. Similarly, it implements
+``arrow::as_arrow_array()``, ``arrow::as_record_batch()``,
+``arrow::as_arrow_table()``, ``arrow::as_record_batch_reader()``,
+``arrow::infer_type()``, ``arrow::as_data_type()``, and
+``arrow::as_schema()`` for nanoarrow objects such that you can pass
+equivalent nanoarrow objects into many arrow functions and vice versa.
diff --git a/0.8.0/_sources/index.rst.txt b/0.8.0/_sources/index.rst.txt
new file mode 100644
index 00000000..9076df54
--- /dev/null
+++ b/0.8.0/_sources/index.rst.txt
@@ -0,0 +1,28 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+.. include:: README_generated.rst
+
+Contents
+--------
+
+.. toctree::
+   :maxdepth: 2
+
+   Getting Started <getting-started/index>
+   Roadmap <roadmap>
+   API Reference <reference/index>
diff --git a/0.8.0/_sources/reference/c.rst.txt b/0.8.0/_sources/reference/c.rst.txt
new file mode 100644
index 00000000..97d4d6ef
--- /dev/null
+++ b/0.8.0/_sources/reference/c.rst.txt
@@ -0,0 +1,78 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+C API Reference
+==================
+
+.. doxygengroup:: nanoarrow
+
+Creating schemas
+------------------
+.. doxygengroup:: nanoarrow-schema
+   :members:
+
+Reading schemas
+------------------
+.. doxygengroup:: nanoarrow-schema-view
+   :members:
+
+Creating arrays
+------------------
+.. doxygengroup:: nanoarrow-array
+   :members:
+
+Reading arrays
+------------------
+.. doxygengroup:: nanoarrow-array-view
+   :members:
+
+Owning, growable buffers
+------------------------
+.. doxygengroup:: nanoarrow-buffer
+   :members:
+
+Bitmap utilities
+------------------
+.. doxygengroup:: nanoarrow-bitmap
+   :members:
+
+Create, read, and modify schema metadata
+----------------------------------------
+.. doxygengroup:: nanoarrow-metadata
+   :members:
+
+Memory management
+------------------
+.. doxygengroup:: nanoarrow-malloc
+   :members:
+
+Error handling
+------------------
+.. doxygengroup:: nanoarrow-errors
+   :members:
+
+Utility data structures
+-----------------------
+.. doxygengroup:: nanoarrow-utils
+   :members:
+
+Arrow C Data Interface
+----------------------
+
+.. doxygengroup:: nanoarrow-arrow-cdata
+   :members:
+   :undoc-members:
diff --git a/0.8.0/_sources/reference/cpp.rst.txt b/0.8.0/_sources/reference/cpp.rst.txt
new file mode 100644
index 00000000..7736800f
--- /dev/null
+++ b/0.8.0/_sources/reference/cpp.rst.txt
@@ -0,0 +1,50 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+C++ API Reference
+==================
+
+.. doxygengroup:: nanoarrow_hpp
+
+Error handling
+--------------
+
+.. doxygengroup:: nanoarrow_hpp-errors
+   :members:
+
+Owning object wrappers
+----------------------
+.. doxygengroup:: nanoarrow_hpp-unique
+   :members:
+
+Array Stream utilities
+----------------------
+
+.. doxygengroup:: nanoarrow_hpp-array-stream
+   :members:
+
+Buffer utilities
+----------------
+
+.. doxygengroup:: nanoarrow_hpp-buffer
+   :members:
+
+Range-for utilities
+-------------------
+
+.. doxygengroup:: nanoarrow_hpp-range_for
+   :members:
diff --git a/0.8.0/_sources/reference/device.rst.txt b/0.8.0/_sources/reference/device.rst.txt
new file mode 100644
index 00000000..56cc5428
--- /dev/null
+++ b/0.8.0/_sources/reference/device.rst.txt
@@ -0,0 +1,41 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Device Extension Reference
+==========================
+
+C API
+------------------------
+
+.. doxygengroup:: nanoarrow_device
+   :project: nanoarrow_c
+   :members:
+
+C++ Helpers
+------------------------
+
+.. doxygengroup:: nanoarrow_device_hpp-unique
+   :project: nanoarrow_c
+   :members:
+
+Arrow C Device Interface
+------------------------
+
+.. doxygengroup:: nanoarrow_device-arrow-cdata
+   :project: nanoarrow_c
+   :members:
+   :undoc-members:
diff --git a/0.8.0/_sources/reference/index.rst.txt b/0.8.0/_sources/reference/index.rst.txt
new file mode 100644
index 00000000..d0b9fa93
--- /dev/null
+++ b/0.8.0/_sources/reference/index.rst.txt
@@ -0,0 +1,30 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+API Reference
+=============
+
+.. toctree::
+   :maxdepth: 2
+
+   R API Reference <r>
+   Python API Reference <python/index>
+   C API Reference <c>
+   C++ API Reference <cpp>
+   Testing API Reference <testing>
+   IPC Extension Reference <ipc>
+   Device Extension Reference <device>
diff --git a/0.8.0/_sources/reference/ipc.rst.txt b/0.8.0/_sources/reference/ipc.rst.txt
new file mode 100644
index 00000000..7d3ae1e1
--- /dev/null
+++ b/0.8.0/_sources/reference/ipc.rst.txt
@@ -0,0 +1,33 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+IPC Extension Reference
+=======================
+
+C API
+------------------------
+
+.. doxygengroup:: nanoarrow_ipc
+   :project: nanoarrow_c
+   :members:
+
+C++ Helpers
+------------------------
+
+.. doxygengroup:: nanoarrow_ipc_hpp-unique
+   :project: nanoarrow_c
+   :members:
diff --git a/0.8.0/_sources/reference/python/advanced.rst.txt b/0.8.0/_sources/reference/python/advanced.rst.txt
new file mode 100644
index 00000000..631396b1
--- /dev/null
+++ b/0.8.0/_sources/reference/python/advanced.rst.txt
@@ -0,0 +1,37 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Low-level Helpers
+=================
+
+C Schema Utilities
+------------------
+
+.. automodule:: nanoarrow.c_schema
+    :members:
+
+C Array Utilities
+-----------------
+
+.. automodule:: nanoarrow.c_array
+    :members:
+
+C ArrayStream Utilities
+-----------------------
+
+.. automodule:: nanoarrow.c_array_stream
+    :members:
diff --git a/0.8.0/_sources/reference/python/array-stream.rst.txt b/0.8.0/_sources/reference/python/array-stream.rst.txt
new file mode 100644
index 00000000..451a6688
--- /dev/null
+++ b/0.8.0/_sources/reference/python/array-stream.rst.txt
@@ -0,0 +1,22 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+High-level ArrayStream Implementation
+=====================================
+
+.. automodule:: nanoarrow.array_stream
+    :members:
diff --git a/0.8.0/_sources/reference/python/array.rst.txt b/0.8.0/_sources/reference/python/array.rst.txt
new file mode 100644
index 00000000..392c3241
--- /dev/null
+++ b/0.8.0/_sources/reference/python/array.rst.txt
@@ -0,0 +1,22 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+High-level ArrayStream Implementation
+=====================================
+
+.. automodule:: nanoarrow.array
+    :members:
diff --git a/0.8.0/_sources/reference/python/index.rst.txt b/0.8.0/_sources/reference/python/index.rst.txt
new file mode 100644
index 00000000..7729a7c6
--- /dev/null
+++ b/0.8.0/_sources/reference/python/index.rst.txt
@@ -0,0 +1,29 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Python API reference
+====================
+
+.. automodule:: nanoarrow
+
+.. toctree::
+   :maxdepth: 2
+
+   Schema/DataType Objects <schema>
+   High-level Array Implementation <array>
+   High-level ArrayStream Implementation <array-stream>
+   Low-level Helpers <advanced>
diff --git a/0.8.0/_sources/reference/python/schema.rst.txt b/0.8.0/_sources/reference/python/schema.rst.txt
new file mode 100644
index 00000000..b52a20ed
--- /dev/null
+++ b/0.8.0/_sources/reference/python/schema.rst.txt
@@ -0,0 +1,22 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Schema/Data Type Objects
+========================
+
+.. automodule:: nanoarrow.schema
+    :members:
diff --git a/0.8.0/_sources/reference/r.rst.txt b/0.8.0/_sources/reference/r.rst.txt
new file mode 100644
index 00000000..69becb16
--- /dev/null
+++ b/0.8.0/_sources/reference/r.rst.txt
@@ -0,0 +1,21 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+R API Reference
+==================
+
+See `R Documentation <../r/reference/index.html>`__.
diff --git a/0.8.0/_sources/reference/testing.rst.txt b/0.8.0/_sources/reference/testing.rst.txt
new file mode 100644
index 00000000..059099c4
--- /dev/null
+++ b/0.8.0/_sources/reference/testing.rst.txt
@@ -0,0 +1,27 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+
+..   http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+Testing API Reference
+======================
+
+.. doxygengroup:: nanoarrow_testing
+
+Integration testing JSON
+------------------------
+
+.. doxygengroup:: nanoarrow_testing-json
+    :members:
diff --git a/0.8.0/_sources/roadmap.rst.txt b/0.8.0/_sources/roadmap.rst.txt
new file mode 100644
index 00000000..5b6b92a2
--- /dev/null
+++ b/0.8.0/_sources/roadmap.rst.txt
@@ -0,0 +1,103 @@
+.. raw:: html
+
+   <!---
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF licenses this file
+     to you under the Apache License, Version 2.0 (the
+     "License"); you may not use this file except in compliance
+     with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing,
+     software distributed under the License is distributed on an
+     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     KIND, either express or implied.  See the License for the
+     specific language governing permissions and limitations
+     under the License.
+   -->
+
+Roadmap
+=======
+
+Apache Arrow nanoarrow is a relatively new library and is under active
+development. Maintaining the balance between useful and minimal is
+difficult to do; however, there are a number of features that fit
+comforably within the scope of nanoarrow that have not yet been
+scheduled for implementation.
+
+C library
+---------
+
+-  **Type coverage**: The C library currently provides support for all
+   types that are available via the Arrow C Data interface except string
+   view/list view types. Support for these should be added in nanoarrow
+   as well
+   (`#583 <https://github.com/apache/arrow-nanoarrow/issues/583>`__,
+   `#616 <https://github.com/apache/arrow-nanoarrow/issues/616>`__,
+   `#510 <https://github.com/apache/arrow-nanoarrow/issues/510>`__).
+-  **Remove Arrow C++ dependency for tests**: The C library and IPC
+   extension rely on Arrow C++ for some test code that was written early
+   in the library’s development. These tests are valuable to ensure
+   compatibility between nanoarrow and Arrow C++; however, including
+   them in the default test suite complicates release verification for
+   some users and prevents testing in environments where Arrow C++ does
+   not currently build (e.g., WASM, compilers without C++17 support)
+   (`#619 <https://github.com/apache/arrow-nanoarrow/issues/619>`__).
+-  **Test verbosity**: Tests for the C library were written before
+   testing utilities in the ``nanoarrow_testing`` library were available
+   (and before there was a ``nanoarrow_testing`` library in which to put
+   new ones). As a result, some of them are very verbose and can be
+   difficult to read, which can and should be improved
+   (`#577 <https://github.com/apache/arrow-nanoarrow/issues/577>`__,
+   `#566 <https://github.com/apache/arrow-nanoarrow/issues/566>`__).
+-  **C++ integration**: The existing C++ integration is intentionally
+   minimal; however, there are likely improvements that could be made to
+   better integrate nanoarrow into existing C++ projects
+   (`#599 <https://github.com/apache/arrow-nanoarrow/issues/599>`__).
+-  **Documentation**: As the C library and its user base evolves,
+   documentation needs to be refined and expanded to support the current
+   set of use cases
+   (`#187 <https://github.com/apache/arrow-nanoarrow/issues/187>`__,
+   `#497 <https://github.com/apache/arrow-nanoarrow/issues/497>`__).
+-  **IPC Dictionary support**: The IPC extension does not currently
+   support reading dictionary messages an IPC stream
+   (`#622 <https://github.com/apache/arrow-nanoarrow/issues/622>`__).
+-  **IPC Compression support**: The IPC extension does not currently
+   support compressed streams using per-buffer compression, although
+   streams can be compressed outside the nanoarrow library (e.g., gzip
+   compression of the entire stream)
+   (`#621 <https://github.com/apache/arrow-nanoarrow/issues/621>`__)
+
+R bindings
+----------
+
+-  **Conversion internals**: The initial implementation of conversion
+   from Arrow data to R vectors was implemented in C and its verbosity
+   makes it difficult to add support for new types. The internals should
+   be refactored to make the conversion code easier to understand for
+   new developers
+   (`#392 <https://github.com/apache/arrow-nanoarrow/pull/392>`__).
+-  **Type support**: The R bindings currently rely on the Arrow R
+   package for conversion of some R types (e.g., list_of), and some
+   types are not supported in nanoarrow nor the arrow R package (e.g.,
+   run-end encoding, list view, and string/binary view)
+   (`#617 <https://github.com/apache/arrow-nanoarrow/issues/617>`__).
+-  **ALTREP support**: A recent R release added enhanced ALTREP support
+   such that types that convert to ``list()`` can defer materialization
+   cost/allocation. Arrow sources that arrive in chunks (e.g., from a
+   ``Table`` or ``ChunkedArray``) currently can’t be converted via any
+   ALTREP mechanism and support could be added
+   (`#219 <https://github.com/apache/arrow-nanoarrow/issues/219>`__).
+
+Python bindings
+---------------
+
+-  **Type support**: The Python bindings do not currently support
+   unions, string/binary view, or list view, or run-end-encoded types.
+   When creating Arrow arrays from iterables of Python objects, some
+   types are not yet supported (e.g., struct, list, datetime objects)
+   (`#618 <https://github.com/apache/arrow-nanoarrow/issues/618>`__,
+   `#620 <https://github.com/apache/arrow-nanoarrow/issues/620>`__).
diff --git a/0.8.0/_static/base-stemmer.js b/0.8.0/_static/base-stemmer.js
new file mode 100644
index 00000000..e6fa0c49
--- /dev/null
+++ b/0.8.0/_static/base-stemmer.js
@@ -0,0 +1,476 @@
+// @ts-check
+
+/**@constructor*/
+BaseStemmer = function() {
+    /** @protected */
+    this.current = '';
+    this.cursor = 0;
+    this.limit = 0;
+    this.limit_backward = 0;
+    this.bra = 0;
+    this.ket = 0;
+
+    /**
+     * @param {string} value
+     */
+    this.setCurrent = function(value) {
+        this.current = value;
+        this.cursor = 0;
+        this.limit = this.current.length;
+        this.limit_backward = 0;
+        this.bra = this.cursor;
+        this.ket = this.limit;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.getCurrent = function() {
+        return this.current;
+    };
+
+    /**
+     * @param {BaseStemmer} other
+     */
+    this.copy_from = function(other) {
+        /** @protected */
+        this.current          = other.current;
+        this.cursor           = other.cursor;
+        this.limit            = other.limit;
+        this.limit_backward   = other.limit_backward;
+        this.bra              = other.bra;
+        this.ket              = other.ket;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.in_grouping = function(s, min, max) {
+        /** @protected */
+        if (this.cursor >= this.limit) return false;
+        var ch = this.current.charCodeAt(this.cursor);
+        if (ch > max || ch < min) return false;
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
+        this.cursor++;
+        return true;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_in_grouping = function(s, min, max) {
+        /** @protected */
+        while (this.cursor < this.limit) {
+            var ch = this.current.charCodeAt(this.cursor);
+            if (ch > max || ch < min)
+                return true;
+            ch -= min;
+            if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0)
+                return true;
+            this.cursor++;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.in_grouping_b = function(s, min, max) {
+        /** @protected */
+        if (this.cursor <= this.limit_backward) return false;
+        var ch = this.current.charCodeAt(this.cursor - 1);
+        if (ch > max || ch < min) return false;
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
+        this.cursor--;
+        return true;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_in_grouping_b = function(s, min, max) {
+        /** @protected */
+        while (this.cursor > this.limit_backward) {
+            var ch = this.current.charCodeAt(this.cursor - 1);
+            if (ch > max || ch < min) return true;
+            ch -= min;
+            if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true;
+            this.cursor--;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.out_grouping = function(s, min, max) {
+        /** @protected */
+        if (this.cursor >= this.limit) return false;
+        var ch = this.current.charCodeAt(this.cursor);
+        if (ch > max || ch < min) {
+            this.cursor++;
+            return true;
+        }
+        ch -= min;
+        if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
+            this.cursor++;
+            return true;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_out_grouping = function(s, min, max) {
+        /** @protected */
+        while (this.cursor < this.limit) {
+            var ch = this.current.charCodeAt(this.cursor);
+            if (ch <= max && ch >= min) {
+                ch -= min;
+                if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) {
+                    return true;
+                }
+            }
+            this.cursor++;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.out_grouping_b = function(s, min, max) {
+        /** @protected */
+        if (this.cursor <= this.limit_backward) return false;
+        var ch = this.current.charCodeAt(this.cursor - 1);
+        if (ch > max || ch < min) {
+            this.cursor--;
+            return true;
+        }
+        ch -= min;
+        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
+            this.cursor--;
+            return true;
+        }
+        return false;
+    };
+
+    /**
+     * @param {number[]} s
+     * @param {number} min
+     * @param {number} max
+     * @return {boolean}
+     */
+    this.go_out_grouping_b = function(s, min, max) {
+        /** @protected */
+        while (this.cursor > this.limit_backward) {
+            var ch = this.current.charCodeAt(this.cursor - 1);
+            if (ch <= max && ch >= min) {
+                ch -= min;
+                if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) {
+                    return true;
+                }
+            }
+            this.cursor--;
+        }
+        return false;
+    };
+
+    /**
+     * @param {string} s
+     * @return {boolean}
+     */
+    this.eq_s = function(s)
+    {
+        /** @protected */
+        if (this.limit - this.cursor < s.length) return false;
+        if (this.current.slice(this.cursor, this.cursor + s.length) != s)
+        {
+            return false;
+        }
+        this.cursor += s.length;
+        return true;
+    };
+
+    /**
+     * @param {string} s
+     * @return {boolean}
+     */
+    this.eq_s_b = function(s)
+    {
+        /** @protected */
+        if (this.cursor - this.limit_backward < s.length) return false;
+        if (this.current.slice(this.cursor - s.length, this.cursor) != s)
+        {
+            return false;
+        }
+        this.cursor -= s.length;
+        return true;
+    };
+
+    /**
+     * @param {Among[]} v
+     * @return {number}
+     */
+    this.find_among = function(v)
+    {
+        /** @protected */
+        var i = 0;
+        var j = v.length;
+
+        var c = this.cursor;
+        var l = this.limit;
+
+        var common_i = 0;
+        var common_j = 0;
+
+        var first_key_inspected = false;
+
+        while (true)
+        {
+            var k = i + ((j - i) >>> 1);
+            var diff = 0;
+            var common = common_i < common_j ? common_i : common_j; // smaller
+            // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
+            var w = v[k];
+            var i2;
+            for (i2 = common; i2 < w[0].length; i2++)
+            {
+                if (c + common == l)
+                {
+                    diff = -1;
+                    break;
+                }
+                diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
+                if (diff != 0) break;
+                common++;
+            }
+            if (diff < 0)
+            {
+                j = k;
+                common_j = common;
+            }
+            else
+            {
+                i = k;
+                common_i = common;
+            }
+            if (j - i <= 1)
+            {
+                if (i > 0) break; // v->s has been inspected
+                if (j == i) break; // only one item in v
+
+                // - but now we need to go round once more to get
+                // v->s inspected. This looks messy, but is actually
+                // the optimal approach.
+
+                if (first_key_inspected) break;
+                first_key_inspected = true;
+            }
+        }
+        do {
+            var w = v[i];
+            if (common_i >= w[0].length)
+            {
+                this.cursor = c + w[0].length;
+                if (w.length < 4) return w[2];
+                var res = w[3](this);
+                this.cursor = c + w[0].length;
+                if (res) return w[2];
+            }
+            i = w[1];
+        } while (i >= 0);
+        return 0;
+    };
+
+    // find_among_b is for backwards processing. Same comments apply
+    /**
+     * @param {Among[]} v
+     * @return {number}
+     */
+    this.find_among_b = function(v)
+    {
+        /** @protected */
+        var i = 0;
+        var j = v.length
+
+        var c = this.cursor;
+        var lb = this.limit_backward;
+
+        var common_i = 0;
+        var common_j = 0;
+
+        var first_key_inspected = false;
+
+        while (true)
+        {
+            var k = i + ((j - i) >> 1);
+            var diff = 0;
+            var common = common_i < common_j ? common_i : common_j;
+            var w = v[k];
+            var i2;
+            for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
+            {
+                if (c - common == lb)
+                {
+                    diff = -1;
+                    break;
+                }
+                diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
+                if (diff != 0) break;
+                common++;
+            }
+            if (diff < 0)
+            {
+                j = k;
+                common_j = common;
+            }
+            else
+            {
+                i = k;
+                common_i = common;
+            }
+            if (j - i <= 1)
+            {
+                if (i > 0) break;
+                if (j == i) break;
+                if (first_key_inspected) break;
+                first_key_inspected = true;
+            }
+        }
+        do {
+            var w = v[i];
+            if (common_i >= w[0].length)
+            {
+                this.cursor = c - w[0].length;
+                if (w.length < 4) return w[2];
+                var res = w[3](this);
+                this.cursor = c - w[0].length;
+                if (res) return w[2];
+            }
+            i = w[1];
+        } while (i >= 0);
+        return 0;
+    };
+
+    /* to replace chars between c_bra and c_ket in this.current by the
+     * chars in s.
+     */
+    /**
+     * @param {number} c_bra
+     * @param {number} c_ket
+     * @param {string} s
+     * @return {number}
+     */
+    this.replace_s = function(c_bra, c_ket, s)
+    {
+        /** @protected */
+        var adjustment = s.length - (c_ket - c_bra);
+        this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
+        this.limit += adjustment;
+        if (this.cursor >= c_ket) this.cursor += adjustment;
+        else if (this.cursor > c_bra) this.cursor = c_bra;
+        return adjustment;
+    };
+
+    /**
+     * @return {boolean}
+     */
+    this.slice_check = function()
+    {
+        /** @protected */
+        if (this.bra < 0 ||
+            this.bra > this.ket ||
+            this.ket > this.limit ||
+            this.limit > this.current.length)
+        {
+            return false;
+        }
+        return true;
+    };
+
+    /**
+     * @param {number} c_bra
+     * @return {boolean}
+     */
+    this.slice_from = function(s)
+    {
+        /** @protected */
+        var result = false;
+        if (this.slice_check())
+        {
+            this.replace_s(this.bra, this.ket, s);
+            result = true;
+        }
+        return result;
+    };
+
+    /**
+     * @return {boolean}
+     */
+    this.slice_del = function()
+    {
+        /** @protected */
+        return this.slice_from("");
+    };
+
+    /**
+     * @param {number} c_bra
+     * @param {number} c_ket
+     * @param {string} s
+     */
+    this.insert = function(c_bra, c_ket, s)
+    {
+        /** @protected */
+        var adjustment = this.replace_s(c_bra, c_ket, s);
+        if (c_bra <= this.bra) this.bra += adjustment;
+        if (c_bra <= this.ket) this.ket += adjustment;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.slice_to = function()
+    {
+        /** @protected */
+        var result = '';
+        if (this.slice_check())
+        {
+            result = this.current.slice(this.bra, this.ket);
+        }
+        return result;
+    };
+
+    /**
+     * @return {string}
+     */
+    this.assign_to = function()
+    {
+        /** @protected */
+        return this.current.slice(0, this.limit);
+    };
+};
diff --git a/0.8.0/_static/basic.css b/0.8.0/_static/basic.css
new file mode 100644
index 00000000..4738b2ed
--- /dev/null
+++ b/0.8.0/_static/basic.css
@@ -0,0 +1,906 @@
+/*
+ * Sphinx stylesheet -- basic theme.
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox form.search {
+    overflow: hidden;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    float: left;
+    width: 80%;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    float: left;
+    width: 20%;
+    border-left: none;
+    padding: 0.25em;
+    box-sizing: border-box;
+}
+
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin-top: 10px;
+}
+
+ul.search li {
+    padding: 5px 0;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li p.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable ul {
+    margin-top: 0;
+    margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body {
+    min-width: 360px;
+    max-width: 800px;
+}
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+a:visited {
+    color: #551A8B;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, figure.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-default {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar,
+aside.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+    clear: right;
+    overflow-x: auto;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+nav.contents,
+aside.topic,
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+nav.contents,
+aside.topic,
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.align-center {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+th > :first-child,
+td > :first-child {
+    margin-top: 0px;
+}
+
+th > :last-child,
+td > :last-child {
+    margin-bottom: 0px;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure, figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption, figcaption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+/* -- hlist styles ---------------------------------------------------------- */
+
+table.hlist {
+    margin: 1em 0;
+}
+
+table.hlist td {
+    vertical-align: top;
+}
+
+/* -- object description styles --------------------------------------------- */
+
+.sig {
+	font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+}
+
+.sig-name, code.descname {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+.sig-name {
+	font-size: 1.1em;
+}
+
+code.descname {
+    font-size: 1.2em;
+}
+
+.sig-prename, code.descclassname {
+    background-color: transparent;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.sig-param.n {
+	font-style: italic;
+}
+
+/* C++ specific styling */
+
+.sig-inline.c-texpr,
+.sig-inline.cpp-texpr {
+	font-family: unset;
+}
+
+.sig.c   .k, .sig.c   .kt,
+.sig.cpp .k, .sig.cpp .kt {
+	color: #0033B3;
+}
+
+.sig.c   .m,
+.sig.cpp .m {
+	color: #1750EB;
+}
+
+.sig.c   .s, .sig.c   .sc,
+.sig.cpp .s, .sig.cpp .sc {
+	color: #067D17;
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
+    margin-top: 0px;
+}
+
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
+    margin-bottom: 0px;
+}
+
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
+aside.footnote > span,
+div.citation > span {
+    float: left;
+}
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+  padding-right: 0.5em;
+}
+aside.footnote > p {
+  margin-left: 2em;
+}
+div.citation > p {
+  margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
+    margin-bottom: 0em;
+}
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd > :first-child {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+.sig dd {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.sig dl {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
+dt:target, span.highlighted {
+    background-color: #fbe54e;
+}
+
+rect.highlighted {
+    fill: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+.classifier:before {
+    font-style: normal;
+    margin: 0 0.5em;
+    content: ":";
+    display: inline-block;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+pre, div[class*="highlight-"] {
+    clear: both;
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+    white-space: nowrap;
+}
+
+div[class*="highlight-"] {
+    margin: 1em 0;
+}
+
+td.linenos pre {
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
+}
+
+table.highlighttable td {
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
+}
+
+div.code-block-caption {
+    margin-top: 1em;
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+table.highlighttable td.linenos,
+span.linenos,
+div.highlight span.gp {  /* gp: Generic.Prompt */
+  user-select: none;
+  -webkit-user-select: text; /* Safari fallback only */
+  -webkit-user-select: none; /* Chrome/Safari */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* IE10+ */
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    margin: 1em 0;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+span.eqno a.headerlink {
+    position: absolute;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/latest/_static/doctools.js b/0.8.0/_static/doctools.js
similarity index 95%
copy from latest/_static/doctools.js
copy to 0.8.0/_static/doctools.js
index 0398ebb9..807cdb17 100644
--- a/latest/_static/doctools.js
+++ b/0.8.0/_static/doctools.js
@@ -59,7 +59,7 @@ const Documentation = {
     Object.assign(Documentation.TRANSLATIONS, catalog.messages);
     Documentation.PLURAL_EXPR = new Function(
       "n",
-      `return (${catalog.plural_expr})`
+      `return (${catalog.plural_expr})`,
     );
     Documentation.LOCALE = catalog.locale;
   },
@@ -89,7 +89,7 @@ const Documentation = {
 
     const togglerElements = document.querySelectorAll("img.toggler");
     togglerElements.forEach((el) =>
-      el.addEventListener("click", (event) => toggler(event.currentTarget))
+      el.addEventListener("click", (event) => toggler(event.currentTarget)),
     );
     togglerElements.forEach((el) => (el.style.display = ""));
     if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
@@ -98,14 +98,15 @@ const Documentation = {
   initOnKeyListeners: () => {
     // only install a listener if it is really needed
     if (
-      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
-      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS
+      && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
     )
       return;
 
     document.addEventListener("keydown", (event) => {
       // bail for input elements
-      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName))
+        return;
       // bail with special keys
       if (event.altKey || event.ctrlKey || event.metaKey) return;
 
diff --git a/0.8.0/_static/documentation_options.js b/0.8.0/_static/documentation_options.js
new file mode 100644
index 00000000..7e4c114f
--- /dev/null
+++ b/0.8.0/_static/documentation_options.js
@@ -0,0 +1,13 @@
+const DOCUMENTATION_OPTIONS = {
+    VERSION: '',
+    LANGUAGE: 'en',
+    COLLAPSE_INDEX: false,
+    BUILDER: 'html',
+    FILE_SUFFIX: '.html',
+    LINK_SUFFIX: '.html',
+    HAS_SOURCE: true,
+    SOURCELINK_SUFFIX: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/0.8.0/_static/english-stemmer.js b/0.8.0/_static/english-stemmer.js
new file mode 100644
index 00000000..056760ee
--- /dev/null
+++ b/0.8.0/_static/english-stemmer.js
@@ -0,0 +1,1066 @@
+// Generated from english.sbl by Snowball 3.0.1 - https://snowballstem.org/
+
+/**@constructor*/
+var EnglishStemmer = function() {
+    var base = new BaseStemmer();
+
+    /** @const */ var a_0 = [
+        ["arsen", -1, -1],
+        ["commun", -1, -1],
+        ["emerg", -1, -1],
+        ["gener", -1, -1],
+        ["later", -1, -1],
+        ["organ", -1, -1],
+        ["past", -1, -1],
+        ["univers", -1, -1]
+    ];
+
+    /** @const */ var a_1 = [
+        ["'", -1, 1],
+        ["'s'", 0, 1],
+        ["'s", -1, 1]
+    ];
+
+    /** @const */ var a_2 = [
+        ["ied", -1, 2],
+        ["s", -1, 3],
+        ["ies", 1, 2],
+        ["sses", 1, 1],
+        ["ss", 1, -1],
+        ["us", 1, -1]
+    ];
+
+    /** @const */ var a_3 = [
+        ["succ", -1, 1],
+        ["proc", -1, 1],
+        ["exc", -1, 1]
+    ];
+
+    /** @const */ var a_4 = [
+        ["even", -1, 2],
+        ["cann", -1, 2],
+        ["inn", -1, 2],
+        ["earr", -1, 2],
+        ["herr", -1, 2],
+        ["out", -1, 2],
+        ["y", -1, 1]
+    ];
+
+    /** @const */ var a_5 = [
+        ["", -1, -1],
+        ["ed", 0, 2],
+        ["eed", 1, 1],
+        ["ing", 0, 3],
+        ["edly", 0, 2],
+        ["eedly", 4, 1],
+        ["ingly", 0, 2]
+    ];
+
+    /** @const */ var a_6 = [
+        ["", -1, 3],
+        ["bb", 0, 2],
+        ["dd", 0, 2],
+        ["ff", 0, 2],
+        ["gg", 0, 2],
+        ["bl", 0, 1],
+        ["mm", 0, 2],
+        ["nn", 0, 2],
+        ["pp", 0, 2],
+        ["rr", 0, 2],
+        ["at", 0, 1],
+        ["tt", 0, 2],
+        ["iz", 0, 1]
+    ];
+
+    /** @const */ var a_7 = [
+        ["anci", -1, 3],
+        ["enci", -1, 2],
+        ["ogi", -1, 14],
+        ["li", -1, 16],
+        ["bli", 3, 12],
+        ["abli", 4, 4],
+        ["alli", 3, 8],
+        ["fulli", 3, 9],
+        ["lessli", 3, 15],
+        ["ousli", 3, 10],
+        ["entli", 3, 5],
+        ["aliti", -1, 8],
+        ["biliti", -1, 12],
+        ["iviti", -1, 11],
+        ["tional", -1, 1],
+        ["ational", 14, 7],
+        ["alism", -1, 8],
+        ["ation", -1, 7],
+        ["ization", 17, 6],
+        ["izer", -1, 6],
+        ["ator", -1, 7],
+        ["iveness", -1, 11],
+        ["fulness", -1, 9],
+        ["ousness", -1, 10],
+        ["ogist", -1, 13]
+    ];
+
+    /** @const */ var a_8 = [
+        ["icate", -1, 4],
+        ["ative", -1, 6],
+        ["alize", -1, 3],
+        ["iciti", -1, 4],
+        ["ical", -1, 4],
+        ["tional", -1, 1],
+        ["ational", 5, 2],
+        ["ful", -1, 5],
+        ["ness", -1, 5]
+    ];
+
+    /** @const */ var a_9 = [
+        ["ic", -1, 1],
+        ["ance", -1, 1],
+        ["ence", -1, 1],
+        ["able", -1, 1],
+        ["ible", -1, 1],
+        ["ate", -1, 1],
+        ["ive", -1, 1],
+        ["ize", -1, 1],
+        ["iti", -1, 1],
+        ["al", -1, 1],
+        ["ism", -1, 1],
+        ["ion", -1, 2],
+        ["er", -1, 1],
+        ["ous", -1, 1],
+        ["ant", -1, 1],
+        ["ent", -1, 1],
+        ["ment", 15, 1],
+        ["ement", 16, 1]
+    ];
+
+    /** @const */ var a_10 = [
+        ["e", -1, 1],
+        ["l", -1, 2]
+    ];
+
+    /** @const */ var a_11 = [
+        ["andes", -1, -1],
+        ["atlas", -1, -1],
+        ["bias", -1, -1],
+        ["cosmos", -1, -1],
+        ["early", -1, 5],
+        ["gently", -1, 3],
+        ["howe", -1, -1],
+        ["idly", -1, 2],
+        ["news", -1, -1],
+        ["only", -1, 6],
+        ["singly", -1, 7],
+        ["skies", -1, 1],
+        ["sky", -1, -1],
+        ["ugly", -1, 4]
+    ];
+
+    /** @const */ var /** Array<int> */ g_aeo = [17, 64];
+
+    /** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1];
+
+    /** @const */ var /** Array<int> */ g_v_WXY = [1, 17, 65, 208, 1];
+
+    /** @const */ var /** Array<int> */ g_valid_LI = [55, 141, 2];
+
+    var /** boolean */ B_Y_found = false;
+    var /** number */ I_p2 = 0;
+    var /** number */ I_p1 = 0;
+
+
+    /** @return {boolean} */
+    function r_prelude() {
+        B_Y_found = false;
+        /** @const */ var /** number */ v_1 = base.cursor;
+        lab0: {
+            base.bra = base.cursor;
+            if (!(base.eq_s("'")))
+            {
+                break lab0;
+            }
+            base.ket = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        base.cursor = v_1;
+        /** @const */ var /** number */ v_2 = base.cursor;
+        lab1: {
+            base.bra = base.cursor;
+            if (!(base.eq_s("y")))
+            {
+                break lab1;
+            }
+            base.ket = base.cursor;
+            if (!base.slice_from("Y"))
+            {
+                return false;
+            }
+            B_Y_found = true;
+        }
+        base.cursor = v_2;
+        /** @const */ var /** number */ v_3 = base.cursor;
+        lab2: {
+            while(true)
+            {
+                /** @const */ var /** number */ v_4 = base.cursor;
+                lab3: {
+                    golab4: while(true)
+                    {
+                        /** @const */ var /** number */ v_5 = base.cursor;
+                        lab5: {
+                            if (!(base.in_grouping(g_v, 97, 121)))
+                            {
+                                break lab5;
+                            }
+                            base.bra = base.cursor;
+                            if (!(base.eq_s("y")))
+                            {
+                                break lab5;
+                            }
+                            base.ket = base.cursor;
+                            base.cursor = v_5;
+                            break golab4;
+                        }
+                        base.cursor = v_5;
+                        if (base.cursor >= base.limit)
+                        {
+                            break lab3;
+                        }
+                        base.cursor++;
+                    }
+                    if (!base.slice_from("Y"))
+                    {
+                        return false;
+                    }
+                    B_Y_found = true;
+                    continue;
+                }
+                base.cursor = v_4;
+                break;
+            }
+        }
+        base.cursor = v_3;
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_mark_regions() {
+        I_p1 = base.limit;
+        I_p2 = base.limit;
+        /** @const */ var /** number */ v_1 = base.cursor;
+        lab0: {
+            lab1: {
+                /** @const */ var /** number */ v_2 = base.cursor;
+                lab2: {
+                    if (base.find_among(a_0) == 0)
+                    {
+                        break lab2;
+                    }
+                    break lab1;
+                }
+                base.cursor = v_2;
+                if (!base.go_out_grouping(g_v, 97, 121))
+                {
+                    break lab0;
+                }
+                base.cursor++;
+                if (!base.go_in_grouping(g_v, 97, 121))
+                {
+                    break lab0;
+                }
+                base.cursor++;
+            }
+            I_p1 = base.cursor;
+            if (!base.go_out_grouping(g_v, 97, 121))
+            {
+                break lab0;
+            }
+            base.cursor++;
+            if (!base.go_in_grouping(g_v, 97, 121))
+            {
+                break lab0;
+            }
+            base.cursor++;
+            I_p2 = base.cursor;
+        }
+        base.cursor = v_1;
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_shortv() {
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                if (!(base.out_grouping_b(g_v_WXY, 89, 121)))
+                {
+                    break lab1;
+                }
+                if (!(base.in_grouping_b(g_v, 97, 121)))
+                {
+                    break lab1;
+                }
+                if (!(base.out_grouping_b(g_v, 97, 121)))
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            lab2: {
+                if (!(base.out_grouping_b(g_v, 97, 121)))
+                {
+                    break lab2;
+                }
+                if (!(base.in_grouping_b(g_v, 97, 121)))
+                {
+                    break lab2;
+                }
+                if (base.cursor > base.limit_backward)
+                {
+                    break lab2;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            if (!(base.eq_s_b("past")))
+            {
+                return false;
+            }
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_R1() {
+        return I_p1 <= base.cursor;
+    };
+
+    /** @return {boolean} */
+    function r_R2() {
+        return I_p2 <= base.cursor;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1a() {
+        var /** number */ among_var;
+        /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+        lab0: {
+            base.ket = base.cursor;
+            if (base.find_among_b(a_1) == 0)
+            {
+                base.cursor = base.limit - v_1;
+                break lab0;
+            }
+            base.bra = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_2);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("ss"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                lab1: {
+                    /** @const */ var /** number */ v_2 = base.limit - base.cursor;
+                    lab2: {
+                        {
+                            /** @const */ var /** number */ c1 = base.cursor - 2;
+                            if (c1 < base.limit_backward)
+                            {
+                                break lab2;
+                            }
+                            base.cursor = c1;
+                        }
+                        if (!base.slice_from("i"))
+                        {
+                            return false;
+                        }
+                        break lab1;
+                    }
+                    base.cursor = base.limit - v_2;
+                    if (!base.slice_from("ie"))
+                    {
+                        return false;
+                    }
+                }
+                break;
+            case 3:
+                if (base.cursor <= base.limit_backward)
+                {
+                    return false;
+                }
+                base.cursor--;
+                if (!base.go_out_grouping_b(g_v, 97, 121))
+                {
+                    return false;
+                }
+                base.cursor--;
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1b() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_5);
+        base.bra = base.cursor;
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                switch (among_var) {
+                    case 1:
+                        /** @const */ var /** number */ v_2 = base.limit - base.cursor;
+                        lab2: {
+                            lab3: {
+                                /** @const */ var /** number */ v_3 = base.limit - base.cursor;
+                                lab4: {
+                                    if (base.find_among_b(a_3) == 0)
+                                    {
+                                        break lab4;
+                                    }
+                                    if (base.cursor > base.limit_backward)
+                                    {
+                                        break lab4;
+                                    }
+                                    break lab3;
+                                }
+                                base.cursor = base.limit - v_3;
+                                if (!r_R1())
+                                {
+                                    break lab2;
+                                }
+                                if (!base.slice_from("ee"))
+                                {
+                                    return false;
+                                }
+                            }
+                        }
+                        base.cursor = base.limit - v_2;
+                        break;
+                    case 2:
+                        break lab1;
+                    case 3:
+                        among_var = base.find_among_b(a_4);
+                        if (among_var == 0)
+                        {
+                            break lab1;
+                        }
+                        switch (among_var) {
+                            case 1:
+                                /** @const */ var /** number */ v_4 = base.limit - base.cursor;
+                                if (!(base.out_grouping_b(g_v, 97, 121)))
+                                {
+                                    break lab1;
+                                }
+                                if (base.cursor > base.limit_backward)
+                                {
+                                    break lab1;
+                                }
+                                base.cursor = base.limit - v_4;
+                                base.bra = base.cursor;
+                                if (!base.slice_from("ie"))
+                                {
+                                    return false;
+                                }
+                                break;
+                            case 2:
+                                if (base.cursor > base.limit_backward)
+                                {
+                                    break lab1;
+                                }
+                                break;
+                        }
+                        break;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            /** @const */ var /** number */ v_5 = base.limit - base.cursor;
+            if (!base.go_out_grouping_b(g_v, 97, 121))
+            {
+                return false;
+            }
+            base.cursor--;
+            base.cursor = base.limit - v_5;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+            base.ket = base.cursor;
+            base.bra = base.cursor;
+            /** @const */ var /** number */ v_6 = base.limit - base.cursor;
+            among_var = base.find_among_b(a_6);
+            switch (among_var) {
+                case 1:
+                    if (!base.slice_from("e"))
+                    {
+                        return false;
+                    }
+                    return false;
+                case 2:
+                    {
+                        /** @const */ var /** number */ v_7 = base.limit - base.cursor;
+                        lab5: {
+                            if (!(base.in_grouping_b(g_aeo, 97, 111)))
+                            {
+                                break lab5;
+                            }
+                            if (base.cursor > base.limit_backward)
+                            {
+                                break lab5;
+                            }
+                            return false;
+                        }
+                        base.cursor = base.limit - v_7;
+                    }
+                    break;
+                case 3:
+                    if (base.cursor != I_p1)
+                    {
+                        return false;
+                    }
+                    /** @const */ var /** number */ v_8 = base.limit - base.cursor;
+                    if (!r_shortv())
+                    {
+                        return false;
+                    }
+                    base.cursor = base.limit - v_8;
+                    if (!base.slice_from("e"))
+                    {
+                        return false;
+                    }
+                    return false;
+            }
+            base.cursor = base.limit - v_6;
+            base.ket = base.cursor;
+            if (base.cursor <= base.limit_backward)
+            {
+                return false;
+            }
+            base.cursor--;
+            base.bra = base.cursor;
+            if (!base.slice_del())
+            {
+                return false;
+            }
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_1c() {
+        base.ket = base.cursor;
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+            lab1: {
+                if (!(base.eq_s_b("y")))
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = base.limit - v_1;
+            if (!(base.eq_s_b("Y")))
+            {
+                return false;
+            }
+        }
+        base.bra = base.cursor;
+        if (!(base.out_grouping_b(g_v, 97, 121)))
+        {
+            return false;
+        }
+        lab2: {
+            if (base.cursor > base.limit_backward)
+            {
+                break lab2;
+            }
+            return false;
+        }
+        if (!base.slice_from("i"))
+        {
+            return false;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_2() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_7);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R1())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("tion"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("ence"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("ance"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("able"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_from("ent"))
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!base.slice_from("ize"))
+                {
+                    return false;
+                }
+                break;
+            case 7:
+                if (!base.slice_from("ate"))
+                {
+                    return false;
+                }
+                break;
+            case 8:
+                if (!base.slice_from("al"))
+                {
+                    return false;
+                }
+                break;
+            case 9:
+                if (!base.slice_from("ful"))
+                {
+                    return false;
+                }
+                break;
+            case 10:
+                if (!base.slice_from("ous"))
+                {
+                    return false;
+                }
+                break;
+            case 11:
+                if (!base.slice_from("ive"))
+                {
+                    return false;
+                }
+                break;
+            case 12:
+                if (!base.slice_from("ble"))
+                {
+                    return false;
+                }
+                break;
+            case 13:
+                if (!base.slice_from("og"))
+                {
+                    return false;
+                }
+                break;
+            case 14:
+                if (!(base.eq_s_b("l")))
+                {
+                    return false;
+                }
+                if (!base.slice_from("og"))
+                {
+                    return false;
+                }
+                break;
+            case 15:
+                if (!base.slice_from("less"))
+                {
+                    return false;
+                }
+                break;
+            case 16:
+                if (!(base.in_grouping_b(g_valid_LI, 99, 116)))
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_3() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_8);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R1())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("tion"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("ate"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("al"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("ic"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!r_R2())
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_4() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_9);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        if (!r_R2())
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                lab0: {
+                    /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+                    lab1: {
+                        if (!(base.eq_s_b("s")))
+                        {
+                            break lab1;
+                        }
+                        break lab0;
+                    }
+                    base.cursor = base.limit - v_1;
+                    if (!(base.eq_s_b("t")))
+                    {
+                        return false;
+                    }
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_Step_5() {
+        var /** number */ among_var;
+        base.ket = base.cursor;
+        among_var = base.find_among_b(a_10);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.bra = base.cursor;
+        switch (among_var) {
+            case 1:
+                lab0: {
+                    lab1: {
+                        if (!r_R2())
+                        {
+                            break lab1;
+                        }
+                        break lab0;
+                    }
+                    if (!r_R1())
+                    {
+                        return false;
+                    }
+                    {
+                        /** @const */ var /** number */ v_1 = base.limit - base.cursor;
+                        lab2: {
+                            if (!r_shortv())
+                            {
+                                break lab2;
+                            }
+                            return false;
+                        }
+                        base.cursor = base.limit - v_1;
+                    }
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!r_R2())
+                {
+                    return false;
+                }
+                if (!(base.eq_s_b("l")))
+                {
+                    return false;
+                }
+                if (!base.slice_del())
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_exception1() {
+        var /** number */ among_var;
+        base.bra = base.cursor;
+        among_var = base.find_among(a_11);
+        if (among_var == 0)
+        {
+            return false;
+        }
+        base.ket = base.cursor;
+        if (base.cursor < base.limit)
+        {
+            return false;
+        }
+        switch (among_var) {
+            case 1:
+                if (!base.slice_from("sky"))
+                {
+                    return false;
+                }
+                break;
+            case 2:
+                if (!base.slice_from("idl"))
+                {
+                    return false;
+                }
+                break;
+            case 3:
+                if (!base.slice_from("gentl"))
+                {
+                    return false;
+                }
+                break;
+            case 4:
+                if (!base.slice_from("ugli"))
+                {
+                    return false;
+                }
+                break;
+            case 5:
+                if (!base.slice_from("earli"))
+                {
+                    return false;
+                }
+                break;
+            case 6:
+                if (!base.slice_from("onli"))
+                {
+                    return false;
+                }
+                break;
+            case 7:
+                if (!base.slice_from("singl"))
+                {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    };
+
+    /** @return {boolean} */
+    function r_postlude() {
+        if (!B_Y_found)
+        {
+            return false;
+        }
+        while(true)
+        {
+            /** @const */ var /** number */ v_1 = base.cursor;
+            lab0: {
+                golab1: while(true)
+                {
+                    /** @const */ var /** number */ v_2 = base.cursor;
+                    lab2: {
+                        base.bra = base.cursor;
+                        if (!(base.eq_s("Y")))
+                        {
+                            break lab2;
+                        }
+                        base.ket = base.cursor;
+                        base.cursor = v_2;
+                        break golab1;
+                    }
+                    base.cursor = v_2;
+                    if (base.cursor >= base.limit)
+                    {
+                        break lab0;
+                    }
+                    base.cursor++;
+                }
+                if (!base.slice_from("y"))
+                {
+                    return false;
+                }
+                continue;
+            }
+            base.cursor = v_1;
+            break;
+        }
+        return true;
+    };
+
+    this.stem = /** @return {boolean} */ function() {
+        lab0: {
+            /** @const */ var /** number */ v_1 = base.cursor;
+            lab1: {
+                if (!r_exception1())
+                {
+                    break lab1;
+                }
+                break lab0;
+            }
+            base.cursor = v_1;
+            lab2: {
+                {
+                    /** @const */ var /** number */ v_2 = base.cursor;
+                    lab3: {
+                        {
+                            /** @const */ var /** number */ c1 = base.cursor + 3;
+                            if (c1 > base.limit)
+                            {
+                                break lab3;
+                            }
+                            base.cursor = c1;
+                        }
+                        break lab2;
+                    }
+                    base.cursor = v_2;
+                }
+                break lab0;
+            }
+            base.cursor = v_1;
+            r_prelude();
+            r_mark_regions();
+            base.limit_backward = base.cursor; base.cursor = base.limit;
+            /** @const */ var /** number */ v_3 = base.limit - base.cursor;
+            r_Step_1a();
+            base.cursor = base.limit - v_3;
+            /** @const */ var /** number */ v_4 = base.limit - base.cursor;
+            r_Step_1b();
+            base.cursor = base.limit - v_4;
+            /** @const */ var /** number */ v_5 = base.limit - base.cursor;
+            r_Step_1c();
+            base.cursor = base.limit - v_5;
+            /** @const */ var /** number */ v_6 = base.limit - base.cursor;
+            r_Step_2();
+            base.cursor = base.limit - v_6;
+            /** @const */ var /** number */ v_7 = base.limit - base.cursor;
+            r_Step_3();
+            base.cursor = base.limit - v_7;
+            /** @const */ var /** number */ v_8 = base.limit - base.cursor;
+            r_Step_4();
+            base.cursor = base.limit - v_8;
+            /** @const */ var /** number */ v_9 = base.limit - base.cursor;
+            r_Step_5();
+            base.cursor = base.limit - v_9;
+            base.cursor = base.limit_backward;
+            /** @const */ var /** number */ v_10 = base.cursor;
+            r_postlude();
+            base.cursor = v_10;
+        }
+        return true;
+    };
+
+    /**@return{string}*/
+    this['stemWord'] = function(/**string*/word) {
+        base.setCurrent(word);
+        this.stem();
+        return base.getCurrent();
+    };
+};
diff --git a/0.8.0/_static/file.png b/0.8.0/_static/file.png
new file mode 100644
index 00000000..a858a410
Binary files /dev/null and b/0.8.0/_static/file.png differ
diff --git a/0.8.0/_static/language_data.js b/0.8.0/_static/language_data.js
new file mode 100644
index 00000000..57767864
--- /dev/null
+++ b/0.8.0/_static/language_data.js
@@ -0,0 +1,13 @@
+/*
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the set of stopwords, stemmer, scorer and splitter.
+ */
+
+const stopwords = new Set(["a", "about", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here" [...]
+window.stopwords = stopwords;  // Export to global scope
+
+
+/* Non-minified versions are copied as separate JavaScript files, if available */
+BaseStemmer=function(){this.current="",this.cursor=0,this.limit=0,this.limit_backward=0,this.bra=0,this.ket=0,this.setCurrent=function(t){this.current=t,this.cursor=0,this.limit=this.current.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},this.getCurrent=function(){return this.current},this.copy_from=function(t){this.current=t.current,this.cursor=t.cursor,this.limit=t.limit,this.limit_backward=t.limit_backward,this.bra=t.bra,this.ket=t.ket},this.in_grouping=functio [...]
+var EnglishStemmer=function(){var a=new BaseStemmer,c=[["arsen",-1,-1],["commun",-1,-1],["emerg",-1,-1],["gener",-1,-1],["later",-1,-1],["organ",-1,-1],["past",-1,-1],["univers",-1,-1]],o=[["'",-1,1],["'s'",0,1],["'s",-1,1]],u=[["ied",-1,2],["s",-1,3],["ies",1,2],["sses",1,1],["ss",1,-1],["us",1,-1]],t=[["succ",-1,1],["proc",-1,1],["exc",-1,1]],l=[["even",-1,2],["cann",-1,2],["inn",-1,2],["earr",-1,2],["herr",-1,2],["out",-1,2],["y",-1,1]],n=[["",-1,-1],["ed",0,2],["eed",1,1],["ing",0,3] [...]
+window.Stemmer = EnglishStemmer;
diff --git a/0.8.0/_static/minus.png b/0.8.0/_static/minus.png
new file mode 100644
index 00000000..d96755fd
Binary files /dev/null and b/0.8.0/_static/minus.png differ
diff --git a/0.8.0/_static/plus.png b/0.8.0/_static/plus.png
new file mode 100644
index 00000000..7107cec9
Binary files /dev/null and b/0.8.0/_static/plus.png differ
diff --git a/0.8.0/_static/pygments.css b/0.8.0/_static/pygments.css
new file mode 100644
index 00000000..d7dd5778
--- /dev/null
+++ b/0.8.0/_static/pygments.css
@@ -0,0 +1,152 @@
+html[data-theme="light"] .highlight pre { line-height: 125%; }
+html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="light"] .highlight .hll { background-color: #fae4c2 }
+html[data-theme="light"] .highlight { background: #fefefe; color: #080808 }
+html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */
+html[data-theme="light"] .highlight .err { color: #A12236 } /* Error */
+html[data-theme="light"] .highlight .k { color: #6730C5 } /* Keyword */
+html[data-theme="light"] .highlight .l { color: #7F4707 } /* Literal */
+html[data-theme="light"] .highlight .n { color: #080808 } /* Name */
+html[data-theme="light"] .highlight .o { color: #00622F } /* Operator */
+html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */
+html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */
+html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */
+html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */
+html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */
+html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */
+html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */
+html[data-theme="light"] .highlight .gd { color: #005B82 } /* Generic.Deleted */
+html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */
+html[data-theme="light"] .highlight .gh { color: #005B82 } /* Generic.Heading */
+html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */
+html[data-theme="light"] .highlight .gu { color: #005B82 } /* Generic.Subheading */
+html[data-theme="light"] .highlight .kc { color: #6730C5 } /* Keyword.Constant */
+html[data-theme="light"] .highlight .kd { color: #6730C5 } /* Keyword.Declaration */
+html[data-theme="light"] .highlight .kn { color: #6730C5 } /* Keyword.Namespace */
+html[data-theme="light"] .highlight .kp { color: #6730C5 } /* Keyword.Pseudo */
+html[data-theme="light"] .highlight .kr { color: #6730C5 } /* Keyword.Reserved */
+html[data-theme="light"] .highlight .kt { color: #7F4707 } /* Keyword.Type */
+html[data-theme="light"] .highlight .ld { color: #7F4707 } /* Literal.Date */
+html[data-theme="light"] .highlight .m { color: #7F4707 } /* Literal.Number */
+html[data-theme="light"] .highlight .s { color: #00622F } /* Literal.String */
+html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */
+html[data-theme="light"] .highlight .nb { color: #7F4707 } /* Name.Builtin */
+html[data-theme="light"] .highlight .nc { color: #005B82 } /* Name.Class */
+html[data-theme="light"] .highlight .no { color: #005B82 } /* Name.Constant */
+html[data-theme="light"] .highlight .nd { color: #7F4707 } /* Name.Decorator */
+html[data-theme="light"] .highlight .ni { color: #00622F } /* Name.Entity */
+html[data-theme="light"] .highlight .ne { color: #6730C5 } /* Name.Exception */
+html[data-theme="light"] .highlight .nf { color: #005B82 } /* Name.Function */
+html[data-theme="light"] .highlight .nl { color: #7F4707 } /* Name.Label */
+html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */
+html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */
+html[data-theme="light"] .highlight .py { color: #005B82 } /* Name.Property */
+html[data-theme="light"] .highlight .nt { color: #005B82 } /* Name.Tag */
+html[data-theme="light"] .highlight .nv { color: #A12236 } /* Name.Variable */
+html[data-theme="light"] .highlight .ow { color: #6730C5 } /* Operator.Word */
+html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */
+html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */
+html[data-theme="light"] .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */
+html[data-theme="light"] .highlight .mf { color: #7F4707 } /* Literal.Number.Float */
+html[data-theme="light"] .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */
+html[data-theme="light"] .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */
+html[data-theme="light"] .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */
+html[data-theme="light"] .highlight .sa { color: #00622F } /* Literal.String.Affix */
+html[data-theme="light"] .highlight .sb { color: #00622F } /* Literal.String.Backtick */
+html[data-theme="light"] .highlight .sc { color: #00622F } /* Literal.String.Char */
+html[data-theme="light"] .highlight .dl { color: #00622F } /* Literal.String.Delimiter */
+html[data-theme="light"] .highlight .sd { color: #00622F } /* Literal.String.Doc */
+html[data-theme="light"] .highlight .s2 { color: #00622F } /* Literal.String.Double */
+html[data-theme="light"] .highlight .se { color: #00622F } /* Literal.String.Escape */
+html[data-theme="light"] .highlight .sh { color: #00622F } /* Literal.String.Heredoc */
+html[data-theme="light"] .highlight .si { color: #00622F } /* Literal.String.Interpol */
+html[data-theme="light"] .highlight .sx { color: #00622F } /* Literal.String.Other */
+html[data-theme="light"] .highlight .sr { color: #A12236 } /* Literal.String.Regex */
+html[data-theme="light"] .highlight .s1 { color: #00622F } /* Literal.String.Single */
+html[data-theme="light"] .highlight .ss { color: #005B82 } /* Literal.String.Symbol */
+html[data-theme="light"] .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */
+html[data-theme="light"] .highlight .fm { color: #005B82 } /* Name.Function.Magic */
+html[data-theme="light"] .highlight .vc { color: #A12236 } /* Name.Variable.Class */
+html[data-theme="light"] .highlight .vg { color: #A12236 } /* Name.Variable.Global */
+html[data-theme="light"] .highlight .vi { color: #A12236 } /* Name.Variable.Instance */
+html[data-theme="light"] .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */
+html[data-theme="light"] .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */
+html[data-theme="dark"] .highlight pre { line-height: 125%; }
+html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e }
+html[data-theme="dark"] .highlight { background: #2b2b2b; color: #F8F8F2 }
+html[data-theme="dark"] .highlight .c { color: #FFD900 } /* Comment */
+html[data-theme="dark"] .highlight .err { color: #FFA07A } /* Error */
+html[data-theme="dark"] .highlight .k { color: #DCC6E0 } /* Keyword */
+html[data-theme="dark"] .highlight .l { color: #FFD900 } /* Literal */
+html[data-theme="dark"] .highlight .n { color: #F8F8F2 } /* Name */
+html[data-theme="dark"] .highlight .o { color: #ABE338 } /* Operator */
+html[data-theme="dark"] .highlight .p { color: #F8F8F2 } /* Punctuation */
+html[data-theme="dark"] .highlight .ch { color: #FFD900 } /* Comment.Hashbang */
+html[data-theme="dark"] .highlight .cm { color: #FFD900 } /* Comment.Multiline */
+html[data-theme="dark"] .highlight .cp { color: #FFD900 } /* Comment.Preproc */
+html[data-theme="dark"] .highlight .cpf { color: #FFD900 } /* Comment.PreprocFile */
+html[data-theme="dark"] .highlight .c1 { color: #FFD900 } /* Comment.Single */
+html[data-theme="dark"] .highlight .cs { color: #FFD900 } /* Comment.Special */
+html[data-theme="dark"] .highlight .gd { color: #00E0E0 } /* Generic.Deleted */
+html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */
+html[data-theme="dark"] .highlight .gh { color: #00E0E0 } /* Generic.Heading */
+html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */
+html[data-theme="dark"] .highlight .gu { color: #00E0E0 } /* Generic.Subheading */
+html[data-theme="dark"] .highlight .kc { color: #DCC6E0 } /* Keyword.Constant */
+html[data-theme="dark"] .highlight .kd { color: #DCC6E0 } /* Keyword.Declaration */
+html[data-theme="dark"] .highlight .kn { color: #DCC6E0 } /* Keyword.Namespace */
+html[data-theme="dark"] .highlight .kp { color: #DCC6E0 } /* Keyword.Pseudo */
+html[data-theme="dark"] .highlight .kr { color: #DCC6E0 } /* Keyword.Reserved */
+html[data-theme="dark"] .highlight .kt { color: #FFD900 } /* Keyword.Type */
+html[data-theme="dark"] .highlight .ld { color: #FFD900 } /* Literal.Date */
+html[data-theme="dark"] .highlight .m { color: #FFD900 } /* Literal.Number */
+html[data-theme="dark"] .highlight .s { color: #ABE338 } /* Literal.String */
+html[data-theme="dark"] .highlight .na { color: #FFD900 } /* Name.Attribute */
+html[data-theme="dark"] .highlight .nb { color: #FFD900 } /* Name.Builtin */
+html[data-theme="dark"] .highlight .nc { color: #00E0E0 } /* Name.Class */
+html[data-theme="dark"] .highlight .no { color: #00E0E0 } /* Name.Constant */
+html[data-theme="dark"] .highlight .nd { color: #FFD900 } /* Name.Decorator */
+html[data-theme="dark"] .highlight .ni { color: #ABE338 } /* Name.Entity */
+html[data-theme="dark"] .highlight .ne { color: #DCC6E0 } /* Name.Exception */
+html[data-theme="dark"] .highlight .nf { color: #00E0E0 } /* Name.Function */
+html[data-theme="dark"] .highlight .nl { color: #FFD900 } /* Name.Label */
+html[data-theme="dark"] .highlight .nn { color: #F8F8F2 } /* Name.Namespace */
+html[data-theme="dark"] .highlight .nx { color: #F8F8F2 } /* Name.Other */
+html[data-theme="dark"] .highlight .py { color: #00E0E0 } /* Name.Property */
+html[data-theme="dark"] .highlight .nt { color: #00E0E0 } /* Name.Tag */
+html[data-theme="dark"] .highlight .nv { color: #FFA07A } /* Name.Variable */
+html[data-theme="dark"] .highlight .ow { color: #DCC6E0 } /* Operator.Word */
+html[data-theme="dark"] .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */
+html[data-theme="dark"] .highlight .w { color: #F8F8F2 } /* Text.Whitespace */
+html[data-theme="dark"] .highlight .mb { color: #FFD900 } /* Literal.Number.Bin */
+html[data-theme="dark"] .highlight .mf { color: #FFD900 } /* Literal.Number.Float */
+html[data-theme="dark"] .highlight .mh { color: #FFD900 } /* Literal.Number.Hex */
+html[data-theme="dark"] .highlight .mi { color: #FFD900 } /* Literal.Number.Integer */
+html[data-theme="dark"] .highlight .mo { color: #FFD900 } /* Literal.Number.Oct */
+html[data-theme="dark"] .highlight .sa { color: #ABE338 } /* Literal.String.Affix */
+html[data-theme="dark"] .highlight .sb { color: #ABE338 } /* Literal.String.Backtick */
+html[data-theme="dark"] .highlight .sc { color: #ABE338 } /* Literal.String.Char */
+html[data-theme="dark"] .highlight .dl { color: #ABE338 } /* Literal.String.Delimiter */
+html[data-theme="dark"] .highlight .sd { color: #ABE338 } /* Literal.String.Doc */
+html[data-theme="dark"] .highlight .s2 { color: #ABE338 } /* Literal.String.Double */
+html[data-theme="dark"] .highlight .se { color: #ABE338 } /* Literal.String.Escape */
+html[data-theme="dark"] .highlight .sh { color: #ABE338 } /* Literal.String.Heredoc */
+html[data-theme="dark"] .highlight .si { color: #ABE338 } /* Literal.String.Interpol */
+html[data-theme="dark"] .highlight .sx { color: #ABE338 } /* Literal.String.Other */
+html[data-theme="dark"] .highlight .sr { color: #FFA07A } /* Literal.String.Regex */
+html[data-theme="dark"] .highlight .s1 { color: #ABE338 } /* Literal.String.Single */
+html[data-theme="dark"] .highlight .ss { color: #00E0E0 } /* Literal.String.Symbol */
+html[data-theme="dark"] .highlight .bp { color: #FFD900 } /* Name.Builtin.Pseudo */
+html[data-theme="dark"] .highlight .fm { color: #00E0E0 } /* Name.Function.Magic */
+html[data-theme="dark"] .highlight .vc { color: #FFA07A } /* Name.Variable.Class */
+html[data-theme="dark"] .highlight .vg { color: #FFA07A } /* Name.Variable.Global */
+html[data-theme="dark"] .highlight .vi { color: #FFA07A } /* Name.Variable.Instance */
+html[data-theme="dark"] .highlight .vm { color: #FFD900 } /* Name.Variable.Magic */
+html[data-theme="dark"] .highlight .il { color: #FFD900 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/bootstrap.js b/0.8.0/_static/scripts/bootstrap.js
new file mode 100644
index 00000000..c8178deb
--- /dev/null
+++ b/0.8.0/_static/scripts/bootstrap.js
@@ -0,0 +1,3 @@
+/*! For license information please see bootstrap.js.LICENSE.txt */
+(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,bef [...]
+//# sourceMappingURL=bootstrap.js.map
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/bootstrap.js.LICENSE.txt b/0.8.0/_static/scripts/bootstrap.js.LICENSE.txt
new file mode 100644
index 00000000..28755c2c
--- /dev/null
+++ b/0.8.0/_static/scripts/bootstrap.js.LICENSE.txt
@@ -0,0 +1,5 @@
+/*!
+  * Bootstrap v5.3.3 (https://getbootstrap.com/)
+  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
diff --git a/0.8.0/_static/scripts/bootstrap.js.map b/0.8.0/_static/scripts/bootstrap.js.map
new file mode 100644
index 00000000..4a3502ae
--- /dev/null
+++ b/0.8.0/_static/scripts/bootstrap.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/bootstrap.js","mappings":";mBACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFV,EAAyBC,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,01BCLvD,IAAI,EAAM,MACNC,EAAS,SACTC,EAAQ,QACRC,EAAO,OACPC,EAAO,OA [...]
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/fontawesome.js b/0.8.0/_static/scripts/fontawesome.js
new file mode 100644
index 00000000..71955b42
--- /dev/null
+++ b/0.8.0/_static/scripts/fontawesome.js
@@ -0,0 +1,3 @@
+/*! For license information please see fontawesome.js.LICENSE.txt */
+(()=>{var c={654:()=>{!function(){"use strict";var c={},l={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(l=document)}catch(c){}var s=void 0===(v=(c.navigator||{}).userAgent)?"":v,a=c,z=l;function e(c,l){var s,a=Object.keys(c);return Object.getOwnPropertySymbols&&(s=Object.getOwnPropertySymbols(c),l&&(s=s.filter((function(l){return Object.getOwnPropertyDescriptor(c,l).enumerable}))),a.push.apply(a,s)),a}function H(c){for(var l=1;l<arguments.length;l++){var s= [...]
+//# sourceMappingURL=fontawesome.js.map
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/fontawesome.js.LICENSE.txt b/0.8.0/_static/scripts/fontawesome.js.LICENSE.txt
new file mode 100644
index 00000000..a91750af
--- /dev/null
+++ b/0.8.0/_static/scripts/fontawesome.js.LICENSE.txt
@@ -0,0 +1,5 @@
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */
diff --git a/0.8.0/_static/scripts/fontawesome.js.map b/0.8.0/_static/scripts/fontawesome.js.map
new file mode 100644
index 00000000..8fa96a6d
--- /dev/null
+++ b/0.8.0/_static/scripts/fontawesome.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/fontawesome.js","mappings":";uBAKC,WAAW,aAAa,IAAIA,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,IAAI,oBAAoBC,SAASF,EAAEE,QAAQ,oBAAoBC,WAAWF,EAAEE,SAAS,CAAC,MAAMH,GAAG,CAAC,IAAkCI,OAAE,KAAhCC,GAAGL,EAAEM,WAAW,CAAC,GAAGC,WAAuB,GAAGF,EAAEG,EAAER,EAAES,EAAER,EAAyI,SAASS,EAAET,EAAED,GAAG,IAAIK,EAAED,EAAEO,OAAOC,KAAKX,GAAG,OAAOU,OAAOE,wBAAwBR,EAAEM,OAAOE,sBAAsBZ,GAAGD,IAAIK,EAAEA,EAAES,QAAO,SAASd,GAAG,OAAOW,OAAOI,yBAAyBd,EAAED,GAAGgB,UAAU,KAAIZ,EAAEa,KAAKC,MAAMd,EAAEC,IAAID,CAAC [...]
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/pydata-sphinx-theme.js b/0.8.0/_static/scripts/pydata-sphinx-theme.js
new file mode 100644
index 00000000..771fed0d
--- /dev/null
+++ b/0.8.0/_static/scripts/pydata-sphinx-theme.js
@@ -0,0 +1,2 @@
+(()=>{"use strict";function e(e){"loading"!=document.readyState?e():document.addEventListener("DOMContentLoaded",e)}const t=e=>"string"==typeof e&&/^[v\d]/.test(e)&&o.test(e),n=(e,t,n)=>{u(n);const o=((e,t)=>{const n=r(e),o=r(t),a=n.pop(),s=o.pop(),i=c(n,o);return 0!==i?i:a&&s?c(a.split("."),s.split(".")):a||s?a?-1:1:0})(e,t);return l[n].includes(o)},o=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)? [...]
+//# sourceMappingURL=pydata-sphinx-theme.js.map
\ No newline at end of file
diff --git a/0.8.0/_static/scripts/pydata-sphinx-theme.js.map b/0.8.0/_static/scripts/pydata-sphinx-theme.js.map
new file mode 100644
index 00000000..0ed1d5e5
--- /dev/null
+++ b/0.8.0/_static/scripts/pydata-sphinx-theme.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"scripts/pydata-sphinx-theme.js","mappings":"mBASO,SAASA,EAAcC,GACD,WAAvBC,SAASC,WAAyBF,IACjCC,SAASE,iBAAiB,mBAAoBH,EACrD,CCLO,MAiCMI,EAAYC,GAA+B,iBAAZA,GAAwB,SAASC,KAAKD,IAAYE,EAAOD,KAAKD,GAkB7FG,EAAU,CAACC,EAAIC,EAAIC,KAE5BC,EAAoBD,GAGpB,MAAME,EAxDqB,EAACJ,EAAIC,KAEhC,MAAMI,EAAKC,EAAiBN,GACtBO,EAAKD,EAAiBL,GAEtBO,EAAKH,EAAGI,MACRC,EAAKH,EAAGE,MAERE,EAAIC,EAAgBP,EAAIE,GAC9B,OAAU,IAANI,EACOA,EAEPH,GAAME,EACCE,EAAgBJ,EAAGK,MAAM,KAAMH,EAAGG,MAAM,MAE1CL,GAAME,EACJF,GAAM, [...]
\ No newline at end of file
diff --git a/latest/_static/searchtools.js b/0.8.0/_static/searchtools.js
similarity index 83%
copy from latest/_static/searchtools.js
copy to 0.8.0/_static/searchtools.js
index 91f4be57..e29b1c75 100644
--- a/latest/_static/searchtools.js
+++ b/0.8.0/_static/searchtools.js
@@ -41,11 +41,12 @@ if (typeof Scorer === "undefined") {
 }
 
 // Global search result kind enum, used by themes to style search results.
+// prettier-ignore
 class SearchResultKind {
-    static get index() { return  "index"; }
-    static get object() { return "object"; }
-    static get text() { return "text"; }
-    static get title() { return "title"; }
+  static get index() { return "index"; }
+  static get object() { return "object"; }
+  static get text() { return "text"; }
+  static get title() { return "title"; }
 }
 
 const _removeChildren = (element) => {
@@ -58,6 +59,15 @@ const _removeChildren = (element) => {
 const _escapeRegExp = (string) =>
   string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
 
+const _escapeHTML = (text) => {
+  return text
+    .replaceAll("&", "&amp;")
+    .replaceAll("<", "&lt;")
+    .replaceAll(">", "&gt;")
+    .replaceAll('"', "&quot;")
+    .replaceAll("'", "&apos;");
+};
+
 const _displayItem = (item, searchTerms, highlightTerms) => {
   const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
   const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
@@ -90,25 +100,30 @@ const _displayItem = (item, searchTerms, highlightTerms) => {
   let linkEl = listItem.appendChild(document.createElement("a"));
   linkEl.href = linkUrl + anchor;
   linkEl.dataset.score = score;
-  linkEl.innerHTML = title;
+  linkEl.innerHTML = _escapeHTML(title);
   if (descr) {
     listItem.appendChild(document.createElement("span")).innerHTML =
-      " (" + descr + ")";
+      ` (${_escapeHTML(descr)})`;
     // highlight search terms in the description
-    if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
-      highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
-  }
-  else if (showSearchSummary)
+    if (SPHINX_HIGHLIGHT_ENABLED)
+      // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+      highlightTerms.forEach((term) =>
+        _highlightText(listItem, term, "highlighted"),
+      );
+  } else if (showSearchSummary)
     fetch(requestUrl)
       .then((responseData) => responseData.text())
       .then((data) => {
         if (data)
           listItem.appendChild(
-            Search.makeSearchSummary(data, searchTerms, anchor)
+            Search.makeSearchSummary(data, searchTerms, anchor),
           );
         // highlight search terms in the summary
-        if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
-          highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+        if (SPHINX_HIGHLIGHT_ENABLED)
+          // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+          highlightTerms.forEach((term) =>
+            _highlightText(listItem, term, "highlighted"),
+          );
       });
   Search.output.appendChild(listItem);
 };
@@ -117,14 +132,14 @@ const _finishSearch = (resultCount) => {
   Search.title.innerText = _("Search Results");
   if (!resultCount)
     Search.status.innerText = Documentation.gettext(
-      "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
+      "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.",
     );
   else
     Search.status.innerText = Documentation.ngettext(
       "Search finished, found one page matching the search query.",
       "Search finished, found ${resultCount} pages matching the search query.",
       resultCount,
-    ).replace('${resultCount}', resultCount);
+    ).replace("${resultCount}", resultCount);
 };
 const _displayNextItem = (
   results,
@@ -138,7 +153,7 @@ const _displayNextItem = (
     _displayItem(results.pop(), searchTerms, highlightTerms);
     setTimeout(
       () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
-      5
+      5,
     );
   }
   // search finished, update title and status message
@@ -170,9 +185,10 @@ const _orderResultsByScoreThenName = (a, b) => {
  * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
  */
 if (typeof splitQuery === "undefined") {
-  var splitQuery = (query) => query
+  var splitQuery = (query) =>
+    query
       .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
-      .filter(term => term)  // remove remaining empty strings
+      .filter((term) => term); // remove remaining empty strings
 }
 
 /**
@@ -184,16 +200,23 @@ const Search = {
   _pulse_status: -1,
 
   htmlToText: (htmlString, anchor) => {
-    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+    const htmlElement = new DOMParser().parseFromString(
+      htmlString,
+      "text/html",
+    );
     for (const removalQuery of [".headerlink", "script", "style"]) {
-      htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
+      htmlElement.querySelectorAll(removalQuery).forEach((el) => {
+        el.remove();
+      });
     }
     if (anchor) {
-      const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
+      const anchorContent = htmlElement.querySelector(
+        `[role="main"] ${anchor}`,
+      );
       if (anchorContent) return anchorContent.textContent;
 
       console.warn(
-        `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
+        `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`,
       );
     }
 
@@ -202,7 +225,7 @@ const Search = {
     if (docContent) return docContent.textContent;
 
     console.warn(
-      "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
+      "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.",
     );
     return "";
   },
@@ -287,12 +310,8 @@ const Search = {
       const queryTermLower = queryTerm.toLowerCase();
 
       // maybe skip this "word"
-      // stopwords array is from language_data.js
-      if (
-        stopwords.indexOf(queryTermLower) !== -1 ||
-        queryTerm.match(/^\d+$/)
-      )
-        return;
+      // stopwords set is from language_data.js
+      if (stopwords.has(queryTermLower) || queryTerm.match(/^\d+$/)) return;
 
       // stem the word
       let word = stemmer.stemWord(queryTermLower);
@@ -304,8 +323,12 @@ const Search = {
       }
     });
 
-    if (SPHINX_HIGHLIGHT_ENABLED) {  // set in sphinx_highlight.js
-      localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
+    if (SPHINX_HIGHLIGHT_ENABLED) {
+      // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js
+      localStorage.setItem(
+        "sphinx_highlight_terms",
+        [...highlightTerms].join(" "),
+      );
     }
 
     // console.debug("SEARCH: searching for:");
@@ -318,7 +341,13 @@ const Search = {
   /**
    * execute search (requires search index to be loaded)
    */
-  _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
+  _performSearch: (
+    query,
+    searchTerms,
+    excludedTerms,
+    highlightTerms,
+    objectTerms,
+  ) => {
     const filenames = Search._index.filenames;
     const docNames = Search._index.docnames;
     const titles = Search._index.titles;
@@ -334,10 +363,15 @@ const Search = {
 
     const queryLower = query.toLowerCase().trim();
     for (const [title, foundTitles] of Object.entries(allTitles)) {
-      if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
+      if (
+        title.toLowerCase().trim().includes(queryLower)
+        && queryLower.length >= title.length / 2
+      ) {
         for (const [file, id] of foundTitles) {
-          const score = Math.round(Scorer.title * queryLower.length / title.length);
-          const boost = titles[file] === title ? 1 : 0;  // add a boost for document titles
+          const score = Math.round(
+            (Scorer.title * queryLower.length) / title.length,
+          );
+          const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
           normalResults.push([
             docNames[file],
             titles[file] !== title ? `${titles[file]} > ${title}` : title,
@@ -353,9 +387,9 @@ const Search = {
 
     // search for explicit entries in index directives
     for (const [entry, foundEntries] of Object.entries(indexEntries)) {
-      if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
+      if (entry.includes(queryLower) && queryLower.length >= entry.length / 2) {
         for (const [file, id, isMain] of foundEntries) {
-          const score = Math.round(100 * queryLower.length / entry.length);
+          const score = Math.round((100 * queryLower.length) / entry.length);
           const result = [
             docNames[file],
             titles[file],
@@ -376,11 +410,13 @@ const Search = {
 
     // lookup as object
     objectTerms.forEach((term) =>
-      normalResults.push(...Search.performObjectSearch(term, objectTerms))
+      normalResults.push(...Search.performObjectSearch(term, objectTerms)),
     );
 
     // lookup as search terms in fulltext
-    normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+    normalResults.push(
+      ...Search.performTermsSearch(searchTerms, excludedTerms),
+    );
 
     // let the scorer override scores with a custom scoring function
     if (Scorer.score) {
@@ -401,7 +437,11 @@ const Search = {
     // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
     let seen = new Set();
     results = results.reverse().reduce((acc, result) => {
-      let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
+      let resultStr = result
+        .slice(0, 4)
+        .concat([result[5]])
+        .map((v) => String(v))
+        .join(",");
       if (!seen.has(resultStr)) {
         acc.push(result);
         seen.add(resultStr);
@@ -413,8 +453,20 @@ const Search = {
   },
 
   query: (query) => {
-    const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
-    const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
+    const [
+      searchQuery,
+      searchTerms,
+      excludedTerms,
+      highlightTerms,
+      objectTerms,
+    ] = Search._parseQuery(query);
+    const results = Search._performSearch(
+      searchQuery,
+      searchTerms,
+      excludedTerms,
+      highlightTerms,
+      objectTerms,
+    );
 
     // for debugging
     //Search.lastresults = results.slice();  // a copy
@@ -437,7 +489,7 @@ const Search = {
     const results = [];
 
     const objectSearchCallback = (prefix, match) => {
-      const name = match[4]
+      const name = match[4];
       const fullname = (prefix ? prefix + "." : "") + name;
       const fullnameLower = fullname.toLowerCase();
       if (fullnameLower.indexOf(object) < 0) return;
@@ -489,9 +541,7 @@ const Search = {
       ]);
     };
     Object.keys(objects).forEach((prefix) =>
-      objects[prefix].forEach((array) =>
-        objectSearchCallback(prefix, array)
-      )
+      objects[prefix].forEach((array) => objectSearchCallback(prefix, array)),
     );
     return results;
   },
@@ -516,8 +566,14 @@ const Search = {
       // find documents, if any, containing the query word in their text/title term indices
       // use Object.hasOwnProperty to avoid mismatching against prototype properties
       const arr = [
-        { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
-        { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title },
+        {
+          files: terms.hasOwnProperty(word) ? terms[word] : undefined,
+          score: Scorer.term,
+        },
+        {
+          files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined,
+          score: Scorer.title,
+        },
       ];
       // add support for partial matches
       if (word.length > 2) {
@@ -558,7 +614,8 @@ const Search = {
       // create the mapping
       files.forEach((file) => {
         if (!fileMap.has(file)) fileMap.set(file, [word]);
-        else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
+        else if (fileMap.get(file).indexOf(word) === -1)
+          fileMap.get(file).push(word);
       });
     });
 
@@ -569,11 +626,11 @@ const Search = {
 
       // as search terms with length < 3 are discarded
       const filteredTermCount = [...searchTerms].filter(
-        (term) => term.length > 2
+        (term) => term.length > 2,
       ).length;
       if (
-        wordList.length !== searchTerms.size &&
-        wordList.length !== filteredTermCount
+        wordList.length !== searchTerms.size
+        && wordList.length !== filteredTermCount
       )
         continue;
 
@@ -581,10 +638,10 @@ const Search = {
       if (
         [...excludedTerms].some(
           (term) =>
-            terms[term] === file ||
-            titleTerms[term] === file ||
-            (terms[term] || []).includes(file) ||
-            (titleTerms[term] || []).includes(file)
+            terms[term] === file
+            || titleTerms[term] === file
+            || (terms[term] || []).includes(file)
+            || (titleTerms[term] || []).includes(file),
         )
       )
         break;
@@ -626,7 +683,8 @@ const Search = {
 
     let summary = document.createElement("p");
     summary.classList.add("context");
-    summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
+    summary.textContent =
+      top + text.substr(startWithContext, 240).trim() + tail;
 
     return summary;
   },
diff --git a/latest/_static/sphinx_highlight.js b/0.8.0/_static/sphinx_highlight.js
similarity index 74%
copy from latest/_static/sphinx_highlight.js
copy to 0.8.0/_static/sphinx_highlight.js
index 8a96c69a..a74e103a 100644
--- a/latest/_static/sphinx_highlight.js
+++ b/0.8.0/_static/sphinx_highlight.js
@@ -1,7 +1,7 @@
 /* Highlighting utilities for Sphinx HTML documentation. */
 "use strict";
 
-const SPHINX_HIGHLIGHT_ENABLED = true
+const SPHINX_HIGHLIGHT_ENABLED = true;
 
 /**
  * highlight a given string on a node by wrapping it in
@@ -13,9 +13,9 @@ const _highlight = (node, addItems, text, className) => {
     const parent = node.parentNode;
     const pos = val.toLowerCase().indexOf(text);
     if (
-      pos >= 0 &&
-      !parent.classList.contains(className) &&
-      !parent.classList.contains("nohighlight")
+      pos >= 0
+      && !parent.classList.contains(className)
+      && !parent.classList.contains("nohighlight")
     ) {
       let span;
 
@@ -30,13 +30,7 @@ const _highlight = (node, addItems, text, className) => {
 
       span.appendChild(document.createTextNode(val.substr(pos, text.length)));
       const rest = document.createTextNode(val.substr(pos + text.length));
-      parent.insertBefore(
-        span,
-        parent.insertBefore(
-          rest,
-          node.nextSibling
-        )
-      );
+      parent.insertBefore(span, parent.insertBefore(rest, node.nextSibling));
       node.nodeValue = val.substr(0, pos);
       /* There may be more occurrences of search term in this node. So call this
        * function recursively on the remaining fragment.
@@ -46,7 +40,7 @@ const _highlight = (node, addItems, text, className) => {
       if (isInSVG) {
         const rect = document.createElementNS(
           "http://www.w3.org/2000/svg",
-          "rect"
+          "rect",
         );
         const bbox = parent.getBBox();
         rect.x.baseVal.value = bbox.x;
@@ -65,7 +59,7 @@ const _highlightText = (thisNode, text, className) => {
   let addItems = [];
   _highlight(thisNode, addItems, text, className);
   addItems.forEach((obj) =>
-    obj.parent.insertAdjacentElement("beforebegin", obj.target)
+    obj.parent.insertAdjacentElement("beforebegin", obj.target),
   );
 };
 
@@ -73,25 +67,31 @@ const _highlightText = (thisNode, text, className) => {
  * Small JavaScript module for the documentation.
  */
 const SphinxHighlight = {
-
   /**
    * highlight the search words provided in localstorage in the text
    */
   highlightSearchWords: () => {
-    if (!SPHINX_HIGHLIGHT_ENABLED) return;  // bail if no highlight
+    if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
 
     // get and clear terms from localstorage
     const url = new URL(window.location);
     const highlight =
-        localStorage.getItem("sphinx_highlight_terms")
-        || url.searchParams.get("highlight")
-        || "";
-    localStorage.removeItem("sphinx_highlight_terms")
-    url.searchParams.delete("highlight");
-    window.history.replaceState({}, "", url);
+      localStorage.getItem("sphinx_highlight_terms")
+      || url.searchParams.get("highlight")
+      || "";
+    localStorage.removeItem("sphinx_highlight_terms");
+    // Update history only if '?highlight' is present; otherwise it
+    // clears text fragments (not set in window.location by the browser)
+    if (url.searchParams.has("highlight")) {
+      url.searchParams.delete("highlight");
+      window.history.replaceState({}, "", url);
+    }
 
     // get individual terms from highlight string
-    const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+    const terms = highlight
+      .toLowerCase()
+      .split(/\s+/)
+      .filter((x) => x);
     if (terms.length === 0) return; // nothing to do
 
     // There should never be more than one element matching "div.body"
@@ -107,11 +107,11 @@ const SphinxHighlight = {
       document
         .createRange()
         .createContextualFragment(
-          '<p class="highlight-link">' +
-            '<a href="javascript:SphinxHighlight.hideSearchWords()">' +
-            _("Hide Search Matches") +
-            "</a></p>"
-        )
+          '<p class="highlight-link">'
+            + '<a href="javascript:SphinxHighlight.hideSearchWords()">'
+            + _("Hide Search Matches")
+            + "</a></p>",
+        ),
     );
   },
 
@@ -125,7 +125,7 @@ const SphinxHighlight = {
     document
       .querySelectorAll("span.highlighted")
       .forEach((el) => el.classList.remove("highlighted"));
-    localStorage.removeItem("sphinx_highlight_terms")
+    localStorage.removeItem("sphinx_highlight_terms");
   },
 
   initEscapeListener: () => {
@@ -134,10 +134,15 @@ const SphinxHighlight = {
 
     document.addEventListener("keydown", (event) => {
       // bail for input elements
-      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName))
+        return;
       // bail with special keys
-      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
-      if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
+      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)
+        return;
+      if (
+        DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+        && event.key === "Escape"
+      ) {
         SphinxHighlight.hideSearchWords();
         event.preventDefault();
       }
diff --git a/0.8.0/_static/styles/pydata-sphinx-theme.css b/0.8.0/_static/styles/pydata-sphinx-theme.css
new file mode 100644
index 00000000..d26dd09d
--- /dev/null
+++ b/0.8.0/_static/styles/pydata-sphinx-theme.css
@@ -0,0 +1,32 @@
+@charset "UTF-8";
+/*!
+ * Bootstrap  v5.3.3 (https://getbootstrap.com/)
+ * Copyright 2011-2024 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;-- [...]
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-si [...]
+
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;src:url(../vendor/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"),url(../vendor/fontawesome/webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
+
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"),url(../vendor/fontawesome/webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
+
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(../vendor/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content [...]
+    --pst-color-text-base
+  );border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.table td~td,.table td~th,.table th~td,.table th~th{border-left:1px solid var(--pst-color-table-inner-border)}.table thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.table tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.table tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.pst [...]
+/*# sourceMappingURL=pydata-sphinx-theme.css.map*/
\ No newline at end of file
diff --git a/0.8.0/_static/styles/pydata-sphinx-theme.css.map b/0.8.0/_static/styles/pydata-sphinx-theme.css.map
new file mode 100644
index 00000000..1142bcdf
--- /dev/null
+++ b/0.8.0/_static/styles/pydata-sphinx-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/pydata-sphinx-theme.css","mappings":"AAsGE,gBCqlBF;AC1rBE;;;;EAAA,CCDF,4BASI,qQAIA,sMAIA,iKAIA,sNAIA,iRAIA,iPAIA,iRAGF,2BACA,qBAMA,yMACA,mGACA,4EAOA,gDC2OI,wBALI,CDpOR,0BACA,0BAKA,wBACA,6BACA,kBACA,6BAEA,yBACA,8BAEA,wCACA,kCACA,0BACA,kCAEA,sCACA,iCACA,yBACA,iCAGA,2BAEA,wBACA,+BACA,+BAEA,8BACA,oCAMA,wBACA,6BACA,0BAGA,sBACA,wBACA,0BACA,+CAEA,4BACA,8BACA,6BACA,2BACA,4BACA,mDACA,8BAGA,8CACA,uDACA,gDACA,uDAIA,gCACA,0BACA,8CAIA,8BACA,qCACA,gCACA,sCFFF,CI9GI,qBFyHA,w [...]
\ No newline at end of file
diff --git a/0.8.0/_static/styles/theme.css b/0.8.0/_static/styles/theme.css
new file mode 100644
index 00000000..4519dd91
--- /dev/null
+++ b/0.8.0/_static/styles/theme.css
@@ -0,0 +1,2 @@
+/* Provided by Sphinx's 'basic' theme, and included in the final set of assets */
+@import "../basic.css";
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf b/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf
new file mode 100644
index 00000000..1fbb1f7c
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf differ
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 b/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2
new file mode 100644
index 00000000..5d280216
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 differ
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf b/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf
new file mode 100644
index 00000000..549d68dc
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf differ
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 b/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2
new file mode 100644
index 00000000..18400d7f
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 differ
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf b/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf
new file mode 100644
index 00000000..bb2a8695
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf differ
diff --git a/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 b/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2
new file mode 100644
index 00000000..758dd4f6
Binary files /dev/null and b/0.8.0/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 differ
diff --git a/0.8.0/_static/webpack-macros.html b/0.8.0/_static/webpack-macros.html
new file mode 100644
index 00000000..89732b23
--- /dev/null
+++ b/0.8.0/_static/webpack-macros.html
@@ -0,0 +1,24 @@
+<!--
+  AUTO-GENERATED from webpack.config.js, do **NOT** edit by hand.
+  These are re-used in layout.html
+-->
+
+{% macro head_pre_assets() %}
+  <!-- Loaded before other Sphinx assets -->
+  <link href="{{ pathto('_static/styles/theme.css', 1) }}?digest=8878045cc6db502f8baf" rel="stylesheet" />
+<link href="{{ pathto('_static/styles/pydata-sphinx-theme.css', 1) }}?digest=8878045cc6db502f8baf" rel="stylesheet" />
+{% endmacro %}
+
+{% macro head_js_preload() %}
+  <!-- So that users can add custom icons -->
+  <script src="{{ pathto('_static/scripts/fontawesome.js', 1) }}?digest=8878045cc6db502f8baf"></script>
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=8878045cc6db502f8baf" />
+<link rel="preload" as="script" href="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=8878045cc6db502f8baf" />
+{% endmacro %}
+
+{% macro body_post() %}
+  <!-- Scripts loaded after <body> so the DOM is not blocked -->
+  <script defer src="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=8878045cc6db502f8baf"></script>
+<script defer src="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=8878045cc6db502f8baf"></script>
+{% endmacro %}
\ No newline at end of file
diff --git a/latest/genindex.html b/0.8.0/genindex.html
similarity index 99%
copy from latest/genindex.html
copy to 0.8.0/genindex.html
index 66381f6a..ade3ec22 100644
--- a/latest/genindex.html
+++ b/0.8.0/genindex.html
@@ -38,13 +38,13 @@
 <link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="_static/doctools.js?v=9bcbadda"></script>
-    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'genindex';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -449,6 +449,8 @@
       <li><a href="reference/c.html#_CPPv4N10ArrowArray12private_dataE">ArrowArray::private_data (C++ member)</a>
 </li>
       <li><a href="reference/c.html#_CPPv4N10ArrowArray7releaseE">ArrowArray::release (C++ member)</a>
+</li>
+      <li><a href="reference/c.html#_CPPv428ArrowArrayAddVariadicBuffersP10ArrowArray7int32_t">ArrowArrayAddVariadicBuffers (C++ function)</a>
 </li>
       <li><a href="reference/c.html#_CPPv421ArrowArrayAppendBytesP10ArrowArray15ArrowBufferView">ArrowArrayAppendBytes (C++ function)</a>
 </li>
@@ -743,11 +745,11 @@
       <li><a href="reference/device.html#_CPPv4N11ArrowDevice11device_typeE">ArrowDevice::device_type (C++ member)</a>
 </li>
       <li><a href="reference/device.html#_CPPv4N11ArrowDevice12private_dataE">ArrowDevice::private_data (C++ member)</a>
-</li>
-      <li><a href="reference/device.html#_CPPv4N11ArrowDevice7releaseE">ArrowDevice::release (C++ member)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/device.html#_CPPv4N11ArrowDevice7releaseE">ArrowDevice::release (C++ member)</a>
+</li>
       <li><a href="reference/device.html#_CPPv4N11ArrowDevice17synchronize_eventE">ArrowDevice::synchronize_event (C++ member)</a>
 </li>
       <li><a href="reference/device.html#_CPPv416ArrowDeviceArray">ArrowDeviceArray (C++ struct)</a>
@@ -1198,6 +1200,8 @@
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/schema.html#nanoarrow.schema.dense_union">dense_union() (in module nanoarrow.schema)</a>
+</li>
       <li><a href="reference/python/array.html#nanoarrow.array.Array.device">device (Array property)</a>
 </li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.dictionary">dictionary() (in module nanoarrow.schema)</a>
@@ -1578,16 +1582,18 @@
 </li>
       <li><a href="reference/python/array.html#nanoarrow.array.Scalar.schema">schema (Scalar property)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/python/schema.html#nanoarrow.schema.schema">schema() (in module nanoarrow.schema)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/python/array.html#nanoarrow.array.Array.serialize">serialize() (Array method)</a>
 
       <ul>
         <li><a href="reference/python/schema.html#nanoarrow.schema.Schema.serialize">(Schema method)</a>
 </li>
       </ul></li>
+      <li><a href="reference/python/schema.html#nanoarrow.schema.sparse_union">sparse_union() (in module nanoarrow.schema)</a>
+</li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.ExtensionAccessor.storage">storage (ExtensionAccessor property)</a>
 </li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.string">string() (in module nanoarrow.schema)</a>
@@ -1608,15 +1614,17 @@
 </li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.timestamp">timestamp() (in module nanoarrow.schema)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/python/schema.html#nanoarrow.schema.TimeUnit">TimeUnit (class in nanoarrow.schema)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/python/schema.html#nanoarrow.schema.Schema.timezone">timezone (Schema property)</a>
 </li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.Type">Type (class in nanoarrow.schema)</a>
 </li>
       <li><a href="reference/python/schema.html#nanoarrow.schema.Schema.type">type (Schema property)</a>
+</li>
+      <li><a href="reference/python/schema.html#nanoarrow.schema.Schema.type_codes">type_codes (Schema property)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -1748,7 +1756,7 @@
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -1757,7 +1765,7 @@
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/getting-started/cpp.html b/0.8.0/getting-started/cpp.html
similarity index 99%
copy from latest/getting-started/cpp.html
copy to 0.8.0/getting-started/cpp.html
index 466dc27f..9a0d44a8 100644
--- a/latest/getting-started/cpp.html
+++ b/0.8.0/getting-started/cpp.html
@@ -39,13 +39,13 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="../_static/doctools.js?v=9bcbadda"></script>
-    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="../_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'getting-started/cpp';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -982,7 +982,7 @@ exposing an Arrow-based API implemented using the nanoarrow C library.</p>
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -991,7 +991,7 @@ exposing an Arrow-based API implemented using the nanoarrow C library.</p>
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/getting-started/index.html b/0.8.0/getting-started/index.html
similarity index 98%
copy from latest/getting-started/index.html
copy to 0.8.0/getting-started/index.html
index d0b42b92..95c2a7b2 100644
--- a/latest/getting-started/index.html
+++ b/0.8.0/getting-started/index.html
@@ -39,13 +39,13 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="../_static/doctools.js?v=9bcbadda"></script>
-    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="../_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'getting-started/index';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -490,7 +490,7 @@
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -499,7 +499,7 @@
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/getting-started/python.html b/0.8.0/getting-started/python.html
similarity index 99%
copy from latest/getting-started/python.html
copy to 0.8.0/getting-started/python.html
index 3c8eb02d..1feb1783 100644
--- a/latest/getting-started/python.html
+++ b/0.8.0/getting-started/python.html
@@ -39,13 +39,13 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="../_static/doctools.js?v=9bcbadda"></script>
-    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="../_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'getting-started/python';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -833,7 +833,7 @@ in the working tree.</p>
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -842,7 +842,7 @@ in the working tree.</p>
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/getting-started/r.html b/0.8.0/getting-started/r.html
similarity index 99%
copy from latest/getting-started/r.html
copy to 0.8.0/getting-started/r.html
index 6a2c79b8..433832ea 100644
--- a/latest/getting-started/r.html
+++ b/0.8.0/getting-started/r.html
@@ -39,13 +39,13 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="../_static/doctools.js?v=9bcbadda"></script>
-    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="../_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'getting-started/r';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -727,7 +727,7 @@ equivalent nanoarrow objects into many arrow functions and vice versa.</p>
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -736,7 +736,7 @@ equivalent nanoarrow objects into many arrow functions and vice versa.</p>
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/index.html b/0.8.0/index.html
similarity index 98%
copy from latest/index.html
copy to 0.8.0/index.html
index 7f3403c8..e1117dba 100644
--- a/latest/index.html
+++ b/0.8.0/index.html
@@ -39,13 +39,13 @@
 <link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="_static/doctools.js?v=9bcbadda"></script>
-    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'index';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -411,7 +411,7 @@ and Python bindings.</p>
 <p>CMake is also supported via a build/install with <code class="docutils literal notranslate"><span class="pre">find_package()</span></code> or
 using <code class="docutils literal notranslate"><span class="pre">FetchContent</span></code>:</p>
 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">fetchcontent_declare</span><span class="p">(</span><span class="n">nanoarrow</span>
-                     <span class="n">URL</span> <span class="s2">&quot;https://www.apache.org/dyn/closer.lua?action=download&amp;filename=arrow/apache-arrow-nanoarrow-0.6.0/apache-arrow-nanoarrow-0.6.0.tar.gz&quot;</span><span class="p">)</span>
+                     <span class="n">URL</span> <span class="s2">&quot;https://www.apache.org/dyn/closer.lua?action=download&amp;filename=arrow/apache-arrow-nanoarrow-0.8.0/apache-arrow-nanoarrow-0.8.0.tar.gz&quot;</span><span class="p">)</span>
 
 <span class="n">fetchcontent_makeavailable</span><span class="p">(</span><span class="n">nanoarrow</span><span class="p">)</span>
 </pre></div>
@@ -631,7 +631,7 @@ meson<span class="w"> </span><span class="nb">test</span><span class="w"> </span
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -640,7 +640,7 @@ meson<span class="w"> </span><span class="nb">test</span><span class="w"> </span
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/0.8.0/objects.inv b/0.8.0/objects.inv
new file mode 100644
index 00000000..a6888c44
Binary files /dev/null and b/0.8.0/objects.inv differ
diff --git a/latest/py-modindex.html b/0.8.0/py-modindex.html
similarity index 98%
copy from latest/py-modindex.html
copy to 0.8.0/py-modindex.html
index cdec1508..c5d5d1b4 100644
--- a/latest/py-modindex.html
+++ b/0.8.0/py-modindex.html
@@ -38,13 +38,13 @@
 <link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
 
     <script src="_static/documentation_options.js?v=5929fcd5"></script>
-    <script src="_static/doctools.js?v=9bcbadda"></script>
-    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/doctools.js?v=fd6eb6e6"></script>
+    <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'py-modindex';</script>
     <script>
         DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
         DOCUMENTATION_OPTIONS.theme_switcher_json_url = 'https://arrow.apache.org/nanoarrow/switcher.json';
-        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.7.0';
+        DOCUMENTATION_OPTIONS.theme_switcher_version_match = '0.8.0';
         DOCUMENTATION_OPTIONS.show_version_warning_banner =
             false;
         </script>
@@ -420,7 +420,7 @@
 
   <p class="copyright">
     
-      © Copyright 2016-2025 Apache Software Foundation.
+      © Copyright 2016-2026 Apache Software Foundation.
       <br/>
     
   </p>
@@ -429,7 +429,7 @@
         <div class="footer-item">
 
   <p class="sphinx-version">
-    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 9.1.0.
     <br/>
   </p>
 </div>
diff --git a/latest/r/404.html b/0.8.0/r/404.html
similarity index 97%
copy from latest/r/404.html
copy to 0.8.0/r/404.html
index 976d416e..98ee092e 100644
--- a/latest/r/404.html
+++ b/0.8.0/r/404.html
@@ -20,7 +20,7 @@
 
     <a class="navbar-brand me-2" href="index.html">nanoarrow</a>
 
-    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.7.0</small>
+    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.8.0</small>
 
 
     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
@@ -61,7 +61,7 @@ Content not found. Please use links in the navbar.
 </div>
 
 <div class="pkgdown-footer-right">
-  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.3.</p>
+  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
 </div>
 
     </footer>
diff --git a/0.8.0/r/404.md b/0.8.0/r/404.md
new file mode 100644
index 00000000..5107f896
--- /dev/null
+++ b/0.8.0/r/404.md
@@ -0,0 +1,3 @@
+Content not found. Please use links in the navbar.
+
+# Page not found (404)
diff --git a/latest/r/LICENSE.html b/0.8.0/r/LICENSE.html
similarity index 99%
copy from latest/r/LICENSE.html
copy to 0.8.0/r/LICENSE.html
index 5869564e..ff32e27f 100644
--- a/latest/r/LICENSE.html
+++ b/0.8.0/r/LICENSE.html
@@ -7,7 +7,7 @@
 
     <a class="navbar-brand me-2" href="index.html">nanoarrow</a>
 
-    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.7.0</small>
+    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.8.0</small>
 
 
     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
@@ -121,7 +121,7 @@
 </div>
 
 <div class="pkgdown-footer-right">
-  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.3.</p>
+  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
 </div>
 
     </footer></div>
diff --git a/0.8.0/r/LICENSE.md b/0.8.0/r/LICENSE.md
new file mode 100644
index 00000000..cdeff298
--- /dev/null
+++ b/0.8.0/r/LICENSE.md
@@ -0,0 +1,206 @@
+# Apache License
+
+*Version 2.0, January 2004* *\<<http://www.apache.org/licenses/>\>*
+
+### Terms and Conditions for use, reproduction, and distribution
+
+#### 1. Definitions
+
+“License” shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+“Licensor” shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+“Legal Entity” shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control
+with that entity. For the purposes of this definition, “control” means
+**(i)** the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or **(ii)**
+ownership of fifty percent (50%) or more of the outstanding shares, or
+**(iii)** beneficial ownership of such entity.
+
+“You” (or “Your”) shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+“Source” form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+“Object” form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but not
+limited to compiled object code, generated documentation, and
+conversions to other media types.
+
+“Work” shall mean the work of authorship, whether in Source or Object
+form, made available under the License, as indicated by a copyright
+notice that is included in or attached to the work (an example is
+provided in the Appendix below).
+
+“Derivative Works” shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the purposes
+of this License, Derivative Works shall not include works that remain
+separable from, or merely link (or bind by name) to the interfaces of,
+the Work and Derivative Works thereof.
+
+“Contribution” shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner. For
+the purposes of this definition, “submitted” means any form of
+electronic, verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated in
+writing by the copyright owner as “Not a Contribution.”
+
+“Contributor” shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+#### 2. Grant of Copyright License
+
+Subject to the terms and conditions of this License, each Contributor
+hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable copyright license to reproduce, prepare
+Derivative Works of, publicly display, publicly perform, sublicense, and
+distribute the Work and such Derivative Works in Source or Object form.
+
+#### 3. Grant of Patent License
+
+Subject to the terms and conditions of this License, each Contributor
+hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable (except as stated in this section) patent
+license to make, have made, use, offer to sell, sell, import, and
+otherwise transfer the Work, where such license applies only to those
+patent claims licensable by such Contributor that are necessarily
+infringed by their Contribution(s) alone or by combination of their
+Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Work or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses granted to
+You under this License for that Work shall terminate as of the date such
+litigation is filed.
+
+#### 4. Redistribution
+
+You may reproduce and distribute copies of the Work or Derivative Works
+thereof in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+- **(a)** You must give any other recipients of the Work or Derivative
+  Works a copy of this License; and
+- **(b)** You must cause any modified files to carry prominent notices
+  stating that You changed the files; and
+- **(c)** You must retain, in the Source form of any Derivative Works
+  that You distribute, all copyright, patent, trademark, and attribution
+  notices from the Source form of the Work, excluding those notices that
+  do not pertain to any part of the Derivative Works; and
+- **(d)** If the Work includes a “NOTICE” text file as part of its
+  distribution, then any Derivative Works that You distribute must
+  include a readable copy of the attribution notices contained within
+  such NOTICE file, excluding those notices that do not pertain to any
+  part of the Derivative Works, in at least one of the following places:
+  within a NOTICE text file distributed as part of the Derivative Works;
+  within the Source form or documentation, if provided along with the
+  Derivative Works; or, within a display generated by the Derivative
+  Works, if and wherever such third-party notices normally appear. The
+  contents of the NOTICE file are for informational purposes only and do
+  not modify the License. You may add Your own attribution notices
+  within Derivative Works that You distribute, alongside or as an
+  addendum to the NOTICE text from the Work, provided that such
+  additional attribution notices cannot be construed as modifying the
+  License.
+
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated
+in this License.
+
+#### 5. Submission of Contributions
+
+Unless You explicitly state otherwise, any Contribution intentionally
+submitted for inclusion in the Work by You to the Licensor shall be
+under the terms and conditions of this License, without any additional
+terms or conditions. Notwithstanding the above, nothing herein shall
+supersede or modify the terms of any separate license agreement you may
+have executed with Licensor regarding such Contributions.
+
+#### 6. Trademarks
+
+This License does not grant permission to use the trade names,
+trademarks, service marks, or product names of the Licensor, except as
+required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.
+
+#### 7. Disclaimer of Warranty
+
+Unless required by applicable law or agreed to in writing, Licensor
+provides the Work (and each Contributor provides its Contributions) on
+an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+express or implied, including, without limitation, any warranties or
+conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any risks
+associated with Your exercise of permissions under this License.
+
+#### 8. Limitation of Liability
+
+In no event and under no legal theory, whether in tort (including
+negligence), contract, or otherwise, unless required by applicable law
+(such as deliberate and grossly negligent acts) or agreed to in writing,
+shall any Contributor be liable to You for damages, including any
+direct, indirect, special, incidental, or consequential damages of any
+character arising as a result of this License or out of the use or
+inability to use the Work (including but not limited to damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and
+all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+#### 9. Accepting Warranty or Additional Liability
+
+While redistributing the Work or Derivative Works thereof, You may
+choose to offer, and charge a fee for, acceptance of support, warranty,
+indemnity, or other liability obligations and/or rights consistent with
+this License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf of any
+other Contributor, and only if You agree to indemnify, defend, and hold
+each Contributor harmless for any liability incurred by, or claims
+asserted against, such Contributor by reason of your accepting any such
+warranty or additional liability.
+
+*END OF TERMS AND CONDITIONS*
+
+### APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets `[]` replaced
+with your own identifying information. (Don’t include the brackets!) The
+text should be enclosed in the appropriate comment syntax for the file
+format. We also recommend that a file or class name and description of
+purpose be included on the same “printed page” as the copyright notice
+for easier identification within third-party archives.
+
+``` R
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+```
diff --git a/latest/r/authors.html b/0.8.0/r/authors.html
similarity index 94%
copy from latest/r/authors.html
copy to 0.8.0/r/authors.html
index 758a3343..a211f5b8 100644
--- a/latest/r/authors.html
+++ b/0.8.0/r/authors.html
@@ -7,7 +7,7 @@
 
     <a class="navbar-brand me-2" href="index.html">nanoarrow</a>
 
-    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.7.0</small>
+    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">0.8.0</small>
 
 
     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
@@ -52,15 +52,15 @@
       <h2 id="citation">Citation</h2>
       <p><small class="dont-index">Source: <a href="https://github.com/apache/arrow-nanoarrow/blob/main/r/DESCRIPTION" class="external-link"><code>DESCRIPTION</code></a></small></p>
 
-      <p>Dunnington D, Apache Arrow (2025).
+      <p>Dunnington D, Apache Arrow (2026).
 <em>nanoarrow: Interface to the 'nanoarrow' 'C' Library</em>.
-R package version 0.7.0, https://github.com/apache/arrow-nanoarrow, <a href="https://arrow.apache.org/nanoarrow/latest/r/" class="external-link">https://arrow.apache.org/nanoarrow/latest/r/</a>.
+R package version 0.8.0, https://github.com/apache/arrow-nanoarrow, <a href="https://arrow.apache.org/nanoarrow/latest/r/" class="external-link">https://arrow.apache.org/nanoarrow/latest/r/</a>.
 </p>
       <pre>@Manual{,
   title = {nanoarrow: Interface to the 'nanoarrow' 'C' Library},
   author = {Dewey Dunnington and {Apache Arrow}},
-  year = {2025},
-  note = {R package version 0.7.0, https://github.com/apache/arrow-nanoarrow},
+  year = {2026},
+  note = {R package version 0.8.0, https://github.com/apache/arrow-nanoarrow},
   url = {https://arrow.apache.org/nanoarrow/latest/r/},
 }</pre>
     </div>
@@ -74,7 +74,7 @@ R package version 0.7.0, https://github.com/apache/arrow-nanoarrow, <a href="htt
 </div>
 
 <div class="pkgdown-footer-right">
-  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.3.</p>
+  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
 </div>
 
     </footer></div>
diff --git a/0.8.0/r/authors.md b/0.8.0/r/authors.md
new file mode 100644
index 00000000..bd6b3f0c
--- /dev/null
+++ b/0.8.0/r/authors.md
@@ -0,0 +1,28 @@
+# Authors and Citation
+
+## Authors
+
+- **Dewey Dunnington**. Author, maintainer.
+  [](https://orcid.org/0000-0002-9415-4582)
+
+- **Apache Arrow**. Author, copyright holder.
+
+- **Apache Software Foundation**. Copyright holder.
+
+## Citation
+
+Source:
+[`DESCRIPTION`](https://github.com/apache/arrow-nanoarrow/blob/main/r/DESCRIPTION)
+
+Dunnington D, Apache Arrow (2026). *nanoarrow: Interface to the
+'nanoarrow' 'C' Library*. R package version 0.8.0,
+https://github.com/apache/arrow-nanoarrow,
+<https://arrow.apache.org/nanoarrow/latest/r/>.
+
+    @Manual{,
+      title = {nanoarrow: Interface to the 'nanoarrow' 'C' Library},
+      author = {Dewey Dunnington and {Apache Arrow}},
+      year = {2026},
+      note = {R package version 0.8.0, https://github.com/apache/arrow-nanoarrow},
+      url = {https://arrow.apache.org/nanoarrow/latest/r/},
+    }
diff --git a/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js
new file mode 100644
index 00000000..e8f21f70
--- /dev/null
+++ b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js
@@ -0,0 +1,7 @@
+/*!
+  * Bootstrap v5.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e). [...]
+//# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
diff --git a/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map
new file mode 100644
index 00000000..3863da8b
--- /dev/null
+++ b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","close [...]
\ No newline at end of file
diff --git a/latest/r/deps/bootstrap-5.3.1/bootstrap.min.css b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.min.css
similarity index 96%
copy from latest/r/deps/bootstrap-5.3.1/bootstrap.min.css
copy to 0.8.0/r/deps/bootstrap-5.3.1/bootstrap.min.css
index 3363cb22..b8a510c2 100644
--- a/latest/r/deps/bootstrap-5.3.1/bootstrap.min.css
+++ b/0.8.0/r/deps/bootstrap-5.3.1/bootstrap.min.css
@@ -2,4 +2,4 @@
    * Bootstrap  v5.3.1 (https://getbootstrap.com/)
    * Copyright 2011-2023 The Bootstrap Authors
    * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
-   */:root,[data-bs-theme="light"]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a4 [...]
+   */:root,[data-bs-theme="light"]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a4 [...]
diff --git a/0.8.0/r/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js b/0.8.0/r/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js
new file mode 100644
index 00000000..c628326a
--- /dev/null
+++ b/0.8.0/r/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap Table of Contents v1.0.1 (http://afeld.github.io/bootstrap-toc/)
+ * Copyright 2015 Aidan Feldman
+ * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */
+!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0<n&&(r+= [...]
\ No newline at end of file
diff --git a/0.8.0/r/deps/clipboard.js-2.0.11/clipboard.min.js b/0.8.0/r/deps/clipboard.js-2.0.11/clipboard.min.js
new file mode 100644
index 00000000..1103f811
--- /dev/null
+++ b/0.8.0/r/deps/clipboard.js-2.0.11/clipboard.min.js
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v2.0.11
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n, [...]
\ No newline at end of file
diff --git a/0.8.0/r/deps/data-deps.txt b/0.8.0/r/deps/data-deps.txt
new file mode 100644
index 00000000..ca4dfd9c
--- /dev/null
+++ b/0.8.0/r/deps/data-deps.txt
@@ -0,0 +1,13 @@
+<script src="deps/jquery-3.6.0/jquery-3.6.0.min.js"></script>
+<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
+<link href="deps/bootstrap-5.3.1/bootstrap.min.css" rel="stylesheet" />
+<script src="deps/bootstrap-5.3.1/bootstrap.bundle.min.js"></script>
+<link href="deps/font-awesome-6.5.2/css/all.min.css" rel="stylesheet" />
+<link href="deps/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet" />
+<script src="deps/headroom-0.11.0/headroom.min.js"></script>
+<script src="deps/headroom-0.11.0/jQuery.headroom.min.js"></script>
+<script src="deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js"></script>
+<script src="deps/clipboard.js-2.0.11/clipboard.min.js"></script>
+<script src="deps/search-1.0.0/autocomplete.jquery.min.js"></script>
+<script src="deps/search-1.0.0/fuse.min.js"></script>
+<script src="deps/search-1.0.0/mark.min.js"></script>
diff --git a/0.8.0/r/deps/font-awesome-6.5.2/css/all.css b/0.8.0/r/deps/font-awesome-6.5.2/css/all.css
new file mode 100644
index 00000000..151dd57c
--- /dev/null
+++ b/0.8.0/r/deps/font-awesome-6.5.2/css/all.css
@@ -0,0 +1,8028 @@
+/*!
+ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */
+.fa {
+  font-family: var(--fa-style-family, "Font Awesome 6 Free");
+  font-weight: var(--fa-style, 900); }
+
+.fa,
+.fa-classic,
+.fa-sharp,
+.fas,
+.fa-solid,
+.far,
+.fa-regular,
+.fab,
+.fa-brands {
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-font-smoothing: antialiased;
+  display: var(--fa-display, inline-block);
+  font-style: normal;
+  font-variant: normal;
+  line-height: 1;
+  text-rendering: auto; }
+
+.fas,
+.fa-classic,
+.fa-solid,
+.far,
+.fa-regular {
+  font-family: 'Font Awesome 6 Free'; }
+
+.fab,
+.fa-brands {
+  font-family: 'Font Awesome 6 Brands'; }
+
+.fa-1x {
+  font-size: 1em; }
+
+.fa-2x {
+  font-size: 2em; }
+
+.fa-3x {
+  font-size: 3em; }
+
+.fa-4x {
+  font-size: 4em; }
+
+.fa-5x {
+  font-size: 5em; }
+
+.fa-6x {
+  font-size: 6em; }
+
+.fa-7x {
+  font-size: 7em; }
+
+.fa-8x {
+  font-size: 8em; }
+
+.fa-9x {
+  font-size: 9em; }
+
+.fa-10x {
+  font-size: 10em; }
+
+.fa-2xs {
+  font-size: 0.625em;
+  line-height: 0.1em;
+  vertical-align: 0.225em; }
+
+.fa-xs {
+  font-size: 0.75em;
+  line-height: 0.08333em;
+  vertical-align: 0.125em; }
+
+.fa-sm {
+  font-size: 0.875em;
+  line-height: 0.07143em;
+  vertical-align: 0.05357em; }
+
+.fa-lg {
+  font-size: 1.25em;
+  line-height: 0.05em;
+  vertical-align: -0.075em; }
+
+.fa-xl {
+  font-size: 1.5em;
+  line-height: 0.04167em;
+  vertical-align: -0.125em; }
+
+.fa-2xl {
+  font-size: 2em;
+  line-height: 0.03125em;
+  vertical-align: -0.1875em; }
+
+.fa-fw {
+  text-align: center;
+  width: 1.25em; }
+
+.fa-ul {
+  list-style-type: none;
+  margin-left: var(--fa-li-margin, 2.5em);
+  padding-left: 0; }
+  .fa-ul > li {
+    position: relative; }
+
+.fa-li {
+  left: calc(var(--fa-li-width, 2em) * -1);
+  position: absolute;
+  text-align: center;
+  width: var(--fa-li-width, 2em);
+  line-height: inherit; }
+
+.fa-border {
+  border-color: var(--fa-border-color, #eee);
+  border-radius: var(--fa-border-radius, 0.1em);
+  border-style: var(--fa-border-style, solid);
+  border-width: var(--fa-border-width, 0.08em);
+  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
+
+.fa-pull-left {
+  float: left;
+  margin-right: var(--fa-pull-margin, 0.3em); }
+
+.fa-pull-right {
+  float: right;
+  margin-left: var(--fa-pull-margin, 0.3em); }
+
+.fa-beat {
+  -webkit-animation-name: fa-beat;
+          animation-name: fa-beat;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-bounce {
+  -webkit-animation-name: fa-bounce;
+          animation-name: fa-bounce;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
+
+.fa-fade {
+  -webkit-animation-name: fa-fade;
+          animation-name: fa-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-beat-fade {
+  -webkit-animation-name: fa-beat-fade;
+          animation-name: fa-beat-fade;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
+
+.fa-flip {
+  -webkit-animation-name: fa-flip;
+          animation-name: fa-flip;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);
+          animation-timing-function: var(--fa-animation-timing, ease-in-out); }
+
+.fa-shake {
+  -webkit-animation-name: fa-shake;
+          animation-name: fa-shake;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-delay: var(--fa-animation-delay, 0s);
+          animation-delay: var(--fa-animation-delay, 0s);
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 2s);
+          animation-duration: var(--fa-animation-duration, 2s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, linear);
+          animation-timing-function: var(--fa-animation-timing, linear); }
+
+.fa-spin-reverse {
+  --fa-animation-direction: reverse; }
+
+.fa-pulse,
+.fa-spin-pulse {
+  -webkit-animation-name: fa-spin;
+          animation-name: fa-spin;
+  -webkit-animation-direction: var(--fa-animation-direction, normal);
+          animation-direction: var(--fa-animation-direction, normal);
+  -webkit-animation-duration: var(--fa-animation-duration, 1s);
+          animation-duration: var(--fa-animation-duration, 1s);
+  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+          animation-iteration-count: var(--fa-animation-iteration-count, infinite);
+  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));
+          animation-timing-function: var(--fa-animation-timing, steps(8)); }
+
+@media (prefers-reduced-motion: reduce) {
+  .fa-beat,
+  .fa-bounce,
+  .fa-fade,
+  .fa-beat-fade,
+  .fa-flip,
+  .fa-pulse,
+  .fa-shake,
+  .fa-spin,
+  .fa-spin-pulse {
+    -webkit-animation-delay: -1ms;
+            animation-delay: -1ms;
+    -webkit-animation-duration: 1ms;
+            animation-duration: 1ms;
+    -webkit-animation-iteration-count: 1;
+            animation-iteration-count: 1;
+    -webkit-transition-delay: 0s;
+            transition-delay: 0s;
+    -webkit-transition-duration: 0s;
+            transition-duration: 0s; } }
+
+@-webkit-keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@keyframes fa-beat {
+  0%, 90% {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  45% {
+    -webkit-transform: scale(var(--fa-beat-scale, 1.25));
+            transform: scale(var(--fa-beat-scale, 1.25)); } }
+
+@-webkit-keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@keyframes fa-bounce {
+  0% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  10% {
+    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);
+            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
+  30% {
+    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));
+            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
+  50% {
+    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);
+            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
+  57% {
+    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));
+            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
+  64% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); }
+  100% {
+    -webkit-transform: scale(1, 1) translateY(0);
+            transform: scale(1, 1) translateY(0); } }
+
+@-webkit-keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@keyframes fa-fade {
+  50% {
+    opacity: var(--fa-fade-opacity, 0.4); } }
+
+@-webkit-keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@keyframes fa-beat-fade {
+  0%, 100% {
+    opacity: var(--fa-beat-fade-opacity, 0.4);
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+  50% {
+    opacity: 1;
+    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));
+            transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
+
+@-webkit-keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@keyframes fa-flip {
+  50% {
+    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));
+            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
+
+@-webkit-keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@keyframes fa-shake {
+  0% {
+    -webkit-transform: rotate(-15deg);
+            transform: rotate(-15deg); }
+  4% {
+    -webkit-transform: rotate(15deg);
+            transform: rotate(15deg); }
+  8%, 24% {
+    -webkit-transform: rotate(-18deg);
+            transform: rotate(-18deg); }
+  12%, 28% {
+    -webkit-transform: rotate(18deg);
+            transform: rotate(18deg); }
+  16% {
+    -webkit-transform: rotate(-22deg);
+            transform: rotate(-22deg); }
+  20% {
+    -webkit-transform: rotate(22deg);
+            transform: rotate(22deg); }
+  32% {
+    -webkit-transform: rotate(-12deg);
+            transform: rotate(-12deg); }
+  36% {
+    -webkit-transform: rotate(12deg);
+            transform: rotate(12deg); }
+  40%, 100% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); } }
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+            transform: rotate(0deg); }
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+.fa-rotate-90 {
+  -webkit-transform: rotate(90deg);
+          transform: rotate(90deg); }
+
+.fa-rotate-180 {
+  -webkit-transform: rotate(180deg);
+          transform: rotate(180deg); }
+
+.fa-rotate-270 {
+  -webkit-transform: rotate(270deg);
+          transform: rotate(270deg); }
+
+.fa-flip-horizontal {
+  -webkit-transform: scale(-1, 1);
+          transform: scale(-1, 1); }
+
+.fa-flip-vertical {
+  -webkit-transform: scale(1, -1);
+          transform: scale(1, -1); }
+
+.fa-flip-both,
+.fa-flip-horizontal.fa-flip-vertical {
+  -webkit-transform: scale(-1, -1);
+          transform: scale(-1, -1); }
+
+.fa-rotate-by {
+  -webkit-transform: rotate(var(--fa-rotate-angle, 0));
+          transform: rotate(var(--fa-rotate-angle, 0)); }
+
+.fa-stack {
+  display: inline-block;
+  height: 2em;
+  line-height: 2em;
+  position: relative;
+  vertical-align: middle;
+  width: 2.5em; }
+
+.fa-stack-1x,
+.fa-stack-2x {
+  left: 0;
+  position: absolute;
+  text-align: center;
+  width: 100%;
+  z-index: var(--fa-stack-z-index, auto); }
+
+.fa-stack-1x {
+  line-height: inherit; }
+
+.fa-stack-2x {
+  font-size: 2em; }
+
+.fa-inverse {
+  color: var(--fa-inverse, #fff); }
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+.fa-0::before {
+  content: "\30"; }
+
+.fa-1::before {
+  content: "\31"; }
+
+.fa-2::before {
+  content: "\32"; }
+
+.fa-3::before {
+  content: "\33"; }
+
+.fa-4::before {
+  content: "\34"; }
+
+.fa-5::before {
+  content: "\35"; }
+
+.fa-6::before {
+  content: "\36"; }
+
+.fa-7::before {
+  content: "\37"; }
+
+.fa-8::before {
+  content: "\38"; }
+
+.fa-9::before {
+  content: "\39"; }
+
+.fa-fill-drip::before {
+  content: "\f576"; }
+
+.fa-arrows-to-circle::before {
+  content: "\e4bd"; }
+
+.fa-circle-chevron-right::before {
+  content: "\f138"; }
+
+.fa-chevron-circle-right::before {
+  content: "\f138"; }
+
+.fa-at::before {
+  content: "\40"; }
+
+.fa-trash-can::before {
+  content: "\f2ed"; }
+
+.fa-trash-alt::before {
+  content: "\f2ed"; }
+
+.fa-text-height::before {
+  content: "\f034"; }
+
+.fa-user-xmark::before {
+  content: "\f235"; }
+
+.fa-user-times::before {
+  content: "\f235"; }
+
+.fa-stethoscope::before {
+  content: "\f0f1"; }
+
+.fa-message::before {
+  content: "\f27a"; }
+
+.fa-comment-alt::before {
+  content: "\f27a"; }
+
+.fa-info::before {
+  content: "\f129"; }
+
+.fa-down-left-and-up-right-to-center::before {
+  content: "\f422"; }
+
+.fa-compress-alt::before {
+  content: "\f422"; }
+
+.fa-explosion::before {
+  content: "\e4e9"; }
+
+.fa-file-lines::before {
+  content: "\f15c"; }
+
+.fa-file-alt::before {
+  content: "\f15c"; }
+
+.fa-file-text::before {
+  content: "\f15c"; }
+
+.fa-wave-square::before {
+  content: "\f83e"; }
+
+.fa-ring::before {
+  content: "\f70b"; }
+
+.fa-building-un::before {
+  content: "\e4d9"; }
+
+.fa-dice-three::before {
+  content: "\f527"; }
+
+.fa-calendar-days::before {
+  content: "\f073"; }
+
+.fa-calendar-alt::before {
+  content: "\f073"; }
+
+.fa-anchor-circle-check::before {
+  content: "\e4aa"; }
+
+.fa-building-circle-arrow-right::before {
+  content: "\e4d1"; }
+
+.fa-volleyball::before {
+  content: "\f45f"; }
+
+.fa-volleyball-ball::before {
+  content: "\f45f"; }
+
+.fa-arrows-up-to-line::before {
+  content: "\e4c2"; }
+
+.fa-sort-down::before {
+  content: "\f0dd"; }
+
+.fa-sort-desc::before {
+  content: "\f0dd"; }
+
+.fa-circle-minus::before {
+  content: "\f056"; }
+
+.fa-minus-circle::before {
+  content: "\f056"; }
+
+.fa-door-open::before {
+  content: "\f52b"; }
+
+.fa-right-from-bracket::before {
+  content: "\f2f5"; }
+
+.fa-sign-out-alt::before {
+  content: "\f2f5"; }
+
+.fa-atom::before {
+  content: "\f5d2"; }
+
+.fa-soap::before {
+  content: "\e06e"; }
+
+.fa-icons::before {
+  content: "\f86d"; }
+
+.fa-heart-music-camera-bolt::before {
+  content: "\f86d"; }
+
+.fa-microphone-lines-slash::before {
+  content: "\f539"; }
+
+.fa-microphone-alt-slash::before {
+  content: "\f539"; }
+
+.fa-bridge-circle-check::before {
+  content: "\e4c9"; }
+
+.fa-pump-medical::before {
+  content: "\e06a"; }
+
+.fa-fingerprint::before {
+  content: "\f577"; }
+
+.fa-hand-point-right::before {
+  content: "\f0a4"; }
+
+.fa-magnifying-glass-location::before {
+  content: "\f689"; }
+
+.fa-search-location::before {
+  content: "\f689"; }
+
+.fa-forward-step::before {
+  content: "\f051"; }
+
+.fa-step-forward::before {
+  content: "\f051"; }
+
+.fa-face-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-smile-beam::before {
+  content: "\f5b8"; }
+
+.fa-flag-checkered::before {
+  content: "\f11e"; }
+
+.fa-football::before {
+  content: "\f44e"; }
+
+.fa-football-ball::before {
+  content: "\f44e"; }
+
+.fa-school-circle-exclamation::before {
+  content: "\e56c"; }
+
+.fa-crop::before {
+  content: "\f125"; }
+
+.fa-angles-down::before {
+  content: "\f103"; }
+
+.fa-angle-double-down::before {
+  content: "\f103"; }
+
+.fa-users-rectangle::before {
+  content: "\e594"; }
+
+.fa-people-roof::before {
+  content: "\e537"; }
+
+.fa-people-line::before {
+  content: "\e534"; }
+
+.fa-beer-mug-empty::before {
+  content: "\f0fc"; }
+
+.fa-beer::before {
+  content: "\f0fc"; }
+
+.fa-diagram-predecessor::before {
+  content: "\e477"; }
+
+.fa-arrow-up-long::before {
+  content: "\f176"; }
+
+.fa-long-arrow-up::before {
+  content: "\f176"; }
+
+.fa-fire-flame-simple::before {
+  content: "\f46a"; }
+
+.fa-burn::before {
+  content: "\f46a"; }
+
+.fa-person::before {
+  content: "\f183"; }
+
+.fa-male::before {
+  content: "\f183"; }
+
+.fa-laptop::before {
+  content: "\f109"; }
+
+.fa-file-csv::before {
+  content: "\f6dd"; }
+
+.fa-menorah::before {
+  content: "\f676"; }
+
+.fa-truck-plane::before {
+  content: "\e58f"; }
+
+.fa-record-vinyl::before {
+  content: "\f8d9"; }
+
+.fa-face-grin-stars::before {
+  content: "\f587"; }
+
+.fa-grin-stars::before {
+  content: "\f587"; }
+
+.fa-bong::before {
+  content: "\f55c"; }
+
+.fa-spaghetti-monster-flying::before {
+  content: "\f67b"; }
+
+.fa-pastafarianism::before {
+  content: "\f67b"; }
+
+.fa-arrow-down-up-across-line::before {
+  content: "\e4af"; }
+
+.fa-spoon::before {
+  content: "\f2e5"; }
+
+.fa-utensil-spoon::before {
+  content: "\f2e5"; }
+
+.fa-jar-wheat::before {
+  content: "\e517"; }
+
+.fa-envelopes-bulk::before {
+  content: "\f674"; }
+
+.fa-mail-bulk::before {
+  content: "\f674"; }
+
+.fa-file-circle-exclamation::before {
+  content: "\e4eb"; }
+
+.fa-circle-h::before {
+  content: "\f47e"; }
+
+.fa-hospital-symbol::before {
+  content: "\f47e"; }
+
+.fa-pager::before {
+  content: "\f815"; }
+
+.fa-address-book::before {
+  content: "\f2b9"; }
+
+.fa-contact-book::before {
+  content: "\f2b9"; }
+
+.fa-strikethrough::before {
+  content: "\f0cc"; }
+
+.fa-k::before {
+  content: "\4b"; }
+
+.fa-landmark-flag::before {
+  content: "\e51c"; }
+
+.fa-pencil::before {
+  content: "\f303"; }
+
+.fa-pencil-alt::before {
+  content: "\f303"; }
+
+.fa-backward::before {
+  content: "\f04a"; }
+
+.fa-caret-right::before {
+  content: "\f0da"; }
+
+.fa-comments::before {
+  content: "\f086"; }
+
+.fa-paste::before {
+  content: "\f0ea"; }
+
+.fa-file-clipboard::before {
+  content: "\f0ea"; }
+
+.fa-code-pull-request::before {
+  content: "\e13c"; }
+
+.fa-clipboard-list::before {
+  content: "\f46d"; }
+
+.fa-truck-ramp-box::before {
+  content: "\f4de"; }
+
+.fa-truck-loading::before {
+  content: "\f4de"; }
+
+.fa-user-check::before {
+  content: "\f4fc"; }
+
+.fa-vial-virus::before {
+  content: "\e597"; }
+
+.fa-sheet-plastic::before {
+  content: "\e571"; }
+
+.fa-blog::before {
+  content: "\f781"; }
+
+.fa-user-ninja::before {
+  content: "\f504"; }
+
+.fa-person-arrow-up-from-line::before {
+  content: "\e539"; }
+
+.fa-scroll-torah::before {
+  content: "\f6a0"; }
+
+.fa-torah::before {
+  content: "\f6a0"; }
+
+.fa-broom-ball::before {
+  content: "\f458"; }
+
+.fa-quidditch::before {
+  content: "\f458"; }
+
+.fa-quidditch-broom-ball::before {
+  content: "\f458"; }
+
+.fa-toggle-off::before {
+  content: "\f204"; }
+
+.fa-box-archive::before {
+  content: "\f187"; }
+
+.fa-archive::before {
+  content: "\f187"; }
+
+.fa-person-drowning::before {
+  content: "\e545"; }
+
+.fa-arrow-down-9-1::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-desc::before {
+  content: "\f886"; }
+
+.fa-sort-numeric-down-alt::before {
+  content: "\f886"; }
+
+.fa-face-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-grin-tongue-squint::before {
+  content: "\f58a"; }
+
+.fa-spray-can::before {
+  content: "\f5bd"; }
+
+.fa-truck-monster::before {
+  content: "\f63b"; }
+
+.fa-w::before {
+  content: "\57"; }
+
+.fa-earth-africa::before {
+  content: "\f57c"; }
+
+.fa-globe-africa::before {
+  content: "\f57c"; }
+
+.fa-rainbow::before {
+  content: "\f75b"; }
+
+.fa-circle-notch::before {
+  content: "\f1ce"; }
+
+.fa-tablet-screen-button::before {
+  content: "\f3fa"; }
+
+.fa-tablet-alt::before {
+  content: "\f3fa"; }
+
+.fa-paw::before {
+  content: "\f1b0"; }
+
+.fa-cloud::before {
+  content: "\f0c2"; }
+
+.fa-trowel-bricks::before {
+  content: "\e58a"; }
+
+.fa-face-flushed::before {
+  content: "\f579"; }
+
+.fa-flushed::before {
+  content: "\f579"; }
+
+.fa-hospital-user::before {
+  content: "\f80d"; }
+
+.fa-tent-arrow-left-right::before {
+  content: "\e57f"; }
+
+.fa-gavel::before {
+  content: "\f0e3"; }
+
+.fa-legal::before {
+  content: "\f0e3"; }
+
+.fa-binoculars::before {
+  content: "\f1e5"; }
+
+.fa-microphone-slash::before {
+  content: "\f131"; }
+
+.fa-box-tissue::before {
+  content: "\e05b"; }
+
+.fa-motorcycle::before {
+  content: "\f21c"; }
+
+.fa-bell-concierge::before {
+  content: "\f562"; }
+
+.fa-concierge-bell::before {
+  content: "\f562"; }
+
+.fa-pen-ruler::before {
+  content: "\f5ae"; }
+
+.fa-pencil-ruler::before {
+  content: "\f5ae"; }
+
+.fa-people-arrows::before {
+  content: "\e068"; }
+
+.fa-people-arrows-left-right::before {
+  content: "\e068"; }
+
+.fa-mars-and-venus-burst::before {
+  content: "\e523"; }
+
+.fa-square-caret-right::before {
+  content: "\f152"; }
+
+.fa-caret-square-right::before {
+  content: "\f152"; }
+
+.fa-scissors::before {
+  content: "\f0c4"; }
+
+.fa-cut::before {
+  content: "\f0c4"; }
+
+.fa-sun-plant-wilt::before {
+  content: "\e57a"; }
+
+.fa-toilets-portable::before {
+  content: "\e584"; }
+
+.fa-hockey-puck::before {
+  content: "\f453"; }
+
+.fa-table::before {
+  content: "\f0ce"; }
+
+.fa-magnifying-glass-arrow-right::before {
+  content: "\e521"; }
+
+.fa-tachograph-digital::before {
+  content: "\f566"; }
+
+.fa-digital-tachograph::before {
+  content: "\f566"; }
+
+.fa-users-slash::before {
+  content: "\e073"; }
+
+.fa-clover::before {
+  content: "\e139"; }
+
+.fa-reply::before {
+  content: "\f3e5"; }
+
+.fa-mail-reply::before {
+  content: "\f3e5"; }
+
+.fa-star-and-crescent::before {
+  content: "\f699"; }
+
+.fa-house-fire::before {
+  content: "\e50c"; }
+
+.fa-square-minus::before {
+  content: "\f146"; }
+
+.fa-minus-square::before {
+  content: "\f146"; }
+
+.fa-helicopter::before {
+  content: "\f533"; }
+
+.fa-compass::before {
+  content: "\f14e"; }
+
+.fa-square-caret-down::before {
+  content: "\f150"; }
+
+.fa-caret-square-down::before {
+  content: "\f150"; }
+
+.fa-file-circle-question::before {
+  content: "\e4ef"; }
+
+.fa-laptop-code::before {
+  content: "\f5fc"; }
+
+.fa-swatchbook::before {
+  content: "\f5c3"; }
+
+.fa-prescription-bottle::before {
+  content: "\f485"; }
+
+.fa-bars::before {
+  content: "\f0c9"; }
+
+.fa-navicon::before {
+  content: "\f0c9"; }
+
+.fa-people-group::before {
+  content: "\e533"; }
+
+.fa-hourglass-end::before {
+  content: "\f253"; }
+
+.fa-hourglass-3::before {
+  content: "\f253"; }
+
+.fa-heart-crack::before {
+  content: "\f7a9"; }
+
+.fa-heart-broken::before {
+  content: "\f7a9"; }
+
+.fa-square-up-right::before {
+  content: "\f360"; }
+
+.fa-external-link-square-alt::before {
+  content: "\f360"; }
+
+.fa-face-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-kiss-beam::before {
+  content: "\f597"; }
+
+.fa-film::before {
+  content: "\f008"; }
+
+.fa-ruler-horizontal::before {
+  content: "\f547"; }
+
+.fa-people-robbery::before {
+  content: "\e536"; }
+
+.fa-lightbulb::before {
+  content: "\f0eb"; }
+
+.fa-caret-left::before {
+  content: "\f0d9"; }
+
+.fa-circle-exclamation::before {
+  content: "\f06a"; }
+
+.fa-exclamation-circle::before {
+  content: "\f06a"; }
+
+.fa-school-circle-xmark::before {
+  content: "\e56d"; }
+
+.fa-arrow-right-from-bracket::before {
+  content: "\f08b"; }
+
+.fa-sign-out::before {
+  content: "\f08b"; }
+
+.fa-circle-chevron-down::before {
+  content: "\f13a"; }
+
+.fa-chevron-circle-down::before {
+  content: "\f13a"; }
+
+.fa-unlock-keyhole::before {
+  content: "\f13e"; }
+
+.fa-unlock-alt::before {
+  content: "\f13e"; }
+
+.fa-cloud-showers-heavy::before {
+  content: "\f740"; }
+
+.fa-headphones-simple::before {
+  content: "\f58f"; }
+
+.fa-headphones-alt::before {
+  content: "\f58f"; }
+
+.fa-sitemap::before {
+  content: "\f0e8"; }
+
+.fa-circle-dollar-to-slot::before {
+  content: "\f4b9"; }
+
+.fa-donate::before {
+  content: "\f4b9"; }
+
+.fa-memory::before {
+  content: "\f538"; }
+
+.fa-road-spikes::before {
+  content: "\e568"; }
+
+.fa-fire-burner::before {
+  content: "\e4f1"; }
+
+.fa-flag::before {
+  content: "\f024"; }
+
+.fa-hanukiah::before {
+  content: "\f6e6"; }
+
+.fa-feather::before {
+  content: "\f52d"; }
+
+.fa-volume-low::before {
+  content: "\f027"; }
+
+.fa-volume-down::before {
+  content: "\f027"; }
+
+.fa-comment-slash::before {
+  content: "\f4b3"; }
+
+.fa-cloud-sun-rain::before {
+  content: "\f743"; }
+
+.fa-compress::before {
+  content: "\f066"; }
+
+.fa-wheat-awn::before {
+  content: "\e2cd"; }
+
+.fa-wheat-alt::before {
+  content: "\e2cd"; }
+
+.fa-ankh::before {
+  content: "\f644"; }
+
+.fa-hands-holding-child::before {
+  content: "\e4fa"; }
+
+.fa-asterisk::before {
+  content: "\2a"; }
+
+.fa-square-check::before {
+  content: "\f14a"; }
+
+.fa-check-square::before {
+  content: "\f14a"; }
+
+.fa-peseta-sign::before {
+  content: "\e221"; }
+
+.fa-heading::before {
+  content: "\f1dc"; }
+
+.fa-header::before {
+  content: "\f1dc"; }
+
+.fa-ghost::before {
+  content: "\f6e2"; }
+
+.fa-list::before {
+  content: "\f03a"; }
+
+.fa-list-squares::before {
+  content: "\f03a"; }
+
+.fa-square-phone-flip::before {
+  content: "\f87b"; }
+
+.fa-phone-square-alt::before {
+  content: "\f87b"; }
+
+.fa-cart-plus::before {
+  content: "\f217"; }
+
+.fa-gamepad::before {
+  content: "\f11b"; }
+
+.fa-circle-dot::before {
+  content: "\f192"; }
+
+.fa-dot-circle::before {
+  content: "\f192"; }
+
+.fa-face-dizzy::before {
+  content: "\f567"; }
+
+.fa-dizzy::before {
+  content: "\f567"; }
+
+.fa-egg::before {
+  content: "\f7fb"; }
+
+.fa-house-medical-circle-xmark::before {
+  content: "\e513"; }
+
+.fa-campground::before {
+  content: "\f6bb"; }
+
+.fa-folder-plus::before {
+  content: "\f65e"; }
+
+.fa-futbol::before {
+  content: "\f1e3"; }
+
+.fa-futbol-ball::before {
+  content: "\f1e3"; }
+
+.fa-soccer-ball::before {
+  content: "\f1e3"; }
+
+.fa-paintbrush::before {
+  content: "\f1fc"; }
+
+.fa-paint-brush::before {
+  content: "\f1fc"; }
+
+.fa-lock::before {
+  content: "\f023"; }
+
+.fa-gas-pump::before {
+  content: "\f52f"; }
+
+.fa-hot-tub-person::before {
+  content: "\f593"; }
+
+.fa-hot-tub::before {
+  content: "\f593"; }
+
+.fa-map-location::before {
+  content: "\f59f"; }
+
+.fa-map-marked::before {
+  content: "\f59f"; }
+
+.fa-house-flood-water::before {
+  content: "\e50e"; }
+
+.fa-tree::before {
+  content: "\f1bb"; }
+
+.fa-bridge-lock::before {
+  content: "\e4cc"; }
+
+.fa-sack-dollar::before {
+  content: "\f81d"; }
+
+.fa-pen-to-square::before {
+  content: "\f044"; }
+
+.fa-edit::before {
+  content: "\f044"; }
+
+.fa-car-side::before {
+  content: "\f5e4"; }
+
+.fa-share-nodes::before {
+  content: "\f1e0"; }
+
+.fa-share-alt::before {
+  content: "\f1e0"; }
+
+.fa-heart-circle-minus::before {
+  content: "\e4ff"; }
+
+.fa-hourglass-half::before {
+  content: "\f252"; }
+
+.fa-hourglass-2::before {
+  content: "\f252"; }
+
+.fa-microscope::before {
+  content: "\f610"; }
+
+.fa-sink::before {
+  content: "\e06d"; }
+
+.fa-bag-shopping::before {
+  content: "\f290"; }
+
+.fa-shopping-bag::before {
+  content: "\f290"; }
+
+.fa-arrow-down-z-a::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-desc::before {
+  content: "\f881"; }
+
+.fa-sort-alpha-down-alt::before {
+  content: "\f881"; }
+
+.fa-mitten::before {
+  content: "\f7b5"; }
+
+.fa-person-rays::before {
+  content: "\e54d"; }
+
+.fa-users::before {
+  content: "\f0c0"; }
+
+.fa-eye-slash::before {
+  content: "\f070"; }
+
+.fa-flask-vial::before {
+  content: "\e4f3"; }
+
+.fa-hand::before {
+  content: "\f256"; }
+
+.fa-hand-paper::before {
+  content: "\f256"; }
+
+.fa-om::before {
+  content: "\f679"; }
+
+.fa-worm::before {
+  content: "\e599"; }
+
+.fa-house-circle-xmark::before {
+  content: "\e50b"; }
+
+.fa-plug::before {
+  content: "\f1e6"; }
+
+.fa-chevron-up::before {
+  content: "\f077"; }
+
+.fa-hand-spock::before {
+  content: "\f259"; }
+
+.fa-stopwatch::before {
+  content: "\f2f2"; }
+
+.fa-face-kiss::before {
+  content: "\f596"; }
+
+.fa-kiss::before {
+  content: "\f596"; }
+
+.fa-bridge-circle-xmark::before {
+  content: "\e4cb"; }
+
+.fa-face-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-grin-tongue::before {
+  content: "\f589"; }
+
+.fa-chess-bishop::before {
+  content: "\f43a"; }
+
+.fa-face-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-grin-wink::before {
+  content: "\f58c"; }
+
+.fa-ear-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deaf::before {
+  content: "\f2a4"; }
+
+.fa-deafness::before {
+  content: "\f2a4"; }
+
+.fa-hard-of-hearing::before {
+  content: "\f2a4"; }
+
+.fa-road-circle-check::before {
+  content: "\e564"; }
+
+.fa-dice-five::before {
+  content: "\f523"; }
+
+.fa-square-rss::before {
+  content: "\f143"; }
+
+.fa-rss-square::before {
+  content: "\f143"; }
+
+.fa-land-mine-on::before {
+  content: "\e51b"; }
+
+.fa-i-cursor::before {
+  content: "\f246"; }
+
+.fa-stamp::before {
+  content: "\f5bf"; }
+
+.fa-stairs::before {
+  content: "\e289"; }
+
+.fa-i::before {
+  content: "\49"; }
+
+.fa-hryvnia-sign::before {
+  content: "\f6f2"; }
+
+.fa-hryvnia::before {
+  content: "\f6f2"; }
+
+.fa-pills::before {
+  content: "\f484"; }
+
+.fa-face-grin-wide::before {
+  content: "\f581"; }
+
+.fa-grin-alt::before {
+  content: "\f581"; }
+
+.fa-tooth::before {
+  content: "\f5c9"; }
+
+.fa-v::before {
+  content: "\56"; }
+
+.fa-bangladeshi-taka-sign::before {
+  content: "\e2e6"; }
+
+.fa-bicycle::before {
+  content: "\f206"; }
+
+.fa-staff-snake::before {
+  content: "\e579"; }
+
+.fa-rod-asclepius::before {
+  content: "\e579"; }
+
+.fa-rod-snake::before {
+  content: "\e579"; }
+
+.fa-staff-aesculapius::before {
+  content: "\e579"; }
+
+.fa-head-side-cough-slash::before {
+  content: "\e062"; }
+
+.fa-truck-medical::before {
+  content: "\f0f9"; }
+
+.fa-ambulance::before {
+  content: "\f0f9"; }
+
+.fa-wheat-awn-circle-exclamation::before {
+  content: "\e598"; }
+
+.fa-snowman::before {
+  content: "\f7d0"; }
+
+.fa-mortar-pestle::before {
+  content: "\f5a7"; }
+
+.fa-road-barrier::before {
+  content: "\e562"; }
+
+.fa-school::before {
+  content: "\f549"; }
+
+.fa-igloo::before {
+  content: "\f7ae"; }
+
+.fa-joint::before {
+  content: "\f595"; }
+
+.fa-angle-right::before {
+  content: "\f105"; }
+
+.fa-horse::before {
+  content: "\f6f0"; }
+
+.fa-q::before {
+  content: "\51"; }
+
+.fa-g::before {
+  content: "\47"; }
+
+.fa-notes-medical::before {
+  content: "\f481"; }
+
+.fa-temperature-half::before {
+  content: "\f2c9"; }
+
+.fa-temperature-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-2::before {
+  content: "\f2c9"; }
+
+.fa-thermometer-half::before {
+  content: "\f2c9"; }
+
+.fa-dong-sign::before {
+  content: "\e169"; }
+
+.fa-capsules::before {
+  content: "\f46b"; }
+
+.fa-poo-storm::before {
+  content: "\f75a"; }
+
+.fa-poo-bolt::before {
+  content: "\f75a"; }
+
+.fa-face-frown-open::before {
+  content: "\f57a"; }
+
+.fa-frown-open::before {
+  content: "\f57a"; }
+
+.fa-hand-point-up::before {
+  content: "\f0a6"; }
+
+.fa-money-bill::before {
+  content: "\f0d6"; }
+
+.fa-bookmark::before {
+  content: "\f02e"; }
+
+.fa-align-justify::before {
+  content: "\f039"; }
+
+.fa-umbrella-beach::before {
+  content: "\f5ca"; }
+
+.fa-helmet-un::before {
+  content: "\e503"; }
+
+.fa-bullseye::before {
+  content: "\f140"; }
+
+.fa-bacon::before {
+  content: "\f7e5"; }
+
+.fa-hand-point-down::before {
+  content: "\f0a7"; }
+
+.fa-arrow-up-from-bracket::before {
+  content: "\e09a"; }
+
+.fa-folder::before {
+  content: "\f07b"; }
+
+.fa-folder-blank::before {
+  content: "\f07b"; }
+
+.fa-file-waveform::before {
+  content: "\f478"; }
+
+.fa-file-medical-alt::before {
+  content: "\f478"; }
+
+.fa-radiation::before {
+  content: "\f7b9"; }
+
+.fa-chart-simple::before {
+  content: "\e473"; }
+
+.fa-mars-stroke::before {
+  content: "\f229"; }
+
+.fa-vial::before {
+  content: "\f492"; }
+
+.fa-gauge::before {
+  content: "\f624"; }
+
+.fa-dashboard::before {
+  content: "\f624"; }
+
+.fa-gauge-med::before {
+  content: "\f624"; }
+
+.fa-tachometer-alt-average::before {
+  content: "\f624"; }
+
+.fa-wand-magic-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-magic-wand-sparkles::before {
+  content: "\e2ca"; }
+
+.fa-e::before {
+  content: "\45"; }
+
+.fa-pen-clip::before {
+  content: "\f305"; }
+
+.fa-pen-alt::before {
+  content: "\f305"; }
+
+.fa-bridge-circle-exclamation::before {
+  content: "\e4ca"; }
+
+.fa-user::before {
+  content: "\f007"; }
+
+.fa-school-circle-check::before {
+  content: "\e56b"; }
+
+.fa-dumpster::before {
+  content: "\f793"; }
+
+.fa-van-shuttle::before {
+  content: "\f5b6"; }
+
+.fa-shuttle-van::before {
+  content: "\f5b6"; }
+
+.fa-building-user::before {
+  content: "\e4da"; }
+
+.fa-square-caret-left::before {
+  content: "\f191"; }
+
+.fa-caret-square-left::before {
+  content: "\f191"; }
+
+.fa-highlighter::before {
+  content: "\f591"; }
+
+.fa-key::before {
+  content: "\f084"; }
+
+.fa-bullhorn::before {
+  content: "\f0a1"; }
+
+.fa-globe::before {
+  content: "\f0ac"; }
+
+.fa-synagogue::before {
+  content: "\f69b"; }
+
+.fa-person-half-dress::before {
+  content: "\e548"; }
+
+.fa-road-bridge::before {
+  content: "\e563"; }
+
+.fa-location-arrow::before {
+  content: "\f124"; }
+
+.fa-c::before {
+  content: "\43"; }
+
+.fa-tablet-button::before {
+  content: "\f10a"; }
+
+.fa-building-lock::before {
+  content: "\e4d6"; }
+
+.fa-pizza-slice::before {
+  content: "\f818"; }
+
+.fa-money-bill-wave::before {
+  content: "\f53a"; }
+
+.fa-chart-area::before {
+  content: "\f1fe"; }
+
+.fa-area-chart::before {
+  content: "\f1fe"; }
+
+.fa-house-flag::before {
+  content: "\e50d"; }
+
+.fa-person-circle-minus::before {
+  content: "\e540"; }
+
+.fa-ban::before {
+  content: "\f05e"; }
+
+.fa-cancel::before {
+  content: "\f05e"; }
+
+.fa-camera-rotate::before {
+  content: "\e0d8"; }
+
+.fa-spray-can-sparkles::before {
+  content: "\f5d0"; }
+
+.fa-air-freshener::before {
+  content: "\f5d0"; }
+
+.fa-star::before {
+  content: "\f005"; }
+
+.fa-repeat::before {
+  content: "\f363"; }
+
+.fa-cross::before {
+  content: "\f654"; }
+
+.fa-box::before {
+  content: "\f466"; }
+
+.fa-venus-mars::before {
+  content: "\f228"; }
+
+.fa-arrow-pointer::before {
+  content: "\f245"; }
+
+.fa-mouse-pointer::before {
+  content: "\f245"; }
+
+.fa-maximize::before {
+  content: "\f31e"; }
+
+.fa-expand-arrows-alt::before {
+  content: "\f31e"; }
+
+.fa-charging-station::before {
+  content: "\f5e7"; }
+
+.fa-shapes::before {
+  content: "\f61f"; }
+
+.fa-triangle-circle-square::before {
+  content: "\f61f"; }
+
+.fa-shuffle::before {
+  content: "\f074"; }
+
+.fa-random::before {
+  content: "\f074"; }
+
+.fa-person-running::before {
+  content: "\f70c"; }
+
+.fa-running::before {
+  content: "\f70c"; }
+
+.fa-mobile-retro::before {
+  content: "\e527"; }
+
+.fa-grip-lines-vertical::before {
+  content: "\f7a5"; }
+
+.fa-spider::before {
+  content: "\f717"; }
+
+.fa-hands-bound::before {
+  content: "\e4f9"; }
+
+.fa-file-invoice-dollar::before {
+  content: "\f571"; }
+
+.fa-plane-circle-exclamation::before {
+  content: "\e556"; }
+
+.fa-x-ray::before {
+  content: "\f497"; }
+
+.fa-spell-check::before {
+  content: "\f891"; }
+
+.fa-slash::before {
+  content: "\f715"; }
+
+.fa-computer-mouse::before {
+  content: "\f8cc"; }
+
+.fa-mouse::before {
+  content: "\f8cc"; }
+
+.fa-arrow-right-to-bracket::before {
+  content: "\f090"; }
+
+.fa-sign-in::before {
+  content: "\f090"; }
+
+.fa-shop-slash::before {
+  content: "\e070"; }
+
+.fa-store-alt-slash::before {
+  content: "\e070"; }
+
+.fa-server::before {
+  content: "\f233"; }
+
+.fa-virus-covid-slash::before {
+  content: "\e4a9"; }
+
+.fa-shop-lock::before {
+  content: "\e4a5"; }
+
+.fa-hourglass-start::before {
+  content: "\f251"; }
+
+.fa-hourglass-1::before {
+  content: "\f251"; }
+
+.fa-blender-phone::before {
+  content: "\f6b6"; }
+
+.fa-building-wheat::before {
+  content: "\e4db"; }
+
+.fa-person-breastfeeding::before {
+  content: "\e53a"; }
+
+.fa-right-to-bracket::before {
+  content: "\f2f6"; }
+
+.fa-sign-in-alt::before {
+  content: "\f2f6"; }
+
+.fa-venus::before {
+  content: "\f221"; }
+
+.fa-passport::before {
+  content: "\f5ab"; }
+
+.fa-heart-pulse::before {
+  content: "\f21e"; }
+
+.fa-heartbeat::before {
+  content: "\f21e"; }
+
+.fa-people-carry-box::before {
+  content: "\f4ce"; }
+
+.fa-people-carry::before {
+  content: "\f4ce"; }
+
+.fa-temperature-high::before {
+  content: "\f769"; }
+
+.fa-microchip::before {
+  content: "\f2db"; }
+
+.fa-crown::before {
+  content: "\f521"; }
+
+.fa-weight-hanging::before {
+  content: "\f5cd"; }
+
+.fa-xmarks-lines::before {
+  content: "\e59a"; }
+
+.fa-file-prescription::before {
+  content: "\f572"; }
+
+.fa-weight-scale::before {
+  content: "\f496"; }
+
+.fa-weight::before {
+  content: "\f496"; }
+
+.fa-user-group::before {
+  content: "\f500"; }
+
+.fa-user-friends::before {
+  content: "\f500"; }
+
+.fa-arrow-up-a-z::before {
+  content: "\f15e"; }
+
+.fa-sort-alpha-up::before {
+  content: "\f15e"; }
+
+.fa-chess-knight::before {
+  content: "\f441"; }
+
+.fa-face-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-laugh-squint::before {
+  content: "\f59b"; }
+
+.fa-wheelchair::before {
+  content: "\f193"; }
+
+.fa-circle-arrow-up::before {
+  content: "\f0aa"; }
+
+.fa-arrow-circle-up::before {
+  content: "\f0aa"; }
+
+.fa-toggle-on::before {
+  content: "\f205"; }
+
+.fa-person-walking::before {
+  content: "\f554"; }
+
+.fa-walking::before {
+  content: "\f554"; }
+
+.fa-l::before {
+  content: "\4c"; }
+
+.fa-fire::before {
+  content: "\f06d"; }
+
+.fa-bed-pulse::before {
+  content: "\f487"; }
+
+.fa-procedures::before {
+  content: "\f487"; }
+
+.fa-shuttle-space::before {
+  content: "\f197"; }
+
+.fa-space-shuttle::before {
+  content: "\f197"; }
+
+.fa-face-laugh::before {
+  content: "\f599"; }
+
+.fa-laugh::before {
+  content: "\f599"; }
+
+.fa-folder-open::before {
+  content: "\f07c"; }
+
+.fa-heart-circle-plus::before {
+  content: "\e500"; }
+
+.fa-code-fork::before {
+  content: "\e13b"; }
+
+.fa-city::before {
+  content: "\f64f"; }
+
+.fa-microphone-lines::before {
+  content: "\f3c9"; }
+
+.fa-microphone-alt::before {
+  content: "\f3c9"; }
+
+.fa-pepper-hot::before {
+  content: "\f816"; }
+
+.fa-unlock::before {
+  content: "\f09c"; }
+
+.fa-colon-sign::before {
+  content: "\e140"; }
+
+.fa-headset::before {
+  content: "\f590"; }
+
+.fa-store-slash::before {
+  content: "\e071"; }
+
+.fa-road-circle-xmark::before {
+  content: "\e566"; }
+
+.fa-user-minus::before {
+  content: "\f503"; }
+
+.fa-mars-stroke-up::before {
+  content: "\f22a"; }
+
+.fa-mars-stroke-v::before {
+  content: "\f22a"; }
+
+.fa-champagne-glasses::before {
+  content: "\f79f"; }
+
+.fa-glass-cheers::before {
+  content: "\f79f"; }
+
+.fa-clipboard::before {
+  content: "\f328"; }
+
+.fa-house-circle-exclamation::before {
+  content: "\e50a"; }
+
+.fa-file-arrow-up::before {
+  content: "\f574"; }
+
+.fa-file-upload::before {
+  content: "\f574"; }
+
+.fa-wifi::before {
+  content: "\f1eb"; }
+
+.fa-wifi-3::before {
+  content: "\f1eb"; }
+
+.fa-wifi-strong::before {
+  content: "\f1eb"; }
+
+.fa-bath::before {
+  content: "\f2cd"; }
+
+.fa-bathtub::before {
+  content: "\f2cd"; }
+
+.fa-underline::before {
+  content: "\f0cd"; }
+
+.fa-user-pen::before {
+  content: "\f4ff"; }
+
+.fa-user-edit::before {
+  content: "\f4ff"; }
+
+.fa-signature::before {
+  content: "\f5b7"; }
+
+.fa-stroopwafel::before {
+  content: "\f551"; }
+
+.fa-bold::before {
+  content: "\f032"; }
+
+.fa-anchor-lock::before {
+  content: "\e4ad"; }
+
+.fa-building-ngo::before {
+  content: "\e4d7"; }
+
+.fa-manat-sign::before {
+  content: "\e1d5"; }
+
+.fa-not-equal::before {
+  content: "\f53e"; }
+
+.fa-border-top-left::before {
+  content: "\f853"; }
+
+.fa-border-style::before {
+  content: "\f853"; }
+
+.fa-map-location-dot::before {
+  content: "\f5a0"; }
+
+.fa-map-marked-alt::before {
+  content: "\f5a0"; }
+
+.fa-jedi::before {
+  content: "\f669"; }
+
+.fa-square-poll-vertical::before {
+  content: "\f681"; }
+
+.fa-poll::before {
+  content: "\f681"; }
+
+.fa-mug-hot::before {
+  content: "\f7b6"; }
+
+.fa-car-battery::before {
+  content: "\f5df"; }
+
+.fa-battery-car::before {
+  content: "\f5df"; }
+
+.fa-gift::before {
+  content: "\f06b"; }
+
+.fa-dice-two::before {
+  content: "\f528"; }
+
+.fa-chess-queen::before {
+  content: "\f445"; }
+
+.fa-glasses::before {
+  content: "\f530"; }
+
+.fa-chess-board::before {
+  content: "\f43c"; }
+
+.fa-building-circle-check::before {
+  content: "\e4d2"; }
+
+.fa-person-chalkboard::before {
+  content: "\e53d"; }
+
+.fa-mars-stroke-right::before {
+  content: "\f22b"; }
+
+.fa-mars-stroke-h::before {
+  content: "\f22b"; }
+
+.fa-hand-back-fist::before {
+  content: "\f255"; }
+
+.fa-hand-rock::before {
+  content: "\f255"; }
+
+.fa-square-caret-up::before {
+  content: "\f151"; }
+
+.fa-caret-square-up::before {
+  content: "\f151"; }
+
+.fa-cloud-showers-water::before {
+  content: "\e4e4"; }
+
+.fa-chart-bar::before {
+  content: "\f080"; }
+
+.fa-bar-chart::before {
+  content: "\f080"; }
+
+.fa-hands-bubbles::before {
+  content: "\e05e"; }
+
+.fa-hands-wash::before {
+  content: "\e05e"; }
+
+.fa-less-than-equal::before {
+  content: "\f537"; }
+
+.fa-train::before {
+  content: "\f238"; }
+
+.fa-eye-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-low-vision::before {
+  content: "\f2a8"; }
+
+.fa-crow::before {
+  content: "\f520"; }
+
+.fa-sailboat::before {
+  content: "\e445"; }
+
+.fa-window-restore::before {
+  content: "\f2d2"; }
+
+.fa-square-plus::before {
+  content: "\f0fe"; }
+
+.fa-plus-square::before {
+  content: "\f0fe"; }
+
+.fa-torii-gate::before {
+  content: "\f6a1"; }
+
+.fa-frog::before {
+  content: "\f52e"; }
+
+.fa-bucket::before {
+  content: "\e4cf"; }
+
+.fa-image::before {
+  content: "\f03e"; }
+
+.fa-microphone::before {
+  content: "\f130"; }
+
+.fa-cow::before {
+  content: "\f6c8"; }
+
+.fa-caret-up::before {
+  content: "\f0d8"; }
+
+.fa-screwdriver::before {
+  content: "\f54a"; }
+
+.fa-folder-closed::before {
+  content: "\e185"; }
+
+.fa-house-tsunami::before {
+  content: "\e515"; }
+
+.fa-square-nfi::before {
+  content: "\e576"; }
+
+.fa-arrow-up-from-ground-water::before {
+  content: "\e4b5"; }
+
+.fa-martini-glass::before {
+  content: "\f57b"; }
+
+.fa-glass-martini-alt::before {
+  content: "\f57b"; }
+
+.fa-rotate-left::before {
+  content: "\f2ea"; }
+
+.fa-rotate-back::before {
+  content: "\f2ea"; }
+
+.fa-rotate-backward::before {
+  content: "\f2ea"; }
+
+.fa-undo-alt::before {
+  content: "\f2ea"; }
+
+.fa-table-columns::before {
+  content: "\f0db"; }
+
+.fa-columns::before {
+  content: "\f0db"; }
+
+.fa-lemon::before {
+  content: "\f094"; }
+
+.fa-head-side-mask::before {
+  content: "\e063"; }
+
+.fa-handshake::before {
+  content: "\f2b5"; }
+
+.fa-gem::before {
+  content: "\f3a5"; }
+
+.fa-dolly::before {
+  content: "\f472"; }
+
+.fa-dolly-box::before {
+  content: "\f472"; }
+
+.fa-smoking::before {
+  content: "\f48d"; }
+
+.fa-minimize::before {
+  content: "\f78c"; }
+
+.fa-compress-arrows-alt::before {
+  content: "\f78c"; }
+
+.fa-monument::before {
+  content: "\f5a6"; }
+
+.fa-snowplow::before {
+  content: "\f7d2"; }
+
+.fa-angles-right::before {
+  content: "\f101"; }
+
+.fa-angle-double-right::before {
+  content: "\f101"; }
+
+.fa-cannabis::before {
+  content: "\f55f"; }
+
+.fa-circle-play::before {
+  content: "\f144"; }
+
+.fa-play-circle::before {
+  content: "\f144"; }
+
+.fa-tablets::before {
+  content: "\f490"; }
+
+.fa-ethernet::before {
+  content: "\f796"; }
+
+.fa-euro-sign::before {
+  content: "\f153"; }
+
+.fa-eur::before {
+  content: "\f153"; }
+
+.fa-euro::before {
+  content: "\f153"; }
+
+.fa-chair::before {
+  content: "\f6c0"; }
+
+.fa-circle-check::before {
+  content: "\f058"; }
+
+.fa-check-circle::before {
+  content: "\f058"; }
+
+.fa-circle-stop::before {
+  content: "\f28d"; }
+
+.fa-stop-circle::before {
+  content: "\f28d"; }
+
+.fa-compass-drafting::before {
+  content: "\f568"; }
+
+.fa-drafting-compass::before {
+  content: "\f568"; }
+
+.fa-plate-wheat::before {
+  content: "\e55a"; }
+
+.fa-icicles::before {
+  content: "\f7ad"; }
+
+.fa-person-shelter::before {
+  content: "\e54f"; }
+
+.fa-neuter::before {
+  content: "\f22c"; }
+
+.fa-id-badge::before {
+  content: "\f2c1"; }
+
+.fa-marker::before {
+  content: "\f5a1"; }
+
+.fa-face-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-laugh-beam::before {
+  content: "\f59a"; }
+
+.fa-helicopter-symbol::before {
+  content: "\e502"; }
+
+.fa-universal-access::before {
+  content: "\f29a"; }
+
+.fa-circle-chevron-up::before {
+  content: "\f139"; }
+
+.fa-chevron-circle-up::before {
+  content: "\f139"; }
+
+.fa-lari-sign::before {
+  content: "\e1c8"; }
+
+.fa-volcano::before {
+  content: "\f770"; }
+
+.fa-person-walking-dashed-line-arrow-right::before {
+  content: "\e553"; }
+
+.fa-sterling-sign::before {
+  content: "\f154"; }
+
+.fa-gbp::before {
+  content: "\f154"; }
+
+.fa-pound-sign::before {
+  content: "\f154"; }
+
+.fa-viruses::before {
+  content: "\e076"; }
+
+.fa-square-person-confined::before {
+  content: "\e577"; }
+
+.fa-user-tie::before {
+  content: "\f508"; }
+
+.fa-arrow-down-long::before {
+  content: "\f175"; }
+
+.fa-long-arrow-down::before {
+  content: "\f175"; }
+
+.fa-tent-arrow-down-to-line::before {
+  content: "\e57e"; }
+
+.fa-certificate::before {
+  content: "\f0a3"; }
+
+.fa-reply-all::before {
+  content: "\f122"; }
+
+.fa-mail-reply-all::before {
+  content: "\f122"; }
+
+.fa-suitcase::before {
+  content: "\f0f2"; }
+
+.fa-person-skating::before {
+  content: "\f7c5"; }
+
+.fa-skating::before {
+  content: "\f7c5"; }
+
+.fa-filter-circle-dollar::before {
+  content: "\f662"; }
+
+.fa-funnel-dollar::before {
+  content: "\f662"; }
+
+.fa-camera-retro::before {
+  content: "\f083"; }
+
+.fa-circle-arrow-down::before {
+  content: "\f0ab"; }
+
+.fa-arrow-circle-down::before {
+  content: "\f0ab"; }
+
+.fa-file-import::before {
+  content: "\f56f"; }
+
+.fa-arrow-right-to-file::before {
+  content: "\f56f"; }
+
+.fa-square-arrow-up-right::before {
+  content: "\f14c"; }
+
+.fa-external-link-square::before {
+  content: "\f14c"; }
+
+.fa-box-open::before {
+  content: "\f49e"; }
+
+.fa-scroll::before {
+  content: "\f70e"; }
+
+.fa-spa::before {
+  content: "\f5bb"; }
+
+.fa-location-pin-lock::before {
+  content: "\e51f"; }
+
+.fa-pause::before {
+  content: "\f04c"; }
+
+.fa-hill-avalanche::before {
+  content: "\e507"; }
+
+.fa-temperature-empty::before {
+  content: "\f2cb"; }
+
+.fa-temperature-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-0::before {
+  content: "\f2cb"; }
+
+.fa-thermometer-empty::before {
+  content: "\f2cb"; }
+
+.fa-bomb::before {
+  content: "\f1e2"; }
+
+.fa-registered::before {
+  content: "\f25d"; }
+
+.fa-address-card::before {
+  content: "\f2bb"; }
+
+.fa-contact-card::before {
+  content: "\f2bb"; }
+
+.fa-vcard::before {
+  content: "\f2bb"; }
+
+.fa-scale-unbalanced-flip::before {
+  content: "\f516"; }
+
+.fa-balance-scale-right::before {
+  content: "\f516"; }
+
+.fa-subscript::before {
+  content: "\f12c"; }
+
+.fa-diamond-turn-right::before {
+  content: "\f5eb"; }
+
+.fa-directions::before {
+  content: "\f5eb"; }
+
+.fa-burst::before {
+  content: "\e4dc"; }
+
+.fa-house-laptop::before {
+  content: "\e066"; }
+
+.fa-laptop-house::before {
+  content: "\e066"; }
+
+.fa-face-tired::before {
+  content: "\f5c8"; }
+
+.fa-tired::before {
+  content: "\f5c8"; }
+
+.fa-money-bills::before {
+  content: "\e1f3"; }
+
+.fa-smog::before {
+  content: "\f75f"; }
+
+.fa-crutch::before {
+  content: "\f7f7"; }
+
+.fa-cloud-arrow-up::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload::before {
+  content: "\f0ee"; }
+
+.fa-cloud-upload-alt::before {
+  content: "\f0ee"; }
+
+.fa-palette::before {
+  content: "\f53f"; }
+
+.fa-arrows-turn-right::before {
+  content: "\e4c0"; }
+
+.fa-vest::before {
+  content: "\e085"; }
+
+.fa-ferry::before {
+  content: "\e4ea"; }
+
+.fa-arrows-down-to-people::before {
+  content: "\e4b9"; }
+
+.fa-seedling::before {
+  content: "\f4d8"; }
+
+.fa-sprout::before {
+  content: "\f4d8"; }
+
+.fa-left-right::before {
+  content: "\f337"; }
+
+.fa-arrows-alt-h::before {
+  content: "\f337"; }
+
+.fa-boxes-packing::before {
+  content: "\e4c7"; }
+
+.fa-circle-arrow-left::before {
+  content: "\f0a8"; }
+
+.fa-arrow-circle-left::before {
+  content: "\f0a8"; }
+
+.fa-group-arrows-rotate::before {
+  content: "\e4f6"; }
+
+.fa-bowl-food::before {
+  content: "\e4c6"; }
+
+.fa-candy-cane::before {
+  content: "\f786"; }
+
+.fa-arrow-down-wide-short::before {
+  content: "\f160"; }
+
+.fa-sort-amount-asc::before {
+  content: "\f160"; }
+
+.fa-sort-amount-down::before {
+  content: "\f160"; }
+
+.fa-cloud-bolt::before {
+  content: "\f76c"; }
+
+.fa-thunderstorm::before {
+  content: "\f76c"; }
+
+.fa-text-slash::before {
+  content: "\f87d"; }
+
+.fa-remove-format::before {
+  content: "\f87d"; }
+
+.fa-face-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-smile-wink::before {
+  content: "\f4da"; }
+
+.fa-file-word::before {
+  content: "\f1c2"; }
+
+.fa-file-powerpoint::before {
+  content: "\f1c4"; }
+
+.fa-arrows-left-right::before {
+  content: "\f07e"; }
+
+.fa-arrows-h::before {
+  content: "\f07e"; }
+
+.fa-house-lock::before {
+  content: "\e510"; }
+
+.fa-cloud-arrow-down::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download::before {
+  content: "\f0ed"; }
+
+.fa-cloud-download-alt::before {
+  content: "\f0ed"; }
+
+.fa-children::before {
+  content: "\e4e1"; }
+
+.fa-chalkboard::before {
+  content: "\f51b"; }
+
+.fa-blackboard::before {
+  content: "\f51b"; }
+
+.fa-user-large-slash::before {
+  content: "\f4fa"; }
+
+.fa-user-alt-slash::before {
+  content: "\f4fa"; }
+
+.fa-envelope-open::before {
+  content: "\f2b6"; }
+
+.fa-handshake-simple-slash::before {
+  content: "\e05f"; }
+
+.fa-handshake-alt-slash::before {
+  content: "\e05f"; }
+
+.fa-mattress-pillow::before {
+  content: "\e525"; }
+
+.fa-guarani-sign::before {
+  content: "\e19a"; }
+
+.fa-arrows-rotate::before {
+  content: "\f021"; }
+
+.fa-refresh::before {
+  content: "\f021"; }
+
+.fa-sync::before {
+  content: "\f021"; }
+
+.fa-fire-extinguisher::before {
+  content: "\f134"; }
+
+.fa-cruzeiro-sign::before {
+  content: "\e152"; }
+
+.fa-greater-than-equal::before {
+  content: "\f532"; }
+
+.fa-shield-halved::before {
+  content: "\f3ed"; }
+
+.fa-shield-alt::before {
+  content: "\f3ed"; }
+
+.fa-book-atlas::before {
+  content: "\f558"; }
+
+.fa-atlas::before {
+  content: "\f558"; }
+
+.fa-virus::before {
+  content: "\e074"; }
+
+.fa-envelope-circle-check::before {
+  content: "\e4e8"; }
+
+.fa-layer-group::before {
+  content: "\f5fd"; }
+
+.fa-arrows-to-dot::before {
+  content: "\e4be"; }
+
+.fa-archway::before {
+  content: "\f557"; }
+
+.fa-heart-circle-check::before {
+  content: "\e4fd"; }
+
+.fa-house-chimney-crack::before {
+  content: "\f6f1"; }
+
+.fa-house-damage::before {
+  content: "\f6f1"; }
+
+.fa-file-zipper::before {
+  content: "\f1c6"; }
+
+.fa-file-archive::before {
+  content: "\f1c6"; }
+
+.fa-square::before {
+  content: "\f0c8"; }
+
+.fa-martini-glass-empty::before {
+  content: "\f000"; }
+
+.fa-glass-martini::before {
+  content: "\f000"; }
+
+.fa-couch::before {
+  content: "\f4b8"; }
+
+.fa-cedi-sign::before {
+  content: "\e0df"; }
+
+.fa-italic::before {
+  content: "\f033"; }
+
+.fa-table-cells-column-lock::before {
+  content: "\e678"; }
+
+.fa-church::before {
+  content: "\f51d"; }
+
+.fa-comments-dollar::before {
+  content: "\f653"; }
+
+.fa-democrat::before {
+  content: "\f747"; }
+
+.fa-z::before {
+  content: "\5a"; }
+
+.fa-person-skiing::before {
+  content: "\f7c9"; }
+
+.fa-skiing::before {
+  content: "\f7c9"; }
+
+.fa-road-lock::before {
+  content: "\e567"; }
+
+.fa-a::before {
+  content: "\41"; }
+
+.fa-temperature-arrow-down::before {
+  content: "\e03f"; }
+
+.fa-temperature-down::before {
+  content: "\e03f"; }
+
+.fa-feather-pointed::before {
+  content: "\f56b"; }
+
+.fa-feather-alt::before {
+  content: "\f56b"; }
+
+.fa-p::before {
+  content: "\50"; }
+
+.fa-snowflake::before {
+  content: "\f2dc"; }
+
+.fa-newspaper::before {
+  content: "\f1ea"; }
+
+.fa-rectangle-ad::before {
+  content: "\f641"; }
+
+.fa-ad::before {
+  content: "\f641"; }
+
+.fa-circle-arrow-right::before {
+  content: "\f0a9"; }
+
+.fa-arrow-circle-right::before {
+  content: "\f0a9"; }
+
+.fa-filter-circle-xmark::before {
+  content: "\e17b"; }
+
+.fa-locust::before {
+  content: "\e520"; }
+
+.fa-sort::before {
+  content: "\f0dc"; }
+
+.fa-unsorted::before {
+  content: "\f0dc"; }
+
+.fa-list-ol::before {
+  content: "\f0cb"; }
+
+.fa-list-1-2::before {
+  content: "\f0cb"; }
+
+.fa-list-numeric::before {
+  content: "\f0cb"; }
+
+.fa-person-dress-burst::before {
+  content: "\e544"; }
+
+.fa-money-check-dollar::before {
+  content: "\f53d"; }
+
+.fa-money-check-alt::before {
+  content: "\f53d"; }
+
+.fa-vector-square::before {
+  content: "\f5cb"; }
+
+.fa-bread-slice::before {
+  content: "\f7ec"; }
+
+.fa-language::before {
+  content: "\f1ab"; }
+
+.fa-face-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-kiss-wink-heart::before {
+  content: "\f598"; }
+
+.fa-filter::before {
+  content: "\f0b0"; }
+
+.fa-question::before {
+  content: "\3f"; }
+
+.fa-file-signature::before {
+  content: "\f573"; }
+
+.fa-up-down-left-right::before {
+  content: "\f0b2"; }
+
+.fa-arrows-alt::before {
+  content: "\f0b2"; }
+
+.fa-house-chimney-user::before {
+  content: "\e065"; }
+
+.fa-hand-holding-heart::before {
+  content: "\f4be"; }
+
+.fa-puzzle-piece::before {
+  content: "\f12e"; }
+
+.fa-money-check::before {
+  content: "\f53c"; }
+
+.fa-star-half-stroke::before {
+  content: "\f5c0"; }
+
+.fa-star-half-alt::before {
+  content: "\f5c0"; }
+
+.fa-code::before {
+  content: "\f121"; }
+
+.fa-whiskey-glass::before {
+  content: "\f7a0"; }
+
+.fa-glass-whiskey::before {
+  content: "\f7a0"; }
+
+.fa-building-circle-exclamation::before {
+  content: "\e4d3"; }
+
+.fa-magnifying-glass-chart::before {
+  content: "\e522"; }
+
+.fa-arrow-up-right-from-square::before {
+  content: "\f08e"; }
+
+.fa-external-link::before {
+  content: "\f08e"; }
+
+.fa-cubes-stacked::before {
+  content: "\e4e6"; }
+
+.fa-won-sign::before {
+  content: "\f159"; }
+
+.fa-krw::before {
+  content: "\f159"; }
+
+.fa-won::before {
+  content: "\f159"; }
+
+.fa-virus-covid::before {
+  content: "\e4a8"; }
+
+.fa-austral-sign::before {
+  content: "\e0a9"; }
+
+.fa-f::before {
+  content: "\46"; }
+
+.fa-leaf::before {
+  content: "\f06c"; }
+
+.fa-road::before {
+  content: "\f018"; }
+
+.fa-taxi::before {
+  content: "\f1ba"; }
+
+.fa-cab::before {
+  content: "\f1ba"; }
+
+.fa-person-circle-plus::before {
+  content: "\e541"; }
+
+.fa-chart-pie::before {
+  content: "\f200"; }
+
+.fa-pie-chart::before {
+  content: "\f200"; }
+
+.fa-bolt-lightning::before {
+  content: "\e0b7"; }
+
+.fa-sack-xmark::before {
+  content: "\e56a"; }
+
+.fa-file-excel::before {
+  content: "\f1c3"; }
+
+.fa-file-contract::before {
+  content: "\f56c"; }
+
+.fa-fish-fins::before {
+  content: "\e4f2"; }
+
+.fa-building-flag::before {
+  content: "\e4d5"; }
+
+.fa-face-grin-beam::before {
+  content: "\f582"; }
+
+.fa-grin-beam::before {
+  content: "\f582"; }
+
+.fa-object-ungroup::before {
+  content: "\f248"; }
+
+.fa-poop::before {
+  content: "\f619"; }
+
+.fa-location-pin::before {
+  content: "\f041"; }
+
+.fa-map-marker::before {
+  content: "\f041"; }
+
+.fa-kaaba::before {
+  content: "\f66b"; }
+
+.fa-toilet-paper::before {
+  content: "\f71e"; }
+
+.fa-helmet-safety::before {
+  content: "\f807"; }
+
+.fa-hard-hat::before {
+  content: "\f807"; }
+
+.fa-hat-hard::before {
+  content: "\f807"; }
+
+.fa-eject::before {
+  content: "\f052"; }
+
+.fa-circle-right::before {
+  content: "\f35a"; }
+
+.fa-arrow-alt-circle-right::before {
+  content: "\f35a"; }
+
+.fa-plane-circle-check::before {
+  content: "\e555"; }
+
+.fa-face-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-meh-rolling-eyes::before {
+  content: "\f5a5"; }
+
+.fa-object-group::before {
+  content: "\f247"; }
+
+.fa-chart-line::before {
+  content: "\f201"; }
+
+.fa-line-chart::before {
+  content: "\f201"; }
+
+.fa-mask-ventilator::before {
+  content: "\e524"; }
+
+.fa-arrow-right::before {
+  content: "\f061"; }
+
+.fa-signs-post::before {
+  content: "\f277"; }
+
+.fa-map-signs::before {
+  content: "\f277"; }
+
+.fa-cash-register::before {
+  content: "\f788"; }
+
+.fa-person-circle-question::before {
+  content: "\e542"; }
+
+.fa-h::before {
+  content: "\48"; }
+
+.fa-tarp::before {
+  content: "\e57b"; }
+
+.fa-screwdriver-wrench::before {
+  content: "\f7d9"; }
+
+.fa-tools::before {
+  content: "\f7d9"; }
+
+.fa-arrows-to-eye::before {
+  content: "\e4bf"; }
+
+.fa-plug-circle-bolt::before {
+  content: "\e55b"; }
+
+.fa-heart::before {
+  content: "\f004"; }
+
+.fa-mars-and-venus::before {
+  content: "\f224"; }
+
+.fa-house-user::before {
+  content: "\e1b0"; }
+
+.fa-home-user::before {
+  content: "\e1b0"; }
+
+.fa-dumpster-fire::before {
+  content: "\f794"; }
+
+.fa-house-crack::before {
+  content: "\e3b1"; }
+
+.fa-martini-glass-citrus::before {
+  content: "\f561"; }
+
+.fa-cocktail::before {
+  content: "\f561"; }
+
+.fa-face-surprise::before {
+  content: "\f5c2"; }
+
+.fa-surprise::before {
+  content: "\f5c2"; }
+
+.fa-bottle-water::before {
+  content: "\e4c5"; }
+
+.fa-circle-pause::before {
+  content: "\f28b"; }
+
+.fa-pause-circle::before {
+  content: "\f28b"; }
+
+.fa-toilet-paper-slash::before {
+  content: "\e072"; }
+
+.fa-apple-whole::before {
+  content: "\f5d1"; }
+
+.fa-apple-alt::before {
+  content: "\f5d1"; }
+
+.fa-kitchen-set::before {
+  content: "\e51a"; }
+
+.fa-r::before {
+  content: "\52"; }
+
+.fa-temperature-quarter::before {
+  content: "\f2ca"; }
+
+.fa-temperature-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-1::before {
+  content: "\f2ca"; }
+
+.fa-thermometer-quarter::before {
+  content: "\f2ca"; }
+
+.fa-cube::before {
+  content: "\f1b2"; }
+
+.fa-bitcoin-sign::before {
+  content: "\e0b4"; }
+
+.fa-shield-dog::before {
+  content: "\e573"; }
+
+.fa-solar-panel::before {
+  content: "\f5ba"; }
+
+.fa-lock-open::before {
+  content: "\f3c1"; }
+
+.fa-elevator::before {
+  content: "\e16d"; }
+
+.fa-money-bill-transfer::before {
+  content: "\e528"; }
+
+.fa-money-bill-trend-up::before {
+  content: "\e529"; }
+
+.fa-house-flood-water-circle-arrow-right::before {
+  content: "\e50f"; }
+
+.fa-square-poll-horizontal::before {
+  content: "\f682"; }
+
+.fa-poll-h::before {
+  content: "\f682"; }
+
+.fa-circle::before {
+  content: "\f111"; }
+
+.fa-backward-fast::before {
+  content: "\f049"; }
+
+.fa-fast-backward::before {
+  content: "\f049"; }
+
+.fa-recycle::before {
+  content: "\f1b8"; }
+
+.fa-user-astronaut::before {
+  content: "\f4fb"; }
+
+.fa-plane-slash::before {
+  content: "\e069"; }
+
+.fa-trademark::before {
+  content: "\f25c"; }
+
+.fa-basketball::before {
+  content: "\f434"; }
+
+.fa-basketball-ball::before {
+  content: "\f434"; }
+
+.fa-satellite-dish::before {
+  content: "\f7c0"; }
+
+.fa-circle-up::before {
+  content: "\f35b"; }
+
+.fa-arrow-alt-circle-up::before {
+  content: "\f35b"; }
+
+.fa-mobile-screen-button::before {
+  content: "\f3cd"; }
+
+.fa-mobile-alt::before {
+  content: "\f3cd"; }
+
+.fa-volume-high::before {
+  content: "\f028"; }
+
+.fa-volume-up::before {
+  content: "\f028"; }
+
+.fa-users-rays::before {
+  content: "\e593"; }
+
+.fa-wallet::before {
+  content: "\f555"; }
+
+.fa-clipboard-check::before {
+  content: "\f46c"; }
+
+.fa-file-audio::before {
+  content: "\f1c7"; }
+
+.fa-burger::before {
+  content: "\f805"; }
+
+.fa-hamburger::before {
+  content: "\f805"; }
+
+.fa-wrench::before {
+  content: "\f0ad"; }
+
+.fa-bugs::before {
+  content: "\e4d0"; }
+
+.fa-rupee-sign::before {
+  content: "\f156"; }
+
+.fa-rupee::before {
+  content: "\f156"; }
+
+.fa-file-image::before {
+  content: "\f1c5"; }
+
+.fa-circle-question::before {
+  content: "\f059"; }
+
+.fa-question-circle::before {
+  content: "\f059"; }
+
+.fa-plane-departure::before {
+  content: "\f5b0"; }
+
+.fa-handshake-slash::before {
+  content: "\e060"; }
+
+.fa-book-bookmark::before {
+  content: "\e0bb"; }
+
+.fa-code-branch::before {
+  content: "\f126"; }
+
+.fa-hat-cowboy::before {
+  content: "\f8c0"; }
+
+.fa-bridge::before {
+  content: "\e4c8"; }
+
+.fa-phone-flip::before {
+  content: "\f879"; }
+
+.fa-phone-alt::before {
+  content: "\f879"; }
+
+.fa-truck-front::before {
+  content: "\e2b7"; }
+
+.fa-cat::before {
+  content: "\f6be"; }
+
+.fa-anchor-circle-exclamation::before {
+  content: "\e4ab"; }
+
+.fa-truck-field::before {
+  content: "\e58d"; }
+
+.fa-route::before {
+  content: "\f4d7"; }
+
+.fa-clipboard-question::before {
+  content: "\e4e3"; }
+
+.fa-panorama::before {
+  content: "\e209"; }
+
+.fa-comment-medical::before {
+  content: "\f7f5"; }
+
+.fa-teeth-open::before {
+  content: "\f62f"; }
+
+.fa-file-circle-minus::before {
+  content: "\e4ed"; }
+
+.fa-tags::before {
+  content: "\f02c"; }
+
+.fa-wine-glass::before {
+  content: "\f4e3"; }
+
+.fa-forward-fast::before {
+  content: "\f050"; }
+
+.fa-fast-forward::before {
+  content: "\f050"; }
+
+.fa-face-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-meh-blank::before {
+  content: "\f5a4"; }
+
+.fa-square-parking::before {
+  content: "\f540"; }
+
+.fa-parking::before {
+  content: "\f540"; }
+
+.fa-house-signal::before {
+  content: "\e012"; }
+
+.fa-bars-progress::before {
+  content: "\f828"; }
+
+.fa-tasks-alt::before {
+  content: "\f828"; }
+
+.fa-faucet-drip::before {
+  content: "\e006"; }
+
+.fa-cart-flatbed::before {
+  content: "\f474"; }
+
+.fa-dolly-flatbed::before {
+  content: "\f474"; }
+
+.fa-ban-smoking::before {
+  content: "\f54d"; }
+
+.fa-smoking-ban::before {
+  content: "\f54d"; }
+
+.fa-terminal::before {
+  content: "\f120"; }
+
+.fa-mobile-button::before {
+  content: "\f10b"; }
+
+.fa-house-medical-flag::before {
+  content: "\e514"; }
+
+.fa-basket-shopping::before {
+  content: "\f291"; }
+
+.fa-shopping-basket::before {
+  content: "\f291"; }
+
+.fa-tape::before {
+  content: "\f4db"; }
+
+.fa-bus-simple::before {
+  content: "\f55e"; }
+
+.fa-bus-alt::before {
+  content: "\f55e"; }
+
+.fa-eye::before {
+  content: "\f06e"; }
+
+.fa-face-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-sad-cry::before {
+  content: "\f5b3"; }
+
+.fa-audio-description::before {
+  content: "\f29e"; }
+
+.fa-person-military-to-person::before {
+  content: "\e54c"; }
+
+.fa-file-shield::before {
+  content: "\e4f0"; }
+
+.fa-user-slash::before {
+  content: "\f506"; }
+
+.fa-pen::before {
+  content: "\f304"; }
+
+.fa-tower-observation::before {
+  content: "\e586"; }
+
+.fa-file-code::before {
... 32531 lines suppressed ...