From 2a7382e076c4518d26b4f6798bf9d205858b1abb Mon Sep 17 00:00:00 2001 From: Nicholas Kyriakides Date: Tue, 17 Mar 2026 19:43:14 +0200 Subject: [PATCH 1/4] fix: drop ruby/rewrite in static html --- .gitattributes | 1 - .github/CONTRIBUTING.md | 62 ++ .github/workflows/lint.yml | 44 + .github/workflows/test.yml | 17 + .gitignore | 3 +- CHANGELOG.md | 286 ------ CODE_OF_CONDUCT.md | 46 - Dockerfile | 10 - LICENSE | 201 ----- Procfile | 1 - README.md | 74 +- app.js | 14 + assets/og.webp | Bin 0 -> 4468 bytes bitpaper-home.png | Bin 0 -> 140789 bytes build/favicon-7c63c2e1.ico | Bin 1150 -> 0 bytes build/fonts/slate-7b7da4fe.ttf | Bin 1720 -> 0 bytes build/fonts/slate-cfc9d06b.eot | Bin 1876 -> 0 bytes build/fonts/slate-e55b8307.svg | 14 - build/fonts/slate.woff | Bin 1796 -> 0 bytes build/fonts/slate.woff2 | Bin 796 -> 0 bytes build/images/logo-22aa55c6.png | Bin 11850 -> 0 bytes build/images/logo-bbe8927d.svg | 16 - build/images/navbar-cad8cdcb.png | Bin 96 -> 0 bytes build/index.html | 722 --------------- build/javascripts/all-a9fde460.js | 120 --- build/javascripts/all_nosearch-8f5ea5a5.js | 31 - build/stylesheets/print-953e3353.css | 1 - build/stylesheets/screen-04294f6d.css | 1 - index.html | 991 +++++++++++++++++++++ lib/server/README.md | 34 + lib/server/index.js | 256 ++++++ lib/server/package.json | 6 + lib/server/test/fixtures/assets/pixel.png | 2 + lib/server/test/fixtures/index.html | 1 + lib/server/test/fixtures/robots.txt | 1 + lib/server/test/main.test.js | 257 ++++++ lib/server/test/security.test.js | 116 +++ package.json | 8 +- server.js | 44 - test/smoke.test.js | 48 + 40 files changed, 1896 insertions(+), 1532 deletions(-) delete mode 100644 .gitattributes create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test.yml delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 Dockerfile delete mode 100644 LICENSE delete mode 100644 Procfile create mode 100644 app.js create mode 100644 assets/og.webp create mode 100644 bitpaper-home.png delete mode 100644 build/favicon-7c63c2e1.ico delete mode 100644 build/fonts/slate-7b7da4fe.ttf delete mode 100644 build/fonts/slate-cfc9d06b.eot delete mode 100644 build/fonts/slate-e55b8307.svg delete mode 100644 build/fonts/slate.woff delete mode 100644 build/fonts/slate.woff2 delete mode 100644 build/images/logo-22aa55c6.png delete mode 100644 build/images/logo-bbe8927d.svg delete mode 100644 build/images/navbar-cad8cdcb.png delete mode 100644 build/index.html delete mode 100644 build/javascripts/all-a9fde460.js delete mode 100644 build/javascripts/all_nosearch-8f5ea5a5.js delete mode 100644 build/stylesheets/print-953e3353.css delete mode 100644 build/stylesheets/screen-04294f6d.css create mode 100644 index.html create mode 100644 lib/server/README.md create mode 100644 lib/server/index.js create mode 100644 lib/server/package.json create mode 100644 lib/server/test/fixtures/assets/pixel.png create mode 100644 lib/server/test/fixtures/index.html create mode 100644 lib/server/test/fixtures/robots.txt create mode 100644 lib/server/test/main.test.js create mode 100644 lib/server/test/security.test.js delete mode 100644 server.js create mode 100644 test/smoke.test.js diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 3069c43..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -source/javascripts/lib/* linguist-vendored diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..df3498a --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,62 @@ +# Contributing + +## HTML + +- Semantic elements over generic `div`/`span` +- Minimal wrappers; avoid nesting without purpose +- Minimal classes; prefer element and attribute selectors +- ARIA attributes where native semantics fall short +- No inline styles; keep presentation in CSS +- Use `` for fenced code examples + +## CSS + +- Native CSS nesting; no preprocessors +- `light-dark()` for theming via `color-scheme` +- CSS custom properties for shared values +- Specific `transition` properties, not `all` +- Gate motion behind `prefers-reduced-motion` +- Mobile breakpoint at `768px` + +## JavaScript + +- Functional style; `const`, arrow functions, expressions +- Minimal intermediates; prefer composition +- No frameworks or external dependencies +- Handle async errors (e.g. `.catch` on clipboard) +- No DOM writes from user input without escaping + +## General + +- Avoid dependencies if possible; prefer `npx` for external tools +- Single file; CSS and JS are embedded in `index.html` +- Keep the page under 1000 lines total +- Test in both light and dark mode +- Verify mobile layout before committing +- Fix lint warnings in prose, not in the linter config + +## Server + +### Add a new page + +1. Place an `.html` file in the project root +2. Register it in `app.js`: `.get('/path', 'file.html')` + +### Serve custom content + +1. Add a text route in `app.js`: `.get('/path', 'body')` + +Omit the body to respond with `ok`: `.get('/health')` + +### Serve static files + +1. Place files in a directory (e.g. `assets/`) +2. Register in `app.js`: `.static('/assets')` + +### Notes + +- Only `GET` requests; everything else returns `405` +- File extensions must have a known MIME type (see `Server.DEFAULTS.mime`) +- Pages are loaded into memory at startup; restart to pick up changes +- Static directories must be within the project root +- `index.html` at root is auto-detected and served at `/` diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..20e1111 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,44 @@ +name: lint + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Setup vale + run: | + mkdir -p .vale/styles/config/vocabularies/Bitpaper + + cat > .vale.ini << 'EOF' + StylesPath = .vale/styles + MinAlertLevel = warning + Packages = write-good + Vocab = Bitpaper + SkippedScopes = script, style, pre, code, code-block + + [*] + BasedOnStyles = Vale, write-good + EOF + + cat > .vale/styles/config/vocabularies/Bitpaper/accept.txt << 'EOF' + (?i)Bitpaper + preprocessors + breakpoint + async + (?i)urls + screensharing + (?i)Whitelabelling + EOF + + - uses: errata-ai/vale-action@v2 + with: + reporter: github-check + fail_on_error: true + files: index.html diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..dd1aa9b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,17 @@ +name: test + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + - run: npm test diff --git a/.gitignore b/.gitignore index 56501dc..b44838c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ -*.DS_STORE +.DS_Store tmp +.claude/ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 55dfc05..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,286 +0,0 @@ -# Changelog - -## Version 2.10.0 - -*April 13, 2021* - -* Add support for Ruby 3.0 (thanks @shaun-scale) -* Add requirement for Git on installing dependencies -* Bump nokogiri from 1.11.2 to 1.11.3 -* Bump middleman from 4.3.11 to [`d180ca3`](https://github.com/middleman/middleman/commit/d180ca337202873f2601310c74ba2b6b4cf063ec) - -## Version 2.9.2 - -*March 30, 2021* - -* __[Security]__ Bump kramdown from 2.3.0 to 2.3.1 -* Bump nokogiri from 1.11.1 to 1.11.2 - -## Version 2.9.1 - -*February 27, 2021* - -* Fix Slate language tabs not working if localStorage is disabled - -## Version 2.9.0 - -*January 19, 2021* - -* __Drop support for Ruby 2.3 and 2.4__ -* __[Security]__ Bump nokogiri from 1.10.10 to 1.11.1 -* __[Security]__ Bump redcarpet from 3.5.0 to 3.5.1 -* Specify slate is not supported on Ruby 3.x -* Bump rouge from 3.24.0 to 3.26.0 - -## Version 2.8.0 - -*October 27, 2020* - -* Remove last trailing newline when using the copy code button -* Rework docker image and make available at slatedocs/slate -* Improve Dockerfile layout to improve caching (thanks @micvbang) -* Bump rouge from 3.20 to 3.24 -* Bump nokogiri from 1.10.9 to 1.10.10 -* Bump middleman from 4.3.8 to 4.3.11 -* Bump lunr.js from 2.3.8 to 2.3.9 - -## Version 2.7.1 - -*August 13, 2020* - -* __[security]__ Bumped middleman from 4.3.7 to 4.3.8 - -_Note_: Slate uses redcarpet, not kramdown, for rendering markdown to HTML, and so was unaffected by the security vulnerability in middleman. -If you have changed slate to use kramdown, and with GFM, you may need to install the `kramdown-parser-gfm` gem. - -## Version 2.7.0 - -*June 21, 2020* - -* __[security]__ Bumped rack in Gemfile.lock from 2.2.2 to 2.2.3 -* Bumped bundled jQuery from 3.2.1 to 3.5.1 -* Bumped bundled lunr from 0.5.7 to 2.3.8 -* Bumped imagesloaded from 3.1.8 to 4.1.4 -* Bumped rouge from 3.17.0 to 3.20.0 -* Bumped redcarpet from 3.4.0 to 3.5.0 -* Fix color of highlighted code being unreadable when printing page -* Add clipboard icon for "Copy to Clipboard" functionality to code boxes (see note below) -* Fix handling of ToC selectors that contain punctutation (thanks @gruis) -* Fix language bar truncating languages that overflow screen width -* Strip HTML tags from ToC title before displaying it in title bar in JS (backup to stripping done in Ruby code) (thanks @atic) - -To enable the new clipboard icon, you need to add `code_clipboard: true` to the frontmatter of source/index.html.md. -See [this line](https://github.com/slatedocs/slate/blame/main/source/index.html.md#L19) for an example of usage. - -## Version 2.6.1 - -*May 30, 2020* - -* __[security]__ update child dependency activesupport in Gemfile.lock to 5.4.2.3 -* Update Middleman in Gemfile.lock to 4.3.7 -* Replace Travis-CI with GitHub actions for continuous integration -* Replace Spectrum with GitHub discussions - -## Version 2.6.0 - -*May 18, 2020* - -__Note__: 2.5.0 was "pulled" due to a breaking bug discovered after release. It is recommended to skip it, and move straight to 2.6.0. - -* Fix large whitespace gap in middle column for sections with codeblocks -* Fix highlighted code elements having a different background than rest of code block -* Change JSON keys to have a different font color than their values -* Disable asset hashing for woff and woff2 elements due to middleman bug breaking woff2 asset hashing in general -* Move Dockerfile to Debian from Alpine -* Converted repo to a [GitHub template](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-template-repository) -* Update sassc to 2.3.0 in Gemfile.lock - -## Version 2.5.0 - -*May 8, 2020* - -* __[security]__ update nokogiri to ~> 1.10.8 -* Update links in example docs to https://github.com/slatedocs/slate from https://github.com/lord/slate -* Update LICENSE to include full Apache 2.0 text -* Test slate against Ruby 2.5 and 2.6 on Travis-CI -* Update Vagrantfile to use Ubuntu 18.04 (thanks @bradthurber) -* Parse arguments and flags for deploy.sh on script start, instead of potentially after building source files -* Install nodejs inside Vagrantfile (thanks @fernandoaguilar) -* Add Dockerfile for running slate (thanks @redhatxl) -* update middleman-syntax and rouge to ~>3.2 -* update middleman to 4.3.6 - -## Version 2.4.0 - -*October 19, 2019* - -- Move repository from lord/slate to slatedocs/slate -- Fix documentation to point at new repo link, thanks to [Arun](https://github.com/slash-arun), [Gustavo Gawryszewski](https://github.com/gawry), and [Daniel Korbit](https://github.com/danielkorbit) -- Update `nokogiri` to 1.10.4 -- Update `ffi` in `Gemfile.lock` to fix security warnings, thanks to [Grey Baker](https://github.com/greysteil) and [jakemack](https://github.com/jakemack) -- Update `rack` to 2.0.7 in `Gemfile.lock` to fix security warnings, thanks to [Grey Baker](https://github.com/greysteil) and [jakemack](https://github.com/jakemack) -- Update middleman to `4.3` and relax constraints on middleman related gems, thanks to [jakemack](https://github.com/jakemack) -- Add sass gem, thanks to [jakemack](https://github.com/jakemack) -- Activate `asset_cache` in middleman to improve cacheability of static files, thanks to [Sam Gilman](https://github.com/thenengah) -- Update to using bundler 2 for `Gemfile.lock`, thanks to [jakemack](https://github.com/jakemack) - -## Version 2.3.1 - -*July 5, 2018* - -- Update `sprockets` in `Gemfile.lock` to fix security warnings - -## Version 2.3 - -*July 5, 2018* - -- Allows strikethrough in markdown by default. -- Upgrades jQuery to 3.2.1, thanks to [Tomi Takussaari](https://github.com/TomiTakussaari) -- Fixes invalid HTML in `layout.erb`, thanks to [Eric Scouten](https://github.com/scouten) for pointing out -- Hopefully fixes Vagrant memory issues, thanks to [Petter Blomberg](https://github.com/p-blomberg) for the suggestion -- Cleans HTML in headers before setting `document.title`, thanks to [Dan Levy](https://github.com/justsml) -- Allows trailing whitespace in markdown files, thanks to [Samuel Cousin](https://github.com/kuzyn) -- Fixes pushState/replaceState problems with scrolling not changing the document hash, thanks to [Andrey Fedorov](https://github.com/anfedorov) -- Removes some outdated examples, thanks [@al-tr](https://github.com/al-tr), [Jerome Dahdah](https://github.com/jdahdah), and [Ricardo Castro](https://github.com/mccricardo) -- Fixes `nav-padding` bug, thanks [Jerome Dahdah](https://github.com/jdahdah) -- Code style fixes thanks to [Sebastian Zaremba](https://github.com/vassyz) -- Nokogiri version bump thanks to [Grey Baker](https://github.com/greysteil) -- Fix to default `index.md` text thanks to [Nick Busey](https://github.com/NickBusey) - -Thanks to everyone who contributed to this release! - -## Version 2.2 - -*January 19, 2018* - -- Fixes bugs with some non-roman languages not generating unique headers -- Adds editorconfig, thanks to [Jay Thomas](https://github.com/jaythomas) -- Adds optional `NestingUniqueHeadCounter`, thanks to [Vladimir Morozov](https://github.com/greenhost87) -- Small fixes to typos and language, thx [Emir Ribić](https://github.com/ribice), [Gregor Martynus](https://github.com/gr2m), and [Martius](https://github.com/martiuslim)! -- Adds links to Spectrum chat for questions in README and ISSUE_TEMPLATE - -## Version 2.1 - -*October 30, 2017* - -- Right-to-left text stylesheet option, thanks to [Mohammad Hossein Rabiee](https://github.com/mhrabiee) -- Fix for HTML5 history state bug, thanks to [Zach Toolson](https://github.com/ztoolson) -- Small styling changes, typo fixes, small bug fixes from [Marian Friedmann](https://github.com/rnarian), [Ben Wilhelm](https://github.com/benwilhelm), [Fouad Matin](https://github.com/fouad), [Nicolas Bonduel](https://github.com/NicolasBonduel), [Christian Oliff](https://github.com/coliff) - -Thanks to everyone who submitted PRs for this version! - -## Version 2.0 - -*July 17, 2017* - -- All-new statically generated table of contents - - Should be much faster loading and scrolling for large pages - - Smaller Javascript file sizes - - Avoids the problem with the last link in the ToC not ever highlighting if the section was shorter than the page - - Fixes control-click not opening in a new page - - Automatically updates the HTML title as you scroll -- Updated design - - New default colors! - - New spacings and sizes! - - System-default typefaces, just like GitHub -- Added search input delay on large corpuses to reduce lag -- We even bumped the major version cause hey, why not? -- Various small bug fixes - -Thanks to everyone who helped debug or wrote code for this version! It was a serious community effort, and I couldn't have done it alone. - -## Version 1.5 - -*February 23, 2017* - -- Add [multiple tabs per programming language](https://github.com/lord/slate/wiki/Multiple-language-tabs-per-programming-language) feature -- Upgrade Middleman to add Ruby 1.4.0 compatibility -- Switch default code highlighting color scheme to better highlight JSON -- Various small typo and bug fixes - -## Version 1.4 - -*November 24, 2016* - -- Upgrade Middleman and Rouge gems, should hopefully solve a number of bugs -- Update some links in README -- Fix broken Vagrant startup script -- Fix some problems with deploy.sh help message -- Fix bug with language tabs not hiding properly if no error -- Add `!default` to SASS variables -- Fix bug with logo margin -- Bump tested Ruby versions in .travis.yml - -## Version 1.3.3 - -*June 11, 2016* - -Documentation and example changes. - -## Version 1.3.2 - -*February 3, 2016* - -A small bugfix for slightly incorrect background colors on code samples in some cases. - -## Version 1.3.1 - -*January 31, 2016* - -A small bugfix for incorrect whitespace in code blocks. - -## Version 1.3 - -*January 27, 2016* - -We've upgraded Middleman and a number of other dependencies, which should fix quite a few bugs. - -Instead of `rake build` and `rake deploy`, you should now run `bundle exec middleman build --clean` to build your server, and `./deploy.sh` to deploy it to Github Pages. - -## Version 1.2 - -*June 20, 2015* - -**Fixes:** - -- Remove crash on invalid languages -- Update Tocify to scroll to the highlighted header in the Table of Contents -- Fix variable leak and update search algorithms -- Update Python examples to be valid Python -- Update gems -- More misc. bugfixes of Javascript errors -- Add Dockerfile -- Remove unused gems -- Optimize images, fonts, and generated asset files -- Add chinese font support -- Remove RedCarpet header ID patch -- Update language tabs to not disturb existing query strings - -## Version 1.1 - -*July 27, 2014* - -**Fixes:** - -- Finally, a fix for the redcarpet upgrade bug - -## Version 1.0 - -*July 2, 2014* - -[View Issues](https://github.com/tripit/slate/issues?milestone=1&state=closed) - -**Features:** - -- Responsive designs for phones and tablets -- Started tagging versions - -**Fixes:** - -- Fixed 'unrecognized expression' error -- Fixed #undefined hash bug -- Fixed bug where the current language tab would be unselected -- Fixed bug where tocify wouldn't highlight the current section while searching -- Fixed bug where ids of header tags would have special characters that caused problems -- Updated layout so that pages with disabled search wouldn't load search.js -- Cleaned up Javascript diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index cc17fd9..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@lord.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index a7ccb15..0000000 --- a/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:24-slim - -WORKDIR /srv/docs - -COPY package.json server.js ./ -COPY build/ build/ - -EXPOSE 4567 - -CMD ["node", "server.js"] diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [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/Procfile b/Procfile deleted file mode 100644 index 489b270..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: node server.js diff --git a/README.md b/README.md index 7cc0b9b..5b98264 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,58 @@ -# Bitpaper API Docs +# bitpaper-api-docs -Bitpaper's public REST API docs, built using [Slate][slate]. +[![test](https://github.com/TheProfs/bitpaper-api-docs/actions/workflows/test.yml/badge.svg)][ci] -## Install +Static docs for the [Bitpaper REST API][site]. -Ensure you have all [system dependencies installed][slate-getting-started], -clone this repository, cd into it and then: +## Setup ```bash -$ gem update --system -$ gem install bundler -$ bundle install +npm run dev ``` -## Usage +Local development runs at `http://localhost:3007`. +Override the port with `PORT=3017 npm run dev`. -## Run development server +## Authoring -```bash -bundle exec middleman server -# then visit http://192.168.10.1:4567 -``` - -## Edit documentation +It's just a single file: `index.html`. -Simply edit `src/index.html.md`. -More info on [Slate's][slate] homepage. +1. Read the [contribution guide][contrib] +2. Edit `index.html` accordingly +3. Push or merge to the default branch -Some sections are `includes` found in `src/includes/` +Changes deploy automatically to [developers.bitpaper.io][site]. -## Deploy to production +## Test ```bash -# Build docs -$ bundle exec middleman build - -# Push to main branch: -$ git add --all -$ git commit -am"Added POST/ user" -$ git push origin main +npm test ``` -Pushing to `main` branch automatically deploys on Heroku as -[bitpaper-api-docs][heroku-bitpaper-api-docs], -which is publicly accessible at https://developers.bitpaper.io +## Lint + +Deployments also trigger [lint.yml][lint], +essentially [vale.sh][vale] prose checks. + +## Structure + +``` +├── index.html # documentation page +├── app.js # entry point +├── assets/ # static files +├── lib/ +│ └── server/ # HTTP server module +└── test/ # smoke tests +``` -[slate]:https://github.com/slatedocs/slate -[slate-getting-started]:https://github.com/slatedocs/slate/wiki/Using-Slate-Natively -[heroku-bitpaper-api-docs]:https://dashboard.heroku.com/apps/bitpaper-api-docs +Initial structure borrowed from [Slate][gh-slate]. -## Authors +[MIT][mit] - Bitpaper LTD -Bitpaper LTD +[ci]: https://github.com/TheProfs/bitpaper-api-docs/actions/workflows/test.yml +[site]: https://developers.bitpaper.io +[contrib]: ./.github/CONTRIBUTING.md +[gh-slate]: https://github.com/slatedocs/slate +[lint]: ./.github/workflows/lint.yml +[vale]: https://vale.sh +[mit]: https://opensource.org/licenses/MIT diff --git a/app.js b/app.js new file mode 100644 index 0000000..5ef6d98 --- /dev/null +++ b/app.js @@ -0,0 +1,14 @@ +import { Server } from '#lib/server' + +const port = Number.parseInt(process.env.PORT ?? '', 10) + +if (!Number.isInteger(port)) + throw new TypeError('missing PORT') + +Server.create({ root: import.meta.dirname }) + .get('/health') + .get('/robots.txt', 'User-agent: *\nAllow: /\n') + .static('/assets') + .listen(port, function() { + console.log(`listening: ${this.address().port}`) + }) diff --git a/assets/og.webp b/assets/og.webp new file mode 100644 index 0000000000000000000000000000000000000000..581fd90ed01d553e29f61f4d0826904bfd6b9479 GIT binary patch literal 4468 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 H%z*y^RtDt? literal 0 HcmV?d00001 diff --git a/bitpaper-home.png b/bitpaper-home.png new file mode 100644 index 0000000000000000000000000000000000000000..49dce1bc2b8f3e3f21a05688805a7c50eae14b5e GIT binary patch literal 140789 zcmd4(cUY547d{FDqBIo*1O)+6njjz`AT>x4=^(uY5$U~mB1jPtk>0z~J0wUA(tGGF z^xjM8EjbVSefN8Q+r9Vq{d2DCoIfBB$z*2D%$im1dkw+Liqf|TsR*&Kux`n`mVASS zbsc!b>BGMPydb=%G=LXu$2ZdASVg@L)_^}GjkRP<6cn&nfoFUy>>zV2+^Z(Q4;Ao( zg>@|r8|xbIihcE78qS}eUdKwi_UAKB-&I4S#|=NRu*9%rBwwnzVQ(hm#gVs+1QM4l zCgDnv<1*x>F|_y#tQ3qUIUa!>d-te{?(f?w#;K^>yhlQ=f{V=+?%2COs%dnquAHZw zC-JT8OjEfKOc43J=+_e~s<4_LSl zv9R&QfDiw8^hHU}rjA~sH0>>JV&g{%`)U=;&RlCO-PJ~E{*e5?+x_n=vXNq7a|*?A zk`H31kG{z+HtiRC9nwPse(M(-pMk95+Ov54bCR59Tn4NxQfxLZ(uCXp>*r4?SdMW? zu)4e{2e9y?9{4^)2OuKY;v@e2^#2f7OBHB1O731n-PK2P*x-qHV`%krOIS)_oLKk#ES=#{|) z4=j~s8GxMO1D4h|0_lHP^Q+}oHpG93 zr4d*3o&H}2V0n#&UGk9Z>;H7>e^dXX$FxQgF|2}T`Z5y#Ho!M5oVPET9{B!Eh5qPK zEPx)6&#*co@ZSb_2rRIl{0p4Fj{83iCzJr>Yjk3~^=|{b1Qz&uyxqU;&)q;kzJN7Z zs(%~c|9u5uQODjrvn+n%CiQQ-fQ4iHDs2e2VQ-;rJg(Hps(E+r$8?O}F*tj63Tql@6;!y^7nMwqX@m<0ytShHGVaTjh zjKEvC_vQe^;2r6upUD1!s!M;s3exX7(M9@rx#_uOkzN%yL+-OwGG@gC`R%HW-Y9EQ z&P!ad=XQO*zSrFKqlK`?`#)w%F)n;33t=c4BfNh+Gimd8+Sx*xy!Q`BVaKB9V=5TI z3BJja&|CLWxz;mqNN?V-PP zUq!avkUr;VjbgA!s?WtwgRRe9oX}%D@AuB@Lmj8pmX3ih>1tQ<`Q3KgTzcJCvJ2MH zcn{2kHh*TeXtZqB>;#V2?9^IQra)4rFz}!P@AD(ku;zZPr@j2f^bh?1aYb`TaAjMr zmB@`29nA%OtfidJFRr(ms&;0hDCntntyJJgc6%JHTbrghe@*t7SmSeEC#MG4Bym>C zL^8onDRjv%(*D)iyob3ZnDqD}tj1;og&6m@=cOFsqRQZI_dDJR|~yc|U64TDVoe z(d)A7dtO7bRAaR_-y$07!>$YKruCZj5jyzxu>j+O93yC>vD~RUwwd>WEwMB$c0_Jv zQQMYW9*uY1o`e|GY{ev6A8l#}mreUvrV&Ng_f2~(I16ol`>0@86>l|^L+2eYeYs)4 z6n=PZg&;n3I9GS{>~O=hGwjOk{U2WAzmIAhI6od?eWl@PrQ$O)i#2eMKHM6tl%!n! zCU!hegwV}w4K0*g;i#{qsII~=DV!l~cWU=JU>G#s+14Q9MOUxz{!@6}=9PuMIUfdYuh7sW$IF;NU^*%!8QDlST-UkT1KRyEqOVv1FeOzM~*Kty>yF%BNU&jJRZm>bY&+g#6Up znZCY^W!0Y%pugbH*F(dC%+VLBS@qlBl4fq`aI~*G)EN)upRyA1JVLFUSDl63LnoVq zo7iEiYhi1ehD)^b)x~b^>q7xz*hbn5*6>G-V&vADw{On$~$9+c(aO*X+PC z(9`|pCA~>n&+TXuOqBLvWExAc)VN^~-F6GS%5fz@V={U+$8OnNHT!IT4w%&!r)i%; zUE8-rlpH9-8bZ901ZvW2kozKnH4lUkc z;cPwMu4^OmXHKz8dP458@Rdd%`SlBvG4(&`s#qE+2@4l-13wtj19nU=C+tt2Z!W6Y zuAM?(>?;W!CzV?*<*D1C>m&-mmmXj}q5Xn#M{&=y`+KLC;#v0xvyt~rlT41MT#Jd9 zZnc%4TGjb%;B<`GPEGh=E?psBC$2N&G?gClbWDj=1yQyG2`8w~y8lXYbL$>-gdGWk6UR$|j zyubTnUtZa?=4l@&ccBk(+HdiXPT|+gcjj+Zs4BuRA_pZ`4u#LC^`_8q?Y`Xi(w+qV z%0k%s$}+_T_X;XYP^n%qS!kt;-?>u_>9JugzrU#O_RAess9UjkMs4#vfUJw7=3qvn z#wGc}ojWSiAEjnBoEM!8nUgw2-8Ggzq}p!$mMB;ZzfHrZNZwz2DtI)JUp!`NQyNY3 zra=8eaqYSV(y%R=bZzW|Siqx_fu8g#hhS}9W)IE$6wkr>s)5ZmOu`mdUqKJJYQ+HQ zSX=s0TY-P8feTWo&r5^(JRX&9A~MNSsu%*zw;8(e*R2=3&a6C7-(cXgwv0hqScYwh z@?(?#y^($sMIDzRaX9R4;-6dabA#LlqdOBi5ZrMA>lpGHYBF6TZlj2SU zFn&aZN;CD>8$UQcNvt4Y(ZqdKW!h;J+MTj-5A)#CZF@MZ@bd~mYE^8BU{DdrPP6>} zV@sC z`k+sl6S`t zwZSI&8WdK&w#A8CM+xJlk=-sn)0>t2-4r!a5Qc_AJ)LLX=5+Dfjk}nOhv1cgdJT6L z5LuXw=}-08+jjfR&6HxS#69U>fAd1Dgub;AR-cv;fWVQ%`I^OIrMd!~VuiOKG&kT7 zym^qL!&s!0;x$hYTpmirTNcV^VLGZ0$ppd~IEYr`;8rjdpOqP2jk-4@Mg3W4*U?;C zs=w;djvQyXX^KZ@ir2dj>c!wGkAtyEwBz`akM6mqzISNqwcRFSJa;ZT%q8(I{V#R& z9_!8P#;nrjBaYL-{4)-TQ#;E~gfE9wbuFUKY(#9hx=-^i${Xz;seBH#8vN1TNsk{z>&u_~;<;^Y)yvIB z$x&XRhaHY?!-VBjx8_HSRc1DcEAe|V&cQ)ZBj)BXMA|?;H6vx1STS2jZ0h81OZ8Cs zJ&rmByY})(7W@4{J%~agA9U(?tX#}j=k(}DEO^)P8pR83Sv>Oknof4HH<_<)B?=mU zrg54@9}V#!w2?4tg+`s81m1o2lskoi%TI@J9(Gbg^}1B1TS6!kYacU$-;rn~5;RX< zcz_?c__?C8*ONod^b3we7MCZ4&B1zDUPDuyZ9+Ts7U7<|p)@^blW#``-0x#9gU6}2 z!?1z`ci^v*yJ>ArTp9~baPGykaxFeBS2>Q~+OEYzZj&iJK|osulU*lzExwN@86=yg zl99y)gB>nLoRJ6a5uevm&Gb@}}w=zdp1m1`%EDtzeyNlQ_ zA$yhSh{X}VwLE>^$WAjoRWN;a+C|{Gk9nSW`fH;k*zBSeI+?nQp*{sCs zy;5TbqOqXA2Dr+(1W`G7vlplPTi+yzY@g@MJY1?85R8kBt#?O}cE9gQss!_C zXbG@px@=9LnG;d3uldRpH0F>L z#9U;InwW4vg_G9mP$ z*r@b*6a{9oZ`eJEd9sPWX2lKNz4=?{n&XB$!1i9sY{NXeCU*6viy}cGPSPByxstkT zidV9rvx~T1VTE~_fXbVt_m1oXVrc_pX0G4J;*#z$>8{}x|6*>g%!Du9Vvcl0idX8B zV?P7?k<}c1_Kb2C;oZK)T)Ledl#F#$H7?y2$Gc@S(p>mxdhXLt<|GQn{wkYnq2h9% z+`1Kpk&b*@Bj(0oYvYkg_YHGKqu@kRj8nmuk0SY|5ff)su&rRaW7N2AjnK=1;0QwN z+k9yC@^s1?5oRCQbdNh(^>b1R=K8zGk`GqDw&=w<$;7$AUB&b+h@7pUbz~eXHR@42 zp`K#(o3*!zF9i8%`>XFpf9$;H45{5>KNIvh7gFlEU8Ja}7e#V@jxl>EO6W|5#E;cwQ<^>sdS2!=CH#S^o~<2QlM^eO`{`O3C+DG|;f3>^NShM@nVa zu}g}`u%PVpg*mYIS&7oS66J@kTKazeHLl5G{Pt<%pLCOBllRf8tGPZ|FMJho(wcw5 zdfC{chb^sP7}LGoX*;lCJEUsEEJcFAOr^hURGp*3z0Iu(MIwBHbmIs>_&8M{U7ptR z&n%@sFYoDfY@B7>J1Z2`sV(HxizkGt(-1q%L7hi+^}%hB_`1#7dv|Y$plr&mlPJM3 zVU5^#M=hsSj`*jHUN$AtlSEwpumtD-K%J%s&kWRiY&!lhPlL$a- zfP1zmd3*3!I7I{cUbTRJ^d|+?2q}RGY!j%J_cuD8GtYevP@HuDf6g;4JFM#%_Re0+ zl$uE;SwGS7*;8U2`-U0)$nb8}9FG>?sgf`+`r z{~9Ia3|*m9&c}mp_)*tzNN4i|)1O4E+l#A_T#Dn{bfQlJ-OS+Rw@@_ylByr zL}@fcp%5Cx%5Rkl;reDq#r}e{SvdFuH+v&Jax8!@sD*!CdLG`AYeW_PJb@$8n*DW| zS;YRjD$SsqTBp#yS=&O%qfZ%m5-I}zXB%h38~$|{sS5nTJDe=ykR{Gwk>60VyM9;b z&+02GY+qT~w4(h8BAhg0Y>uqi%xDMI_*#_3b34*RujsA{Z@lks5t)}pVQ#NToJsYvDaAbC zegLAv=&NyY=mf%=pyD(Uh}dQyGfl%$e4vTlR@rL49lPjnM<>eh3JlLz{3H;y+bADaC9)z$8T*f@`$zH`=$bBo}H$VdNtr zMFOVs=mo|qO|{#M+IXFQzxf84D-1E>YgRl7OC@ehH{T$lbLo0wTGcLjAnQ(vPLE!7 z{NCM-eGPn|tl2F-hgv|rH9bYVOvK!%O|nZp~c$J{+Zu}@!} zmFOKGrm6ezjK^h9vDVWW%Z8)%R0O_rhV%R$QGC0?@Ti_W2*ko2!NGBa@KP^Q)b$}w zDD?y0U1z)7_<`|;#dc+jO?W7GIb^-u!Tv~dsPQgpU01kgGsyGJO5#P;INeT_IhW~3t3o$ z*ET?n-=b?BTNCO$#cD67l742nbn#7g1v@17EGs-a-+f)aM6}R$=s7N2eoSod_z+!s zrZqND`vIz((Br)1;~g-#`iRJ=-SN%51uJ%Wo75g@{fil^d1QLU$;y{-6G4s*msc06 zaK|MT^4s~vtrWj!=kH}6a&|c}d<3*X`3%>^tJA8nYtPPr089q%g7mcNFVL3|ek`18 zt^{ieFbh=LwUumiS2%1bB7nSLq$4%^`EjFcMJ8RCCoOEcrC{SpfI;bkiV3RreA$8d zXlr4abF!fzos2v71!sM{qFy9)eAH^=Q&8GOOd@;gYU0z1ZG!!F zwd1a%iFFHS89vmmbzqZ0eXZSE`#rS{Yuk|}{}Y(cN@pg^0}X>v_TLN#NqYpKb1`YJ zZvd17wlB;xagA9M`OE#5i6x;(^wRKGNT4-AusV-0X@1o~2O9zg8naqgE-yv2v~QN!+ zbnhSEDA36Kc5}O8`9hZu#6ddZ>Zb>TIoSxSRlmAMNww+UWF^mr&v_xVZM?eAi%81P z5&qmr@2K#C=y#z1D;CbfCcv+}2ABrJzV&&k(-^|Mma3G5r6xNt}npv+0vx z)e3c5EEd(vS=I9vW5S03?-P9IQ_DM;Rg0`HlvU%M@f(ug4>_>ycRz}iieTNru(pb& z-Caujfa^9Da_=A7k-TP7w!$Vsz~6u0lz7`iG7Hw@nXF>{Tg$iB%*vZ2v(P%Kr1qExJbM1`MOj*Ap9Ntr{L;Z z{3;F8;6gnc0I)iA^k9Op-USEdYnT3=J7nR+{Y-(qxrFBK}GnxlK#>D|Nqy;;)`%nmKaw{zl_13Br3V+Dza zThJ;4x3mG}?DT&gorL8vjxmgIcQJQx6OQqmv=}LvyAFSKi+ZeLjc04WxE|VSbKb4` zwfyXGeR*i}M^}vYVQnq&1r;978;fe1q!MXQ@k(420v&91X{JA4BHLuhx!mc`wgwJuUsQK&(tW?~VU^k5yL=T9M78tUdj%?f)KYuqUcPP66-`zcvoAWC zan1yQlH-$R~cGtIbRXU83Nfa?zoy=QLC zZ)M%7d1Z)IYhZ}8eNLk~u`x(uq17pBiSHnBZd#(m@Z;IEV~IYJZ=_7hF>wnQeh2iW zj0U!`vV5RxIB42kQCPWY&1<3N`e!C%6k4G#uA^VT|4AS~%o5lg7BXTn_qICp5gx4T zEAmVL6G8vFLe*?rY9%Sbi*?BdYB6kejk$KsbT5K&x?IT+PPi6bITvd{EVrl{XS2WD zbAf(e>DE4G4;Ps0O&Zf|imAFT>1PfaYXpdyBHgzP7Ppe{3`-`U8makf%g=5$zI}mU z{>KFZB2o$*<40JXMmvKDI4b|r;umqxDW&}UjC1AmLX-R50o}L`A*J-Xo&>%<87Pk3 z%Ga%}M8g?fFqoGv23c%djMHLf(-022e24t`%%G6=>G|p)C*k)&YyvMH)1D4jMcP18 z+ByO3JO8pnV(t%>ndlo5GIs#W;5Y|k+ZwR6DQ!#j`30svNf9|Y;c;2IWr+Q^57|^%emalUT z9B!7HPcT`|g&u89jIBt(_ojWilK9^q)~*Ljz2MuL7-yf|`*^uG$^e3=4&-~e@0i!u zhb51uYHX^v7dMLsTt8as?on3UKaB|0wxNB@r+N5qeb@(USxh6-#3nY%V%>TDYTj9 zjiOPie2l2AwQv_b;1>v`IQ}-O|H$e%6?g3`^9u2~4!xG&TUeIm4c}+gg%=&?<1sRV z`0wT3?hP!BGbzM#z#OU!)OC%tQfm5@jPZ?xj7@I;mU3TFq9q!nTKTvQ&pB_Te>sfb zB(boc5#ZPSOaD2quK;dqQrpDg%3!b|G8=b2&Arxl_V*@3hCC?O7fH+wjQmG4;O)*m=#j7Nsn+j*pG6=7qziSyUn5xXeJMQ>eoWID>FT zIz(4jdEhPTi9GdutE0{F-~-uw;SQM7+MDys;~8tzV#i3PG_hr0+DnHBStzEB4&p{J z-v_X`?<&243Iv#0e}>o6P_e;`1<>10oJ(scwJEh#$;(d1>!h)n*Gjdz0m62vP2+HV zcz;;0%~@2d&g1ZkVK*Fw^d<|90wi_#i;JcVSzVVw%I@E5%|{yH7sjH_BK zRsj?MK;;q6EFMq|LM(Fd4PZ)o_@A6!kI_)+1md>iixtx z4CO0RRTPj)Tv!7@8R-I$;Vr-z@hwxcT5k-y#8X zI;Wet%WB`R5J=5tnOwbG=zSih86Wq_a5rYp^Q}rEHB5qK(H;&|m;(HKB}G8G&=HT&t9=S157RdAhU2m8sLXH>89wm_H*o*7=p zCy#fP1?KM;dO8T?x-n(T+^*BW-*rJ+uQXLGxj)I*tt?9RSO<_it@C$mb8;z(g!{L> zv--9hoLj%#XF~L;G5PeDk|<=B9jI!ZH>+>S8NYOk#LHVx=v5n?YYIZjFefic^nAp# zeD2Ln7o3ICQLpb4{n39y%=A((Mse)++R1MQ;@d4?i_6m`semo+#@{Syx_#9CIBaYs z6=E}0<9a+geAGf|U{yKokq`12GYn$<3KVnn_~@qRxK2689;ZauRcsX1FbNmDQ3ub5 z)Xp(fzfMYcVV`k}>Up~-oorOqW?7fl&#c-zyolsRZPy8NW`iLD=A_x{vH|w87lV4% zP|MLH`ZNQty#NsNT#izzXuV=Wr7{z?DnOfgSEu4BipPsfMoQ5Vq`1y_S5lTLik`kV zkamwS?-dO|)}zlhMrz$1IdSrmS$SA#*L31L`%Y6K=yBj=faok(ZAA#Q2#IdTupz!F zr6#!A@6P@jDKqYpY=?>)0p%0YkXxlumDvNYzpH9h)=p2rtT&J&_1>O9%JVgqM_D{c zayq}Lx|2aq_GA)*xvXnT^4BE@jMZ}prhL$%H>wg>D12-9)nVxJWX-{V+$GnrlDkdy z8q+yI+IqhzI+L1P*0rsJikvP+9szG9)+#U#iJZ)Sgk2sXb?=#W(m}&O=rM9w%}R>r znLV4WSg>b6e5?ONs1Bzy(M0-@3Raf(byBR9#E>K;t{azu@m(P-7@tNmdfj@KB9YmxqDEK8w zJ_?|Q9P~?zTDhJokI}w*YlH7_D9SDs*wWTAU){d3K6&l26Z& zW!u}y%}yy}PH}6jR6>#x8+dN!$LB^`}L;K~l|YAv$%emf5Qyryz08Og#%BB=V|O#fQ>RwkxXVaBYXS9BX!gUk3q99_83ph= zZi1KG?*31vh(Q;#$HTPIg$@j|9ggy}Z`amWc^EGT=4ldb>#Hb5oMl67+KE&`)m zXxbNfXXR5;tIDx=L?Fa>Q22pd%12a%8tCgiuEydqww?aIWiy9i^+yXY@n{z7?f|87 zbfD!7^N7mf?JR{vCOQ*f75}@gf5bRqy}0xC<^raVuK`Zlci{0u?A^8O)FbhspY{u0 zZrMdl>55=W1IQ(m`1VMs!cC(j% z6eC%gp|v|e9jR5?5W85U8B+3UY?Cm&MH!-?;H>fD1C_wkuih; zPWF_6Rl@qs>&mAGALA@)7uT(iw`+FJ92i)-#37bk-ySNSlWoVIy>fi`87f(~xJNc1 z1!8=S_mamW$@;eduL_7rx})!{(PR0(VNO$)bq94s$~yiG7=E)9`lIUTxn}CJUt~MO z;G{iwGBFY@mSCWBUyIg_lyZrH5?WGRvhWr~JD5RBsLh@i;ITG=!eQ(76CG>E~b#g z%$=~4+75_j(0bJd^aq;aslqbI3iE{)L3j5XuhviitB|gQV|p)0HsAgc;Eyk!2n%Ta zv>8Jzt7b6#7Qd!3;FI9!k&-_FAYT?098zQQH*89vVBTMHiqpzKIqu|m15836^Xi8tyM$k1T=lSK#xTp7P)oneoy+x%W9K`Q+LPts^3mCj8GYeM=g z)X<>tN8psYw#V%7sNc_Br(M4%O0*Ea^T>vI_f{LUtY~>%H5vLg=&2sRoMO0t zM1@(%z>P#+OO1C1j?V(6^qs&Ng{?soS!IjZIfxPmJC?_8H`kLWqE%iOH~JY1ZU4;V zT#3=OktrA{D5Vg_8BXa-O|M;43Sh`jQQ1>6e_ou5%Afwl@Q{+piB%~obK*yfO`~31 z`qST;Kk@)EXcq^3em&zo12GWJU=uWJxZ6wN$f3e?@{Np*NzWGzohR+vmWVu~mA`+J zW9PdgE_AngywpgVGt0dHCV`7iiG(9kW_FOUT1Q@TA8Ic8lKsJ>a3%4CW_tE#^z^c8 zcQbN#6?&#zfl}Xz2H$ISTHm?(kXAf1UWIXN#oPpTq%jQ2<}YuvXYBRx&zw|Y10}>> zble5cSyjcuJEK1^+pEx8vFd_dP=xY)P?^I)KYE>2iBm=_*|><&M2b|mg;0L^{p|qd zRjW??5JUfJxi})P=Q9}^jnP{1U$d8mzDxjSc!TofTf+}n$77C927uWqDlQ)giT8gQ zppyTEL%;e&$=xyUi_+w~CpytuTWRD24dpbH=KL|Rv#O1)PL6t`r&XQ3z+8Vkg=EeOgSW#j04?*O%spyhQr zzR<4xsk~pLHyNq$47I$0aJTZ@KJD}duf{N6sE~Enh8m6wcM}oE&xRm-IhLWZ7_r>F zA1-E6b5L7xCGDNFkbqE` zPD6cBJMCAVG&3Ys%~nWUmeN}?K*}#L4FA+auFH7;#pU@zQ?VSeiY~n+Zvh7B0X{iX z9wX&l{msXxNzJhXByY>uHT|@@V%Q_|mjcSHnnA|$ny-At2OqRYnVM;>$GWGq#&9N8^}0cUFFO77(P3n-Q>dB1+CX9M!Vj*a5jEYPe}x1}Ob80RIfyM| z@HGFZT=M0W6f^86Tv2}k6UK7nbyuGTe7|U7qg#_+a8-;1khA=yQsHhW7Jb9rLTPhi z+|Mu59{FQYW}d#+Z^EsZC~gEBqfnMW5x*ku8?zFPpxaq}Tk^Ci^falzZ5*rM6&5kw zR6&d*08mxk*c38!1LHA10etzsp5*P^+%!mS|fzVrec- zt;v2m>Vv)Pqn185^bF>r>+EQv@o3ypQ*)W0Z>|zlyL++%FdOYnw<}5)n8t`f==ahO z96liO?Pd}1i&g{A&Y?A!RG5Nw@s#V)%1{h&?_vCe0Im&$zg{A@Cm_Ym&SZDr{hb8; z58TzlP||wE-ayAopp=NAK#b=a?>Rb11$L<6z3FfCwL-4Ax*zfisW}+@F*XVE1ytd% zBAsINt6_W*fID}W6@-+$*F1eRAsTXmZ9ttxN{{NgHz&Cgu zu0h>1&VX70=L_55OEu~`&!g85Qs!|hvJ|M8n?cEA#z9+~nk(we)C;(^zy+oO0DdUe ztSqvwbT+7ro_gSK1WA62JlIIwWhzj~4AghpUW56P?Gf_mdr~vM4-~+TuEfA}kz)pJ zjAcj2vPw#fQ<}tis2?sTUC^fJ}I9lQcFO=+AdL$F5yAWYQbAbiL8c4+wE3U3qK}PV`L*dS>=Ri@sL~ z)oOYavf2f>PW7r#Ch`?uQ_uZ-^7IYA7y|RQ|B-(Mgpy5Ypd!NxL4KpycwW9XXu8Pu zD#SxAS7(@k96-q?5&e`3X)WS@>iIf7oQrpk4)5#J|C9=GCS26Kw^#OEN<8DV305S+ zo@+CqnauT@k^Ix%MKSt9HL!+iy*nQ1kar9AB#zGm0Lj?y&ZS}D_w$Jc*8<&GMIX3h zb|`SWrrwE-psjAZ0>3>w^_Bv8>2x)_^^g*rL4$atvk??Z8~I{}@d>;c)PwzEn0=Lg zaGplxC0BUAb#t-EkO?Awf!MNT;U%5rSGe0$hWR*9;qw=d^IuCPW=^U_^HDcJ^E7)i zuUCjOSv^;$B~MM;yFOL-^tkApw#<4;*sErzEK}V%#7ZqRNmDyJ$*w}=62duNL+7=* zg0L)~yW!G~eSQK=#KRleRJiN8gQ49|Z`Jv3luZMJ%0y~B=+jKVet2aDi`HkQlc zA1$j%^w@XPH`@8kraF(NjWj)H=a}`zY*P%p-Awu0-fkR@?yq=Sjr7oZY(C+91h(rn zM{Aj-78Txw>_E&uz+tsFT*qJr@9G;DVJwa*MAusXX>!1nl?VP46x675$)0s;M`cI* z7$-dDj5O~B1v{+`u#}bgL#A-dh$hL-Noa$71egWdDE+tGVD{qy}G;1=UmEsplUvd*6x`d8;p^8bJU-!xlC7aXqoA0X8#dF#urU;TW`Jvj$} z$xRV5{^`zRtBDHpkzxZ-K7bRn769(86ofu$T1KSq z4CYU#gGD?JSV}#l*h=36H_m{&XIFO&`5(&1Fb zxgsXEA7dowydGt(^8LRwA$dHoWa0hccYxH&9EX3#tGw=b+H)jb0?%@+B>fgOU-yUs z#G8{LlnyigGY5Smuc73q^V#jhngv zDZeg&PHh1=_nzMfbQG*RfB1Q1uKs+x9Dog{Q@oF~fjbgL2SYkg?{2O(EnuFT0BEeF z&3T9f5DIeu?B3O31~PzdD4krnfhgv}5j5SRx^VNOm^o0_ztb^b#%V16P!}h_JJncM zF>faZfZCfuqhT-R@o^ihUPj#hLk&MmeIS{AH}{waI6M)!2b3t_Cgucs2ZKfcmm56{ z4gd(yHca#^hw=;Gq@9E%a2GDwq4No&ySBjy(iU!ww5chS@sGk%i`xR$h2pS%!YngX z_6NA%W3#l4)&=;L@S>o{Wj!~0BA7WP4)*y9?;g%oW!^gFbQ|H0`3HY2^lF1+o7i^Pjy1tulr6Cun@i!*B>H07Y)hksYqV0 zk;04u)WWMQtEB(#SriKpV3M}T7y_j)_V@=oGcy1*3|y>XVL09_M;tY(M6;@snln%- z0`x*@YHfP#<|3w#IlI5U(ThB=e98qm&QY@&!P)WUK93bZUYve4XVwW*JMX`l+o?Qt zS2Qm*noV=!^IbO5^NEqt)l(pO8UrBxohD0(aoI|{IdORY?%S!6-QnkPck{uIYTHL&OfA zJ>gBiRq`X=8^(rD1NYN!_t$oqH`Nb({&B`9s3?Aa{UeaT1n6U`-1g?1$2wgfm1TNS zeIzVbf;oAoJ5|T5r;93@gzG6f8O&h_+vH%+rq#n1eFn; zs!rK;P&?qhG^%8nC8`0*NmUKKzJwS`S=CZH>?R&X3?U3J)&=etmTQ?$5Quzq;z$lI z_ZbkGiQ=5%byBoOIL)kjRqsTYLGmtDx`u+%Me~lMo~UMwd+BEwu_q0cMmz|EUmhjW zcpvm10bJ2pDNRxQ_IUvdB73!5xZ?4H5TBWl(#|kZNG2lqTddN5ytY^oF3O=t?2km} zhm=@~TD<(c-ViN-e9}4OQ-<8O&nT+^PHK?W=fp5k)Z63H!Kpu)VoCU8X&pq0h&On+ z6tHYA12W9<;-BApq*pJ+=xzeU56ThmD-~~N_MPI#VZvn}X7eb!A(--0fNb#Q%?Rj9mp?ZKN z7(I>zr+v&J#ajQNbUG{=pf0yt2cQN8zzuAAnRy=78GwwrJcuNISr35Rg;(cKNq@g~ zzjuH7hev;8`;{^FoYNc~y!V>Ir|CN5H=q&=omEA{NVt0T2lO8z9Y$*nSUR8H%SXMP z*|GBWBfN{Z$^afDuxt4|>a|1bebcz2>@D`n$${;k3t#>3J@q{+>*C;nD$F&KjtxyG zyG(SDPZx=X%ZQB-6}EoWa^0DpN*%0kTwkhs5*GWmx^2;y4QUueb8-2QSTFSP-oRyg ziC2IpzwPv7rG&Mzf$Uj5SL27s4ifC;uP zt~)|4a3kxLYj`~8N>7gf`iO&J$L@FEjJ}pz05nRw;*v=?hTH{ z{b;q_!IHgOur{0@OZk2X0uVbe0O6jhKba@OJcw``$yTD9aS1h#Z;kXNyXqqlsU|r|9>a2B%0@gVgAT6&AK&NSl2l8TsdJdE3MyGk(GF z?HzeUrTl0g&*Lc`$x)Wg8p*@{h;ekFVtPc?gqfURsh87XjuH=h%RCq zpd>+zpHqH$+%OkjL_xxC#?F)f5z(rd;Dp3H4cWVPtrg2i%&38Yi0hb?#1Z2CwF|+- z(cOk?T$BUUj-2-Bv8#gY<>u=~>8)V8`4bN=OJ;)8RWUu5vq3pr;M>fs&kDT$(b1`&Nv7m<2SlOSy!^TpZ7Lt4f+f{?@h9!am4uyC!W%at{44? zN36)8>J20b@2v8KLo@pj9N(u`?EU-@k6&2~0;Jv2u|B?+{HTnvV%&kbvr=dM<&iEz z9;qaH`rY&xh~q5ykD7=mp7|IoNS-U=ey(zVX{7k@lYsAd*b4u& zTT`~Zc$v~Z;G56Ae}JwyAlRAwxsu3X)XXTSNTpM^J08!4*3j~ddUc#e)@oF(>Es=19DTpl$nf$(YcZLIQL4{bE}bQ-D?;S> z%NlLW+UcsK7l`80x4qaZ#dfVoWsHa6z;<uG za7(-F_KkHjqx&i|HD@aKZCL%AkKg^&kohWoY4GyUPTa)btf1jo+df69V}`w2`2a(^ zO>9|z8~9fi6~!Ox4U#`RaD=#ZYBIb0H!YE3{3duKpPMbCf(8h1`EeTw%TS~a82jTC zgLKq3Bhpj0y*#G$Q76UNoQ=_Sq14^JiFQ-KZ-V9*BzDuo1@~C+ke(B_X?~eHREoiqfyJM)GhMn zL!yTgtdXWEwQ#kp#<3v~iuNW&=gsr+gOJvO&Ir@*oe`SJ%ja^Ys83PM@jtt$6)0NM z$8vAFa|G0X%Z^xoLaY^Ei++z{a=`JUqtp2@9()u1b0FY3T5K_vO!zWo`*FOu*2kdS zTH&P@N{y^(r$Ge;umF&a)GOs1ba+LyNk5tcQFrE_YtuS$AEusk5pIMiyNnj;d!MNx zZb0T!4J_b|TZ{S(gTiSE5H+wlcXYN-EPurMP_?rqLYY=#o{eb^Otf%##SBl!Z-Y$g zZ(c^Y8Z&i0&x+g!9LFEpYoWL1W8atscjeV@JnE%>lNFHgUhz9>0TJBbV=(Oq7&pv? zTl8_9aBzzxZE~5_c4Xs3!kT;Zh9lz_)lkED;nBrXmSR3;ad+DW`7IUNP|B(7>dIz0 z@bp9se^Nn-&+P?G@K36c1hCjhtGm_4xg?QT2b=O?-%oj1Um)Nd)JEHv@4p#ym03jq ziOo1j?%?t%aZBUbvms_-%oXKbMaM+9y2+c|Ka#j?^Z|4>{fkp7 zYE#2t107Wbk~~>?m;zb*WdGogM8$zo4BxJ(`Ko}dAR70;;l4cQvWH=0fbw7{|MXZ8 z39CF8^`KlHI4fgGR{qxbzvsw>JMu_rrr5YclCo6J=WA{GX3;@osHDm6JUwCyN*nwrY3@+?*!W7Og)$ z`ewADuyuz>Obzn-S23=RwR)HKPF;zX`d+QB3h`|mJuc5lP`|MdzL2F&`Pome9jKeiRGuXCE&pKNd9qs|0K4Q z<~YX}5!|6~33>U9V!+m;x`_xe-5%^M#&vlXB5~+h-tGf5jDRuOOP8fA@8Va#%(I== z;fsy#ksZEL-e!W(_d64H%v ze4Y~ngfEU2Ba5O7=5kt>@=sY8smsmWeO>POKR*+0xE7?6qxW&X2^~(}5C{g@WMAQ~ zyruFp5lPl^zUtLbgEz=uhMrX|g0FWruP zQ2)h)s=Yz~8LufBiv~2relTFMD68in8sCo@Et!Af#?IN>YzA)}zbSdh#SqYQ&mjeL zzwXIZ#llNYH4tyBq$@MLW;oq!EPn35-o*0!rE-qhhz-*uYYLBMc)(MEl4K)IDNb5K zv(+{hRo13P44g^qwES(#!9Z20XK$G5f;qMw7+5`ASZldzDLW(g?3}V&itVowfQlRGbw%8E9 zN|4mYb5hi&jaeEn$XZ+r=X6V#Wn-{>#SXd3FHT-HSaM0X>%GZy%JL=<$WE9{5tB}- zV#i4X9x~?&G|?8>hO4eOnq~%TKg9@-{R4LbRIw-tFP|9Zm6|4X{WR3dgu}X$`bNBd zAi(TA^d{1&nN;pe!Xv6G!zIIZ&nQ&k@^zR4RR&M9;v zkdl$U3oeJ}LRc8o{pAp)8W+oIIz|j<-}|2Aw!YA(_w4(u?DeA)-~XJpj1eM}-?*ux zB?grWEov;+R0Y-(f|hXAW(TZa@X>u9ZO7}L2*5RD3uqX+pT_>h3mC{}z8D_VM&-*N5`v5*e zgtU=eM%-jyf!PQ%j{;Aee;%?9BDp3`_}q?_sH}x$)3zD3AYFygFXal_xvbI&@ z40Nb-Y@Er^UeHhIjFmZp4U+Y{GT}25L!Z3!UoRyUe3B{Ah#tz-95@ap60PBD@|W8G zS0i3RfiTZ)dQDs3Ao}4Oz>TREey`}KOPk68ihj14xd}G)cz>1QlM}jPQtnVIo*QDL zf)CrWdd}6)8#PRLN}4Z!l8PTo6(_L$T4MBjbr%|slEtNjrE5=j=;jH>*Z3Fct<-4nA1bj!|6LXcT+lCYgM$K!@upekNotWnFXr8G(!us;=P-h92oI9ZMVqX-S zppxZaALWODFP@D@bW3XmPRgns<%~NjL-8R>_aA7wP=#zCO z>~og++M&FMOBWhI5?W}Td8uv}8DoIvWMU+wOlllinl!*~LY|d8#gU zP({XIi6EyO56MOs>K;}NyJ%3p(+kOW*9?Wv!D_q5qeW#Pyr$ot`q+F43FbOp0s{~8 zFW7mL8WUEhb3b7`klJG0-&)g=s_P(x>VIiie~HT!rH=Yzrr=7G)~{Z*^Ibugb>LQB z{^Ep>z2sv~LzakI7F&b8U*n|j6lzK>q>ta#Pcpz1jbqg^uJkjiyNbG;$oij6rq2^r zcIczRVC>Jv-Z|+&HDNHUWtu}dGkLSu&Uo8Y>UYmuiqFB9wC0%-Tr2-eFfaqGzbg6=OJ5PVU+~%x$dzO)Ct!$0kOQcDafK4>%r7?A+ zwD4nVW}5`ygPfjG=fkw09n^ufUsCbm7X(;Cjd#2!c{P3H)#mj8P`XU?lUBYeFo5~< z<_Tx#QAxaQL(Fq55{k)Ti?H{f-o6+b-K4hAZ0=I49;(^o ziv`X&1g4wRtOO?u^^W*Cr{7%wBdRxg;>Lccau$pJNffP9aclHg{72q5 z)547q*u$l#KP;N}52GPsfd}!!kGW$|p00b2PfauyYBz{?1VSl03IA$$CrA(%UF*(C zDT>@xa5kFio$gx!79_64Y(vNz-cFgWz-+CT=bI}}=6lNdBh$S?(xN86ITj{+tPvO& zhmz>r$@@N1kd~7I>wPb$($n%ak?aK2P?FAz2#7*#RLL9NeR<$Pu@41vRzl zHl-IAo-QpcUInDGP`H9|d_wYedO{IgSvgjlGZRTT5>|aKb3v^23JIMs@(&S|Pi4a* z60cJ5G8oO_W>9~}`KOoZP}el$Jd5``sZDlVs2LMcS}XX|LHsMDJSxIK*R+k%TuTqVwl_IfuVJEu&hJfW{G?ZaUwki;qx40R|17J-k=r{Tzw@p5&zg>T5EV?N zY-{F4{3oU@Pm`en;3@lwV;dh#I6W@@)9mMc?`89LSSOB#qfI}<BOUMISG7q5q2^@gi`N?T8S1ChDt?^_$+B zv5Jhh&x;H(E4-ewy4NvL#xhWW(sIISZqx4CC70#J(*$>>CLf-unirb1n zOX?6`>wPu;EuLMBa6hK#<)zdlrl|q)gl8|;Mx&hB;-h$&whK7W=C5n{K2J|wJaa|r zghN?Jq4{-vbss(J?8aM;vp^W$*5zAQ)*u*e-XcebvRh%t+^saj{@)Tl3uz^No{&;SwO;IM*vV|8qHUpRTkfg))%i zS}||5Ye;<#Q%MnPuN#@HX>yzGz1Q7?nY@tG3H-~!)CMeVFLvh2KJRS}ZiVTcj%{+E zPLmo<>z`>)s5H2`a&|z)R0>XhpKORzJxEqD^drv8Qr zzf~CrKfBLp&Mf=Jvwy82tJW@m;Ns+wKxmUma!}uZ|35>@BzlQhNNHPDMbDz`n#>PS zXN*6>urbu3A0q6kwRZD_lO+TmDr1!N|r2-20cC%fy$pYrn zS?@49aWD1Wo*y}oBaV;UmdoUH0N1A-B9hZ~xLbNR%PgWYoV><;Hf_epN3~k|@l>}~ zEmR%`S%>aS*3`6o=yiX{C}sSMC@+Mz)dsemT;d0R!j}*QCtQ=vxM<>mPOG>aRah;^ z2BumS7rPX!6ko)zX`uzC=Nq&!IFfYku&$P{r6H>)8zY{H^up}o0w3(@dtk+O94V#` zV?V&p5r3R@^yaZuw0PBd7~H}f2^lk0G`BK8^z1)r$YPr{QZLSS(oB40C2PgH_fHwM zoLS8Ti~^W}*PCvhoDQeYzj9k^89IB}09aKGMBJ4J_{MFH_W4bg4|1M%i{ZnwI*^`vX(;J1(VY7&}G_G!>t(P{aC35k@DSh7tX5Yw|+ z(OR8QmE~=UwHbNLCV+~({H$j`AaCG?uDA@%7RQijPY-+J!5&%3RKx~zsPj%JRG?Zr znX&mq5vOfG{?FLNa(Xp;^wzibuA}c`rbu@~q)%&V7O#dEC|^#^*p@b*ELNxCKQOFy zjB2|5?O~r?*Xv!(9O`2?Yx}3-xjrPO_`4LrZH0N*xu-M|k|=CfFN*Bo4LvH*$1Fqs zpXNPI^u9opsY(U26tH=6)gnvFM%U_d`-h_LuYa3sn%y7>C3RL(Z z_l$NYa2nZ5H2|xp9MU*EenzdPF%>b#jCfg!T@1 z6(GX`4gNPM`j=W>`Wu)yVZI^DHH+U$&-5VG-VY68{cpSRLhm35Y;-6da zx-;WE{gooVSUvqS!fvd@!8APrkZ`6xGLzZQ0S;dbd?81pG>3tbmA$ZZqlUM>q&hVm zls7NnqVr%sN`rbJ?{qq5sL7JoVxWAR?`MMov|xHfjv^HyeEblBgGwBN66UMT1*8djo1s`WGnV8i<7dub=$0oi&-I`kPF-j z%(~gIW0^AHw-wme{^AfjP_`K_^%KuALNaJtIu*0R8L@#t2>{ANH5S@p`HA)a;0--~ z5_Lo<&X#)V3JF4O2M+|ajrlgFnN{INb926WCtFqkRAQD6RY39khY64F^o8C3O2wEp<4UX@&=P&BK313q7cdI0Xy4~C3`3BS7=zAp{_YO#>jWL)1Jvj18(O)zH+1MWO zL6Sc((fb-uYX8Ow$Xa^!S|st=#NW|Nv*?CB;j?~{R`Zf#jGCIH;W_rG?pTfrQSM9P zHfo=1ld)XY8m*#t7u4U!j~^bb7a1}gwgu}|H_fcdU zkZ2qf(I;%e^#Y#j7#hO(Y^S((<7aY zshqr-t#{ptcaGxv_4Mh}zo3#l33TKOH9bpgV3E^{H3!Icr`JbAvjFUC1EBi)D=+u! zHmE%AZqDXWrQQ|+f&{QYX{jUbCY=EkaSK3wYgULQe`y&hdOR!*D4j27@7tEk$pNg{ z6aCwOPO~MO2CRnq06Cn;X0Eo3)ISKH+TL!avJ8+xr*i8Ma2z|zjm|?L_ESn9fC{MsKFL_vpJzVz8Y7?0?*StlyN0_koF5rgxwYWfySfcn1*svV?H&lA z!}8@~4>kOO``3W#V+FVY>NqVndn?@mb%(cfT@@zvxx0G37fSNn{QM9IJa7W+^`aC1bCdQThd0H~a#Hw?FoDR2fx2Dkk=p$kn@pPoos!;siv zh6iePs@1E)inW@UFfakJH^pG^(CW2`k?C4TC{a`C)9}C{+bhMbiG*jQy(T}>3lUF6 zIfwcz^FGQGiSc1PF(u=h(C$9Tyfy89d{CMvaWtyy%^jk7JH4I?ZYz)qGu>=7Rr9#r&sHG&>O* zx4OKANj$jN1z%y4TJ)0(oelCPEnM>WX(oRbPMYc@m4Vt#{w)!!D9)&^@L-Z)PLd3+@tZ$}2To}8qX|3_reKfXjY0?a3#dWD!p8F&CXQ^(-A7N)uy-vcF3z64wER<2;FRTPfkjWM@90OWwHC)fum*_cyx&HQfqAu&+cgE)`gX6B7ix|lumNHN*hHuo6k+tm{#%A2&>i(bGQpW-Fq8vy@$b;_ujp|Xfm>y?D`(w*M=Dp zU}VU>iO`#Z+I`Mxfmd^K#OqDP2Ni&mYkuCL%d0jWI?`3BY^-iC$yA?JV_dk)Y;WU(GF0^HZSLlb#oBM||XN&B6fH=JGhWShEl z`^n6e0B78cTNYz6^;X+pt-Ioq-oS$)z5sts7y8HV(Tqi!*LruQ3}jw}aNpcoRd~>( zklA@0f)hUnI7?}bayE2(N`|_rJO-$|j@5nS7wP~JHuEfbocHw*XwTwV@H99=`a2JB z(%sZ&D{90eItu{(@?5$ACH8RX6XUp)pt*xc)&IKER=8D!VE!c3Q{32Xl z;FU|-ric6xRJ7o@Dg8>rC-UDmLWw%2Qp?_QGI1_rTrP~47^#AU&dYKGP>YT^rMCl6 zqZ!Ae>CRO7rLjHWGjgw~FJ6m#Y&^()>vXb&7UGh9w(#Tu!4sJW4?FxH z%9g!)@@=o3#4MwWP$i?Q!~Sd8nIZ6W@W)dJ<&&VtE~FecFM>ZGeL6!{8%&v#-Ucu3 zHyyA$Tfma)`mYzAKSU>yD{nZe@ZZM*q%Jghc)(sa9&U-yehAa+jUh*84i};AsA&3! zCzmmK{c7!l#=BG%10hMl?q3fQRs!N>M!{*Pk$tIo zF)Jh}z3Ii4-QYCgEQ5!D3DqYYC--#kyV1fr#kd2Kbh6bN3BIh0{vgFA7q4T zn2u%f4slR|sYA>TZJ|!3=hl$?rISEXvM>WKd@|=IlS7X~P`k*tVXeWX!_Ul*sKg7Y z!c>xYIvv`u{i|8PW+&eMYe>2G&E-WM=HVY_w5xM- z1@RTyla{-iArITO&z-N0Hv`mty!c%^^?mGH9Uzsw!oDNVNhE`#Kztpa265&rQ?xwW%Z__+h*C z1luj#pM;GpW}rvAM^8|-rInRC7N_I|TP&+S>HIQO5!%~8lrVtB1jAYg)X8ZEZHGXq zpj5PfDk;H^Nx}FfS~HkiV*+DO!-W2P>!k=kXuc}8P)c#muk zD>i-dYPO!wZDg4aj}A6$XH3BOhi6Vb8jULF!Lr_gr=gD+4Tl?jOsLimI*4BC$EeKu zK1e?VFNTITQzdCV=Kv5WGe|H(&<6|66JyiU4dz#8FD-AzA>4NlX|p5Kc9t2aK?j%#<{ZrsQHDCt zFdHcr4z#=Lch_~2z6|L6WRr-ew2!1wTwtGrxO_L|ESc$^pguFrIg(I*R!=?}W=}u@ znt4}k`&4vS76+Y0=9S>a#PXV=o46F?D-o&M4xLV+5Mk&Zj@W~wTE z%^2iof1%FA_6VU&kg-lENd!Sa_B9zy8&X2UQKx1o?oQ*}m`#|Z&yry@0!(H@1RM)y zHvMej4H^b6!Wm;(mymQyN*FhifSzCp5pDY8DtX`y@c8z2fM_3{Ckk|9Km^t)31j8bsqytI5-?2ZBt$ zu?Gt#;eV~$x8xlN4L(c4QNpXSFT$UziFR&SOu zW@hvy#Z1=<01+-I_OOwFgFw$fi#h{n1VN?kpyDsx7$nt@)yP*bmHAU~^rUDBW)O4? zsd0!mjSA6EO)1d4n1bX2oR8$7=`4^?hK5Jn&oNO`<&Now*dF`k1gxj8VMF z<+gyx-VEGIk8q7#T8E@dsUEpX@hH*`{X{h_q`ZiEgZ0FV*UXn1kjJ=)7u(1I1CFVhF=`h*`Zya+L0eDd7CAw4M z8NmRr)9X&|Eb{7f3X_!GW=9U&_NEc`u(070tUGh37~|>6cIAVW_fYJu?wVuT?Wj-d zlM}*S8~(Hj6)G^kL-ZB zBr%EzNisC=8cbj6W2eUl0s**M^Bo1a5ij681cL|^NjB4ouKPZY-@}n_Z7*0MAMs4X z^(f$o>UQ!7VzAH4kXAWLsqzTKD<@adTKu0d*b;DjAdvI zj@;n#po);4sc8)ZWz#ycuPjuR`wh!uDzh@l<*U)&@O+WZ~u_RZ9& z&U89vL%5t|7`1S+y)hnBY?jDn(G4VA%z_?+l9!YgSn&4(hI@@GsRJan;sZ&CvL7$0 z++^{fs|GaR^OkdTTw)#MWoXTiK3WR(jlzsR&-h;42<;hE+ojjDzce|vzg_;Yqh}af z&ll)Z6p=<`eOEUGe+O|}g>7A;Uik7|{NP*y(tv^V#Uf?iM1J!#|od>g|j9b;UNrDg9{`tL>{h z+e>6X>WYedm_gGQvI(UHc?r-No+n<;v}>eZ#Mc4N44;8SYof z)3^6`9*F9Z;h*m+vssG~z>2vB{~TF^8AafI%$xMr1Hc#a2`MV0&P7G-`)Zao=cSBJ zt)>|V=U3(_H7;lDPM@ph=jK$eEex1YXFp2}cAa=5exby-L0pu)fld5y*FJ!{eF@SZ zwA0g*eb(xr?|6ycSi~J5)A2~k=rCH6%eb|hCXGu6J-3#Yg?1_sx>EZns_4fR$501a z6yiO4-m)d+9e4LLamYv7Z3ZHiu{gYRY+91r-4(ogcHEICQ88|%?BDnY<{U%tMjAh+ zx*0~gD$HgXbUoG3l95C{VH5YFol`P+QxhB5{KdCjgyA?%6L+&8GD=ta(MwV%^+5*v zkd&`1nRIHnUOf`wE#bKwhT8XV_T2O-ZPWYI_B!|+(mQjmEsXzi7pQ&e&zxQs+0~`x z+o{Qo+m+wOOtugl@)Pz+)$j=$rxyUjAfu6Y8LEa zQoWeIc~tn7oUPau?Uu(4QbP5+*lveGdqeDa?~JI(dtTUH;w+^`ai8^#PyJHP>~4@v zb*eUQ`hK{_ehqm^%L`Ss_;W8KPodGryN%F6+K-2;6`a!q#rhtVwlHB0VR}>%EWbQ1 z0#2UK?j3D*CikoIGo5W<#Y896=)m+kHBqThA=O3X&~LH2PwDt+?mL zm8ej6tc$AeYf{Co_?fu%Nor|AFOI`%9{2w2Eb@X7MPovOm>E2GT~na({WTQqy%>ov z-phz$D2$kkJ=+ez43TI939fwQz243aFye71O-~OX;$=3L^f)F~4vqbZxf;IR+^6-oX|u9?I%&eff8}bV#Gd zCgq#?&ig%0g+jq+P6fF3_~`;x{No%q%C)-P9<;-k{JfMeB4s z)d(!Lz{Xv92!ag{=k0 z@kMXSK7k*cp)~XCq0}Z;eHoX1j15=yq@uG3BaqXXzEO zwWmd@|6v|qc=(yX+;!UZnfPS~kZEAH@qJ>EzxIwy{Py_BdmnZqe9b@YaSiPi8%pGx zr56Ht0LnsMEu{ z=;f2gm!~bDtL3VUE<=O%0N$9`VZ?+gBH~Bc#5tZ{;c67kExuX}qc5kKr7-jc^h_F0rVxnK)L3XYQ98&NsR1-+Xc{R9FeJ z&$xyvI7`YS@|jQPDM%Xi7U+&0t9W_>i6yefs+!+0^s8+0ep&T0-9?H}tswX+MYw4A67C?`yu*9ZB~1>g>!Rlf7Li;-RC8>vKNEnyYy zIXNac3YRfH`2agA_t-qlCFOJ=q#leJ*riFv*eG zgaL~qmsHqfvEGjOpi$}YO!We9Dsq-4Xk9oDAE=uC>q|t`&y*fzeMj&b4{D0Vu2q`(@lmiY7S}DM^AQoOKpT`U5bxh z*p8mpOh{a?{l~ZSAK#RqpD7V41&?8d43hY))UD5(IuT^^#R^m(o zK?bqkon}HqD>Fq3v`VUd=A9glBaI;M)0*^{!I%ULzr6ePio<+vBw+rsXCiyE3--5X z2Hq2YfZh8ploVszCRBH8sKU0r<4%_wr_2|YPAQpZq-=se@`?3$4H&1#y__TJ{EIjmnf^+*x!#+0(ZsL)P+=>X~ znwVdijK1Gl*TRZFPY6#Q4E>*n!QbDs4k{Q2AEL|w+By_p7Y_m`s9FUdR9KCg=LUl$ z*4R-{ktl2^d5UlT%cZF1eSqaVTZeiKAz)DiHs&VDo>4RWj|=tB`DZ)}>hWH#vpWK3 z)BX3Ua6doPLhkv1Y|0_1I9Y8Cbsd(eRp9^qa610SoC^{jfCoKQRhPFe0pRKXCi;{nMMpj*aVm znIog@kLC>*4%&LX(VaiHk$NukHADmwPtMz^Z;b&lzxJ*U$jK$l_E}G|*af0XD}nwN z^Z~7t>7zNJqXFK%ROi9xZj4vUVVt|bhLklx6ZfE#T|%MSx&B5Sc4yKRrCm6NY`rz`e=yva)On=Ms-^S;=uN!yao zKp11G0c0ugKF#;SZSu=sSpc>rY*}9WK(fHjG~JKB{}|FVE&p2Hub!>L8y!}o7Q@&TA$@ZPP|X;$$VDtfe73%aej+^@YN`EaiT%U)y?SxG43UnY65YLzFK#-W=?A1PUny2N zV3jwycY@RYyxDheVXfTA@leZFjJw_fD3F1lZ)dLsSU!1~pRK(G#LdPYxBD!M`TCZd zU*8OCL{Dq9MRQ)TN*Mux(?q!@_aVZ1fYqJoZb%_@Jp4cIPwy3eOw~qtowY~&u2hgN zFeu1*`%`lS%aWH!Hg!$v^JLLt92te2FiePb^h_eL_0^z zDk>+o*!h&kZT;b*x5IU+yPMBdi}O%r5(lTzw`(TzTZ@6@y#spO^ESD(%6eDphHHJ} zCj31sPGN4Bt^wWKYl`kaqT1Cl;Rj|Lj|Jy*u3t_td1}|DTZ_>HU$QP?YXyJ+mQ*3v z`e%J^kJ4oFuI_Hn#6@-rD++=8QD`h?m^6yQhX7o;`%0={A8-(MnmuIT4%R>&=v}gFNceI9a8H zE(XN9r|>u0y$;z;CNLFyk+7H;vw(Ug5z^80xq^98+V3MFk-TF+EBB6j?R+!mR}8fh4$JIDjG->`bO<~bFdFTYPYIbX^^0cT-cNqFU= zvfEP7vsP@vnRh~alY9#)*W6=N8~-wM>@`Eb&%?8avkyu2je*P+TwP_`Uh%W6K3>wU z9k7#g^miBN2E`tCociOL9^_hGE+G~)voPt>Nj`;N=A3JCY;rlCBTb*&XR-DB*&?O; z+|n419l75HkOory-e@7)Iw6aCn^QxqR*UIx57yEZqN!aTZQQ<48j{9a;l0U)=F3ZR zn{meqcQwNbqZueRmB;v!R=tbW0pnEho+1By=!cW---m`iAyxpnci4L>vTu2?S7Q|H zcI$lQW@oFqF&|7ho?WrT-s4NBA-|t^NVGc)dj!P??~4M9LanBEZ|~AP1A2cKoyvPw zES9y4osNxL#rLMYADp`wj44ZXy_z5=jF3a`8Zl#LXngEJ{d??%_QH3$Pu`iYA}UVz zW-f<-5h5EU0q8BBI%{?{^B*`{uFLPES-kCwSxXv6El3I0f!y!1`*i1%v2sHQ9Ywiz ziQ(yj$HBDt-G!<+f|0>h`;4*m9(D*|CKU7RB-UnNM*^hMinR7tH|A4J^naLI(;W3N zwjqBU8-cLt(+%;v>D(j0T)HsS8PrWBh4YPwEC_BdAxuwtQN2(PKta68%?+6j$ zbKTw&gV}w*wGMur%y=!36Hp`_{J0K@-hZE2GxQ7Sv+`bD?v!|8TGZ|Xxd)|_h919w zp!+3R33!DG*@8Rp+b2VTPpPIb@zj+P&Nf|5?$IE(jqmQCewVI7OPSD9x#ass8r&Vy zEVdu2=F^7@!h_>KXs7}#-Eju@5nH_T!E3mCl3c{aF(?4Rv33y)uu1lZ=5j8tB7=DS zvC}t!^m;Ev?yyV05nvyi#$W-M(>*Tsw&>kNn5@tB3ZVA(@Pf3kl5$d=JZ>*GybJ+o zjC%2woX>jo=`jBr-TKQ<%c0Dk^KbS6L3%7#0gBLX1W>T1+JHaDB|bO(V%G?1&gzwK zN*?wAk9YP`CPXpL2mR;aO81qUs!xZp#0_oa(ytWd_bP8UdixT?+1aj6_iXlNYtC+b ztGh)$dlTb|-A7Q9KEDs{zE}VDeijsC=k7HeG#?rE3vZ7x0gt&j`W3kMoVuwNk_bcwC~7Tx1uJy|W8gX-*FWFR>3WW^DIns@PNN znehJB?hI)il>MOtK`GWL8};b%+7aylrdd-H-0-@XxgJ-%R86 z@PFdAU$}mFI=rGf>$C6Eao2dgZQOpvMV4W}b=w|+((Ut`cN)C$O*_}ENI!x0GODXD zu3#5H@~iah8@l&z52R1WojIT4z}}bF*@MVcV}=62k8qY+J&U*d>fGi(lw>*@>JhMf zL4Pg0#c+?t0qmUD0zF0>XTZ6U%ZRL@rBtF64H#e|n`lBpf+FEfI-3a){2-5*xVVcR zj=EJsYD2liLm-HITUK^d`u%$kWH0k9z37n@nQN2`?goR>;k_90o zVYQDBG1U(pe6D6mmZ_l2kZkyB~`Fq@z7E zT)1x%&7b%pIQD>8|badq-8D6r{Q=K3FFEw;?F8ygUc=w{K<)9n@^>hW$ zso#Via`&AA^K|x}Yi!@!B3(`6SDaN$@R{-4#L1GqqxS+LNGci8kMgn$jy7F)Elk4_ z!?`)>hNMG0R-@#uxxHz>L_MmdtE7E`ybXDlLA^(>A-+zvz}n~`e;=gHCv`>;#kh9;tA?9-~Gm4&)R|znl4Y!_gOW7mWTT z5Jeu7!}KZ4-ay#BlIoFbS=YB`5cSBPbS}&RR)^3ka>uL+&5A^BNdCL*FL+>gUjxs! zgPWmjQkaeV;wLk@IuKK=VC354tsuugj!Kx49%F$7yfuqyoDIW}1>GCfs(S7+t~sLl zXr=;GIlJCbqtsl5xJ}xrNUgN!J+1+ztZxD|2P zE@hN$luLvnez8i#`Q}es0BtnQ3)(zBtI-bpV}db6xM^fWso!~E6vr0*lS6%QCy2IJ z;An}FmqfAEKbRT^pN1>wnupVJ{61xj+VpETz7!fAT1H=%Ld-QU!3PA(vY=rEq_7Rm zB-oQCoD%ZKZ-n7SEIlklarF_tm<(S>6pdDtIQW6|6dx=RGE56Iag+{VcqyXevcMCb z-S1J$Y^y7p=uQXCP4%NTG`~;BasVRhGe~I&rvJ#yn@x`s*?oBlf+7-k7n&Mc1O|9R zBNe>Lqn)^5e!-+`%iaORrvMDr@2F7BZc?FPK%R{o^5vd`DVbEmfSVDZ9RALtq!;6% zHsp~;WOMjO{^HxxA|KQ=np1_ch?r+I5!i=&0rA4#VWj~}DnU!cUzP}hv-`z&Gj6_K zw%ZV@>dcUkI8Y~T&n+JBlqlOCX35k75pp>e%9O2wWP5JFjv6N!g599uS}|+rR(E3p z;&;0U@z5)DN!a)2XpciD53TtIQpqcJN4rmHtv!MWr2vrUxOK+&pngey}!S zKGLYfkWyfA(N^4oR>1KfSX%r9CvsI$f?5VZgN(Vp$!ML4Ik877- zt=RDmh(dvY6$tH<1AdtXVB4Cj*`sJ5bZcD0d^SYJYqS!`_h66qs{AQ9&SBWF?xh5X zw~ktDm3aoX6&!M%&o;>9O*te%)9p+`K+35yqn6|O;nQMATFfr*fuu~EB~`lz&%6E2 zrV*RW?kdi|*NaCW7Nj#u`KW#V8^)#{(xUivm6R!G4%_&*j`(}fQa#+2=K^Q*kc0V= zLaUXIA4wj<|7!8M`KJt(*zIUxsis(dGHEed%-jpLFgjkU&30$s!x+ro{W|s!`d{hd6O~4#<@q!XtEZWknX3XCKgNP?7&~q#&(V547pe%$;o`uaW-0^KAgO!n!*?u1o z(RJ=<7QnbI9%rs$l)wLtDp$Xfaz==@Ga!Q}_dQ7IDEh9nkMn57d^xUoQ2Lgq%)A~& z>Qk=(RXF5~+ky&%I-C}?te#Xz9k}tnLbmk1p)^=%%PgW{*i_2NB;g--gr#Yd!w7^> z^O~sam1M}P((cVG9SHs8B|sJu1v zZxf7mi?775j;Jx7;kX}*p9qXRK4{x1zRbj@U*ESWnFC8g`nMIzohM{vRxRsb^DdJ7ho2FOxV4bo{$K`(0&i9 zxd|hmC8))$k%9NSmk!%Qe70&sacduIP!T8%qj4(`_d5l9*Jb08YhK5T{xlA(+(Pxw zmu`VLl+CMmgNIi1K^P*7MIV(do$f7GQwKwHA5HxKQBo;vZUXcT8$7poQ(^ZIOec68aAHV?tUi75xPUepNW7P!k|Q7 zQcm$U(4*2)yzWfB092Wm>&Mc#U!R@Hj|tGj=So?H>LBpJx8Ta zX}pq|<7^ztlLHsz)N{SV^`j4XNhti3#L!rhD3Pm%wh*bI>gSZlyd9l}n6_xWdDjR5 z_T(AO0lkA~P##{&Y07@>bdCTS3(~CrSqpU%KYBL0V2K8)gLBvyzW6rWLk9}+VUv=c zm)l9L%!K~ZGy?WS$e;>dx-DfKs(c8ya&R$01h~sJt&gsWmttBi<@Ys}{$NYZ{bt%$ zz^C#33Qz*#LfQBHs)u-c(O{0Y(k;OPd)Ol!j#+l?46CA*SX58@2&zXK9Vua7Dn(%3 za0xQkq<@UYthNM_#tKV|rFl{$s2Ye*MZg8CH%b| zy-V@0mf9|htT`faJH-pVU2`KkE^SAFv!si+Rv^x)*=1{Wi-$!yu3Py+Rr^#EI^sky z7AZdjl;Ih6xs z5%jTp8MF#S=5q(P31&P&eQf%O^@QmtJhO$T)k4I$)mO$1!C>l#DP@aA%zz*8oX(W1 z8~DT24KLqGL&zk;79FK=S?Ai9hr5Ob?HcH8F^op+t0iD!4a5Y2uvqscr!sBXfa2J% z2SgHV{8((gs6CPS@qq}*>$b5k6E08=Fo;UGNFb##7))DEXQ*}-8-ol8Gyr)L*n{|V z@<}7aWz^7h1y|lCBz*E04NIn(`U+s-Kn+5=qAPDe$e|!&GJ-dQmp)PX0M`4nP!eUe zE;ivR&qAv=+l%g9v_;3;89b{0kGj8(s;XQ2fML2D>29S3DM<+dkr1W3Rl2)dxg%}-K`+qE#0|^ckXk}{e1U*j(+do?-*-1Ho9fcz1CcFUGw^tO(hegQ6%Tulj^UGr+*^F22fXZWXnvBNP5|>&nxV|ELn}8SXCI=ii3C_U z-LZGyyGw0KC5Bc{<|&YHiO|!J4!@~Mj5sida2$^Sc!isVC1*;6a9>>H(PfVE=YEU& zbL`8U*&>Od*#MdbJfEPS2TD0q-^B}9AiQs6A-u2CDw#S&By+wMSY8QI_pGLj#r~s- zEiC3wP&i)H4++|h9)7|ENbPn=4*VtOh>|EXSXj9_aEEnYNSCpxdEDfgc%=m+4`d*E zc$2(j#&n3k+~ha|@VhUc1hoaC<2JQD>JSuZ#e;rHvwnjX>GqY5x(oXS;S%Z+eQGOl zIR^X#q7BG;#>NZVLl3#L>tE&8ddg^D%AO)IUDv4>&$89YW>GEVdyk;xQakA)VoIBe zK=D3}k{MH-60Acywv${!;gb4z#x%Y{1*5ZrXE!*0#xO7blj$^}NJ({#*G~SliB3;M48N1N z(XoJGUg0oUvW<7dx|b$BeoVF=>ZJ5H1S#7Mh6sslE7lSFBhaa&BefvFXG_b_O2Wb8 z!K1{KXSAa2cRAwN_8Yo|F9nCO81Tfg>E;*zqiq@{@q;;5gt+SUhF0Bwa8`c=CW#9h z%?D(-Eg)du=&mD9?O)Sm7~aQ99U`@ugU;8{m%g7*r+y0B*cMufOTmJTk*cl7{Wuc1d04>6s_Z`c=_CXWZWj2r7x_ z_uS#R2}MMX#HjdZiMjOO4yN%}=X%n-1whhajUv#QQ(SFw>oj^q@x9etxT18gO=4FY z+4H?XrwQ>q_r{%~n`MLm!D6g$xZZde@D|#Vn58y(g zv!PgA>#fR7^{Tf-+b%7))f?0t1RK8Z1$)IVy=pmb)=19N)vN7SK6ePYi2a9E#HRK& zad)Cg@7W8U3B{|wkNlsnwFvHyJHicp5S`E`KMA37*W_y0Sw1e748}NHb>zDISgKpq zr|;ujb_1wcJ288@broj28Rz0B)ZQsLA`_vD6;Tns{yH!+iBWqq2F=acF;|mAz~XH< zfS9Z+P-(nJw#Ex~GwuCP#VYd~e;x6H7!F_TOV8W2iQ;pkP#^`$u+4Lw>Uhoc(`4TJiZCQz2X*TC_Lz2pIqTg%oy) zNj%MElY`gh6eGNjR^!*xuLRMtE!NpJ3O)I?j@;1EN#=sH<>2RieMw^TBiekP*LI)Z z)18iMmfv+=#H6X^%OTkk?#i{k=PfbLz(WXfIWSwEhFoIq-Qq%)yLL(cSM`GBMuc3{6!x3WVdS22)}e^lVMTfpcCGrKzQ#l1do*r)aN>6c zs|34$Z*%?Md4auX;b%}OlJYyZnrh?vSZ;IUfoqz2eC@dy$D((!?~(S{J4Ez!+slt= zZq{$$RF>4X44XngvzCiep_&PD-V1iCjwtGd+I$mC0LrsJz8O3_zOWD2@DV(DX?eO$ zPg|^e3y4Zu%XQ*PnZ{uMnl6_s^NqO+bUHM#Ob;6NLu3BYf&1ss)CupaQ~Lq@y)2%| zXO#VX`di*$hVZaW<8iZkxiPZNp8Bd8k>UD^<>LAZFPo9T?Y2@O1iDuZ&{5&tPb-8i zf7@ug!ZzCBD@OU!;RHUe%{aR|Q8f$S7?i~s(<|bc1UCHLQBehB+F#tU*t^;!Dt9#HLcgtzzrYg+hGo^lE2Fw$atS-S}#*}@R z#ly+1snF)0_c!aaN<}R($sssO-ST?G0lI`w2zsV!=g&jGbA8mwOe^vxG4)BT{^z6r z-*k?aal%O>q?TgYoO|GYW`z5S{eLGH3Bk)>(KHIM=>9_uxd11cuBDTv<{4PAVxwC= z%0v+49}W~R6Zf@(>|Z0dDdV-iB**!twVNg%CYD$L1Ln%cR9_x%=%jG!6#*c+m+SiU zz7+_-GKZx&obAp4hV-sEulc}1*3<$pcpjZEO-Ms;u?MyenL433R3hEQX5ZWnjhm;v zHcJ$%@5yy)SPDj&ZACrL;Di*n;mUHyHxR<0Z8IQEhSvlKlmR{?KX5S5Z?{mp#v zXy1?DI-cv6sIiImyhcNxSvk`xXQ*OO>LfG3w4!)azrr+JF-vStalc}=-etFbFg`zn zhvktqJJ*eQnprj+;qZSj6q7Czb{>Lug76E}4K_(C`@J{@C3HJ;%!=YHtd$Uu3?x5d% z2ht)Yfw%isa5I4AhFw74n>gw@$q(I@EtvKa(W2r4ghAvFKKR(TaChqp1x^XDz=dzs z)-%&EN(K-LR>QzI0=Ur;=q@AW-C>OH>hi_R)b;KhP(8x%zRT~|fH&;EWRs^eb-Ngd zTP=Qj7!z{;9QeY|AmWNFA};{gaAq)E=LeoL-X-Z5-@{H4{Z*-phNC{Vn?sOc(d~1! z$-+J#7^3d$@>CczD0hpX&%tnAtQq%~1CR{r3Whc*w z;c8^{4MAM=1}t4;2e_*Dy_3Dp)Rl<12n7>lb`Nr_#P#@?bDFqoAq57Gy8!Qr8KCa} zwk0sLTo)Yo^vTat4Fhj8z=BwiOjH<~xTFvF5%IZp^Hm1xmUU|Ya#J(?GClK=nEd!e zY27;ciaSJnYut=_ACh`&z7~~ILi{f#)T9vlb@j)tAuXRIZ6xXJFuaz+O%QNVhKM8B zvhfA9QNzBa6fQ7H}g`80FmQtB}Uu>cV=&{VTQsM zVg!JaEI#0bPYPjZYXvEIytnX0i~c>UsntU5Q4eIFMabgiu_W< zegTAF*9Tv815S2DbECEAYH+>ewJ-=g_B#C5D|MY2upII}l4NsS^Lj2s^JlS6O|iT~ zgeU$-Wq`EZsPO!s#4>hZorlS+$Q*1w`s`q)a{ za3$v9VM6)7CLe&2LbvhIj!lHy7mBX!eu)03qlU*s3(x&b3JQLlNrE$K4kHh`xCL1B zL*nnPVEA`aFz0ib@Yp9EXp)QZWQe_A%D*c;KBU)G=wYW*w#UrLcp?{`$zl!p!i~b| zHPnR`&ZwJccc0ydhC1#?tXxT}B}NWv3};EqLOb6i#QoUo;(@;L6ZUK@dz2rs!>_}} z*I!lWoCJ$}rYL(6nwY@dWSaa=XoA@UZ=@v+`v;vq^LspgxlDu^JLO3S++8gENXzBZ zzROqEY%j@QM00}{V1PXH!;}sDGYURw2goC`bi%!;&eA2)9H%f#qntvR*cU{EC*irI zPHfLQ4)aL{r9FDH+}MxS9YJAsHMj3$0dW3zSm+c2<9c=MJG^P~ah9ExZ*%uQ z#Hu@`ZOsvL(C8N*x*9)#`o^VaW1)_w0nW>IfWfCBY{2=yS*@J z#-43Y4)p46ZMdK0YRj+tako>v=jP-7vB3S?%nh$Z6a8DCml}sIc$p~+kJ@kkswlv- za`MRc3i{GH$|kO8+WpahUbP$o5*cwUM8W*v`OgD4fp=CM{piwGjM&4 z{l4#e=Sd-8la9|EZr5YT5yl!c#LU}K0L#F}?IXQUXN*_TDJnCui-+Sb}sz;n6NDnj7!;Q}AhFy<7xAuP*3O{1q2pkQF+ z($l1N4EnKNVA%l$`5>1*aSyDwVtJ&4{hptHNBJUvvV*lX#llFu?sm^u)bp$oq#8|m zRx5$jAIv4MXzj1n9eh(wvZ`yrk5u!Nbvji~V-ECNk5eCkz!8Q0L4`SdZFGxy_tud$ z_|mVxMBTK+fdxj>K5q@nzWRJhSRY`rfo|&o!OcYT?OL$WH2F<2c;4x!*8!X1_S~Bj z1h>zsxDZSC(4)*J?4Pk)D3y(`;H{}jS1%}SKV|IAh2VL>B3U36G{ctl=Q8xU&3m!3 zS3XhXe9QUQ8*a`1xPTJTeH}$Nz(1e=vJrFS^jHP=#3;yazI!gCn{uC3tIv$DGbi@gdN}6_oz9Lf-KzlZ+4IOloBlwImuk2P{Z@ z0^Cqa(70Pk7YS~IWBcLAa>9>{H{bKVR_gTgEO6b*D&rZ+ZIbj>nW#j~jPipYHq8v> zesbLsv3I$VbuNkZCf`ygJx2TMqc%Rb!C2I-)a!>VCfw85*1=b6f(USJ_cJ96u>8$N zKFK#-i%<;9Ts@tYOK=I$#5?!Mok!n*@iZEGY9??!L#<%g^UBCqg?b_))d}!aQ#auCUGMev+Ha514vC9&4ce*V0NtWJkwN9hYzpr(cN{ zU8%Jdx)Nsd6EWEuYDlfTjw{oXhy6la1h+qgg1Rd)iwh%QEx+{T0$REzUbB?P4-NzU zLo<1v{t$)hrhtoo&pC=C$+W)pJETLe?Qj3tVccT`Jv?N2jWf|R zd@}bKToJeGuH`_zk!4N8#H`B0dJ~mURLlT)_s=!~4-cgAjK4?Hp#(iKe7v4Yx@gpO ze0#I+3*C6=O6M4CR7oUFNF3Gb7+lZbJEh5Q&6eiW#zz+!b=~HFFk|TEu+$qAdM`i{ z?M`Y@!K_joB@qqYq&pgz1CBgh>H3EEq+R#JkK;1h>$qT|9vVj|U3U3J|2XL~4g&Xl z8C_7ONw2isR&=Wfbsg5l;g`JTwa#C*Xdx%!9c)(w#>gSGk*!1wGzAd*(W*SF1%}O| zc+MNA8wQBRmu_G>G&DivB{ZZwJF-SMC3@m5O$BLlLp{J^uY3_ih(s@P#@!U#qQGDO ztU)|(o#ZC=3fG`#Q85ZGYQo%2>BEd;MjPhiRX#KbUDWga2wn8N%h-~IpmP?3XGXnO zP8FYcPaQ|{l<8RyuVJXDsi2a3YG6WjlxB}uX0~SaE@F(L$o{Y6YmTLU<_=|c3LCfB z?v1;C1%rHL`pM-+L11wQV-YVS8)f->UH5e`Wv;?jron|U6#@54@h2h+SM2|3_9Dw0 z_TR}9ua5qETWTs#iza|o9e}(PrSjb{%)!fCB7sKg+R%<%Bvvlw`?MjNqnqF2gU-6= z$(!UN`mI}XIK5LJA$!>%QFO!1=MBMFQ61S}o;zbDcw z3y!Te+1dB%qxH>v-jmpf3|}ahNT^|^(Ifhjc7>PqoZv76Y(jmcqK@tAx}ScFMi95nRDi7-__^t>AhD| zFCPN@?%%Q}IaweadHnb>=qIauLOUpa+?B4;dVwo8uOH-O{6wXtFdAN&S?YePFv2h- z)~7bKuKmDJf>8(%`>*+|YPv}Amb9L{#siEHlU793801KiB|4%S6@EzTkqP&ddWZ%( zU2RYTJpp%*7ucwJ9l1TR!}75bh#*l`-*eRu%~VK;3=169(E_+9Vvu^m4y=>=KP zWWX(29GWT>ej9R%Wru%;8J8sGB$Zzt_27=KnlW+pQ zG?Fa(HunA;x*8?ALgE|r^px`NZ4QE% zumm%kRc`He$8GRgzt~FuG_;dBVR%l3A8o<>?Ui--E%g@D%sJX-_wm2)R4x5)qQt{e z)#oy$QnTGABy<^g&g*7OiGph47)2kw{as}4q$@ETZ^0r*JU{lsf?0vVLu||kEZ$$C zs#G!O6zd#=;~&>>cSV|SL~fspSPHxBkcy|D@#_CVOAEqT$rx;idqDO+pN~)g5_u?Q ziZgHMzPsJ($UAF*H{+yReY&uJeH(Q@%z;huKUc4Z%Rm0I@x?g|M*-!oA#Fr32NX-2 zRD}Lw5j}Vby^EHu$c2KKPa?f-G$efZuok0`^(u|N8SlwKQ+oqzm^hle*9=Wi++r$` zKg^^ zz8GI>4~060W!Wnv=L3nD=flJ@soFT-KFMhj@H=AnO*f^pIt^o=2+vc^25R8Ww2&=D z#XdmE@F#JMJWPkpfNXuT@2VCeh{`V{u?r9(lV5m`kTlq}NLjn_L*Gz@5mc62O%tEX zaAcxvEK>@hq_iXrhf+F(ktC$1VIGn*=yKW}q0%>h*@)!~#m{*lfS~vb^~dp&dJq6* zv25AZPdWU9b>o8Hs%n9{^c2*kV9%s?wRt7`wTUEJc80)RF(uUW z{JZ+cNGT5^g@)F`YS0AGHapu!e zxl^0|#0jug|Kg3`wb&AvB`iVr672FhajbBC^4UkJK8Gs7{O5a1t`qTT{QUxMU;Qtm z7mZ79JtPJ#ct;8bT@*2P`Xj6L&u4!%pf%Cm%Y>NCOi0aOT*f4`?Sxvk@ly_04q~Pp z>`kfrHh;SWwluWb0y$!B{4dFz_5aiO!-$tCuq;3}Oh~-x5 zK|spWCn;h6jK|1yVPynMK)*v+*w6F5Ti72@8RY`)MbTq2$v!l6$sUHHxL{#Y?#19X zNh~+lAop}hGSXT)R(d5mW?D`0@%o-q<1a6}%XsA|k#>x79mvslBwMs+xb)MKGlyAL zQb`WH5iZMa{EgtivSCd-@7c+ked{L#~0ZXohlx z!w;8s-HalhNWVc^(ymIX4y8W-`w|~25&Q5WeIjc((qB8C=uE53YEtHdo!)#xcy;%; zUQ};J(i@}~k=6J?i*}r_F2L)+DTpi&Y)-EVsNEUHWqm)Fq+wn-vEJgHX5n3<^TFL` znx@!SZ~7(ir5!VMgKn9S|C#rX@n0sDBtGwbW`{jp{AeEIOCRO+Q+sZ=d>T;rk|U&2`ufgo$t*@ZC*KD>$O0US~=9j^LJJG zB?}7@UJC~^oDMYHvk9|z+ed-to)XS<=-ejHNouC~Nwbe6vaBf>*35Kr?lgM=eV1=| z(eT0AAb&&+kl5|;8Z>pyl9 z*|g}1npNg{N>9WjV72T$8U!JV2~YTdR(MHiCxr(Aaw_+p1qu4U_d7@!!0YC2v%;4< zAni8|!@*KI)D0(}C!yRxEyYF&MtkedcjUi8^Clg%{W2dKX$Lvd-`a7KuH|C2HZW6K zM98)I36;7_#O6eXWtPoM*C9VZwUWc-Vn=DHOuH|hNmddbp_9l&nkgAfS|!J&dUin0UC<;+ApL`E(XsMQm2 ztNj4Tnd3Ca4Z*&AkdKc=boD zkl;s$Wpr31xZ!01Y?;1TmCMN`UT!*T-K4KVDy)hxx{r5=rFj_|N%|O6?RBNuv zHMc9b(xo|KgVskrR9WDJf$T17`IMCBn~q{y6suG2!8v z2bU{ZCw{nH>a@$MW)L+`b9U@t4d~CuBew0LGY)B6da+qP(b;|8I&8NunpA*y82Ls> zKCJ;xkkG#BT#ab-MySGx=o9hY{e}J4?kfWyH!A<4l***~iNHlT?B2JfSLs1|mw;+W zmpjEA(@q%F$%;lNncm_Vmqd&|q*+G$SY?VC_Z2;TSpt4`46N%f_9(N7xnCGw@)5ew zS_GkF68g(E(N2*<;OOlB44->nd4$RyA!v;-IWhzE@O?UWF8G93EbOPqEcML(-QT{C z22&abd>y&xZ~P1thD)y~kLe#~5!0CrFli>X6=8(>Wzr)cOZkPLr6S(r`u;pq895=4 zieZd9i}5&r`C+Hl^5hDgFx*tHy>&utRcH@%^a+ zfH<1!Be@#dZ%73_GTEjj%Kv}hbow$W{QEy;B&a>N+$~j_OHgYI({w^^o?=tnn^8k^ z{gRyB_J4@if4$g=MZy?Ev>T{JS8r8xG02g0hnh_}c&-OOfpI2C6I}ZL2!R7MPt;%X z6i)hLd-lyj2Zlo`Zb0c}plkbuWi(HDyeGp7>c*stH{I}R@ ziih8~Rgz7kx=2UVv4-PykwNqP`k=x4ZGBE{fcPeHyzBxd$3fgm9kZkTLjtE1udr_sXB9(nPY%uLG82ihU+^_EonZK zZf%k2Q?WZ$QRfZ4iQ%_tb5$zRG0t;+uv?;KlavAHwx^Y^^M>SEq&N4;OXzZc98lC_ z!z7ibTlTTeLfHx8=Rjq9^ESp958R ziwhClgiuT)jZgY&XML7$ra6H4%KbMo)-LHU8i7Fr7o5Xl+QSvA#X3YQToyFrVaUNd zY@c&PnEEp9(HaW{pGT3N{gljng6-uyB9{$c>ax#@#LEo^sg%ne+nTGIU&Z4sU@yM{H+=QV(!aF#%b9LQ%mB1m^@58@U)r=^BW@SsM^rZD8b+J5w@ zPTkuigI7p7b|b4<1PF%tH`7qdOBum~&rxYR5v5JlIJ?u@RbSP10jc|0`oup~u797O zJNJ<=)ZmcFGu^_xqvp1nVb&t++l8B2JT(h1hnq|-$4i_YPsW@P45xG>3x)PuzNi&I z8nT*WOkirjyyoj=Dff0hVE$n)OJ)E1;=N_Gcv}b;nOn3s|Bgb#b~Emk5ORziT?=44 z#MSBxgH>53u!Vr+O5FR(>AbVWVSBo2TixRATvrso*;Ksl=A)9zh9t*POjDDHiK6QA zh;^OwdTheu)XxpJZ6A@#_SdP#h?K~|@MA}CFx-fiM;+YvJqfR} zp6kQe9-AX^Nlh!Yovm45!4R{(4d@UP#w6yf_+WF0V|5oz1!zLu-`qeT+GD>yWFzuPla7N z7P-`6jAt7&K@U@ys+FrgxR~aCKFjw$tBK!Jc=zfopDSeAgs>az#WT%8rflpMkFN*| zOLslws*;ezwY(0IQ^~Vf={MvFi6{8?wN%hISmr4E4{IL2_Bp?a@p^9~XE7a_%J1-# z^v*u_c+q`#(6uOv5UadVy9$^WQP?OXbDm~R)T;#obvaqu_2}@e3UY6-=8U78KeAJIbogu<3cL` zaio8>@NtmOW%!)nRzzitplhj%iyCxjyy?n(f6a+xW!Fn#W6#ATKX63vv*UlB!hh!_ zsbs^}!ZOp|pB@Z_XY|u_N5JU6*ApX|{dDFOxT0gPNBps@! zU=;aJ*QKV=NnaYbfoDmqW`z?)AN@+`2c6eNi7Q zW%X*am+gfPkB)HRPx>H@*EV?qH{59;nA`#VSl$kw4)>r+!yu&NI)}@U9*V!b0M`1J zR7!S744Tp8oHHX_!y6-5ljq0w1k3UpA39ew3g56mw|(@i0zGjDwd-czCUV%O&884K zs+W`zClzXUe{e3c34T|1B>f?6mV{(QuXaBqU9sAAj9h)XF`|t3?6tL{dhrSL`rYRS zhjx#&`fHNyMd@DEa*??Cj=Tt~-f6z^6)sXQuBA2!Plo~)z@Gx)K zt=3siHA3ZQo28cn;4*HggEdJ5a$GWpjyVw8AMB3++44nje4ETv8TQ0mwto;JVHZQi z2@O_=&Y9OV(8se7V?5BQj->GlVFzN#Rt_|tF(tvh*8)9y+bEy%9I&6YJ6mZK>28wX z$+Pf>Y~zyy39m^IGwfkC0AtZc{Gu)U5&BW*LOQrMU@`dDIcPbHO)R04h69JSjb ze8W-*g%yZS9{;RJ0gHmS&fDHVrL^;#^MUS$yLJMsaQ7Ws$-y$6W0d;WSG{{pP@9^1 zw=s^2$0nUTmKQ&PTk*!=c}uJ8#j!Y-&RfMS_m;uki58n*lVi~y+h$VP4K@piyF=v+ z)=4wID?Nles~{k7h2~VK)8nV*>b|#GpS19Kf@{&+R0s7gbl(LIEz^kMrk^&{e6uzb z!fjuZ9#~?|Z77>7D}QQeCM00t)U#5^_@ePm*L^>UbcABFEg{DDT#apQE2pwBw3pMi zq4s86t#BqbSGoGb8XIGuQ$I(|B(SA7A50TCM_63#O=#?K1uTkbK%3a#w(5!`8?Ui7 zuv}3my+TIcb3lW#rZ?WpE5x zy~nGqbzlPE#*2FnL54ACrvPN1W=hdD9>Bf;=Jc1N=?%X=Mic?i{S268Ou~G^J8s7G zX|c}pXG$DK;dLKgoA~w?aGX^H&LPm8(|Fb1T`vv1IddvC*@;+z&ctD-3ANfCAI8of z)P37YJU6Hr)v2uRZ5CeOv}q_6=QHgZcG>n9EmB@tUmDTfJhPr2Nxr_tmi=$l6j728W;cK24$7tt`=>n1n>#;FCdreX}dtnU53d8`3_^j za6t|NlsBS<_YP*#Z0dVyx`mHG48~#iMKEYf3cUVK>j{ut>ljgfuCNn;XS>tcSxz!j zf28`KqR)T#X?72~U$0!{>-i3xEf0x`mydxmzbpZ-CASnniSxO;lO{2zdAA_q;^qwG z0#p>d%)g2?LTZD>3K$6ZTwhc=&8OXdbN0AIFT9-;JsX2exhPNQ53$+N_$p5sG>6sN z-`TiWB@kEp7T1dnR^&PO!XIA!l;_+L=q|C(44CX4)R}r2N@?9)=UL`ZzAaUsk&a3` zJ{^2ct=W(nrS)jocbz06{-?tdBnWxMdCK^lwc30IMQ7J1o{T!CtU$l9{tjUkh5$hg zd@jMW7=XeJa{#$j2k!k0ktyG|0QSTgcTYbMtmukf?jx0NUeaI;h!k9!rOE03W{S;Z zNbJS!xC|>DVJ(hz$NY=3MJwU<_NUM7rNv!bQb6hojxdN3z&2tBc-2krO97eyovGl> z_3kdt^nEGk!fOxlnNgkUp_i%+yV_mPYJFRyo%I8iZ!U_DF({2bosU;O7%$zV?$QmO z(gsc)UiY~scm-&U9~3^&u-hL2mQbtDK6{?;!Gya|wPb+3)`%^KFam~S0KCP0rc<+L~{Lt=7-W2c;NyjmOEb0Qdu zlO@m}dSRoey)@4@y>A*|b^=OAGL zaJJkK#m**8!WoCepjH$Qjf1escsekHf{bCY3AbK8Q_KXvDYRN#SYXbAHNs40piIgB zj)vFOCrMLe4m$VRce?7iOq6`2bVZtz{2)h$T)@T(Os+3k46)nz_^B-1sl_fE7HFAUxt8_nRb-OqFBfQkN|xpgM$*o+nzEj> zmn<_Cr`uL{8kv=^>n*%ak`?V8Z}g7GSmsATm%xF#fT@=CJOZ|D#6!RmVzazb3d} z{&ui_(B^>*uWw({zl^(JR7_7Fx~sBhE=~&k7rLY&EHl7)V_D;LaGMwZ24pgBHqK!% zl>V?7FsK?C9@PLks$WYYyQOx5k8bS$UQ5Vlj5!b-CqJ8SuDXdw}U%E`wTZV_0Q!>;3Ho4SL zhv7DE13iLxQg&#x%(eaVc&_g6@e-*M%uHV| zb0a)We4J~Tmk3=br7?^E==|$@YqZchDF_|INLj0RWyN&6*7oUtDE=y|Xg!E!J!;`R zj0iI^5-)(On-5a;T|%l<*|`qar4W*EgW9{o$8k0nvs3Cb;Sr!4A23#0t5fp4qO2R1 zQxt=b@cfsJzEwh+??FXB=eKf`ZtZ-f3@bo$tND>D>*;?0dn{20y2~q1{BIS1PZV@J zBJ?xv%hH$4p~=C`+We|)t!ot)ov3;cJLBoG!|N)ceo z-X9Jy7NnK{lfp!>cK`l8h7E+VaJ6%V5@f&mh<^{sKY#(a#4S#;n*Gls{;x4l?g2`& z%{i+I%I`k~e0ugG+K#H7ye%}*VmQ_Eu6{)y+U=|{ZPTFkOvJFwReVw^M${S@?^K^| z3xJI~g>^FyRCB-GLpz*+3AlowPTfMC%ghxiSoVxqM!oAe$5H<{n)@ODZLQ`acWzT> z=ej*Ibw%Y`DPHZ?OW?URm16D6Lf``0AtXqSdX$&3drduN(?oxLr~f`5{>H$&3eC^$ zG>YObBjXNwdv@`1*p?3N>83`pYA4Rt^i)?QbR5&~hvVki$~lKYdE2~~Wtd{t!_hvC z`?jL>&gIqC+EewX+t%N=ZMA@%>~4Z`a~T1X!erC#%+wR5AS{0Sk$X_5Njn{gTLGVI zW~l7B*iT?HmQV|8Sj;0H)|zUzG=dE>Cc^MgKZ%8=WTLo1^#mKv#Ib=$5}N@8Ip`cY*P1vD4;=db2*2F`0SmPSgKiiP zzsog}aOFm;k5Zf7T%#=Ibo;unzb$aTxfMY$j|ps;1}=EUK(kN@Ec~?P1vHjG^UvD@ zEm}n3?kGr$51(4eCbNMj?C_BC#q?q;JK!O^C;JM%G;qI9BCv(-z>|bW>su#qQ2m%*d zI*;(PKdu0@1~8kHu*r$~G3vVYPMzA<BbhqJ}((pWaY7Pm3amn?9kyqGpBYD4(xBuE70vN_%KdgWep*Iuc4$dcwNw1lV7w47|D)dz5e!}KA;Jk9L^4q}hAPF2ocuY1 z|B198wcloez!dRs{?h@09ASjtr>>!o7b)bP!Orx5`0@uV67b)%(8Lqq&|`mlNIa&O zfaj)iW=@m*{geaW@)qen+!f)H#c#&(?~^Vk3*PZLcgXbRpC*i4OBNimgfIQ|^FMyd zW*8iDi__0kD~vx36%PG^FdOcda!{81AEu=oEfsz?-23Rq35s-oI3cv~z6kf=Zo&_E z|M)4N7{EJ5UszN;`0W*j{pF&vA40Y`z7O-CKE>ZjnsyM~FWK#F z{9{$C*-9B^rBvpPVHUZrNTcP$uvu4E*9ZDVa_=$`6X^``QM=JL-n{qgIwvBWYXwP-nRC~VBkKs&@Afu}#uNaYJetw!_4pQReIpv+LD zuP{rf+7{@`(6dSTn#9)knPbLuFCf@qXA=EEsicm@X<2_fQ$$XcHB>3}v3GL1p!+in z5?0!|dY43zI>-J}Lgs$+Mw>hTK-D}|WJgMpf%l@y>ZN+6^PyyU`Wf0IpI&$;#N3ri zTwdin`V7U=1&)_SdfX+wq_a!;`SpdG`7l&Uy-1q@9i8O4=ws*CY(_>#2>TuH-;Y+@ zEz(VW(vL&NSWOt`_#i*Uljo&{@^xF&TBjA^((FgPnW{E&&z_#}WyuoGALfz76=N*( zI^1l-zTYbc^r+qMB~_2CXC*{PID6W}Q@*koemX>xCgp&j$VQQIQO(pOZDe`tieAy1 z9hANJOfuZr*^4VB+q1iC%eUE|$jQ|HG>UJdzQ9ehTvDj6RKqpvLcn^Ra;niHOXN(2 z#=XpyORK^wk6o{6s{$XNeW9PAfimo|*DHth9!|?~Yi{wF(`^Q2v8(KzIbVre-HKUV zd@4c)hAKVeqm2ZA#LPtELGu0>DcQasCf$RVhR&jP_n)bk=oe-tdVkVMiRR>6r2E6& z?|<@?RuRpQWlVufBdlzak~O``X6iYQS)ZxMntHJo+wOGbBgY*x99)vH;1@4sS3x^B zp2^Xi@U6~gC;5b?0*~X}xf*f91$xGd`OGDQ#S&2DO*oWb`LWj=G$72PkIF}7|dp9c@yS!)D4nC02G zdsHZi(ir7zd89e?lo;QK;Jo?M4ZWEKhz{@}7p_OIoK*1fG98uDL~V0Yb!-nSh??48 zgvPx0I@-XT_`WDp;k8CiG{>XRRTk-RRSE5DLq|tV#AV%_ton$$qSx-f| ztpSH0}ea^e0AMiZL(r_|c{5Vhq=nQWK8&8=D?r!O$cII?R;t^mw81pHrQmXXfxaN-qLeOJ;5?8~RL|V! zNAst}euTsS5k5ks3@7u~`yq93#YT5E1*3z;#Aojvb?S_fzuC#^dO?J+O6#92;3T`< zQ06Gt2UarAe+CX(R~Mu>522+I&Mp z|AB$en9%hyV`0fEW^2i?sA!}L%90}EVY-VZ@R=JKe$?Pu%(s9%$xQCz?_znuce}D>L`(u?`tcbiRs4BM@`t`M$`WvmR>UI>e z04Qnnk}2DaG&SF+x(?qlt{)$}iG;WL(6t$5HnOuypnNmDL}?hhqn!T0VL2|1>B6pE zF%Xujx!AD_8DuDMuG*|)g2y{x>`3!Oi0D|Hx3jU&jOg}5i26-wI700IXbJw8GHXGIoOCoZ=z|X3oOsLm@odTc$2~krkl-D2IX5Oaa1c(`6d{@S@vps(N*9ey{K?$$_NF~ zEtv)Kgm4;n8m7=+uQa^X!+tX+RSI|vzk*^}O`6~Qy8qNrPe9f25|8;CDCOjskO-C& z)Z;#VZiuB_u8XY{iDNCeWEPeE%=o|4+MkWNMMk28l!^=dqnsMj5H*q3K|oK_6#c^n z8TyFudvEAQb{OKqBvZb6m?rhKrN~4V;Rz8k#eajyl_%3H^69Npri>WbriGB&QnOaL z)?@gwA`lmGjjVdd-8i1k-j8b_)_>-^7u3^-D}&cYS@r6egH82ghFp||^pSdFVzlRP zE}>lp>=X^PXidl+D*(7Nkj-z)@(2cO!W;Mo_{G!#;s}ts| zCu;-`M%5T)AH>bEPFi0mAwMBP@w|Qzzx2`Mq}o9G^ZYIm0h{QTiPd{keDbEx3F9QA zWR$F$e&QvH=Y_tDsrQpFh^EJ0xF^)~gN=IcXYjMV5wCBBwDPb^`(KAYg@hl%BDUWU zJt!qr-?ucS(*F>a*7jylJvFjjAInn7DT(WuWogXxO4=jQ%G38jTiY#?)Nl2ecRIa& zzyr09J2eQW)MJZp{_KJGHCFHjo@n>kyOUQxxOL!dwb48i_U}yzJz-RsSBTQQ{`$_B z_h*C(33CD8;>h96v2<4<$>Pa8z3WhuQ~GaD9u>N-lXG1(Q^kGQ$mQN3*ylrpLV{U_ z$mkbES+|nv+C3rjZ2C`z-}&-8uZ2Q9U$CCF;tWiE^T4o zr=~od-s>fQI?G&s5y~r*7V&eZ^pXQl$oI_H*ycAk#^M!0HtOQ(+TaNI#}Z_J<6^Zh zZ1;H-8t)dvH9n_lc=dl!-dHGfDUcQ>F*u<~uA)&o5o<&mB)UUl_2u|Z@toT6HabSV_y8iHNT(?EyQ{PP99$h|l%ZuX zf_MoyOdGeK?VM5}E#X{WzL<09_{8n`hOt9qLZDl--f1Y?WT)e7>?v;X4$ogMtWqgrKChckd4S@V`Fr8-7=HQH?k}Y`MSKY#%?iZQ6}?9= zq|lOn<>M+-Z}31V4vWxdeqe<@?yfDx`a zC7@vAc`|a=@mT>nrQmkHeXIECb~_~+x^FhHk=)oBn<=vvwJTcZrb1p}1ENDO3Cl4kMdo+qHR6jgnx}{iaUD?ySOTN{h_UWSs z-26x545B-`vDV;u%UxSxSz2P~fj|&0jh6f7eSkcu{b+c{EiHCO6GUL}T`k~um6Kf{ z+NTG&EjOq*eZn+8%(l13X1%E|H=~{-pV%jR5Sb9ZZKgGi+>GlGu`! zSvX92y%y>$Q-HjVedVg3d2 z9Xc>Xi=$}5pAvb6+%-R6d3Ih2{h6kM+!KmpscBE`nW*zWs{%YhtqsyhBHYEs2$3qS zuNbVNo}GSX@O?Bq>4BQ0$HJUmAJ_|xX1bfsL}wh0xk{}jrDQ5-NLoDJV1$9%?stxGTddx_J6as_p<1*yFNS+ha}s(Gt1pYs~A~{d4-4djzdM^INRr8TYiV zLWUT=#MEJ&f6dl-MY8`T-*}c(k6n7y&_Cv4ly%nI^9?@U4FBqkJ*21fDxItV)90Sb z3;ay)Pz|@vjtcFeCN2IdxlvqcoJ~qUUZ}eU9_Mr)MOP#wuB7W*%9h6_>t5XdZV6kQ z>9TFR-n0`C5SX5RI6b;(_g)Rn3Nc`YQ_AAg_-t^aoG4vn z!`dLqvx+WU_ti}m?i8JBAg|i!->%tV22v5U$~3raeiyVN2OoXY$Y!P#vj61<;#ayg z*j74bSs)gFF;d)svpSSkrB(RGd28lSs6Tlx*CQTvqjpbBorYB->tkmqwo+XwHS=?a zQ#)*Pwj$qY{_We>8lmk*TB@`BJ`1#!=6@)ZmFnqUalDGtpq{~=sdeaLiHsEGx(3sH zRM#IxK|fO7AsNoIOVes4M5zH!(mZ`+IUwS@T5z-1efKT16{kTCMfjt1ycL5{zE2BM z#pm9c(dL?tTx!Un!{znYPzk4RP8RA?a&NM*?W0V_P)VDME*OT+HHhJMN{;!9%~64L z&m&xOqhOD08Gq}aKij#b{>G3kSbQ?;nuZ&Bjv-PPqZv}5iA#`x;~Wl)p%aN z^3Al0=p#3I4Dr)~3<)0%psZRK!15T-an=E`Z6@1owzs^?I|&x`O!|cU;kbPxw;bf~ z%&4dY+OU{7f4}`C!tSVnW~sYGvoAdZFJsT#^01pJ-7X6H1BM&%g0p+CPWd9kacQ{% zxb?WBDJK#(Q_08$t%3Q3)$ndt0E<}$zO;ppOU*8 zWF&ks<-5xBPj7ZS8cMVBVjo9C3f`}xX$5dI#_4unwra{Xnluzm>V9a2kRX28aPB&* zX%*hVRz-V~@xhlz{2KaZ_)~Y@p0l-enuymY0wnsY(C=*S#uC_7*0G5}sN=`a@D_YQ zV-f*(&2I)0l^fj~hpEo*lN3Vbp$Mz~<>999-XyYdt^z~Xb$%P%D?z{sv-pc3o8b(MjBkKGF2ei;H`SD~j}Ar-!a3#6&WDnR z;2Q=;h9O^X&>G-% zjc`-H=|h;PEkHIL?B@*`D!sa&rB4GIH2~!K>l}?NpsJWTxqD)Bs^-F%SmnF+PW1aS zgKWI5c2Tj}&>z^QhYET}1yO$A-7V&mA(8a&CTYK!{Td!|eVpnl0M5%ScI5Wp3CTBc zStMGA$N&_RhZY3mn5(;*q2w07(;XEsl_x5ByJ$$2xE< zL;_WSWz#c5z}hjJg$)q&or%)#40PhB%`{#jm|zKz6J#tnb1BAd;^P}x@_MHG(&GndtXJeRgr`0$C1Ap@ z6||6vxjZvJM*SHJcQLc01FNNkg_g$jvtr=5E#x@;?)l*13ajt+l&JG^-s*6|Y#!c3 zt32r;Dlmtvp{Z=6FrC{&ruj7F;@o`bWnLZgFQ6;myk=>=c}MdPxMz^IoV3M^RvY~s zsjT6lxq_dRE(q1Eqx{3#VE-ed@~)Xg8v)A<@8OQ%Ou36>rx>eNFVK(Nns=M2c{S&);Pgz zr6hj_^@W#paInHV$s!a}x$|mqmH%rdlScWTC|!7t^aHz&Tp%p1TPg#$LTkS~zU^JA z18mOCnw9+Kn9b|@_BoS`#Qo9g2s3!jqfVJ-*D%&0bFDY~*{2=gG+tC^s@PJR-+=GB zcbn%mlG)Zb)RpqAW&7P^A$JzomE?*_hW9YprheB zsYC?A>AP-D@#;X@apn6nByr;TV*8!sqn1){+$A1kxlB$SHtS|;`x!-wWO45~d7>EH zigNWqE3Ha-KG&zZ*Sn|xiqhseqL7=9_H1b-ZFNDcd}O);1d8D6jyWS{BjQb_;m7)( zdzQF3$6TFeqx62hH(rY<3}^NCBw2xG+>_V&IH%;Y7PZBC(PTDb-1?Pjxv!AyC%=6q zV7MKfegD?y^V#$h;4gzb373aGyO#yX>PEOmTx;HHe*T9oN_vJNZd(E=A%y7o482lw z10}QfU8_Tw7wY^v{>k%n(e~53Em^-alQ%!4{K}8t8hk#x+~^wphoj(sP^_&e>Bb`@ zH4`JEMnUV548f>OQ@1x1!262qjr0voVO{2*zUU}v)0BqsSI;MULZyNJD5IDo$UiJ# zfAJcI3~?+v$gSE&|1|CV_x!^Y4p0oMKh5?3VFmc>h^S=oz+_b5Te$r@#~=z^!V*q0 z_OD30GzBBTsYJVx75xiX1AI#T^uQ&e)v5o4VElC``%MO51~$cAx<>zgxA?#%{W;y$ z|Msyn#r1$Rk<=`xd$#}mZe1QO!RPw+?`ZxL#XuBOiXC2^lz+fB{<_1fZ2l6990YK#vAL|+J@BLD*w2p25Waq{8 z?@!2oaOwxR_Flq6xuNo_I%*7+D94xHTbADE8Hri*jfN8iMWTpnnCPS-(olj}UGvF} zz_(8iYuUr_3!vkDW3lH=p9+uv{rRbfJz%r9wwY1^l3trZK5HSdZE=3r-~wSIf&?_# zng4HsE(w%f_#5GoYYtE)k&T1{DT_A+xyx9W7sqAM9%c_f_xSg>X*bun(-pR{k2rMO zsXUIEnw^${hqBJYi*;)h2?@E$z}>)@tfH%nVA}zDLX`kqaW&hqm2qPGQwAPVx zRO-53UQuxXZuW%<7+Cq?-=Co`cumRPgcO{gg5}gA_M-q2VqKkb0GMcT)*qeJ3GN7i z{AqS3pJn-;$V?Y?u4bzyU$eU2;yzcbW(5*sSYo9wsYD(z%Z1%DP&+og$~w4*hT&QZ zpUQm8+5TYry42Wqd$L6J*`zmu?q8k>=_|%KD|G4i3LU|h%pBVhTS?4=Is+{dP2WG0 z(l@xQ$Ng_2;`M(M83>v8I{=f@kD60|=dP(x)fWM>nfshYurZLr#pt#(o)~RVd&Mdk zyfhXo!6d4k*!BFjvBq+=^)}^e7qTb0!(zqYP5Uf3*Sv^CU0oj(+i}#OzGKj=`+`w- zVWBlTdoVs*T2W0N$E{HI7gViyfwo~fGM*Hw; zhv}j7>HQ2zYEBDQjriN`%M?JY@zNcbxAwLMYX@JK3iU!-ee%6mUlnSO_~Iu$uV7f{ zma_{}ha=+B5X|+8FRjbay2%rt~ zk57pAXvN%z#7TF%LGz;}3+;F2m(x|&mIn(hTCKib=}+eEe$`G*>Gr1!JLU>4U3$yj zzcs^CI|6j`5zzq@p1{E(Y0!9imgedEKDA$QQUU&p6({9YZaX@sk9gSA{v?Pq+XKaY zm5z&&D|<#Q-lvH}SB)E?=*{lCQ)c_KGc~s9*MoYIBGlHi8q^*%A9t71zRI8dI6u#s z8gtp5OOxNqpyk*Y*`Q3%Umoc%WPIU5C!{#AKE&mAMEVit?RXFsnf&rF<^I=b+VfCD zFXopK?BW?)4SyGHe9x5rM2xhuykgnaGptqSz;!H}_S!@#`+;-;W3;>oY1FEH&;H#= z;ABvno|rU#KS%N$ZSZ$SI`5?i`)608v;9Bw<7R8yZk5yBFCmcxR&$K)%gi}PqV6|& ziEREhf-5Umq9$2$6tWrY{cd>EWGr++l=5((Gcg&^M=OP56TGIE>4StphSp||DKLWw91LunYJc94W>$hk8fyxwqw{2|!OzSU-(P*86Kz_nkAYtqX zsMkzCdeLW{?Z*OiFs0on@;QmmqKAxca01VK2guA~2ZAr- zff7r%}LLj*0HxS{@_<>;Off9#k!wEPN*!Q*Xnuv^0cdx0`c)W%}+1iDuuqvEWfqs z%dyo-YJ)t*1(c6+3O!QzdkOraF3J^sRF!8_W}-QrOB2^L2`&vsOofb6e-l|q>$5z( zpcUAN^N?`m1{X_ToIvfLenY5l@g7EO{$c+Ud(PLzrX;@t13_{ZyPq8~Rd2dSH%`$z zv$~cU5GZr5&RH@;Rlp4KuqAwUb9 zW8^0-U?lT8XgMF^JLv{WQ|W;8RUu;?xDXJUhYWTK0rC?@UfpzwMg&6!e<#Qkhh0pz z`dvSAoB$f~3Zujo@;qCG8M=T6WDsa8BQD>Z+0GPhHhS&as=9T=zY}xKROlGc(By0B zW#8|6>6a8b8ZD39zaL@$tx}xjx^a^AVz0`FE8e z^K`N7!Ve9JH!sd5D-YhosH8k}MhfeeQn+RYw~cRC^J_EJjq6e#a~?OICYQ9(3Y)|A zZrhOl&S?E63VO1FEb@MpOyFQXO~4ukf7M{_Rpni}2m3$By&~4ny<;S~e zHd0sQD}(>Z1{!m`Q{vG%b*m~b$8`uF2EOXKTvtfz@sc%AEpD|!eh9!rX|?nxk9Cc@ zp4i0#7)z!!pdClWW*2<|Z2=NL6d}%G>#|S8y-x}rap{lOctKXb8JsvDN+ZA&I4UXuOBi$_1gSf z0Muk$l>CdjMhGeGj09lmOq1}boddF8C0UZA1zP6Yjz`2!W4R+qU&u-rAP2!L|ep?vgV&Bw`MZZQScW2hD5z~ii9C!Bg4O%Na z^gXZLUaP3nA?ZM^nq0Ips1lT-=qFpk6k8Eiy-5VMx;CI=Q3~h#fbgjE!CWC+8U18W zI#6LXhDH%0MBT&F`NRHt&-uP2ppQ%P-bmuURliNeYHyZ#bOPaxXEo$>xyY?rgt^E% zJfosRU1S?WlPt2fj7wYkNw^KS*vO>PYKW<2;8n8mTG0imqvXcmC-nu}Iei!F)^UwV zsJPPKjyN_j>E*gcZT(Bhb7R6Ilve~i_OWLzi_M-(3aC5=K-gvh%SFY+w^yzm&+T@} z{bWY1!0Gmr8gE)(2pPdIOG7Wv>QR*;$ zZ+tu3E^ql%3ObPA_~D~2?<(#O^i12IHXYkn7hPbH1ea`Jqek|eLazdxfhrd*@EIvQeZOh?gUoZxEK3>`*oP{MHFE}3#im)K%EIW$CceMy z1wAj|l#Tu+8R3j57V|pFn{%5q;s=sa7)^mKtjCjCHZV9x;-Mh&J2=Y&qC_wN6TPAF zzcABl@vgz5R=6eM(q{sdIn36UG)&x20>Qd#50=fGHiWNXtzFu9(Z*@z(Q{j=S*cGV z-Ml^{_Bf+5PMvds2`uXT%5Zzofh?%RGi?E{W*4{CikSan>C(q zZwCn;(?N0#s~>XV1e@auOxpZe#3^pF0`9yzQg47TVzv7(&mled1dhNwqxcy|h=pDo zxa}qut{wrXGAvU%%;`O}%R)nf7wH-F`xmZ`R5;k?{-RfED8mwJ)3)dIIe503vtMel8KI>0AzV!j7l3c-l}4 z51eeOO~m#MvMa&%cP!IolACeoQ{EY_6Ej-~ z&V5Ri_cwq*+MChoGW*wbOWYN1CjuBqgy{=K@aYd8 zS|WL%3n@Pu}%RGbWrIKnd36%tG4pNs#aPCA%Iyj{p~;c;rhUhS-dz~pr}a(W1W zcwt-v!_hE-PxMOlj)Mtag2HUZSvRRkYMdEJCH0zs#u_nqEIf2CV%mTRZoJ)1lwS%{Uu}mv2!WRy-=e4W?Wpk(fiY4jdH5qad@z%W!(nb9y@}zc4R9+Lm0|OLjK{(_LGM|S zzHP)b)maN0Ni&s`%6mJA%_^cepzRJ6=mrs^OaP7azWoo5LPn$xSKMVnD02jXL9N~4 z*TY4bRBrJcI((VOh85UdN*a=US;H;s}1A z32c`Hg$c?D%H#(rjahB zPVwX|+yH^g>aV)e*W zg-Qe*=Xl6Al){}cs&0`b5&ogpd3cogBw-H6-6ZtQL>~4@O9sLqrap3`gQT0r!0@&j zo)`MOtfqDR#JA7;sVzDBzFpHK)lt-H)AJfG=$?g-lO1N7)|gTJ?SwrCL;EccLJUvw zIoOY6a^}yP(Eu#JCd$a=0G*XITgWtI-~%xy#S1WlCS8bb`0+*1CaPR2JCuB9n0RwW zvzNdfn@5ri$^>EtE&iZ#K{(-9rsm_xg4caQ%F#p0&1W%rgg7st1A|^PS$Ys>y2_3? zOxfp$%Xld}Mrjw$HMre)j(_eMAmjbaS zLN>WvKZKzm#$qyiC>bt2Sr&8xUV(WaGxTy}Xff-2F-*l`V@Ym`Z{X^oE7lYE>EKI=RfM?%nofz(%RZvXX@E|U;YJZp$04>JU%ry+?a!;LV?m?Kms z64)EmigiH;yuwwN7*7wHF&5l_FaY6jx*56?7X-XRF;%vJb)6X3s-7m8R#tM4fk-!p z^tjUKdxsoOC!V~tEocmyLfIL3i!ME6gGtZDj2lcUe!;szEqPbQ)hr`T6I8~}JwdcF{#(4iS4>h*I--GW)E5lk}``;^To(L3nXkez-Mm z0&3&(f$eE}8WX|N62J6o{4k{Y(^Y35^18nPrcN&jOhE|sKl65vvGS-<5V9c+p}G3V zxC|c!cg3U@y?06!e+IE88~Gy97f)D>7+cptWQu{WTu!$d#Vp2trkXF`?#?~R6+%wR zZTMDR)S4#MV6+z5oED8!%!CHY67d+3CufW>?;_!>eLC!oD=Xh2{tnWsY24tl21|u@ zvp`T_SF+F_RCc_c()1_9QXRNaN~T#d`SiPw=(|iUCGhNdxw2ql9Lj z0(`S=A~HV6IjrGSSSLK}0xRc{y`0Yrj|e@)QAk5H)(~=p(~hLy6=>Z6O7^y^&^g*Z zo7lT#@)I?q1C{;aY>B#s)R)C2LG0&}iBT&c^q%J6oF1kt^TXwCMREC7&{j`s`9g6) zm0&eqF7Fl2GA#*zhe(~JU zMy`ys*6!6Ac+TaT@F~7{UTxj~k(tG$?hKChLu_g~Y8JK~f32~i6#~<@Nv{k z=`lc(A~B(?bl-q_1XoF9h*_>KE((sYshjTOslbNWI2vOQ2&e*ubN!v%1;=l|q@{Lu zIU4Y(;r1sO!u*02Bnqf64gFIw35hr=ArZau5`fAI#%8TP1Ywj=K&4=!B94#25++L)Xs0085=9cbfmw8DflxGaTx` zB!Odsg>Ei*I-!Vh3c+`&3Y>A^)J_BZDAV@A(Ev4Rc&C?Vu=EYDP3*b^MNzh|t>vB;}Z&S{0k~W0$Dwdg_(*c(q%% zpLrVG`(zO)VNshBoQb}Z)2H-@l^c12f+>4wu87Q^^gPkIQ_$N~oy#tu+#k-*@*XIc zHTY!$BJGs`1yLBM)U(3XLGi@5fKk@I{>kflCaR=;0q=?7a@OWwt*2Ff7b`jI zd7Z@F*!KI9H(Itd7tY$}YxI@78+~m9Fnz?jlJ5TgaCznhksdkR?P zH9cXu5`VXZC=H_V|Hz6y&RfGM-v?GE_Gj%05XT>+AT@|thC!lB3tD@kZM;Xfq31K1 z_CwNStwO4ZKu9cv0jDb$n+=D?Ru_*&MqaWZablLJfRcn9t8nCnAR4Q}|yG#;>j_B~G3ju|@2hrmCYM$qn|Co}wLomD- zfN_$oe}~qYl%p%pmDcq-flV_E4y0k{J7x%`IU-jT20^s?w|VCaY7PzX9jP`mmt#}! zzp-0Ncxa`g_nj~0RP``{mpA<*lDwdp<6I32ytb1YDwep%a+gB`k;ym>zF2kaV@xc^ zj0Z{C{GoH0hRo$vcSO5=-ht0!lnEAV+A2^Pf{}l+TZwHn$h8@&9)jKQ1X(hJ4S50Z zY}(z7HknE?rw1P@W&4`rZpnMLZBq53%59|3PftbyRMvBIX{>JC{C9TFfeASbX;JCw zaXOk7Wso)@O2$k%Q@$jq7YL~+Jmd(mCh4S0umDX`0j)BJtFoTVo&4;wOyTga)sW{v z>!^L_8-n!@q3XP>^VA-5^tyu6>?p>KAO0@|Xxtr$7fs~$l-)oc<+U1}L>Q6@AB?jZ zf~EXkUuJ_i3@qr^j;B=v|M0v2wj(Gr0n}yW=hT0<2mWSw zpe`#Wb^jlhv4=~P(YoLK>mQ0E0o0djQ7t`B|J}Ss_;3jW8_Pe4NdHp&230Eo)TREe z;KaXiT7be-3Eqem*yMhYR5I(qR5-E3_{_4qP%ttkQ_MqygxmOCjCzK+I$(cF+ibpd z;^x+P@Hv*Z5aJ})3AF8rx%Wer+r+@kw)b7nTTi}vB#Zh@7*5yvb|4m<<44}_J zGnl$q{5CLiN|~t~ypK6J>tzObDKf;}2E5qxt^sEW0=NP4c&_v}*rTgrz0`kux&ETK z|N2=^f>xT2q+4odGhOA8ogo#lFc|~XsHrAD)_XI#FVSj|UTc>$ki>BzX@NPpJMSS4 zr+&-j>RDg?c0#v2I#SeLz7c@`2P27C?Fp-*Un7GjpAM=g!k5FLP&82|L|i-Pua!f? zWVGH~eA;-6ULGv(5qV{LRVGsvkN&Gi|r8dJo~30nYQ<07OcvcR7% zkr@4V61Se9-hun=632MbV`DY<-5D<8fuy9DzxZ5q&|4~++)H8s{#g!tYIFi7$7 zEd6O!)@x%tt*3jyu%nmdyDGzIylkp9$VYB?Bly6+8Z>>=eo^5%o{IIL^~1wjpeG<8 zc(A%{{VJ)_F4F4HQzScq=X}XC4f5r9uc!)Gc+^u*((iqz)0ofyRg3`VN10SdlJ7_C z&Q@Ed6CerO%{+d^`8x64)p1uG!SC;K28`GYtF@* zvm(vN*VWi_u|CiG_2QPwNHr)~1f; zYQwcZ`#QJ3{K#jaI9+cOrS|fW5QR=0HQ>UgUfeT)hux$W)^M^xU;&%_VjwC0_kr$z zt`8b0lU!(Ip`Ek#RoH>$c-yD1U!j)*Xa$zMlqcG<;o66_VXx~VuY@qgo30JOB~~O& z^3B-0;_Q9eMcS`2PZ-0(|K~qEKk#V%n0=pdqGA9h9M!KB+f;;?!k?< zN_6j3>^G}Zd1)@$&)&NZfLYcIKcsX+k1PcrT?AsGFXW%H70|$RZn`c3KJoX{FpHFb zziAmP!`I+;K=G*+~0J)zBwa z<`1MvYH7{guZ#4RNgf+AG`YnCa#69cLf4NY!o?<&(7RfPUr*k87fU~=o4oGQdWQ{z zl*B#mWJO(0QV$w|aOdl@ijYugmyH3-b!@eFqLKVcJ>j_uID_?z-^d)LJ^4D__og{% z{(tVt7R1XD;)P^Al$C!xYjkwNS%ed4H`lD-veuWAYc!$h<}Lvqm41w3Uh*#K1Hbix ztf+ry)4PL)dXdZZ@SMt5q%%$eJFh%dNT*YqOkdnf9O2eMLj`j^nJ)@X$u1vi|1 zv`FJOE|ereke%$Ab_7%FKFQOLT&CFfDY|j|d2Zz(QM@_}FhE+RYFqLOpSeBUTa6^| z7AHR*n-_5Xkk~OHB}wiWVy-uOO_wEb0FIng5ap$%CE*GR<>>X^W9HD7f?9&cXdTIT zYA<%H)krr`e^g-lobz+yf&X+%0ooT{PWph7sGOgF0|)-+jzjn8KL)Yl31SZWLMiZp z_|4Q$bAzSSv3zC*10hE78H+muLyz?#y+{}gA+>f5>sFzgHd8PcR#g#om<)X?WV4Oi z!9efM-Tq+2-1Wjyn{p|z^~yr~DEBa}?kC_vzP_UJaEJ#>{LL=*m6u)iopxhvgD4dMpGh>s zsEaZkF=72L6u4ey(Q$Ryu0fRc!91rCS>Jj*O`Xr#ZoJ?1*;dBq>95|W+utI?@u~Tb zGuKD6rMlC7jW;Cc8(j0LM4Y5KvAb)n;C_oJgQx&lVM2v z=`B9zDnQR>nL6_8INJ>F<{FD$d;ywwlcijM{7EBGwcJO-IDb~eZ97pJeBdjNYHnfS zH)+9v0^_;gl8m7iV{w<^VH!!|oV2v@O>=q{lM$KJWzFNvmB^)aWHoHnw;L(STofap zb{SW+Hq2w`%CaxTgtAk@8aw#OBAhwf__de`eSZ>jRIHtvZw4K$ZtLUeJkuXv-@?Yc z9nQO5MNEJiE-a5BKbXb$KXX}a{oi-6j56>?2NGDHt3;7-eRQ??q|p>`?|~gjK6x>m{e|`a7V!yxkZ#0AZhZmK* zfN>0XM<410*Nu5zeuDwUYns4`_swt9j1~Z5ReZnyGbd!c%w%zufS8yWIEFupi1OSD zC%gTv%A?%h(jK6}cw;jaOG9Rm4ZRrY<4 z%*KR%H|i>T`HpClS9)bWVK*FN%JMKR6E|v!@ttUHIao&b-VI74S~K0XvC*lo-;I!D z7dzcpdy2P~WbjFe#3;}HD|Q5U^b=G1E2hV368Xhjf1bNoonb@8G%^$Yy&d|OLVh`97Rwxon;%D1g*0Jg4zk@3koJ~FE0XlUJh^m zXuX<-2r)1awmp^tR2)ZuWP_<8i;s`5hmw(SRss=hxk1keXG1a>gCc~tA zW2nD6F1BhFYJY#kWqN(KhvL}G$p^XsN+Pw}RcCAMIX#ubWqwpG(@IVjy?$=&wMNW{ zkdbc&+J{zwc7b;Gt;M!BTylQ-2LPry^w<98=3Cc&ll!X_0us1=gcQ@<_|?$#%7tv>rJ zAn9hb^kjSaIy$mW9540aT(-RK4z>w3wfBMDOQ=}p7 z)K_+%i#2^8sFiq+$J&Lx0a~nK!1~SjgeVwW{6#yO)I>YM7V015Elo-B@{FZq5gNOs zP1C*3nu$`VdVxQ>g=b!ao>mXu6^-TRdC;OO#mJK7NdM0)uuzsAMIDzo_ib;f`bJMa zPzb3gQg;qhkFuxRuT|f)78W96QHukVL5ncT>aOX@oEf*93uhV1;AqV8;fYBH=OO)i z?#3ihSF7t^DHAl(1wM5S^Fty=t-cKscE2yfF|IX?=ajcwb_1xdXmTbxaE(6%?O&U2 z#MRwT$%<~$-ULbwoY7i$Tw(bIR&3qFoF}BdguU$Iw?f=`IHh^7cEBsF_ogZ8lvbh^ z0HcM0I;QkA=`kzgcokxDFMW6|?a87+RMN)*0Q@;mpXh^T z8rato#1qR<%BP@g3?+#;B4N)l9rNg{&BLDJ{$32~oy9mReQPxc2e420=tCzE+55dTK10oM?WiDQC<1Z?aFpn- zctEl1Fw+CQzY63P2^ed6Muu$i0!kkNVRGXSkmV0f#XziVTKNxv;5YgtXlpePiiA~x zOQQp_v72wK!Fo~c)(()|4Z%lzWn)19EA#RCumDdw$ngeH3aL-+#!B6>nfRS19R>%! zCfc4Ve8rhCdC+#xP3w0OZ$mrte%8LO-{kIy^d*|{>Vn_7QJT0{C02CUTT2tPICwa% ze;m*!J7Xwj^P9;P&p(K0Mz`{f@^rIT)%*Q9J$Pu)85|vd5@?gmEWo@7z&>;<90+gdl`QfTv)%{(i<=`sNb{tF4 zswo9ifOdAG3P5N*e@#DqDp!W;>`{wF1q3PD=(byc7u=ILUklmGcydG0<_sX|e6<9| zRGX4A2JKiDBn;00IDNPUzSxuJub6hnPjxif*I3*hBO>M`K`k^^a>((W}oan~=%2-mrMf++fmF_^$foo4C zF~0ayZ}0HTCspBWah9D}+N85?RaN@l41XaLDE57=PrBM%&8x zlX?I(L+nV_3H5^PDitsNB>N&3j=v*22M}0?7AfdA`Bpdk$}+ z8pRT~D1T_FzW8WpA5iZ{i{Zm!vgO(lBcawEB*dj(-6vi)TWv#x5Z!VgWnl6K$gg!V z>if}lT1muQcU8l)Seo@q$Xhj$?E9ds4J68f#hVSQQ#X|VLT`Ta1Wi>r)7-@&_agNo z^#ppq@YJ3{Y?@?BT+zD5-l5Na$wH>N9j&_jbHK1t${DTwemz^>dQU- zncvysFH&;XVL+tfm#=+sxET=Pm;H+Dq@dkQvM6x<1sFN@E`Q$l4xkw&o{~2`Q{Xzj z1mOI`C-yVryt+;9B|t>E)cuo<6U(tLJjqsz_bGR*^Lc+#BwSTCx{eDXHf3&0Zcobs z1Z}h*ooo&Ue(wSvWpN;5`vgWQJi;`V;+J3rtX1n(*lz1Lz$-pv?dNr}ITu0WM_)bd z9d`h%4g1%{JTf$RMJL6&6`fRLq>mF=B|m4H7B7G1Y4OHRv*5`3WU=UfUGgkcBDOUz zZIq32^78`kDfFb^=avo74E(HH$yH6^c>)H^G-t+=P}JWDE8X;V2I!%U^{z;BhM8-d zo<4c|v%QyzeMM2hY>WlZ`g910yROFaqF*#_@lLB<$wH*v1U5T;fH`}BMonY298c9it#BPurXR1C!Q*YrsB zZcG*D9hq0_@*MW^TWZ^_{@@e2pB~Tn>{Im>!%l~Y&qk)lkhK_%J%*=7!B0ymmKl}} zV|U{VKw^?ssm;b04rm&U!9B@>vmP9CX>tXOJzapLRia~LY5Iet4ndE&EyA$Vn)pIZ zay!WKNT!XED{GWu-SG;0!_?sx>OBY0g*3!S>J%^^vC<*r-ZGCAo}<1EM<1)*X`7f_ z+U#tpd7`_urghJ??6xD=Z0oc~_ohAN@FAKHaE^BG7tEL0i zMn%^RN58jy8m%~V&QddJUTMCmyw!vus6(yu!+gEl!LahhN=wy65#V(@%UD}+UkvrW z3oB&I67VDu>)i(G$<=6$Cg4$+bNi>7qc88hmlwK4w0|wUhG9?Bz^rXAN@Xd0z+oJW zQ^ynbk7rzVNhW7ESgte_Uc79*Eme)Ylh%W8+(_b{?Kb}22&VSofO{eCNqnCLdzDve z3JYu80}CoH=FK8bn9u7_{o@P)%#)Pa)b@rv@zIde^x^EkoYq0wY)BLo%i(F>;Dy}zl3TaQF3a7A*$(A&N8_|Tc=FMY0d zbt+*Yy!FIN`|vu<8CdhuFI1oV+w`RL@UAuvg;J#~+piV;hRRNP(M&i|xLo-a%W9m<_ z5}wA0fB9*!2Vt|0_O39E=g4*6H>~RJj6mgeKtX zwx8Jrtl}eZ8(4#ACQaAfR%Z5#yKr^Kq~5}bWUvmG&@u7?pCznWv#Qnia}@Lq{@~k> z*{)dRZtFz;eAMDdD}O8q&$hYL*XoRB-z1I*h}aE!Z|Rk~_T6RBrIItn+vMRlyuJU1%Xa4dM5>q{JkW;`(=J5O2vtnADOiK|T3E&t@h($MqZ;sQM*!X^nLF)D-;WAdhc>T{#*J^Oen;X+tFK%s{9g^XDD!oi2-aFIRcrFXq!}$YW`b_Dz1Du#3e0Rn`611KWyEEEB>Wv|59MP~ z9LFir*U+{rN?B3*_typ{Mkgz7c%zt(#Z1KuQFqGR*RV#$_tz>1mLNySGlIg1!}Ud4 zGB8AE5rru`@2V80z(VJ~5{s0&L&Siyzn3?K z?x)kivC+?JQrBoSVO#HzM%A#ogIBa#EctqS^*qdgM{3!B)bXkFxM3{1tZ5(DU9gA0 z=+LQfy}EUO?lN59_?vQKsifTooxDEu_v|$a1HrBe*=6jSsUKv!wQCCN^ak(MGhY)R zXJAZNQmv~Lp2CIcR=LuB@6#C*%h|VJNLY-^1UhMM`F+HDc1TsTNYDO@_RbCK^gpXu zfanEP;o~~n(r&(cAG)vCd-~&PUVnMy3~3*t7$r0GfFQ#5SA>DD_1SQ$olx#x#$1NM z30zM$Uj$8the=`IxqzSZ-ndcm>`?fp^ckS6$(XiBZAB0;!k&>I1=gj6r5e@p1{vJ) z@(>%lz}JZS;C`4Pq{;Ih-$Iq3SFC@2k__FV{X$v(a>`LYIXkNHjRM0`M>iA+6#JyP z+MIG|cbNd9Ha}F$tl2bIdMHKmIM(#`9Xgulj$Q}|g&uS~C(8A+-uavJzJ+)@{5yL5 zgbiX2B$O3Lax8X9xm{%Dw5~AqAsEtOdUtx-HgWIDYjtOX>UT!V2yD=yn1JjNIN?iA zvpjXU1}*5{9ghJPfq{*dPe9oNE&MXvOGwbrMDhZTTF2CC(MNmiYDUw>*^shy8`Z$S zG#q}7P1BU>_=`fPU2$zbJ&mg$bN9`G=)J!zO{z7nE8HxGe|+cu?%*Ew znq%KSKhM8$K}A$$Ooxc<-mbV)J0{Gf%(ly zkOaTQfks1(=a#&lf17i3+GLsI8pXOumed3)1hf3=fD-Rh|6tU5A7fR1#Ob3SqT`c` zrO@~QnvN^halde9+U-lq!kBtt1grxLZRZp;(D=N;zD=$I>Gi}qYsS%0EZ^X2eKy}? zUQlZ;Y2eE`dk~kn3BKo-15RdVVhei41(k6V(Fqb^typW++mCtJuXC=r*u8l1{v&sj zzM=g`Mo#G{p*tEQxfmus$I*xbxQEg+8&s4^gWTcwc0AgnpFj-CW%_z@1y zpfp=pJycRLtANKif}jWFx)QRITsI%Kyg$KWXj}FyYodw3*qs-43G8Dy;-xa40`iX4 z$eol!q8h_NQEj~L5Eh_vR#zaIZp2*h^_;*{+HY7`)m!$Ndn62;o%;~uNXhbbUk5nZ zK2d}lLI~HL=gR`eSd-BMvgSXBmq+ZiR71rg0?KLM%fyNg952|cST1$=txs)Th+MuO<|nUp3laZ{ z6ZC|0`8MQPHI0=2$aRJw*6Cza4W&wgZ1nG}VFKcq8KaV7F?&L~v`lNQ zIR9C{48b9q(f;iM#G_8IS7KSWpmiE8b=_xQ)e)<>5G$6xxDfLfCeJtsb)x@gG%4*JW9(1(;Yx2hDGL;BDHPdq zd5xCm48jWe2nt$u47fJPC6>0QrkiRPg9PJke{kWohClS@829X{_(NVIX#JaSbVEeK zN##M9kWGYE@tC&KWL7qo(W6L$X@g&&Fy}Gv1uJ0vWG$1jJEt$ zj#WW;DRA@UIMJ!X6oWV|P_m3;MD`2CEaRz7%MyN80j7?AH%E6LW+%%G#xKkT1&GO# zOhgh3!8UFzsi##=S#Zr@E%hv?B~h`-3y)&o$i|%K9k%fHAjKawmY9^nh}=qhS*hmI zoP5uqFd0}6RbXS^hb;q8e&1{<74=*3%UA;gupND>OnEn%9IY9y>8TNHP1+Z6^dZTk zg2Pp-J|wbAUH6tK7`b_lPEv+Sp-*gI1{%+BLtyW7JS;ri@(4KT*eEO@w7NVy$bN@P z554Oln}w*~sf2 zAxYhMwBCjCEF!)>fY*Ztnks!>snO{Om9=ww5h?!%dQP`5l^AkFUv27Uzx&1Hrxaw* z>G{%Kw=0T$`MG+zE7`LGA}ARQ4>kr!%dT|_71^ADfO}YAWHsWbGXt9Z)j&$dQ@$Ud6l^wY%{Atj*SPM4UDVaDcby{Tblw~m%RO1IOXX+e zz0W?UAXkm`#E?@ZR|}=ag%_wRw=aA1s7Gv^bN^^eAdLZ$Ppj${6{VIoh#Bu3ZLa85M8HG{EVCin zG-JCwT=6@2LZFEFHz3p$@)^B9Pb{+Zn6@zczq+c>_Tkj3sD`5pISz3LT4HuVI-1V; z@uln@wV=K$f&AFT%2r=1fnp5v^8?7@?BgX<6|PwaOYO~ley>3lG$K zJD)M98wSpO&FUQpeAg+bQl0qa5_X<_spjwUG=rV@nnFD!vd2u4B?iTKscyO(r!yGC zmp+i{179+@4n#Uu-Oq8-Lsstue&_>iL!{GMf!@_A0ws;#Dee*5 zX~9+v;hbBjl`rkDmR{TnyaSc@V{tx*v~e`{n&!8L8Gm01RFn1H&)_SLlHe6@MMcx! z?cVg(OPlfvFe~2G_A?L9B5cBu22C!-*8BYJzhEh^D=~mrdN>9`*TADB@EBn{`^|^o z>e@beLJ8Qn^sRapmJ0)mvo2yA`TSW!I{{Wfckw$YgwdGNStPjUWA=S?p1xDxFb5G` z#7I!}nI=b+R7R|SJ|Dlo0Up&oxb&tC{(Z?B>fcy}WzgTaEXZvO2Pk(XB)Ca^0~}Hp z5$eD%ni>ld)l8o*wg>gbGI)B5-fMYQ8&8W?Wl>-N^FTT3U}rC#9LdVCz=YRpPl`8G zZGZv+uanF`-XRzcF=N;5q`nz(uygSE1p0eNVjbs?L${D+_P#(e+QZfKgvnyk)QxIg zO^Mzc@(BE6`T)2;YB5(fbcB2%OLpQDmsv z2yXol3OhHFTN(=QX{w%pCa=^I23JZ{U7YWKfZz!CH?swoTYub}{2I7zrlAtw|9>VG z{u^= zl|6x-U&Pb6SZ7n&1ubF4|6%$+2mMXkB>u_NH#RJlM&OOIN@1}P-i0^I0g3?vGaaGk!~?H+IMwn93RxW(8Jxn-VD2u#B`x-7_eb-0( zO{UP-)^Ju3Xo(v|g#qq{23u1QFvrc9j)28ZWHM_JV{fLM#EyXdE6VJk-SMvP=lx>v zGe|{*@yCix-f#?H@fPVvUa@~-FpXibm=G2X6D|%&=j6+jKp6CT40g6@T&UQD(H`meY!1gW(7l(!mpyQ~*14ZZ zpzpBQ+&dg~PPi<86e^TZhJIZl(CLwquIbIy?zXlz*j*&1q!iE6(bny-Xf;W_5#`tQ ztukMc1@daOFA|yck{F5=6h3W@=DU4YB98%40O6kB&3>y@HdL9;D0XyqrcQ5g{+sLL z?J8+Q1&sUnZ6ZdCXFqjv^FE1#TF*kN0IgLEE*)?Arv*T(4gsdtdt~%I@FYDljBmn7@A*N#mdZJP%QU zrt{($Iz19m%F{&yFbjfECMcwh0oRhrEWLrg;WvkbZl|q6JBDAgbtIGN+763OKZ=b5 z<9_L+TlT0dLgbAcF1Lx7hJ#xL^f?lPc^6Og;a~9)u>c=BDG1h48XlXK5`esDje0|# zB`$UcDLz~~-j=3%ucmG0*8v;_cGSy6iez6h&`V}#71Yn@< zN~O}=ho!}47Kc!?eb54MBP0pI5I*6nMGIaN$2((mz)*ja2TTj!Z+UsyY4zb$OJfwv9FB%?vzW29KHuKmCEac0WklIUWLL7cFGQ(Q4VhklB=W(| zL?{}FIS!hf8U%*%sw`#&``ho~!wo$-*jfR*J9>&u-e(|LL)35?Z^iy}VY`%CsbLA} zmr$+QF~eD*Y$=f%t6hv$>+3#Ij^B=tzMdD@y`OVt^X?yxD!odwbElK}{KgA!^etl` zJ4LrYN^gCmZnHEsJQkVw7hC8+Hp6L9^n~zeg4b~lz9!TcFn`Z~_kr6VvF|%cTO*-M z*$1fk-ECLml$OKS>?;|w3QW-&JJZz>BsrgeP}>~51vhmX6v6CL)%mBFm__Y4*0tXB z9J#?AI_D!tBe%QElcx#2!Ku%+>J8w1!c7Hdy`Q1$V0{w8F(+#cNx z`v!CU=~J)zVZ;&@V%7-3wELivZR$tE)tL^r+7fc!q7%ew6kP*kmC^wp`HSGCb z=4h6x*6UU#)n>^BnEvdbmJ^Aye|EOhy_njsFkg1|BGXxJ=CY+~nYY;)C=i8m&V=m; z*N(7cb2y1%cbZ7Tsa!fPwb4alioceSjfzZw`wX69`LA~_3bA4oBdJ1f>&CdER9GV1MtSQz!F zP~)DHY7bzp3V#Vj{kz!$QN%G+Qc?G>+>-PCGTdU7II0ACgD~Sc>PTRa`uBIUAXs#} zlG038U;-Q4U`7NWHR!Qc39uBw;rWws=8&O zi%hsru+aWqKy&1w`l9zBw!--ktv-im@_y3`-yeAd$CBEzF5{aYk@%O-b-%qQ3A zuX`cF4oVjWtUQx7^X{$^lxwuZ{{Y*ZObEjNG!25Md5qh`K^o&G_ApD=

x3TTPm?C-{+H*y{S)RncKi4DOcPl~I_MDe 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

- - -
    - - -
    -
    -
    -
    -

    Introduction

    -

    Welcome to the Bitpaper API!

    - -

    The following guide explain ways how you can create and manage papers -programmatically, using a REST API, and how to integrate -Bitpaper in your website.

    - -

    You can view code examples in the dark area to the right.

    - -

    You can get full access to our REST API by subscribing to the 'Enterprise/API' -plan on our Pricing page

    -

    Usage

    -

    The Bitpaper API is organized around REST.

    - -

    It uses predictable resource-oriented URLs, accepts -JSON-encoded request bodies, returns -JSON-encoded responses and uses -standard HTTP response codes, -authentication and verbs.

    - -
      -
    • All requests must be made via HTTPS.
    • -
    • Requests which require a request body use JSON as the request body format, -therefore they must include a Content-Type: application/json header.
    • -
    - -

    API versioning follows the Semantic Versioning -guidelines.

    -

    Rate Limiting

    -

    The Bitpaper API employs a rate limiter -to guard against bursts of incoming traffic in order to maximise its stability. -Users who send too many requests in quick succession may see error responses -that show up as HTTP status code 429.

    - -

    All requests to the Bitpaper API are limited to 600 requests per hour.

    - -

    Contact us if you need to increase -this limit.

    -

    Authentication

    # An example of an authorized API call
    -curl "<api-endpoint-here>" \
    -  -H "Authorization: Bearer <my-secret-api-token>"
    -
    -
    -

    Make sure to replace <my-secret-api-token> with your actual API token.

    -
    - -

    Bitpaper uses API tokens to allow access to the API.

    - -

    You can view your API token in your Bitpaper -account.

    - -

    Bitpaper requires your API token included in all API requests in a header that -looks like this:

    - -

    Authorization: Bearer <my-secret-api-token>

    - - -

    Test Mode

    -

    The Bitpaper API allows simulating requests using your test API token so you -can test the API without incurring paper creation charges.

    - -

    Bitpaper provides you with a set of 2 API tokens, -found here:

    - -
      -
    • Production API token: Creates functioning papers and charges them to your -account. You should use this in your production/live app.
    • -
    • Test API token: Creates non-functioning papers which are not charged. -You should use this token to test API requests.
    • -
    - - -

    Papers

    -

    Papers are the primary resource in Bitpaper.

    - -

    A Paper is a collaborative whiteboard instance accessible via a unique -and permanent URL.

    - -

    Creating a paper programatically will return URLs that users can visit to -join and collaborate on a whiteboard instance.

    - -

    A paper (i.e URL) can have up to a maximum of 100 individual pages. -Pages can be created and switched manually using the page toolbar on the -top-right of a paper.

    -

    API Papers

    -

    By default API created papers have the full set of whiteboard tools and -functionality including audio/video calls and screensharing.

    - -

    You can control whether users have access to the paid audio/video calls and -screensharing features using the Calls toggle in your -Call Settings.

    - -

    API created Bitpapers do not display any references to the Bitpaper brand such -as our logo or brand name.

    - -

    To mask the URL you will need to follow the -Whitelabelling guide below.

    -

    Create a Paper

    curl "https://api.bitpaper.io/public/api/v1/paper" \
    --X POST \
    --H "Content-Type: application/json" \
    --H "Authorization: Bearer <my-secret-api-token>" \
    ---data '{"name":"Maths"}'
    -
    -
    -

    Returns JSON structured like this:

    -
    -
    {
    -  "id_saved_paper": "ddc95912-2a81-a25e-b589-8de1d472f6e8",
    -  "name": "Maths",
    -  "created_at": "2021-01-01T01:00:00.000Z",
    -  "is_test_paper": false,
    -  "urls": {
    -    "admin": "https://bitpaper.io/go/Maths/xdXfoI?access-token=eyJhbGciO",
    -    "guest": "https://bitpaper.io/go/Maths/xdXfoI?access-token=iJIUzI9.e"
    -  }
    -}
    -
    -

    Creates a paper and returns the paper information and URLs which can be used -to access the paper.

    - -

    Visiting any of the URLs provided in the response would take you directly to -the created paper.

    -

    HTTP Request

    -

    POST https://api.bitpaper.io/public/api/v1/paper

    -

    Body Parameters

    - - - - - - - - - - - - -
    ParameterTypeDescription
    nameString: (URL-safe, between 4-64 chars)A name for the paper. Does not have to be unique.
    -

    Response

    -

    Responds with HTTP 201 if successful.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription
    id_saved_paperString: (36 chars)
    nameString: (URL-safe, between 4-64 chars)
    is_test_paperBoolean: true if paper was created using test API token
    created_atString: Timestamp of paper creation
    urlsObject: Contains the URLs for accessing the papers
    urls.adminBoolean: URL which accesses the paper as an administrator/owner
    urls.guestBoolean: URL which accesses the paper as a guest
    - - -

    Access a Paper

    -

    Created papers contain 2 URLs that can be used to join them, one for -administrators and another one for guests.

    - -
      -
    • Users who join the administrator URL will have full whiteboard -privileges.
    • -
    • Users who join the guest URL will have restricted whiteboard privileges.
    • -
    - -

    A paper can have more than 1 administrator or guest. If you redirect -2 users using either the url.admin or url.guest both would have the same -whiteboard privileges.

    - - -

    Give names to your users

    -

    Papers include features which display the name of the user. -For example the chat function displays the name of each user posting a message.

    - -

    To give a name to the user simply attach a user_name=<name> URL query -parameter to the URL like so:

    - -

    https://bitpaper.io/go/Hello%20World/xdXfoI?access-token=foo&user_name=John%20Doe

    -

    Delete a Paper

    curl "https://api.bitpaper.io/public/api/v1/paper/ddc95912-2a81-a25e-b589-8de1d472f6e8" \
    -  -X DELETE \
    -  -H "Authorization: Bearer <my-secret-api-token>"
    -
    -
    -

    Responds with HTTP 204 if successful or an HTTP error otherwise.

    -
    - -

    Deletes a specific paper. The content of the paper is permanently deleted and -it's URL is made permanently inaccessible.

    -

    HTTP Request

    -

    DELETE https://api.bitpaper.io/public/api/v1/paper/<id_saved_paper>

    -

    URL Parameters

    - - - - - - - - - - -
    ParameterDescription
    id_saved_paperString: The id_saved_paper of the paper to delete
    -

    Response

    -

    Responds with HTTP 204 if successful.

    -

    Whitelabelling

    -

    Bitpaper allows embedding the whiteboard in your website, under your own domain -and without any reference to the Bitpaper brand.

    - -

    This allows a seamless UX for your users without any hints of using an external, -third-party whiteboard.

    -

    Use your own domain

    <!--
    -  Embed this in your site on URL:
    -  https://whiteboard.yourdomain.com/Maths/xdXfoI
    - -->
    -<iframe
    -  src="https://bitpaper.io/go/Maths/xdXfoI?access-token=eyJhbGciO&user_name=John%20Doe"
    -  allow="camera; microphone; display-capture; clipboard-read; clipboard-write;"
    -  style="
    -    position: fixed;
    -    top: 0px;
    -    bottom: 0px;
    -    right: 0px;
    -    width: 100%;
    -    border: none;
    -    margin: 0;
    -    padding: 0;
    -    overflow: hidden;
    -    z-index: 999999;
    -    height: 100%;
    -  ">
    -</iframe>
    -
    -

    Bitpaper can be embedded into your website using an <iframe>. -This allows you to display papers to your users in a webpage that is rendered -on your own domain.

    - -

    The src of the iframe can be set to either of the URLs returned in your -created paper.

    -

    Status Codes

    -

    The Bitpaper API uses the following HTTP status codes:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CodeMeaning
    200OK - Your request has succeeded and has response data.
    201Created - Your request has succeeded and has led to the creation of the resource.
    400No Content - Your request has succeeded and has no response data.
    400Bad Request - Your request is not formatted correctly (i.e has validation errors).
    401Unauthorised - The authorisation header is not formatted correctly or the API token is invalid or revoked.
    403Forbidden - Your subscription is not active or doesn't have sufficient privileges to perform the request.
    404Not Found - The specified entity could not be found.
    405Method Not Allowed - You tried to access an entity with an invalid method.
    406Not Acceptable - You requested a format that isn't JSON.
    410Gone - The entity requested has been removed from our servers.
    429Too Many Requests - You're issuing too many requests. Slow down!
    500Internal Server Error - We had a problem with our server. Try again later.
    503Service Unavailable - We're temporarily offline for maintenance. Check Bitpaper Status for more info or try again later.
    -

    Changelog

    v1.0.0

    -

    August 20 2021

    - -
      -
    • Initial release
    • -
    - -
    -
    -
    -
    - - diff --git a/build/javascripts/all-a9fde460.js b/build/javascripts/all-a9fde460.js deleted file mode 100644 index deb96ef..0000000 --- a/build/javascripts/all-a9fde460.js +++ /dev/null @@ -1,120 +0,0 @@ -function copyToClipboard(e){const t=document.createElement("textarea");t.value=e.textContent.replace(/\n$/,""),document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}function setupCodeCopy(){$("pre.highlight").prepend('
    Copy to Clipboard
    '),$(".copy-clipboard").on("click",function(){copyToClipboard(this.parentNode.children[1])})}function adjustLanguageSelectorWidth(){const e=$(".dark-box > .lang-selector");e.width(e.parent().width())}!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){if(this.threshold)return!1;this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY])},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,l=u.nodeName,c="A"===l,f=window.navigator.standalone&&c&&e.target.getAttribute("href");if(s.time=t,s.x=r,s.y=i,(!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))return!1;f&&(window.location=u.getAttribute("href")),u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t,n){n=n||we;var r,i,o=n.createElement("script");if(o.text=e,t)for(r in Te)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function r(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?pe[he.call(e)]||"object":typeof e}function i(e){var t=!!e&&"length"in e&&e.length,n=r(e);return!xe(e)&&!be(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function o(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function s(e,t,n){return xe(t)?Ce.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?Ce.grep(e,function(e){return e===t!==n}):"string"!=typeof t?Ce.grep(e,function(e){return de.call(t,e)>-1!==n}):Ce.filter(t,e,n)}function a(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function u(e){var t={};return Ce.each(e.match(Pe)||[],function(e,n){t[n]=!0}),t}function l(e){return e}function c(e){throw e}function f(e,t,n,r){var i;try{e&&xe(i=e.promise)?i.call(e).done(t).fail(n):e&&xe(i=e.then)?i.call(e,t,n):t.apply(undefined,[e].slice(r))}catch(e){n.apply(undefined,[e])}}function d(){we.removeEventListener("DOMContentLoaded",d),e.removeEventListener("load",d),Ce.ready()}function p(e,t){return t.toUpperCase()}function h(e){return e.replace(Fe,"ms-").replace($e,p)}function g(){this.expando=Ce.expando+g.uid++}function m(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Be.test(e)?JSON.parse(e):e)}function y(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(We,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=m(n)}catch(e){}Me.set(e,t,n)}else n=undefined;return n}function v(e,t,n,r){var i,o,s=20,a=r?function(){return r.cur()}:function(){return Ce.css(e,t,"")},u=a(),l=n&&n[3]||(Ce.cssNumber[t]?"":"px"),c=e.nodeType&&(Ce.cssNumber[t]||"px"!==l&&+u)&&Ve.exec(Ce.css(e,t));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;s--;)Ce.style(e,t,c+l),(1-o)*(1-(o=a()/u||.5))<=0&&(s=0),c/=o;c*=2,Ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function x(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ke[r];return i||(t=n.body.appendChild(n.createElement(r)),i=Ce.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ke[r]=i,i)}function b(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)o&&o.push(s);else if(c=Ye(s),a=w(d.appendChild(s),"script"),c&&T(a),n)for(f=0;s=a[f++];)tt.test(s.type||"")&&n.push(s);return d}function C(){return!0}function k(){return!1}function S(e,t){return e===L()==("focus"===t)}function L(){try{return we.activeElement}catch(e){}}function j(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=undefined);for(a in t)j(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=undefined):null==i&&("string"==typeof n?(i=r,r=undefined):(i=r,r=n,n=undefined)),!1===i)i=k;else if(!i)return e;return 1===o&&(s=i,i=function(e){return Ce().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=Ce.guid++)),e.each(function(){Ce.event.add(this,t,i,r,n)})}function N(e,t,n){if(!n)return void(He.get(e,t)===undefined&&Ce.event.add(e,t,C));He.set(e,t,!1),Ce.event.add(e,t,{namespace:!1,handler:function(e){var r,i,o=He.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(Ce.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=le.call(arguments),He.set(this,t,o),r=n(this,t),this[t](),i=He.get(this,t),o!==i||r?He.set(this,t,!1):i={},o!==i)return e.stopImmediatePropagation(),e.preventDefault(),i.value}else o.length&&(He.set(this,t,{value:Ce.event.trigger(Ce.extend(o[0],Ce.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})}function A(e,t){return o(e,"table")&&o(11!==t.nodeType?t:t.firstChild,"tr")?Ce(e).children("tbody")[0]||e:e}function D(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function I(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function O(e,t){var n,r,i,o,s,a,u;if(1===t.nodeType){if(He.hasData(e)&&(o=He.get(e),u=o.events)){He.remove(t,"handle events");for(i in u)for(n=0,r=u[i].length;n1&&"string"==typeof h&&!ve.checkClone&&ut.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),Q(o,t,r,i)});if(d&&(o=E(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=Ce.map(w(o,"script"),D),u=a.length;f=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-a-.5))||0),u}function B(e,t,n){var r=ft(e),i=!ve.boxSizingReliable()||n,s=i&&"border-box"===Ce.css(e,"boxSizing",!1,r),a=s,u=q(e,t,r),l="offset"+t[0].toUpperCase()+t.slice(1);if(ct.test(u)){if(!n)return u;u="auto"}return(!ve.boxSizingReliable()&&s||!ve.reliableTrDimensions()&&o(e,"tr")||"auto"===u||!parseFloat(u)&&"inline"===Ce.css(e,"display",!1,r))&&e.getClientRects().length&&(s="border-box"===Ce.css(e,"boxSizing",!1,r),(a=l in e)&&(u=e[l])),(u=parseFloat(u)||0)+M(e,t,n||(s?"border":"content"),a,r,u)+"px"}function W(e,t,n,r,i){return new W.prototype.init(e,t,n,r,i)}function z(){Tt&&(!1===we.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(z):e.setTimeout(z,Ce.fx.interval),Ce.fx.tick())}function V(){return e.setTimeout(function(){wt=undefined}),wt=Date.now()}function U(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=Ue[r],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function X(e,t,n){for(var r,i=(J.tweeners[t]||[]).concat(J.tweeners["*"]),o=0,s=i.length;o=0&&nE.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=O.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)E.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Se(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var i=0,o=n.length;i-1&&(r[l]=!(s[l]=f))}}else x=y(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):Z.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=E.relative[e[0].type],s=o||E.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),l=h(function(e){return te(t,e)>-1},s,!0),c=[function(e,n,r){var i=!o&&(r||n!==N)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];a1&&g(c),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ue,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,l){var c,f,d,p=0,h="0",g=r&&[],m=[],v=N,x=r||o&&E.find.TAG("*",l),b=M+=null==v?1:Math.random()||.1,w=x.length;for(l&&(N=s==O||s||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,s||c.ownerDocument==O||(I(c),a=!Q);d=e[f++];)if(d(c,s||O,a)){u.push(c);break}l&&(M=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,m,s,a);if(r){if(p>0)for(;h--;)g[h]||m[h]||(m[h]=J.call(u));m=y(m)}Z.apply(u,m),l&&!r&&m.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(M=b,N=v),g};return i?r(s):s}var w,T,E,C,k,S,L,j,N,A,D,I,O,P,Q,R,q,F,$,_="sizzle"+1*new Date,H=e.document,M=0,B=0,W=n(),z=n(),V=n(),U=n(),X=function(e,t){return e===t&&(D=!0),0},Y={}.hasOwnProperty,G=[],J=G.pop,K=G.push,Z=G.push,ee=G.slice,te=function(e,t){for(var n=0,r=e.length;n+~]|"+re+")"+re+"*"),fe=new RegExp(re+"|>"),de=new RegExp(se),pe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},ge=/HTML$/i,me=/^(?:input|select|textarea|button)$/i,ye=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,xe=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,we=new RegExp("\\\\[\\da-fA-F]{1,6}"+re+"?|\\\\([^\\r\\n\\f])","g"),Te=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},Ee=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ce=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ke=function(){I()},Se=h(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{Z.apply(G=ee.call(H.childNodes),H.childNodes),G[H.childNodes.length].nodeType}catch(e){Z={apply:G.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},k=t.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!ge.test(t||n&&n.nodeName||"HTML")},I=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:H;return r!=O&&9===r.nodeType&&r.documentElement?(O=r,P=O.documentElement,Q=!k(O),H!=O&&(n=O.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ke,!1):n.attachEvent&&n.attachEvent("onunload",ke)),T.scope=i(function(e){return P.appendChild(e).appendChild(O.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(O.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(O.getElementsByClassName),T.getById=i(function(e){return P.appendChild(e).id=_,!O.getElementsByName||!O.getElementsByName(_).length}),T.getById?(E.filter.ID=function(e){var t=e.replace(we,Te);return function(e){return e.getAttribute("id")===t}},E.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&Q){var n=t.getElementById(e);return n?[n]:[]}}):(E.filter.ID=function(e){var t=e.replace(we,Te);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},E.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&Q){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),E.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},E.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&Q)return t.getElementsByClassName(e)},q=[],R=[],(T.qsa=ve.test(O.querySelectorAll))&&(i(function(e){var t;P.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&R.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||R.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll("[id~="+_+"-]").length||R.push("~="),t=O.createElement("input"),t.setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||R.push("\\["+re+"*name"+re+"*="+re+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||R.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||R.push(".#.+[+~]"),e.querySelectorAll("\\\f"),R.push("[\\r\\n\\f]")}),i(function(e){e.innerHTML="";var t=O.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&R.push("name"+re+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&R.push(":enabled",":disabled"),P.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&R.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),R.push(",.*:")})),(T.matchesSelector=ve.test(F=P.matches||P.webkitMatchesSelector||P.mozMatchesSelector||P.oMatchesSelector||P.msMatchesSelector))&&i(function(e){T.disconnectedMatch=F.call(e,"*"),F.call(e,"[s!='']:x"),q.push("!=",se)}),R=R.length&&new RegExp(R.join("|")),q=q.length&&new RegExp(q.join("|")),t=ve.test(P.compareDocumentPosition),$=t||ve.test(P.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e==O||e.ownerDocument==H&&$(H,e)?-1:t==O||t.ownerDocument==H&&$(H,t)?1:A?te(A,e)-te(A,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e==O?-1:t==O?1:i?-1:o?1:A?te(A,e)-te(A,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]==H?-1:u[r]==H?1:0},O):O},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if(I(e),T.matchesSelector&&Q&&!U[n+" "]&&(!q||!q.test(n))&&(!R||!R.test(n)))try{var r=F.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){U(n,!0)}return t(n,O,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!=O&&I(e),$(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!=O&&I(e);var n=E.attrHandle[t.toLowerCase()],r=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!Q):undefined;return r!==undefined?r:T.attributes||!Q?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(Ee,Ce)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,A=!T.sortStable&&e.slice(0),e.sort(X),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return A=null,e},C=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(we,Te),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Te),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=S(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(we,Te).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),v=!u&&!a,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?m.firstChild:m.lastChild],s&&v){for(d=m,f=d[_]||(d[_]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===M&&l[1],x=p&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[M,p,x];break}}else if(v&&(d=t,f=d[_]||(d[_]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===M&&l[1],x=p),!1===x)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[_]||(d[_]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[M,x]),d!==t)););return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=te(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=L(e.replace(ue,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(we,Te),function(t){return(t.textContent||C(t)).indexOf(e)>-1}}),lang:r(function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Te).toLowerCase(),function(t){var n;do{if(n=Q?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===P},focus:function(e){return e===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:l(!1),disabled:l(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!E.pseudos.empty(e)},header:function(e){return ye.test(e.nodeName)},input:function(e){return me.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&Q&&E.relative[o[1].type]){if(!(t=(E.find.ID(s.matches[0].replace(we,Te),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.test(e)?0:o.length;i--&&(s=o[i],!E.relative[a=s.type]);)if((u=E.find[a])&&(r=u(s.matches[0].replace(we,Te),be.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&p(o)))return Z.apply(n,r),n;break}}return(l||L(e,c))(r,t,!Q,n,!t||be.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(X).join("")===_,T.detectDuplicates=!!D,I(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(O.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);Ce.find=ke,Ce.expr=ke.selectors,Ce.expr[":"]=Ce.expr.pseudos,Ce.uniqueSort=Ce.unique=ke.uniqueSort,Ce.text=ke.getText,Ce.isXMLDoc=ke.isXML,Ce.contains=ke.contains,Ce.escapeSelector=ke.escape;var Se=function(e,t,n){for(var r=[],i=n!==undefined;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&Ce(e).is(n))break;r.push(e)}return r},Le=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},je=Ce.expr.match.needsContext,Ne=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;Ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Ce.find.matchesSelector(r,e)?[r]:[]:Ce.find.matches(e,Ce.grep(t,function(e){return 1===e.nodeType}))},Ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(Ce(e).filter(function(){for(t=0;t1?Ce.uniqueSort(n):n},filter:function(e){return this.pushStack(s(this,e||[],!1))},not:function(e){return this.pushStack(s(this,e||[],!0))},is:function(e){return!!s(this,"string"==typeof e&&je.test(e)?Ce(e):e||[],!1).length}});var Ae,De=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(Ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ae,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:De.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof Ce?t[0]:t,Ce.merge(this,Ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:we,!0)),Ne.test(r[1])&&Ce.isPlainObject(t))for(r in t)xe(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=we.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):xe(e)?n.ready!==undefined?n.ready(e):e(Ce):Ce.makeArray(e,this)}).prototype=Ce.fn,Ae=Ce(we);var Ie=/^(?:parents|prev(?:Until|All))/,Oe={children:!0,contents:!0,next:!0,prev:!0};Ce.fn.extend({has:function(e){var t=Ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&Ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?Ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?de.call(Ce(e),this[0]):de.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(Ce.uniqueSort(Ce.merge(this.get(),Ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),Ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Se(e,"parentNode")},parentsUntil:function(e,t,n){return Se(e,"parentNode",n)},next:function(e){return a(e,"nextSibling")},prev:function(e){return a(e,"previousSibling")},nextAll:function(e){return Se(e,"nextSibling")},prevAll:function(e){return Se(e,"previousSibling")},nextUntil:function(e,t,n){return Se(e,"nextSibling",n)},prevUntil:function(e,t,n){return Se(e,"previousSibling",n)},siblings:function(e){return Le((e.parentNode||{}).firstChild,e)},children:function(e){return Le(e.firstChild)},contents:function(e){return null!=e.contentDocument&&ue(e.contentDocument)?e.contentDocument:(o(e,"template")&&(e=e.content||e),Ce.merge([],e.childNodes))}},function(e,t){Ce.fn[e]=function(n,r){var i=Ce.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=Ce.filter(r,i)),this.length>1&&(Oe[e]||Ce.uniqueSort(i),Ie.test(e)&&i.reverse()),this.pushStack(i)}});var Pe=/[^\x20\t\r\n\f]+/g;Ce.Callbacks=function(e){e="string"==typeof e?u(e):Ce.extend({},e);var t,n,i,o,s=[],a=[],l=-1,c=function(){for(o=o||e.once,i=t=!0;a.length;l=-1)for(n=a.shift();++l-1;)s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?Ce.inArray(e,s)>-1:s.length>0},empty:function(){return s&&(s=[]),this},disable:function(){return o=a=[],s=n="",this},disabled:function(){return!s},lock:function(){return o=a=[],n||t||(s=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},Ce.extend({Deferred:function(t){var n=[["notify","progress",Ce.Callbacks("memory"),Ce.Callbacks("memory"),2],["resolve","done",Ce.Callbacks("once memory"),Ce.Callbacks("once memory"),0,"resolved"],["reject","fail",Ce.Callbacks("once memory"),Ce.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return Ce.Deferred(function(t){Ce.each(n,function(n,r){var i=xe(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&xe(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,u=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=undefined,u=[e]),n.rejectWith(a,u))}};t?d():(Ce.Deferred.getStackHook&&(d.stackTrace=Ce.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return Ce.Deferred(function(e){n[0][3].add(o(0,e,xe(i)?i:l,e.notifyWith)),n[1][3].add(o(0,e,xe(t)?t:l)),n[2][3].add(o(0,e,xe(r)?r:c))}).promise()},promise:function(e){return null!=e?Ce.extend(e,i):i}},o={};return Ce.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?undefined:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=le.call(arguments),o=Ce.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?le.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(f(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||xe(i[n]&&i[n].then)))return o.then();for(;n--;)f(i[n],s(n),o.reject);return o.promise()}});var Qe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;Ce.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Qe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},Ce.readyException=function(t){e.setTimeout(function(){throw t})};var Re=Ce.Deferred();Ce.fn.ready=function(e){return Re.then(e)["catch"](function(e){Ce.readyException(e)}),this},Ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--Ce.readyWait:Ce.isReady)||(Ce.isReady=!0,!0!==e&&--Ce.readyWait>0||Re.resolveWith(we,[Ce]))}}),Ce.ready.then=Re.then,"complete"===we.readyState||"loading"!==we.readyState&&!we.documentElement.doScroll?e.setTimeout(Ce.ready):(we.addEventListener("DOMContentLoaded",d),e.addEventListener("load",d));var qe=function(e,t,n,i,o,s,a){var u=0,l=e.length,c=null==n;if("object"===r(n)){o=!0;for(u in n)qe(e,t,u,n[u],!0,s,a)}else if(i!==undefined&&(o=!0,xe(i)||(a=!0),c&&(a?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(Ce(e),n)})),t))for(;u1,null,!0)},removeData:function(e){return this.each(function(){Me.remove(this,e)})}}),Ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=He.get(e,t),n&&(!r||Array.isArray(n)?r=He.access(e,t,Ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=Ce.queue(e,t),r=n.length,i=n.shift(),o=Ce._queueHooks(e,t),s=function(){Ce.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return He.get(e,n)||He.access(e,n,{empty:Ce.Callbacks("once memory").add(function(){He.remove(e,[t+"queue",n])})})}}),Ce.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,tt=/^$|^module$|\/(?:java|ecma)script/i;!function(){var e=we.createDocumentFragment(),t=e.appendChild(we.createElement("div")),n=we.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ve.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",ve.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,t.innerHTML="",ve.option=!!t.lastChild}();var nt={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]} -;nt.tbody=nt.tfoot=nt.colgroup=nt.caption=nt.thead,nt.th=nt.td,ve.option||(nt.optgroup=nt.option=[1,""]);var rt=/<|&#?\w+;/,it=/^key/,ot=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,st=/^([^.]*)(?:\.(.+)|)/;Ce.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,l,c,f,d,p,h,g,m=He.get(e);if(_e(e))for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&Ce.find.matchesSelector(Xe,i),n.guid||(n.guid=Ce.guid++),(u=m.events)||(u=m.events=Object.create(null)),(s=m.handle)||(s=m.handle=function(t){return void 0!==Ce&&Ce.event.triggered!==t.type?Ce.event.dispatch.apply(e,arguments):undefined}),t=(t||"").match(Pe)||[""],l=t.length;l--;)a=st.exec(t[l])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=Ce.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=Ce.event.special[p]||{},c=Ce.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&Ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,s)||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),Ce.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,d,p,h,g,m=He.hasData(e)&&He.get(e);if(m&&(u=m.events)){for(t=(t||"").match(Pe)||[""],l=t.length;l--;)if(a=st.exec(t[l])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=Ce.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));s&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||Ce.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)Ce.event.remove(e,p+t[l],n,r,!0);Ce.isEmptyObject(u)&&He.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=new Array(arguments.length),u=Ce.event.fix(e),l=(He.get(this,"events")||Object.create(null))[u.type]||[],c=Ce.event.special[u.type]||{};for(a[0]=u,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],s={},n=0;n-1:Ce.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,u\s*$/g;Ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=Ye(e);if(!(ve.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Ce.isXMLDoc(e)))for(s=w(a),o=w(e),r=0,i=o.length;r0&&T(s,!u&&w(e,"script")),a},cleanData:function(e){for(var t,n,r,i=Ce.event.special,o=0;(n=e[o])!==undefined;o++)if(_e(n)){if(t=n[He.expando]){if(t.events)for(r in t.events)i[r]?Ce.event.remove(n,r):Ce.removeEvent(n,r,t.handle);n[He.expando]=undefined}n[Me.expando]&&(n[Me.expando]=undefined)}}}),Ce.fn.extend({detach:function(e){return R(this,e,!0)},remove:function(e){return R(this,e)},text:function(e){return qe(this,function(e){return e===undefined?Ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Q(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){A(this,e).appendChild(e)}})},prepend:function(){return Q(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=A(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Q(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Q(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(Ce.cleanData(w(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return Ce.clone(this,e,t)})},html:function(e){return qe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!at.test(e)&&!nt[(et.exec(e)||["",""])[1].toLowerCase()]){e=Ce.htmlPrefilter(e);try{for(;n3,Xe.removeChild(t)),a}}))}();var ht=["Webkit","Moz","ms"],gt=we.createElement("div").style,mt={},yt=/^(none|table(?!-c[ea]).+)/,vt=/^--/,xt={position:"absolute",visibility:"hidden",display:"block"},bt={letterSpacing:"0",fontWeight:"400"};Ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=q(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=h(t),u=vt.test(t),l=e.style;if(u||(t=_(a)),s=Ce.cssHooks[t]||Ce.cssHooks[a],n===undefined)return s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:l[t];o=typeof n,"string"===o&&(i=Ve.exec(n))&&i[1]&&(n=v(e,t,i),o="number"),null!=n&&n===n&&("number"!==o||u||(n+=i&&i[3]||(Ce.cssNumber[a]?"":"px")),ve.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,s,a=h(t);return vt.test(t)||(t=_(a)),s=Ce.cssHooks[t]||Ce.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=q(e,t,r)),"normal"===i&&t in bt&&(i=bt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),Ce.each(["height","width"],function(e,t){Ce.cssHooks[t]={get:function(e,n,r){if(n)return!yt.test(Ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?B(e,t,r):dt(e,xt,function(){return B(e,t,r)})},set:function(e,n,r){var i,o=ft(e),s=!ve.scrollboxSize()&&"absolute"===o.position,a=s||r,u=a&&"border-box"===Ce.css(e,"boxSizing",!1,o),l=r?M(e,t,r,u,o):0;return u&&s&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-M(e,t,"border",!1,o)-.5)),l&&(i=Ve.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=Ce.css(e,t)),H(e,n,l)}}}),Ce.cssHooks.marginLeft=F(ve.reliableMarginLeft,function(e,t){if(t)return(parseFloat(q(e,"marginLeft"))||e.getBoundingClientRect().left-dt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),Ce.each({margin:"",padding:"",border:"Width"},function(e,t){Ce.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+Ue[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(Ce.cssHooks[e+t].set=H)}),Ce.fn.extend({css:function(e,t){return qe(this,function(e,t,n){var r,i,o={},s=0;if(Array.isArray(t)){for(r=ft(e),i=t.length;s1)}}),Ce.Tween=W,W.prototype={constructor:W,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||Ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(Ce.cssNumber[n]?"":"px")},cur:function(){var e=W.propHooks[this.prop];return e&&e.get?e.get(this):W.propHooks._default.get(this)},run:function(e){var t,n=W.propHooks[this.prop];return this.options.duration?this.pos=t=Ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):W.propHooks._default.set(this),this}},W.prototype.init.prototype=W.prototype,W.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=Ce.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){Ce.fx.step[e.prop]?Ce.fx.step[e.prop](e):1!==e.elem.nodeType||!Ce.cssHooks[e.prop]&&null==e.elem.style[_(e.prop)]?e.elem[e.prop]=e.now:Ce.style(e.elem,e.prop,e.now+e.unit)}}},W.propHooks.scrollTop=W.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},Ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},Ce.fx=W.prototype.init,Ce.fx.step={};var wt,Tt,Et=/^(?:toggle|show|hide)$/,Ct=/queueHooks$/;Ce.Animation=Ce.extend(J,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return v(n.elem,e,Ve.exec(t),n),n}]},tweener:function(e,t){xe(e)?(t=e,e=["*"]):e=e.match(Pe);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){Ce.removeAttr(this,e)})}}),Ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?Ce.prop(e,t,n):(1===o&&Ce.isXMLDoc(e)||(i=Ce.attrHooks[t.toLowerCase()]||(Ce.expr.match.bool.test(t)?kt:undefined)),n!==undefined?null===n?void Ce.removeAttr(e,t):i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=Ce.find.attr(e,t),null==r?undefined:r))},attrHooks:{type:{set:function(e,t){if(!ve.radioValue&&"radio"===t&&o(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(Pe);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),kt={set:function(e,t,n){return!1===t?Ce.removeAttr(e,n):e.setAttribute(n,n),n}},Ce.each(Ce.expr.match.bool.source.match(/\w+/g),function(e,t){var n=St[t]||Ce.find.attr;St[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=St[s],St[s]=i,i=null!=n(e,t,r)?s:null,St[s]=o),i}});var Lt=/^(?:input|select|textarea|button)$/i,jt=/^(?:a|area)$/i;Ce.fn.extend({prop:function(e,t){return qe(this,Ce.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[Ce.propFix[e]||e]})}}),Ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&Ce.isXMLDoc(e)||(t=Ce.propFix[t]||t,i=Ce.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=Ce.find.attr(e,"tabindex");return t?parseInt(t,10):Lt.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),ve.optSelected||(Ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),Ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){Ce.propFix[this.toLowerCase()]=this}),Ce.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(xe(e))return this.each(function(t){Ce(this).addClass(e.call(this,t,Z(this)))});if(t=ee(e),t.length)for(;n=this[u++];)if(i=Z(n),r=1===n.nodeType&&" "+K(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=K(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(xe(e))return this.each(function(t){Ce(this).removeClass(e.call(this,t,Z(this)))});if(!arguments.length)return this.attr("class","");if(t=ee(e),t.length)for(;n=this[u++];)if(i=Z(n),r=1===n.nodeType&&" "+K(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=K(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):xe(e)?this.each(function(n){Ce(this).toggleClass(e.call(this,n,Z(this),t),t)}):this.each(function(){var t,i,o,s;if(r)for(i=0,o=Ce(this),s=ee(e);t=s[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else e!==undefined&&"boolean"!==n||(t=Z(this),t&&He.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":He.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+K(Z(n))+" ").indexOf(t)>-1)return!0;return!1}});var Nt=/\r/g;Ce.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=xe(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,Ce(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=Ce.map(i,function(e){return null==e?"":e+""})),(t=Ce.valHooks[this.type]||Ce.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return(t=Ce.valHooks[i.type]||Ce.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace(Nt,""):null==n?"":n)}}}),Ce.extend({valHooks:{option:{get:function(e){var t=Ce.find.attr(e,"value");return null!=t?t:K(Ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],l=a?s+1:i.length;for(r=s<0?l:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),Ce.each(["radio","checkbox"],function(){Ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=Ce.inArray(Ce(e).val(),t)>-1}},ve.checkOn||(Ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),ve.focusin="onfocusin"in e;var At=/^(?:focusinfocus|focusoutblur)$/,Dt=function(e){e.stopPropagation()};Ce.extend(Ce.event,{trigger:function(t,n,r,i){var o,s,a,u,l,c,f,d,p=[r||we],h=ge.call(t,"type")?t.type:t,g=ge.call(t,"namespace")?t.namespace.split("."):[];if(s=d=a=r=r||we,3!==r.nodeType&&8!==r.nodeType&&!At.test(h+Ce.event.triggered)&&(h.indexOf(".")>-1&&(g=h.split("."),h=g.shift(),g.sort()),l=h.indexOf(":")<0&&"on"+h,t=t[Ce.expando]?t:new Ce.Event(h,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:Ce.makeArray(n,[t]),f=Ce.event.special[h]||{},i||!f.trigger||!1!==f.trigger.apply(r,n))){if(!i&&!f.noBubble&&!be(r)){for(u=f.delegateType||h,At.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||we)&&p.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=p[o++])&&!t.isPropagationStopped();)d=s,t.type=o>1?u:f.bindType||h,c=(He.get(s,"events")||Object.create(null))[t.type]&&He.get(s,"handle"),c&&c.apply(s,n),(c=l&&s[l])&&c.apply&&_e(s)&&(t.result=c.apply(s,n),!1===t.result&&t.preventDefault());return t.type=h,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(p.pop(),n)||!_e(r)||l&&xe(r[h])&&!be(r)&&(a=r[l],a&&(r[l]=null),Ce.event.triggered=h,t.isPropagationStopped()&&d.addEventListener(h,Dt),r[h](),t.isPropagationStopped()&&d.removeEventListener(h,Dt),Ce.event.triggered=undefined,a&&(r[l]=a)),t.result}},simulate:function(e,t,n){var r=Ce.extend(new Ce.Event,n,{type:e,isSimulated:!0});Ce.event.trigger(r,null,t)}}),Ce.fn.extend({trigger:function(e,t){return this.each(function(){Ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return Ce.event.trigger(e,t,n,!0)}}),ve.focusin||Ce.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){Ce.event.simulate(t,e.target,Ce.event.fix(e))};Ce.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,i=He.access(r,t);i||r.addEventListener(e,n,!0),He.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=He.access(r,t)-1;i?He.access(r,t,i):(r.removeEventListener(e,n,!0),He.remove(r,t))}}});var It=e.location,Ot={guid:Date.now()},Pt=/\?/;Ce.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=undefined}return n&&!n.getElementsByTagName("parsererror").length||Ce.error("Invalid XML: "+t),n};var Qt=/\[\]$/,Rt=/\r?\n/g,qt=/^(?:submit|button|image|reset|file)$/i,Ft=/^(?:input|select|textarea|keygen)/i;Ce.param=function(e,t){var n,r=[],i=function(e,t){var n=xe(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!Ce.isPlainObject(e))Ce.each(e,function(){i(this.name,this.value)});else for(n in e)te(n,e[n],t,i);return r.join("&")},Ce.fn.extend({serialize:function(){return Ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=Ce.prop(this,"elements");return e?Ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!Ce(this).is(":disabled")&&Ft.test(this.nodeName)&&!qt.test(e)&&(this.checked||!Ze.test(e))}).map(function(e,t){var n=Ce(this).val();return null==n?null:Array.isArray(n)?Ce.map(n,function(e){return{name:t.name,value:e.replace(Rt,"\r\n")}}):{name:t.name,value:n.replace(Rt,"\r\n")}}).get()}});var $t=/%20/g,_t=/#.*$/,Ht=/([?&])_=[^&]*/,Mt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Bt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Wt=/^(?:GET|HEAD)$/,zt=/^\/\//,Vt={},Ut={},Xt="*/".concat("*"),Yt=we.createElement("a");Yt.href=It.href,Ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:It.href,type:"GET",isLocal:Bt.test(It.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Xt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":Ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ie(ie(e,Ce.ajaxSettings),t):ie(Ce.ajaxSettings,e)},ajaxPrefilter:ne(Vt),ajaxTransport:ne(Ut),ajax:function(t,n){function r(t,n,r,a){var l,d,p,b,w,T=n;c||(c=!0,u&&e.clearTimeout(u),i=undefined,s=a||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=oe(h,E,r)),!l&&Ce.inArray("script",h.dataTypes)>-1&&(h.converters["text script"]=function(){}),b=se(h,b,E,l),l?(h.ifModified&&(w=E.getResponseHeader("Last-Modified"),w&&(Ce.lastModified[o]=w),(w=E.getResponseHeader("etag"))&&(Ce.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,l=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),E.status=t,E.statusText=(n||T)+"",l?y.resolveWith(g,[d,T,E]):y.rejectWith(g,[E,T,p]),E.statusCode(x),x=undefined,f&&m.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?d:p]),v.fireWith(g,[E,T]),f&&(m.trigger("ajaxComplete",[E,h]),--Ce.active||Ce.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=undefined),n=n||{};var i,o,s,a,u,l,c,f,d,p,h=Ce.ajaxSetup({},n),g=h.context||h,m=h.context&&(g.nodeType||g.jquery)?Ce(g):Ce.event,y=Ce.Deferred(),v=Ce.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!a)for(a={};t=Mt.exec(s);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?s:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(y.promise(E),h.url=((t||h.url||It.href)+"").replace(zt,It.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(Pe)||[""],null==h.crossDomain){l=we.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Yt.protocol+"//"+Yt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=Ce.param(h.data,h.traditional)),re(Vt,h,n,E),c)return E;f=Ce.event&&h.global,f&&0==Ce.active++&&Ce.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Wt.test(h.type),o=h.url.replace(_t,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace($t,"+")):(p=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(Pt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),p=(Pt.test(o)?"&":"?")+"_="+Ot.guid+++p),h.url=o+p),h.ifModified&&(Ce.lastModified[o]&&E.setRequestHeader("If-Modified-Since",Ce.lastModified[o]),Ce.etag[o]&&E.setRequestHeader("If-None-Match",Ce.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Xt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)E.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(T="abort",v.add(h.complete),E.done(h.success),E.fail(h.error),i=re(Ut,h,n,E)){if(E.readyState=1,f&&m.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,r)}catch(e){if(c)throw e;r(-1,e)}}else r(-1,"No Transport");return E},getJSON:function(e,t,n){return Ce.get(e,t,n,"json")},getScript:function(e,t){return Ce.get(e,undefined,t,"script")}}),Ce.each(["get","post"],function(e,t){Ce[t]=function(e,n,r,i){return xe(n)&&(i=i||r,r=n,n=undefined),Ce.ajax(Ce.extend({url:e,type:t,dataType:i,data:n,success:r},Ce.isPlainObject(e)&&e))}}),Ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),Ce._evalUrl=function(e,t,n){return Ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){Ce.globalEval(e,t,n)}})},Ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(xe(e)&&(e=e.call(this[0])),t=Ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return xe(e)?this.each(function(t){Ce(this).wrapInner(e.call(this,t))}):this.each(function(){var t=Ce(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=xe(e);return this.each(function(n){Ce(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){Ce(this).replaceWith(this.childNodes)}),this}}),Ce.expr.pseudos.hidden=function(e){return!Ce.expr.pseudos.visible(e)},Ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}, -Ce.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Gt={0:200,1223:204},Jt=Ce.ajaxSettings.xhr();ve.cors=!!Jt&&"withCredentials"in Jt,ve.ajax=Jt=!!Jt,Ce.ajaxTransport(function(t){var n,r;if(ve.cors||Jt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Gt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=a.ontimeout=n("error"),a.onabort!==undefined?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),Ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),Ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return Ce.globalEval(e),e}}}),Ce.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),Ce.ajaxTransport("script",function(e){if(e.crossDomain||e.scriptAttrs){var t,n;return{send:function(r,i){t=Ce(" + + diff --git a/lib/server/README.md b/lib/server/README.md new file mode 100644 index 0000000..d5f18e5 --- /dev/null +++ b/lib/server/README.md @@ -0,0 +1,34 @@ +# server + +Tiny static-file HTTP server + +- Text routes default to `ok` +- File-like `.get(...)` paths serve that file +- Static dirs default from the prefix +- `index.html` auto-serves at `/` + +## usage + +```js +import { Server } from '#lib/server' + +Server.create({ root: import.meta.dirname }) + .get('/health') + .get('/robots.txt', 'User-agent: *\nAllow: /\n') + .static('/assets') + .listen(process.env.PORT || 0, function() { + console.log(`listening: ${this.address().port}`) + }) +``` + +## test + +```sh +npm test +``` + +## gotchas + +- Root bounds page files and static dirs +- Query strings are ignored for routing +- Only `GET` and `HEAD` are allowed diff --git a/lib/server/index.js b/lib/server/index.js new file mode 100644 index 0000000..b599a62 --- /dev/null +++ b/lib/server/index.js @@ -0,0 +1,256 @@ +import { Server as HttpServer } from 'node:http' +import { createHash } from 'node:crypto' +import { readFile, access } from 'node:fs/promises' +import { join, resolve, extname, + relative, isAbsolute } from 'node:path' + +class Server extends HttpServer { + static DEFAULTS = { + root: import.meta.dirname, + maxAge: 300, + mime: { + '.html': 'text/html', + '.txt': 'text/plain', + '.xml': 'application/xml', + '.json': 'application/json', + '.png': 'image/png', + '.jpg': 'image/jpeg', + '.svg': 'image/svg+xml', + '.ico': 'image/x-icon', + '.webp': 'image/webp' + }, + security: { + 'X-Content-Type-Options': 'nosniff', + 'X-Frame-Options': 'DENY', + 'Referrer-Policy': + 'strict-origin-when-cross-origin', + 'Permissions-Policy': + 'clipboard-write=(self)' + } + } + + #config + #pages = {} + #routes = {} + #staticUrl + #staticDir + + static create(config = {}) { + return new Server({ + ...Server.DEFAULTS, ...config, + mime: { ...Server.DEFAULTS.mime, ...config.mime }, + security: { + ...Server.DEFAULTS.security, + ...config.security + } + }) + } + + constructor(config) { + super((req, res) => this.#handle(req, res)) + this.#config = { + ...config, + root: resolve(config.root) + } + } + + get(path, body) { + const ext = extname(body || path) + const mime = this.#config.mime[ext] + + if (body && ext && !mime) + throw new Error(`${ext}: not in mime`) + + return mime + ? this.#addPage(path, body || path.slice(1)) + : this.#addRoute(path, body || 'ok') + } + + static(prefix, dir) { + this.#staticUrl = prefix.startsWith('/') + ? prefix : `/${prefix}` + const dirPath = resolve( + this.#config.root, + dir || prefix.replace(/^\//, '') + ) + + if (!this.#inRoot( + this.#config.root, dirPath + )) + throw new Error('static dir outside root') + + this.#staticDir = dirPath + + return this + } + + async listen(port = 0, cb) { + await this.#detectIndex() + await this.#loadPages() + + return super.listen(port, cb) + } + + #addPage(path, file) { + const filePath = resolve( + this.#config.root, file + ) + + if (!this.#inRoot( + this.#config.root, filePath + )) + throw new Error('page file outside root') + + this.#pages[path] = { file, filePath } + return this + } + + #addRoute(path, body) { + this.#routes[path] = body + return this + } + + async #detectIndex() { + const index = join(this.#config.root, + 'index.html') + + if (this.#pages['/']) return + + await access(index) + .then(() => this.#addPage('/', 'index.html')) + .catch(() => {}) + } + + async #loadPages() { + for (const [, page] of + Object.entries(this.#pages)) { + page.html = await readFile( + page.filePath + ) + page.etag = `"${ + createHash('sha256') + .update(page.html) + .digest('hex') + .slice(0, 16) + }"` + } + } + + #inRoot(base, file) { + const rel = relative(base, file) + + return rel === '' || ( + !rel.startsWith('..') + && !isAbsolute(rel) + ) + } + + #path(url = '/') { + return url.replace(/[?#].*$/, '') + || '/' + } + + #send(res, status, body, headers = {}) { + return res.writeHead(status, { + 'Content-Type': + 'text/plain; charset=utf-8', + ...this.#config.security, + ...headers + }).end(body) + } + + #sendPage(req, res, page) { + const { maxAge } = this.#config + + return req.headers['if-none-match'] + === page.etag + ? this.#send(res, 304, null, { + ETag: page.etag, + 'Cache-Control': + `public, max-age=${maxAge}` + }) + : this.#send(res, 200, page.html, { + 'Content-Type': + `${this.#config.mime[ + extname(page.file) + ]}; charset=utf-8`, + 'Content-Length': page.html.length, + 'Cache-Control': + `public, max-age=${maxAge}`, + ETag: page.etag + }) + } + + #sendStatic(path, res) { + const { mime, maxAge } = this.#config + const rel = path.slice( + this.#staticUrl.length + ) + const file = resolve( + this.#staticDir, `.${rel}` + ) + + return !file.startsWith( + `${this.#staticDir}/`) + ? this.#send(res, 403, 'Forbidden\n') + : !mime[extname(file)] + ? this.#send(res, 404, 'Not Found\n', { + 'Cache-Control': 'no-store' + }) + : readFile(file) + .then(data => this.#send( + res, 200, data, { + 'Content-Type': + mime[extname(file)], + 'Content-Length': data.length, + 'Cache-Control': + `public, max-age=${maxAge}` + } + )) + .catch(() => this.#send( + res, 404, 'Not Found\n', + { 'Cache-Control': 'no-store' } + )) + } + + #handle(req, res) { + try { + if (req.method !== 'GET' + && req.method !== 'HEAD') + return this.#send( + res, 405, 'Method Not Allowed\n', + { Allow: 'GET, HEAD' } + ) + + const path = this.#path(req.url) + const page = this.#pages[path] + + if (page) + return this.#sendPage(req, res, page) + + const route = this.#routes[path] + + if (route !== undefined) + return this.#send(res, 200, route, { + 'Cache-Control': 'no-store' + }) + + return this.#staticUrl + && path.startsWith( + `${this.#staticUrl}/`) + ? this.#sendStatic(path, res) + : this.#send( + res, 404, 'Not Found\n', + { 'Cache-Control': 'no-store' } + ) + } catch { + if (!res.headersSent) + this.#send( + res, 500, 'Internal Server Error\n', + { 'Cache-Control': 'no-store' } + ) + } + } +} + +export { Server } diff --git a/lib/server/package.json b/lib/server/package.json new file mode 100644 index 0000000..1dd5f5a --- /dev/null +++ b/lib/server/package.json @@ -0,0 +1,6 @@ +{ + "name": "server", + "version": "1.0.0", + "type": "module", + "exports": "./index.js" +} diff --git a/lib/server/test/fixtures/assets/pixel.png b/lib/server/test/fixtures/assets/pixel.png new file mode 100644 index 0000000..0dd1608 --- /dev/null +++ b/lib/server/test/fixtures/assets/pixel.png @@ -0,0 +1,2 @@ +‰PNG + diff --git a/lib/server/test/fixtures/index.html b/lib/server/test/fixtures/index.html new file mode 100644 index 0000000..58d93db --- /dev/null +++ b/lib/server/test/fixtures/index.html @@ -0,0 +1 @@ +

    test

    diff --git a/lib/server/test/fixtures/robots.txt b/lib/server/test/fixtures/robots.txt new file mode 100644 index 0000000..7d329b1 --- /dev/null +++ b/lib/server/test/fixtures/robots.txt @@ -0,0 +1 @@ +User-agent: * diff --git a/lib/server/test/main.test.js b/lib/server/test/main.test.js new file mode 100644 index 0000000..acccbf2 --- /dev/null +++ b/lib/server/test/main.test.js @@ -0,0 +1,257 @@ +import { test } from 'node:test' +import { join } from 'node:path' +import { Server } from '../index.js' + +const ROOT = join(import.meta.dirname, 'fixtures') + +test('#Server', async t => { + await t.test('#create', async t => { + await t.test('returns a Server', t => { + const server = Server.create() + + t.assert.ok(server instanceof Server) + }) + + }) + + await t.test('#get', async t => { + t.beforeEach(t => { + t.server = Server.create({ root: ROOT }) + }) + + await t.test('body with known extension', async t => { + await t.test('chains', t => { + t.assert.strictEqual( + t.server.get('/', 'index.html'), t.server + ) + }) + }) + + await t.test('body with no extension', async t => { + await t.test('chains', t => { + t.assert.strictEqual( + t.server.get('/ping', 'pong'), t.server + ) + }) + }) + + await t.test('no body, path has known extension', + async t => { + await t.test('chains', t => { + t.assert.strictEqual( + t.server.get('/robots.txt'), t.server + ) + }) + }) + + await t.test('no body, path has no extension', + async t => { + await t.test('chains', t => { + t.assert.strictEqual( + t.server.get('/health'), t.server + ) + }) + }) + + await t.test('body with unknown extension', async t => { + await t.test('throws', t => { + t.assert.throws( + () => t.server.get('/foo', 'bar.xyz'), + { message: /not in mime/i } + ) + }) + }) + + }) + + await t.test('#static', async t => { + t.beforeEach(t => { + t.server = Server.create({ root: ROOT }) + }) + + await t.test('with prefix and dir', async t => { + await t.test('chains', t => { + t.assert.strictEqual( + t.server.static('/img', 'assets'), t.server + ) + }) + }) + + await t.test('prefix only', async t => { + await t.test('derives dir from prefix', t => { + t.assert.strictEqual( + t.server.static('/assets'), t.server + ) + }) + }) + + }) + + await t.test('#listen', async t => { + t.beforeEach(async t => { + t.server = Server.create({ root: ROOT }) + .get('/health') + .get('/ping', 'pong') + .get('/robots.txt') + .get('/', 'index.html') + .static('/assets') + + await t.server.listen(0, () => {}) + + t.fetch = (path, opts) => fetch( + `http://127.0.0.1:${ + t.server.address().port + }${path}`, opts + ) + }) + + t.afterEach(async t => { + await new Promise(ok => t.server.close(ok)) + }) + + await t.test('auto-detects index.html', async t => { + const server = Server.create({ root: ROOT }) + .get('/health') + + await server.listen(0, () => {}) + + const res = await fetch( + `http://127.0.0.1:${server.address().port}/` + ) + + t.assert.strictEqual(res.status, 200) + t.assert.ok( + res.headers.get('content-type') + .includes('text/html') + ) + + await new Promise(ok => server.close(ok)) + }) + + await t.test('page route', async t => { + await t.test('responds 200 with html', async t => { + const res = await t.fetch('/') + + t.assert.strictEqual(res.status, 200) + t.assert.ok( + res.headers.get('content-type') + .includes('text/html') + ) + }) + + await t.test('includes etag', async t => { + const res = await t.fetch('/') + + t.assert.ok(res.headers.get('etag')) + }) + + await t.test('responds 304 on matching etag', + async t => { + const first = await t.fetch('/') + const etag = first.headers.get('etag') + + const second = await t.fetch('/', { + headers: { 'If-None-Match': etag } + }) + + t.assert.strictEqual(second.status, 304) + }) + + await t.test('includes cache-control', async t => { + const res = await t.fetch('/') + const cc = res.headers.get('cache-control') + + t.assert.ok(cc.includes('max-age=')) + }) + + await t.test('responds 200 with query string', + async t => { + const res = await t.fetch('/?v=1') + + t.assert.strictEqual(res.status, 200) + }) + }) + + await t.test('text route', async t => { + await t.test('responds 200', async t => { + const res = await t.fetch('/health') + + t.assert.strictEqual(res.status, 200) + t.assert.strictEqual(await res.text(), 'ok') + }) + + await t.test('responds with custom body', + async t => { + const res = await t.fetch('/ping') + + t.assert.strictEqual( + await res.text(), 'pong' + ) + }) + + await t.test('responds 200 with query string', + async t => { + const res = await t.fetch('/health?view=full') + + t.assert.strictEqual(res.status, 200) + t.assert.strictEqual(await res.text(), 'ok') + }) + }) + + await t.test('file route from path', async t => { + await t.test('serves file content', async t => { + const res = await t.fetch('/robots.txt') + + t.assert.strictEqual(res.status, 200) + t.assert.ok( + (await res.text()).includes('User-agent') + ) + }) + }) + + await t.test('unknown path', async t => { + await t.test('responds 404', async t => { + const res = await t.fetch('/nonexistent') + + t.assert.strictEqual(res.status, 404) + }) + }) + + await t.test('static files', async t => { + await t.test('serves known mime type', async t => { + const res = await t.fetch('/assets/pixel.png') + + t.assert.strictEqual(res.status, 200) + t.assert.ok( + res.headers.get('content-type') + .includes('image/png') + ) + }) + + await t.test('responds 404 on missing file', + async t => { + const res = await t.fetch('/assets/nope.png') + + t.assert.strictEqual(res.status, 404) + }) + + await t.test('responds 404 on unknown extension', + async t => { + const res = await t.fetch('/assets/file.xyz') + + t.assert.strictEqual(res.status, 404) + }) + + await t.test('serves file with query string', + async t => { + const res = await t.fetch('/assets/pixel.png?v=1') + + t.assert.strictEqual(res.status, 200) + t.assert.ok( + res.headers.get('content-type') + .includes('image/png') + ) + }) + }) + }) +}) diff --git a/lib/server/test/security.test.js b/lib/server/test/security.test.js new file mode 100644 index 0000000..f4fc565 --- /dev/null +++ b/lib/server/test/security.test.js @@ -0,0 +1,116 @@ +import { test } from 'node:test' +import { request } from 'node:http' +import { join } from 'node:path' +import { Server } from '../index.js' + +const ROOT = join(import.meta.dirname, 'fixtures') + +test('#Server', async t => { + await t.test('#get', async t => { + t.beforeEach(t => { + t.server = Server.create({ root: ROOT }) + }) + + await t.test('body outside root', async t => { + await t.test('throws', t => { + t.assert.throws( + () => t.server.get('/foo', '../secret.html'), + { message: /outside root/i } + ) + }) + }) + }) + + await t.test('#static', async t => { + t.beforeEach(t => { + t.server = Server.create({ root: ROOT }) + }) + + await t.test('dir outside root', async t => { + await t.test('throws', t => { + t.assert.throws( + () => t.server.static('/escape', '../../..'), + { message: /outside root/i } + ) + }) + }) + + await t.test('sibling dir sharing root prefix', + async t => { + await t.test('throws', t => { + t.assert.throws( + () => t.server.static( + '/escape', '../fixtures2' + ), + { message: /outside root/i } + ) + }) + }) + }) + + await t.test('#listen', async t => { + t.beforeEach(async t => { + t.server = Server.create({ root: ROOT }) + .get('/health') + .get('/ping', 'pong') + .get('/robots.txt') + .get('/', 'index.html') + .static('/assets') + + await t.server.listen(0, () => {}) + + t.fetch = (path, opts) => fetch( + `http://127.0.0.1:${ + t.server.address().port + }${path}`, opts + ) + }) + + t.afterEach(async t => { + await new Promise(ok => t.server.close(ok)) + }) + + await t.test('security headers', async t => { + await t.test('includes all headers', async t => { + const res = await t.fetch('/') + + t.assert.partialDeepStrictEqual( + Object.fromEntries(res.headers), { + 'x-content-type-options': 'nosniff', + 'x-frame-options': 'DENY', + 'referrer-policy': + 'strict-origin-when-cross-origin', + 'permissions-policy': + 'clipboard-write=(self)' + } + ) + }) + }) + + await t.test('method not allowed', async t => { + await t.test('responds 405 on POST', async t => { + const res = await t.fetch('/', { method: 'POST' }) + + t.assert.strictEqual(res.status, 405) + t.assert.ok( + res.headers.get('allow').includes('GET') + ) + }) + }) + + await t.test('static files', async t => { + await t.test('responds 403 on traversal', + async t => { + const { port } = t.server.address() + const res = await new Promise(ok => + request({ + hostname: '127.0.0.1', port, + path: '/assets/../../../etc/passwd' + }, ok).end() + ) + + t.assert.strictEqual(res.statusCode, 403) + }) + }) + }) +}) diff --git a/package.json b/package.json index 78a705a..4abee64 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,14 @@ "version": "1.0.0", "description": "Bitpaper API documentation", "type": "module", - "exports": "./server.js", "engines": { "node": ">=24" }, "scripts": { - "start": "node server.js" + "start": "PORT=${PORT:-3007} node --title=bp-api-docs app.js", + "dev": "PORT=${PORT:-3007} node --title=bp-api-docs --watch --watch-path=app.js --watch-path=lib --watch-path=index.html --watch-path=assets app.js", + "test": "node --test '**/*.test.js'" + }, + "imports": { + "#lib/*": "./lib/*/index.js" }, "license": "MIT" } diff --git a/server.js b/server.js deleted file mode 100644 index 7025ed2..0000000 --- a/server.js +++ /dev/null @@ -1,44 +0,0 @@ -import { createServer } from 'node:http' -import { readFile } from 'node:fs/promises' -import { join, extname } from 'node:path' - -const root = join(import.meta.dirname, 'build') -const port = parseInt(process.env.PORT || '4567', 10) - -const types = { - '.html': 'text/html', - '.css': 'text/css', - '.js': 'application/javascript', - '.json': 'application/json', - '.svg': 'image/svg+xml', - '.png': 'image/png', - '.ico': 'image/x-icon', - '.woff': 'font/woff', - '.woff2': 'font/woff2', - '.ttf': 'font/ttf', - '.eot': 'application/vnd.ms-fontobject', -} - -const serve = async (req, res) => { - const url = req.url.split('?')[0] - const path = url === '/' - ? join(root, 'index.html') - : join(root, url) - - try { - const body = await readFile(path) - const ext = extname(path) - - res.writeHead(200, { 'Content-Type': types[ext] || 'application/octet-stream' }) - res.end(body) - } catch { - const fallback = await readFile(join(root, 'index.html')) - - res.writeHead(404, { 'Content-Type': 'text/html' }) - res.end(fallback) - } -} - -createServer(serve).listen(port, () => - console.log(`docs: http://localhost:${port}`) -) diff --git a/test/smoke.test.js b/test/smoke.test.js new file mode 100644 index 0000000..6e969f7 --- /dev/null +++ b/test/smoke.test.js @@ -0,0 +1,48 @@ +import { test } from 'node:test' +import { join } from 'node:path' +import { Server } from '#lib/server' + +const ROOT = join(import.meta.dirname, '..') + +test('smoke', async t => { + t.beforeEach(async t => { + t.server = Server.create({ root: ROOT }) + .get('/health') + .get('/robots.txt', 'User-agent: *\nAllow: /\n') + .static('/assets') + + await t.server.listen(0, () => {}) + + t.fetch = path => fetch( + `http://127.0.0.1:${t.server.address().port}${path}` + ) + }) + + t.afterEach(async t => { + await new Promise(ok => t.server.close(ok)) + }) + + await t.test('GET / responds 200', async t => { + const res = await t.fetch('/') + + t.assert.strictEqual(res.status, 200) + }) + + await t.test('GET /health responds 200', async t => { + const res = await t.fetch('/health') + + t.assert.strictEqual(res.status, 200) + }) + + await t.test('GET /robots.txt responds 200', async t => { + const res = await t.fetch('/robots.txt') + + t.assert.strictEqual(res.status, 200) + }) + + await t.test('GET /unknown responds 404', async t => { + const res = await t.fetch('/nope') + + t.assert.strictEqual(res.status, 404) + }) +}) From 0de685898978f7f7b6809930a2ded6b9246e8f5f Mon Sep 17 00:00:00 2001 From: Nicholas Kyriakides Date: Thu, 19 Mar 2026 04:33:07 +0200 Subject: [PATCH 2/4] fix: allow dotted text bodies in Server#get routes --- lib/server/index.js | 3 --- lib/server/test/main.test.js | 15 +++++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/server/index.js b/lib/server/index.js index b599a62..e86093a 100644 --- a/lib/server/index.js +++ b/lib/server/index.js @@ -58,9 +58,6 @@ class Server extends HttpServer { const ext = extname(body || path) const mime = this.#config.mime[ext] - if (body && ext && !mime) - throw new Error(`${ext}: not in mime`) - return mime ? this.#addPage(path, body || path.slice(1)) : this.#addRoute(path, body || 'ok') diff --git a/lib/server/test/main.test.js b/lib/server/test/main.test.js index acccbf2..af786e9 100644 --- a/lib/server/test/main.test.js +++ b/lib/server/test/main.test.js @@ -54,10 +54,17 @@ test('#Server', async t => { }) await t.test('body with unknown extension', async t => { - await t.test('throws', t => { - t.assert.throws( - () => t.server.get('/foo', 'bar.xyz'), - { message: /not in mime/i } + await t.test('chains as text route', t => { + t.assert.strictEqual( + t.server.get('/foo', 'bar.xyz'), t.server + ) + }) + }) + + await t.test('body with dotted text', async t => { + await t.test('chains as text route', t => { + t.assert.strictEqual( + t.server.get('/version', 'v1.0.0'), t.server ) }) }) From 31301aa990d1a70b8fdbd2540c923e27c8dd87fa Mon Sep 17 00:00:00 2001 From: Nicholas Kyriakides Date: Mon, 23 Mar 2026 14:45:55 +0200 Subject: [PATCH 3/4] feat: document Get and Duplicate paper endpoints --- index.html | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/index.html b/index.html index 639b6d6..423f4dc 100644 --- a/index.html +++ b/index.html @@ -333,6 +333,8 @@
  • API Papers
  • Create a Paper
  • Access a Paper
  • +
  • Get a Paper
  • +
  • Duplicate a Paper
  • Delete a Paper
  • @@ -605,6 +607,183 @@

    Give names to your users

    https://bitpaper.io/go/Hello%20World/xdXfoI?access-token=foo&user_name=John%20Doe

    +

    Get a Paper

    + + curl "https://api.bitpaper.io/public/api/v1/paper/ddc95912-2a81-a25e-b589-8de1d472f6e8" \ + -H "Authorization: Bearer <my-secret-api-token>" + +
    +

    Returns JSON structured like this:

    +
    + + { + "id_saved_paper": "ddc95912-2a81-a25e-b589-8de1d472f6e8", + "name": "Maths", + "status": "active", + "created_at": "2021-01-01T01:00:00.000Z", + "is_test_paper": false +} + +

    Retrieves information about a specific paper, including its + current status.

    + +

    HTTP Request

    + +

    GET https://api.bitpaper.io/public/api/v1/paper/<id_saved_paper>

    + +

    URL Parameters

    + + + + + + + + + + + +
    ParameterDescription
    id_saved_paperString (UUID) — The paper identifier
    + +

    Response

    + +

    Responds with HTTP 200 if successful.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterDescription
    id_saved_paperString (36 chars) — Unique paper + identifier
    nameString — Paper name
    statusStringactive, + INFLIGHT, or FAILED
    is_test_paperBooleantrue if created + with test token
    created_atString — ISO 8601 timestamp
    + +

    Duplicate a Paper

    + + curl "https://api.bitpaper.io/public/api/v1/paper/ddc95912-2a81-a25e-b589-8de1d472f6e8/copy" \ + -X POST \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer <my-secret-api-token>" \ + --data '{"name":"Maths (copy)"}' + +
    +

    Returns JSON structured like this:

    +
    + + { + "id_saved_paper": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "name": "Maths (copy)", + "status": "INFLIGHT", + "created_at": "2021-06-15T09:30:00.000Z", + "is_test_paper": false +} + +

    Duplicates an existing paper, including all content. + This is a fire-and-forget operation — the response + returns immediately while the copy runs in the background.

    + +

    The new paper is returned with status set to + INFLIGHT. Poll Get a + Paper with the new id_saved_paper until + status resolves to active or + FAILED.

    + +

    HTTP Request

    + +

    POST https://api.bitpaper.io/public/api/v1/paper/<id_saved_paper>/copy

    + +

    URL Parameters

    + + + + + + + + + + + +
    ParameterDescription
    id_saved_paperString (UUID) — The paper to + duplicate
    + +

    Body Parameters

    + + + + + + + + + + + + +
    ParameterTypeDescription
    nameString (4–64 chars)A name for the duplicate paper.
    + +

    Response

    + +

    Responds with HTTP 201 if successful.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterDescription
    id_saved_paperString (36 chars) — Unique identifier + of the new paper
    nameString — Name of the duplicate
    statusString — Initially + INFLIGHT
    is_test_paperBooleantrue if created + with test token
    created_atString — ISO 8601 timestamp
    + + +

    Delete a Paper

    curl "https://api.bitpaper.io/public/api/v1/paper/ddc95912-2a81-a25e-b589-8de1d472f6e8" \ From ee7106b2fbc37dad72d5387ca5c8b570629664fd Mon Sep 17 00:00:00 2001 From: Nicholas Kyriakides Date: Mon, 23 Mar 2026 14:48:52 +0200 Subject: [PATCH 4/4] fix: remove vale lint workflow --- .github/workflows/lint.yml | 44 -------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 20e1111..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: lint - -on: - push: - branches: [main] - pull_request: - branches: [main] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - - name: Setup vale - run: | - mkdir -p .vale/styles/config/vocabularies/Bitpaper - - cat > .vale.ini << 'EOF' - StylesPath = .vale/styles - MinAlertLevel = warning - Packages = write-good - Vocab = Bitpaper - SkippedScopes = script, style, pre, code, code-block - - [*] - BasedOnStyles = Vale, write-good - EOF - - cat > .vale/styles/config/vocabularies/Bitpaper/accept.txt << 'EOF' - (?i)Bitpaper - preprocessors - breakpoint - async - (?i)urls - screensharing - (?i)Whitelabelling - EOF - - - uses: errata-ai/vale-action@v2 - with: - reporter: github-check - fail_on_error: true - files: index.html

    vho?50|LrFE?Gh(a1+RAbndsDgoLdFhL$WbAs6d%<9wkoDXtoSickwTM` z$JtehTTf*JMKDgd@k~IZqNRa~=j{sS?c|*oq)hXE`PBDsHWmY03Qrv8ITV(WLEwN!FIVsvR`kO<|%MBEYRpR{2L!Agk+A+-UI>6^5b`IbGKw8HzdJLBHfJE5eH0vZd1 z-%r_9K~@RQqCKfe7qk{J@b~O!qu~dDEO9i?0^Ia<`YYwlqFAJ`>9KEep zt)4@UQLC=()akkCm$)szS!MA};yu2Lbh4}c7myks@zU`TCzu&r*($rWEdfvlSVZ(2}G)Q zOTJaaZ`tTn6_+t(d{rEc;(~6FF+FmsIL)x_-iir|vLs+EGqD+l$s{?>CwKO(QBrl4 zMv?TOR1uUx#cF9cojshz+D|(8e+La-W-$qVm^6lp2 z3hxuRz5N+_g}#PXDa!BeLvnw7auhEAStKbkWPj=#jQ6d9nfJ*L!L)d;LCS|=uclPv z$A0TYQzs*~^`^%U6UUw}^OE8ThtcC7(GtdHMPy>LH-*B~cy0{(-N&hZQZ3hZ9Bddd zJ5z!#Ub&jhWal)jXXuj%9ow}j*c)RjDJjP?))8vFQ;P4C%|W zfz@Kizu2Q^99p2k*OaXDZFeS@^3Fuz*^>)tH=z+DTJMyaMU{+8Ltsqt4(xeH)X)!pmj*a*RKs@^{0c_AgtjVadoEOi>p{2u3g)@Ju=IZrNch^h86XBNc zS5{`}Ztq9+rndKAALk*49V<2R4qXsWX&Bre)b;J3n{KR3HbX>1T)B9K%Kx$g1j+IL zqz?HUaQ@B@38nb1*GDx4PRH%3=$<@6;;Ss<4X2P25}C+};%3HYZzmw>RdTbX48`;h zw{sG_t28>zp!X)K%{A;E&j)>qnRmcGE?*(P%kEM1BUm4%TC&bGTw`Xtsx!`Hptf+D zb%6ek>vY^lK1uIy$p>swja3$ZSPb$ox*GxZB01?Gcq@LsJCZxA)h8k~LwAy%89^4v2_&4W5C*Jj$$~#dc0nRogid_Ho+g~6axfIxkq$?c-qQc{Fs%1_;7YK%?fyP+f860;13P~XL7?|A-Y4A4Pp&i_C8f8C<~|H;2zEC27Wd~!=C|34N!T0|pA5;lX4<{4vu6A!24 z0QzofK!B~xY<%z&5p$B^nZ67N^>kB)i|4)vDF=D_U7w@rmGYsi=4Ru?ZG;TU+8~}R zZOzNG`Q8Gg9uyCzNoK_M^(FF{1FfARJ>9q2@3QWhE%YpbL=zyccQ?nDg>$7pd1r@U zng+z4cw=9^SUT5))tjb9GZ$46k4`)ofhnIgi(ZS2rht;Qh_aMW3&xsIZpKd7*n=8osIOk&ii9+u(VYrV-o zdpZ3Lp>YPp!9b4<9Dul&a*=M^TRX^CNX8nk4-dQHk3v8yrUpvk*_99G?#Z_D53o+V z0Gh-iARJ7Z;5A79=N2-DbnOZAEL;aJO7Zx{2w8q(Ag|j@O0~qWchKTlK*`nRj>lF9na48>kFAL^_5e{(o>~FQ z{h_mfZwngO1PYPNfOK1t8{n}T1yy>~s{F2>c;TBR$ABVioJh-cUTfbwTr$XMDO}9# z;&e~3NLQp^$PARRn{<%6fi!HaAX&q1 zKm^^>T1mI>yv(7)@}~Jz_VTgq7^x=GUn|Y6pMRdMgP*)S-X7jN?olBcw~oqrti|dd za{)?hx6W3RPwrhy9^I5#6ckuI3Ty2y%a&{$u`fb4f>rUMDDX{zkEr_RFeUOfx&Cv%5l ze+a|7S((h~usvbmL)2S>pELTyN>(hI(ek8>f1>*2id(Tl!>{}Jgivh!%${wP5n{eb zmFIo%)NKA7-E5%!sJt8Ug@aL^i7V0|8N4pVCLpF(?|N38+v_tBmc$A=TnyL*m$mII z1Cp%cNW@jgMEiq4<@q=ui~Broah!!fxVyt3bh3TeB;2t{C41!pP8}!V1n~3J1jOaF z{B}u7)w{{gZdmyBu%GKi)sFrLy#V47LF~o^tEf0C6l{FtL~i?iA^DVfI=hWgHOn%< z3YmdU8~MKS{XmMa!bK6Nk9VBf_#+DumOm1pMyNut9j})L&ERVmiw74vTULb3V=3 zGn=X$*fF_nd`;+PVw7kfeNsD&_4)jc+C@)z?c?og7?YO%?pzas9q3AZfOS}AJYVsQ z&(B)HjRkB;!4>+-9sV|G<{!-g&l+5$;|Sk36~BtW8ui{4e(s$pck*xuFLZLkd_S)yzMG{-H zXwx_M`YW_Ib)&+K@_1_=N7ABjnKfM|Ot5Ph+~l8!eOV)wfH|XFwt83&o|97RCa*z3 zeS9Lzl;%l7()0%Ye=_^@iI6Y4=xfwpuiWr56BL}mHICCvX+8#Z$Z$FBx?CW%HUyOF z29#qn5UZB~G)cQNTKj!!K$-M}=^fOBE!|b@Je=i81g_I+qT~5bZ9h^@KvLm?M&}XL zECmPk&~1`++D{`DA;^yvv+vZ^zPG^P-SzaSiXk5W>>{QEDSjT1A!P!S+_Tp~5k`rv z`PXE2A8tQb(Ao#9&fr?H6Q^aw=~=SNc2!4c1`sRduZR?ii)z`~$SFA1e12U~&|mP} z_0&q<>F700;`eNq@rqe@*em@bn+*OXuVKK-QrGQ=gOa4Ux1e1qb>YCKrwA?6RBbB) zs>%*S(wyT!B5!3im8d8+guC0{Ge@hJmTz=V?`OSmyvHR>OS3U5mX_irY1%@n%LdRJ z-5*&>JOmY2F0wx{@SmI#In|-S_KT^;Xbkv08jtxlzdW zk}Z1DI5RhyA7Mp-TwDIb;r?i|nfF)Lwr6%L_h8$+x38wp@5dL~RN0@^hsN(<({DO$ z+f0;f4AZ{pHaT(cHRO47*jyca@u;2a#%`ia#(317(2uO|#Fwx2SD6d18OHd7v;g&` zKopbUiCC4*@`e52^Fc?^Z-~7oJGmK2&fT}LAFVaiRL@j*9H|f3Uz1H~M4tPU6nML=tLCG|!F!U-cK1#)sY zK2e=1E)u#Ds?novQKP&}^{2X~gWq3g_a~hiB_Po8cqI>c!+w4@%B#Gt*Fwa7v)*_R zyTl<=jI7e3=Her5@XBnxk&1tAX3E`1%K(>$5Bx>8ScuFXtsS_axH38W~s#zz|9n3cVs% zed`bTPNr;&1U}QI`PVC*pGY=WC&dG^xlc=dxTB-ZowVls-aX6h&lO()7xmUTbrw$; zZkRm}*>KXX&QEqbjw9mDkd9wT#oGpag>%pTlN0OJ64RK@I7xZY=;`9=B6#9?a6gcX zm3n~}jdELrZ9%h}vaf}50fp{r5n*)Z8P~&3WDGbjTkGU@Ml$f*E~)?lG~+yyuC_5e{aHS;bm)pWVi=lV!V5jvN_qXRX$0% zo%TerJK!dw5=-TvW4OG1P4k|vLFs&LI3?3Nx|A0mX954lYR`+iO)<6KA`!H)kRH{i+Y#!y;b|^XGBCo zBxgWWfoi*rae?>qMb)X+wgHdLgmH$*6qa&p-5lJV%yqZvUfVmR1G{gHMaPMi8=)`u zev;wSL|J>Qe5!7eDb~Zz562gzVk(7JtZOp4v4g7Gs#!X#+!#fnX-q5Rwnni6{U zt*T?<3HsF?6XoW_)?Me9_4tRb0@d!tcd0~$r+U(79Vks(15lD;uru@V?_5^xGM^N~ zCaumIE_9--DJ5DVa(;nrN^(8N!JTJG;@4YiwE-HgqSrkW%C513dmJYN5)GHhou>Gr zVjmbaaZLqAKTiI%6+F>AB^`4V@Aq9F%7CW;u9u@RsNbo7PJ6kJ3w`C7dXns{p_MGx zUgHkhNe$fwWKnognfPJLi`9h1lSJ~x9v~_SFFKGB-0eu{B(-ifXbq6PTb5(Jp{(t^ zy+$gjzdo(B-b+Cai79 zf>X~At(-YXy3aPwle@uuEPTXmlb1!!WSH#_u6{_Gngt}y8b{%rWAjH;bu1+Fy_}x2 z)pDv4pgZ&Ed8Qb5FmcS#Djhv@z^D!Euelt}#pS?dE{9zK?CP%b(Z+Je-HV#EomBh> zROb~+D+r{eezdEQQ=e~I0r~ziH0LwlPx$2Ogg5a?EG(BUc{}>M(~d82E-QTw z{+lI&ZG`M{_26Q6gzdo#;4N=Ke@}rK$2&IF^Hn;5i&eC-&gmRi8B)@PMS)IY<1Lsg zb@4%{Y-yUjALZojoRa0c87j#4&d(Z`a-@)b#6Y(9zIND{fBA9%O+-g5ujkSoYD+Sj zka57Pd-38D^E{j=ND3>Y6YF(V@lxIsShZ2_6#m(QM6;)#OJOE;W6?~f=m%9{c2171&V&6xb5c} z?2PJP9U^JoVts3k=hf77J5t!$dR)K&VXL}QVSz+Y7kk&d`box@?USgGlSHy?vqyW+ zPW>b&L2Sy8KS=3YV{t&vAojYu{eo8cION80B6|yh)4ddjac2D-(c`zBZiKqOG)>P? zIcFg=R#od>jGsMPxY2jB$mc+UVWk#3aH+?VZ{vBfc_028o$6xm{KP}E!~L{!tHoPH z)wKgNU!L{N#PQDf30R)!^knB0buKYF)g6eN0jh^6+a&+4*jmWa1HxQr-p*&o;y+*VaUQ7NW9M)nmI6b)q-y5U4Z*;-VoT}F&eik&N*92`z-aEit2`99iW_RZAp_fg62EQ4(x3 z-_Vttp7Y4tYq=|L!Z1UzV9UdVK#~C&ZJB*vWh&sM4tl~6g z5bkf3_1V(z-N1XZuya(pk#4V*#u@4cIc^PojHpQt-w}3I%i5BBhUp9FbB;&YxXbl> zc6#{A3v55GGQLrf@^%qjEz^!>h+B>CHW(>UG)E;Akhz?fpzolMRHXcdxSz3;gb0fu zh#o!B)|wo%A0flACqp5;xJvvG0~0#ZFtmV$>Db`o#n_?qE!hSEik zOtS29O z_yDfd%uI_l81GgcN`ZhICtvFN*8;$c6e9A^pvX9A!m**gxd|1;9EEHVtQbrt6m1?K~3jFGIf-ucyWABseNit{2tvy5^xVHhJW;W7>;Q|435 z6mm+;k64s8_lWKhslTDdl1jU~~o!z%pVgzbP z)Use`kny~vq5Rs#Q!i{;&9SVJ3kez&Ur$_IWTCHPch_e7H|sQc*1=beg(67I&%Qss zH-f>!d#Qe!lvEPSgHKIJelo3xL2DcOqJLFPoSdlJ$h&D_PO5wSHuB#7WhdX0+tyo; zsg?)XKz)@_lHHQerrw^bmN;o$tn%DzF%>6z>qCtPT|Si^A-Xb*Z^B zq~dhr3BNK^F9khdXCT8T5-K=-hoNc4Fp-2wq3V0vC(30DQdcWIc!-!DIvps07vU#r zcyz=&@9o(#*I>dPVSS|d$S=+_Yj)#NC+@46G424%MRF99!W(sCA@YSJZM=uVmF+ zC9Og56CLbu7*kDl>V*dOV^#3&7j6x^OfYhe%QR`0lU-IFXsty&vSl@r9{;L1o z7%EosPGFLyyFG@vice@KQLmfipDzla#83pVh@3CACa8o|`4Goyhot z)w@mh5Dp8Lw~r60TDQn}{7Mb*`k!#4Z@m;?!~}i%cIZ^M(EFO}F-4Uo(+S1Q9y&EI zZp}9mWBGHE%TSUEilm|koeh;qalt&sE)jj^U)b*Mc$g)4l7uJ8xu4%%x6LZasdgR? z=9{Uwh&>@Y+;efy-M|mgnc#pVa-k8StD=Oe4Q6O6hl$P!LHUf`9w40@G7Ux)XWP*~ zY{(gu*QB%OP)wIs{h+tjk;3cVAIcEic-kT=Dsx!G!#?AY7i1~YZ&h<>6!t;ZS>~ZY z1~$})dj`%YFi5i|Yb`AV|AxZ$Gp0M>V=n zpZD-OT^T&0-3SGFdqRTf=r<_HQ9fWH>)~)&?Z0dhQCX)2Zzd8IF3kk4ya-tmuX4i& z{PYfs#EXO8@3)Z6;?2v8x?lY$!l#MAauD)O2qf0WRu^NFvX8aLn^8Wt^XU$ftd_uX|b(yBPJ6OxubipPoR| zt_cwD0NITqSeQtdvGoo3lN(&_7pIN+(bfZpEanr>CW|5qnYx=`A+OI3Vl)gRG@3KS zJGR>*XkN64iXDNjT{75Y3e zy;;mdvm9}&?tL9)mMsPx@qn0E)6FA9ZOZo^vhxx%JI*LE>( z;Z#QtGmb~gBq~q(CFIufe3S1g_P5N^h@QtKJJ>E7HttT`GQ!N2t09HPhe4C%&TWkN zG-tV?j-pe~Pd=I!+-4_@C8@iighA9_#iNdBOekCxjrU!SQKn3Qz;msdgU6Js-4K=~ zg)I{iLAQC~eQGV?>;;%&9U6X0%DP>Jw(4rQlmlt~K+c`rjCkx=k8{2%{G*Rts|&7B zzkQ9>v4+l=J?Cw>#>2711Y6n4oq&#JA6bD1Pg-$jrkT0NMoEOP_5zuWjWhd8o$9x~ z;J36I#NeFpojJum9DB@rF+tx<6^=4xyl}1)bHov3ir~YQsXnW=Qm%F1$c=9ffk|P; z=a))APY)xcVu(|iLPb-|YsyCLN8pbrRN}tsVFjT=QI~FW1UWJ~@Y`<;H)0p%jw@5+ zJ~$LOe>hWF%IFs9(3bP5=w^QtI5tf>HHW+SF1?b{q4MS2e*|n1x)2(Mo&kerrp|3j z>8W?=#`3<^3(M`NZMF|Q$RDmZ;ObNnStM$_e5W{)YO?9Yn^KUW_ozlOHSk2T9iPl2 z3vCe(8g&$qQr-k(B{;{JpU4oF)$eqgz#Vi0M6~AhwwXj+2agJyYl4bCp4`yOhsA|L z6fUFq<3eXkRa7+ICZ1u_su<|4L*<_Vh2hnmdj(=pmMyJ3fenIBoH@>{PWLduvTyvdao?zq~142Ax* zOg<-O!lU?VcTbYl9l-)e6DnvzOn*sZ*vZo?tT|MidMI&a@uNoVOPol(R9mow|1dDq zLfW@^JREXZqNuU#`rrm%TeQ%fXwtU+j%z-q$*~^_@=38K%m#2C z+S~UG+8)Cf+HcXgDh84UC!$}Xu!XpLI!0oRQFyHxDImYTaaS;259iSMoMMSZ*wa5{ z@ECV0(tk_)W|rW`If6A)skhi$y{B@I!`_GaEG@dI`lq-WIE+Z}Ww$4#7?s)NWy?mE zNx!KA&i&%s%oCr<7@p$mZ01JLO?SqJ&f2dZtd^PRLFz3M^a6tzEs~An>=)I(IFQ%B zVkv%e&(uVydx&|r`SGLJLha5)%C5=Or@?>_4$ZwmKy1@X| z?kZWHCXFui4>TZ#J4fbNTYBs5CkLp(+s=}}P60ceg)bXz)J#O(nN-KIrv%c7{bJ|! z+DYy)9Sy}3I=)@?rV@id#&V}O4ijaWy;_khn&JU86SW%qp=^6Ik_O9WG*fAW8VtG5 zw>`ecWN1+1nVT}JHRLB`kOk?DGu1CH$TYih6Syac!y{r^j!N%bIJ@(LkW4R@1MI%$ zy0<^zeJwc;vo5WRiHY!7YLR~$rMQLC-2b|Tdp~qv1Fb&edh}EuxIC>O$=bj-FqePl zu3C@+w_ntGlSDTyo?P)p0j=q8(xN_)L9zVf6vNYq~51?rDnHDxf5nLni7DMJyDW}RU6H|`Cf*BA% z9-dtexNb6!8bFJl@|u~xh-hlF$Q%L(ZhEb6tTXn_@V*Yo80G9lZ=?25K z#*KWlgwlO%;K*A z&qlpuuDga|(hYW*Kl=LD3$Fk50|qiBlK<;huciOBof{NCuP@?xDGmAec6=LIUJ9bj zu^2zi0?6cFZ^sQT(x%CzyLc3>S&jNsAgrK*-ae#mxsi4qi6S zDoJj~Dnol9JfY?^=Y=MraCy>jMMCPlMp1JG!n?j|7FCZgmYF>;0F(QBc3DmqQ^IK1 z8y!Guj6)!yhC#XTE97$CpX|7Y&jY0e@R$1m6Lr#5xJn>rT7jR&EyeG{@8*rdf4T_#amB zN7Aqx_1z{rZA5F9b>EM0&)V}LyJ+n8T3c7}8s^z7Y-uK{-$kYR-hDV_T2R;A!GHY! zv~|^SO|^d;5Mf9&k!}PLWrPCK(kOz0NJxl0l$1)17&$^|Q9?>W8b+fqax}sSkshT| zn+zDS!SFr2@9+8j_3rQU+2@@5-1oPx>s*&itE%%TuN!0z2Vnh8Zj0TO8$xu!P6Az9jR<55DeXZ=H*t>y&v;bx=tr@PvVbieo zdT!(xK$l`@1%jn-02Y6Zmi-Al9Dut1<24qjyf58{H@S41Kh^l4r|{j zGt@;6>oMMWnx{+o!I+0__0e^sfldFuOYfW6pa73B&V&o80o`#_(zVIdF;0RgboBWak~NBgNHjoH*i)AO-j-JO00 zcL12|d=ZIP8@nI0W*%ehKL88$&YNSPm7uFi5p&GIe~M zCbCveTFcp8@`EsP^2C;7ODkk(mlT*8GD^OzwfB79Q8Q>v$~7qM^VJamxB+k2sfedv z=ZRF&Ee*2$+mQW)B;`BeA$YU!gHm|F-1NjL(cgIb#a~f%SYG?nD{8jUdg4unt;aL^ zZ6;+ez!UZr4P{5e-bW!JBsZKj zqh zZ3b&}|90K2qt5>dx@;>B*Cc^HlHcA@ZcA;~hl&0hFaue`yS%wJd*|+p1HmnjiLzTG zGk$rt5B|$$C(!(O$h`e|;5opwLfS?s7|V!F8FC6btDWs8#W089BS%_JiRe%!J>FOF z2Q0hs6~f%eZ_~)%w{??it}L3|zsasf-ZakA<3u}5z|Ci5`gtb_4HXk$m}kpoam~+n z_qp$ePhZf!nA+$SyvDN@<($%U$)%%Z!Cvpipbq17_Pd<=^cTn#)oM4kL_ zAr8{6SXtZ0-NY~8*tVPC<-YpcPLS&D&|QJ8E^^)(p=1S!lnmzxFG^2skClGurkeuf zh&l9FOA*-4S-3bgDEX24P~nJysVGa1gp+BpAzgzU__yle3~JA_o%nmDDAlMA3)KlZ zYF%o?FYKo934{bro9Ji3qCk5pSj0V>hQoQE7(Ft&E7 zp{<6pyF)0=GK=l0RCgA#jHQ_2O~m@u!v|{J!LCocKieJFrCSa_lp^Yf0kLu3vjaqE zrW*8F$jST?69l$-pX{dy*r$zXff4uJqt}6;V(0PWYo>I_9YC1B%6-eo3S^4q;z88O zG`}KULDMjc0e?W=zK}m;Y-LNwtevTWWVH_B`8?=-}eWkvx@AWMV>Y67{U3qe~>^>#!MS|Tb+V^vI z80=2wrVXRqs=xMOSmV7|GLhb{<`|pG*&)TS<|DTIH|%X^0QU`R3xHoGxpdnRx4y>v zi>OS0wVd=^++z!t|8$4ocTzxEq5j{)#2zl5m%B8k$2mar&xIKc0>7&^I$D>Y?V_EO ztb6*am9>qR`&EQXVec?s~EpBt4lcavFpx1##(G^8}T;Jq?>@#{nBd6}XlTA2k+kqA9 ziAvnq+zB~SR!#zoC<9{_bO<2dJ`~UIouFvxj%}DUVuYacxZ0*amY)}whw+M(ZrW4` zR`D!9emeg9;5JU~ryh-Fkv>wPq{+M+4@4z!CfV7Rs)I=nX*h*tf*V;?vD_&|_50_# z(1gMq@3QMLrwxy?AIjHHt+0ysr}fW^29Dgu?B^ccYQh9=>xza~W-AJL09l@CM0TxM z2)6YEZYfH^{fcej8!BBNYSj*`z&2o*wZxNBiAycs=$ThE(zWx+@>{di7X??HN+OUG zqg`t6(1)sQ%}#kKiZ%QC!WMJ)rM~uziV$C{r&xRTFdA_e>6PP~s3E6azeVm$AAc`V zb2N8Ro_h|o7&Yyky?|3Cg3>S6;kd$%JT&USi9ATSz@*qYN(76~_~Fh;S#GaJv?L*o zBTlQwSKnzQ=nKwWCA<-uOV9_+2jnD-_Yvsavt@n(UIDksBAd>{d0gv1*XzPtlyump z2>AA{j2PASlf|7T8T9+XGoJ}{*DM?V#i@G*quGDY!&91djGl56mMp@ymjL)^w%*N) zvyEvatFak5)fedvMCPX4YVe+e@1L_4{YC|_>s4Mbw|!*!Vg-r*;^juW4+*ygxI3UZ zrcbL-w?@!M!dWQY$)jGWR_t@~(EfA8vsDM36n+8HSPb{M`ItvAs$G9)4Gs(lm`KuV zrlMf_rCPJ&#tHe|e)jDpz~Q2*>~AJIxX)*$=Y(>NneB~ot3P1nGarADQT{P=dJ;$%{wS6rmqVR2 zo}`%_`&6HsU*Q$@7UJS^X9XjK3HcMhUjvN-HDvw?JmE)dJVi2 zqxeX{OA`qZmT|NMSd9;qSBaWR@^B5Saj=)%k3iDGx*EqJU>w9^Fi@>g5?e_;1BDEayb1owLH3j-eBEDVpR`Po5gH=8_lyBAr{?fU7CHcv2aog^f z9yeMnUeg*d@xcYS|D&lM3-_J@JQ=F2|E|gRcnh=I^B0FOqanzQYqVW!m(g55>~63j zd+-y=xQ5AZktt_y7lnQ0b;+A{Gm6lS=|3%P zts^a?ykCDG-9ZHEnuQ8^r97Us_}K1ZSbDy@{F}e(Ys-6$_nQp%&+?{PGpiJFP2;gB zKnYuEtF-Xjm5JADNua~CRao>i^le#5MK@$RQYB!1ENOEenlFru!7poF95 z(zdhkn@j9%lw8BYuFej8B%;NW+fHVUc8QLXu-ZlW&#EnCBd-z&_ZQN?UDzi*R-i2_ zWE5$Hce?0M>?PuhfwHUqJzT%mzV74O7=78@7iN2J%yZM}K&fvZZxOU1-6a;GAd~2a z$m?a3;m81+{XNWXqCaPCUr`dHaREm`O1|N$Mg664(N&Za&v<>e{JcwJwu()lZH(T> zv>o^Aa2BT@55flmdnIk{djv$egcdgEA{^0sgSS>(zp@D5n-SAI=J_cFooI)bI(UO{ z@nOwt41MF?lhx^D3Ag3~LNYixJ~<&deuKh*g6ocIv@Bck$j@d&6P|)>z)zQ~!!s`Z zwPbWTogN)2t#UZykYJr?8?39;;O6i?YpXjz9F`tj)?gyuEhr>Bv2N;2t@5@g^=y#& zGW@G9v+Rj|Vd( zRCTTJe3OdYq%l4%eIJvqH3z=VP^Qc2o8l9Zm#$^EOq=_d+5J)k^IhWsgV3dL_BHw) zC4u2DI}Vlvms3i`6cxvSvqyFsbA3IR!HUEzBU3x7c8RMf?TM!~uwY=g=-rzCO z&_2{NQAP4@fl^R3LWYmaLUWd*B72foIIi~YPpZ1$w;ZaZuyWDfb4C0+{IM)5LaZvD zCh>qz{JnDg=zeVozXz9=Y=U&5JF44sktP3%ja?VX24z^B#*oK{A`LTOBE^d28Kjq-!@2V3rwtfuy|8U7t_OG_@ zAw@vdnj~{(>eLIXm%If`u6u=|^Z1ARCR>~zA8=PDM>JCM0Cmj#gEaL;r zj=W)<0xU;q!#gK;w*Bg!h+`rMg~F~EJ7gC(=x2CstI9aa)ngXXyA%Wg=~E>=fnojB zM8`jmY~`IA=R+c=I3`=zVP3!Ze&n@V5Daa=|J#XE3Q1oE#ZvHI`hH+2G`0p(9F&`R z(J~#LYQmrUmX@kpl*ahY_ooqbw5xho-1KHF!Uh=wGGkZrqxH0C*cvD9H5sm!&tpQokvv_kEZLTBE^sa7P#TJ(t`67Amu%cdO?+Y|% zG2{#8QgLox;XLmel^@m?<;pz}iV?a|5f;*Z86IS|9ymrz#9yEks@~9^g=0k$c>*2c z+lKTC}pZUWG(i;o{z0Ctd&dtgo|h z26cv~GH>0fDoO?>1X>ZD8Dr9#lvK${2-t7Qt!}o^U#e) zKHg8Z8n}5D?(Bb0Y~JvBrhYB>dg{qJz~;x@Blp%ojF_>|mmo$eP3pI{68p!*dU-+2 z-Q33aLlxry@B#ghjDg^3tik;cx!AJ-m{=^-p!eb^j?0i{_CU@vn)Ua$Ob18J()^$W zc=uKpb-aPZc2Dm`V#4xsn3Pyj2hbp8ZU3%n{9(27bcvMqs|)DW4V`8(+1TRV@L*Ko zriF6$c3Au%$t5{OCF$_0%57$@UbnJJ-Z^Sv3T9~nWl-#=>nc#SnH1(We00w~&AT+b z+<*qbe(!+=_Yu;j%@bRc^_+%C;|Eo)k&~ygjNsFft^dRA7q9w#CHyA)>}!lv z_K9MjV(*s?TfmW9GpiOO0%!IuQWdIq1^YOvTxHDtM1Z(|6d`BYycFu?G_J@EmvSUu zY}-FXrL9J@f0ozf=h(_lq*F_LGHYRkm;EvJo50xTI^ac;S)(1kCdlIP{ew)((WT8z zb%Kmv41_zY#tWq7_n_}^GcSG|iQWsLqZ^rw+0odg$7hflE!=t3|zaud1bNuPB;Q53Bkm7_io~_iwV%5bsSwxIZiLXB0UK8*W zvkX2y$fGmlPqZkxz<N({|r0N z$IEo!e+EYCP6Kk4kU$zyiz&V9JkX;=>Fplh9>w@`qCDXj@f5k({?zG0)pt5&r|dxm z@s~EFpdKT9HkBlNecbu&OUa-oDL2zU-)yy=7Goh2==&IB?UDD^M*Bxr2L$|g*Ao6+ zVqnBiy{sWr@j9yWrM4hjm=THi>KdqX1(f6ShmRWHsSFHrN9Jq!3O@V45CouueGo&` zO)owzEjl^zg`iuPlvh?aGr(bmtn^dFP!NNT-RaWg!Gr&!0l+oh z9q?VB9f-lt4x3&#bmQN^OGU{V#=g9f#=_|Viszg32eXKu?yb3?bPm}6lj;TkbLszr z7Sh?Q4?*~so~oNt)GhI0V3=!d$Vk$rDvaa*yBe7F355TpO_*)jjPjV;pa6abI!4;n In$IHs2c81%6aWAK literal 0 HcmV?d00001 diff --git a/build/favicon-7c63c2e1.ico b/build/favicon-7c63c2e1.ico deleted file mode 100644 index 9c8cb522b0c47c5d9d79c92c95b8ec96c36d2a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmcIkJx{|h5H%7TOU1y<$nW7Fu<@hV7#LYu*;!DVs7+cmAGB4Js^2L|>-yp6$dyV< z6jkCyw$FF(?tEt}LR{#t(GYsR6_1xf+z27=^w27;DfN00Lffvd%3=0;LIsqP*zIHm z<9|#_?Mz_Dd&bA-6V}-lQf_M{TPzmn^?bv9dw;;o>pgt$3+=Xx`Fvg(V>X+i*=!;R z0w|@B=LNpkIX0UO;y5<8$z*aeMxN(z90$YUaBq*}2w@oP_oLCsaLBb_9)fr1&PilhFAVR+C#*6zBl;nL?frqijpWBT!qmdhph xo+$Gid>ectRiF?1(`vQMYGw9^wmM*4tJMnQ@z{(k%MNO-6QeH2{s+!oe*lVx-;MwP diff --git a/build/fonts/slate-7b7da4fe.ttf b/build/fonts/slate-7b7da4fe.ttf deleted file mode 100644 index ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 diff --git a/build/fonts/slate-cfc9d06b.eot b/build/fonts/slate-cfc9d06b.eot deleted file mode 100644 index 13c4839a1975d4c92d66753d75553f922743c6ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse - - -Generated by IcoMoon - - - - - - - - - - diff --git a/build/fonts/slate.woff b/build/fonts/slate.woff deleted file mode 100644 index 1e72e0ee0018119d7c814c2097cc60c0bcd05d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCym@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? diff --git a/build/images/logo-22aa55c6.png b/build/images/logo-22aa55c6.png deleted file mode 100644 index 93c209d3603c124fc141e154520ca873cabf92d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11850 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 diff --git a/build/images/logo-bbe8927d.svg b/build/images/logo-bbe8927d.svg deleted file mode 100644 index df4c6f5..0000000 --- a/build/images/logo-bbe8927d.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - Layer 1 - image/svg+xmlGroup 26 - image/svg+xmlGroup 26 - - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/build/images/navbar-cad8cdcb.png b/build/images/navbar-cad8cdcb.png deleted file mode 100644 index df38e90d87e1a215371b4977e18cde90f8832537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVQ%R6tFatx` - - - - - - - API Reference - - - - - - - - - - - - - - NAV - - - -