From 1cd2f40c2cbc8eb9b5d156d458275076a9b04a40 Mon Sep 17 00:00:00 2001 From: John Mulhausen Date: Fri, 12 Jun 2020 10:31:47 -0700 Subject: [PATCH] More cruft deletion, Docker support, GitHub Pages migration --- .gitignore | 4 + Dockerfile | 3 + Gemfile | 69 +- Gemfile.lock | 240 +- README.md | 197 +- _config.yml | 27 - core/advanced_usage.md | 2 - core/aglio_templates/core.jade | 36 - core/aglio_templates/mixins.jade | 357 --- core/aglio_templates/public.jade | 53 - core/aglio_templates/scripts.js | 223 -- core/api-specs.md | 2364 -------------------- core/atlas_network.md | 1 - core/attic/README.md | 4 - core/attic/advanced_usage.md | 124 - core/attic/figures/gaia-authentication.png | Bin 34159 -> 0 bytes core/attic/figures/gaia-connect.png | Bin 62805 -> 0 bytes core/attic/figures/gaia-getfile.png | Bin 63129 -> 0 bytes core/attic/figures/gaia-listdir.png | Bin 57636 -> 0 bytes core/attic/figures/gaia-putfile.png | Bin 80323 -> 0 bytes core/attic/gaia.md | 461 ---- core/attic/openbazaar.md | 71 - core/attic/resolver.md | 33 - core/attic/tutorial_creation.md | 604 ----- core/basic_usage.md | 1 - core/blockstack-did-spec.md | 818 ------- core/blockstack_naming_service.md | 1 - core/cli.md | 1 - core/faq_evaluators.md | 148 -- core/gaia.md | 1 - core/glossary.md | 1 - core/interactive_regtest_macros.md | 3 - core/namespace_creation.md | 1 - core/openbazaar.md | 1 - core/resolver.md | 1 - core/search.md | 1 - core/setup_core_portal.md | 67 - core/subdomain.md | 1 - 38 files changed, 289 insertions(+), 5630 deletions(-) create mode 100644 Dockerfile delete mode 100644 core/advanced_usage.md delete mode 100644 core/aglio_templates/core.jade delete mode 100644 core/aglio_templates/mixins.jade delete mode 100644 core/aglio_templates/public.jade delete mode 100644 core/aglio_templates/scripts.js delete mode 100644 core/api-specs.md delete mode 100644 core/atlas_network.md delete mode 100644 core/attic/README.md delete mode 100644 core/attic/advanced_usage.md delete mode 100644 core/attic/figures/gaia-authentication.png delete mode 100644 core/attic/figures/gaia-connect.png delete mode 100644 core/attic/figures/gaia-getfile.png delete mode 100644 core/attic/figures/gaia-listdir.png delete mode 100644 core/attic/figures/gaia-putfile.png delete mode 100644 core/attic/gaia.md delete mode 100644 core/attic/openbazaar.md delete mode 100644 core/attic/resolver.md delete mode 100644 core/attic/tutorial_creation.md delete mode 100644 core/basic_usage.md delete mode 100644 core/blockstack-did-spec.md delete mode 100644 core/blockstack_naming_service.md delete mode 100644 core/cli.md delete mode 100644 core/faq_evaluators.md delete mode 100644 core/gaia.md delete mode 100644 core/glossary.md delete mode 100644 core/interactive_regtest_macros.md delete mode 100644 core/namespace_creation.md delete mode 100644 core/openbazaar.md delete mode 100644 core/resolver.md delete mode 100644 core/search.md delete mode 100644 core/setup_core_portal.md delete mode 100644 core/subdomain.md diff --git a/.gitignore b/.gitignore index e70e5f19..240c87c5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ node_modules _site .sass-cache .jekyll-metadata +Gemfile.lock +**/.DS_Store +**/desktop.ini +**/.svn diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..b6519f62 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM starefossen/github-pages:198 + +ADD . /usr/src/app diff --git a/Gemfile b/Gemfile index 1a495b8a..f5ffef68 100644 --- a/Gemfile +++ b/Gemfile @@ -1,40 +1,43 @@ source "https://rubygems.org" -# Hello! This is where you manage which Jekyll version is used to run. -# When you want to use a different version, change it below, save the -# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# Update me once in a while: https://github.com/github/pages-gem/releases +# Please ensure, before upgrading, that this version exists as a tag in starefossen/github-pages here: +# https://hub.docker.com/r/starefossen/github-pages/tags/ # -# bundle exec jekyll serve +# Fresh install? # -# This will help ensure the proper Jekyll version is running. -# Happy Jekylling! -gem "jekyll", "3.8.6" - -# This is the default theme for new Jekyll sites. You may change this to anything you like. -# gem "minima", "~> 2.0" - -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -# gem "github-pages", group: :jekyll_plugins - -# If you have any plugins, put them here! -group :jekyll_plugins do - gem "jekyll-feed", "~> 0.6" - gem 'jekyll-paginate', '~> 1.1' - gem 'jekyll-seo-tag' - gem 'jekyll-gist' - gem 'jekyll-avatar' - gem 'jekyll-titles-from-headings' - gem 'jekyll-sitemap' - gem 'jekyll-toc' - gem 'jekyll-redirect-from' - gem 'jekyll-google-tag-manager' -end +# Windows: +# Install Ruby 2.3.3 x64 and download the Development Kit for 64-bit: +# https://rubyinstaller.org/downloads/ +# +# Run this to install devkit after extracting: +# ruby /dk.rb init +# ruby /dk.rb install +# +# then: +# gem install bundler +# bundle install +# +# Mac/Linux: +# Install Ruby 2.3.x and then: +# gem install bundler +# bundle install +# +# --------------------- +# Upgrading? Probably best to reset your environment: +# +# Remove all gems: +# gem uninstall -aIx +# +# (If Windows, do the dk.rb bits above, then go to the next step below) -group :development do - gem 'guard' -end +# Install anew: +# gem install bundler +# bundle install +# This only affects interactive builds (local build, Netlify) and not the +# live site deploy, which uses the Dockerfiles found in the publish-tools +# branch. -# Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] +gem "github-pages", "198" +gem 'wdm' if Gem.win_platform? diff --git a/Gemfile.lock b/Gemfile.lock index 19eef83a..9b497959 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,33 +1,93 @@ GEM remote: https://rubygems.org/ specs: + activesupport (4.2.11.1) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - coderay (1.1.2) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) concurrent-ruby (1.1.6) + dnsruby (1.61.3) + addressable (~> 2.5) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) + ethon (0.12.0) + ffi (>= 1.3.0) eventmachine (1.2.7) - faraday (0.17.1) + execjs (2.7.0) + faraday (1.0.1) multipart-post (>= 1.2, < 3) - ffi (1.12.2) - formatador (0.2.5) + ffi (1.13.1) forwardable-extended (2.6.0) - guard (2.16.1) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) + gemoji (3.0.1) + github-pages (198) + activesupport (= 4.2.11.1) + github-pages-health-check (= 1.16.1) + jekyll (= 3.8.5) + jekyll-avatar (= 0.6.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.5) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.11.0) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.12.1) + jekyll-mentions (= 1.4.1) + jekyll-optional-front-matter (= 0.3.0) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.2.0) + jekyll-redirect-from (= 0.14.0) + jekyll-relative-links (= 0.6.0) + jekyll-remote-theme (= 0.3.1) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.5.0) + jekyll-sitemap (= 1.2.0) + jekyll-swiss (= 0.4.0) + jekyll-theme-architect (= 0.1.1) + jekyll-theme-cayman (= 0.1.1) + jekyll-theme-dinky (= 0.1.1) + jekyll-theme-hacker (= 0.1.1) + jekyll-theme-leap-day (= 0.1.1) + jekyll-theme-merlot (= 0.1.1) + jekyll-theme-midnight (= 0.1.1) + jekyll-theme-minimal (= 0.1.1) + jekyll-theme-modernist (= 0.1.1) + jekyll-theme-primer (= 0.5.3) + jekyll-theme-slate (= 0.1.1) + jekyll-theme-tactile (= 0.1.1) + jekyll-theme-time-machine (= 0.1.1) + jekyll-titles-from-headings (= 0.5.1) + jemoji (= 0.10.2) + kramdown (= 1.17.0) + liquid (= 4.0.0) + listen (= 3.1.5) + mercenary (~> 0.3) + minima (= 2.5.0) + nokogiri (>= 1.8.5, < 2.0) + rouge (= 2.2.1) + terminal-table (~> 1.4) + github-pages-health-check (1.16.1) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (~> 3.0) + typhoeus (~> 1.3) + html-pipeline (2.13.0) + activesupport (>= 2) + nokogiri (>= 1.4) http_parser.rb (0.6.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.8.6) + jekyll (3.8.5) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) @@ -40,57 +100,127 @@ GEM pathutil (~> 0.9) rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) + jekyll-avatar (0.6.0) + jekyll (~> 3.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.5) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1) + rouge (~> 2) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) jekyll-feed (0.11.0) jekyll (~> 3.3) jekyll-gist (1.5.0) octokit (~> 4.2) - jekyll-google-tag-manager (1.0.3) - jekyll (>= 3.3, < 5.0) + jekyll-github-metadata (2.12.1) + jekyll (~> 3.4) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.4.1) + html-pipeline (~> 2.3) + jekyll (~> 3.0) + jekyll-optional-front-matter (0.3.0) + jekyll (~> 3.0) jekyll-paginate (1.1.0) - jekyll-redirect-from (0.15.0) - jekyll (>= 3.3, < 5.0) + jekyll-readme-index (0.2.0) + jekyll (~> 3.0) + jekyll-redirect-from (0.14.0) + jekyll (~> 3.3) + jekyll-relative-links (0.6.0) + jekyll (~> 3.3) + jekyll-remote-theme (0.3.1) + jekyll (~> 3.5) + rubyzip (>= 1.2.1, < 3.0) jekyll-sass-converter (1.5.2) sass (~> 3.4) - jekyll-seo-tag (2.6.1) - jekyll (>= 3.3, < 5.0) + jekyll-seo-tag (2.5.0) + jekyll (~> 3.3) jekyll-sitemap (1.2.0) jekyll (~> 3.3) - jekyll-titles-from-headings (0.5.3) - jekyll (>= 3.3, < 5.0) - jekyll-toc (0.12.2) - nokogiri (~> 1.9) + jekyll-swiss (0.4.0) + jekyll-theme-architect (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.5.3) + jekyll (~> 3.5) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.1) + jekyll (~> 3.3) jekyll-watch (2.2.1) listen (~> 3.0) + jemoji (0.10.2) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (~> 3.0) kramdown (1.17.0) - liquid (4.0.3) - listen (3.2.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - lumberjack (1.0.13) + liquid (4.0.0) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) mercenary (0.3.6) - method_source (0.9.2) mini_portile2 (2.4.0) + minima (2.5.0) + jekyll (~> 3.5) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.14.1) multipart-post (2.1.1) - nenv (0.3.0) nokogiri (1.10.9) mini_portile2 (~> 2.4.0) - notiffany (0.1.3) - nenv (~> 0.1) - shellany (~> 0.0) - octokit (4.14.0) + octokit (4.18.0) + faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.2) forwardable-extended (~> 2.6) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - public_suffix (4.0.4) - rb-fsevent (0.10.3) + public_suffix (3.1.1) + rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - rouge (3.17.0) + rouge (2.2.1) + ruby-enum (0.8.0) + i18n + ruby_dep (1.5.0) + rubyzip (2.3.0) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -100,26 +230,20 @@ GEM sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) - shellany (0.0.1) - thor (0.20.3) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.7) + thread_safe (~> 0.1) + unicode-display_width (1.7.0) PLATFORMS ruby DEPENDENCIES - guard - jekyll (= 3.8.6) - jekyll-avatar - jekyll-feed (~> 0.6) - jekyll-gist - jekyll-google-tag-manager - jekyll-paginate (~> 1.1) - jekyll-redirect-from - jekyll-seo-tag - jekyll-sitemap - jekyll-titles-from-headings - jekyll-toc - tzinfo-data + github-pages (= 198) BUNDLED WITH 2.1.4 diff --git a/README.md b/README.md index 8a204748..8a331877 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,46 @@ -# README: Overview Documentation Repository +# Welcome to the Blockstack documentation repo! This README explains the user cases, source file organization, and procedures for building the Blockstack documentation. You can find the documentation at https://docs.blockstack.com -## Use Cases +You can also make use of the **Edit this page on GitHub** link from any https://docs.blockstack.org page. -Blockstack is a ecosystem build around a platform. There are several types of users to support with the documentation. Types are exist when they can operate within a vertical of the ecosystem. These are the users that can appear within this ecosystem and that the docs must support. +## Authoring Environment Setup - - - - - - - - - - - - - - - - - - - - - - - - - -
UsersDescription
STX holdersUsers who have purchased STX and who use our wallet to move STX holdings. These users want to know about Blockstack as a company and STX as an investment token. They have a Blockstack identity, they use the Blockstack wallet, and may also use the Blockstack explorer.
DApp usersUsers who make use of applications built on the Blockstack platform. These users have a Blockstack identity and typically use the Blockstack Browser at some point.
Dapp developersUsers who develop applications on the Blockstack platform.
Hub ProvidersUsers who sell or maintain a Gai services are hub providers. These users may be more devops user types as opposed to developers.
Core service programmersThese are users that run Stacks node or who write Clarity contracts. These are also users who build wallets or explorers into the Blockstack platform.
+When setting up your machine for the first time, run: -Finally, a key user set but seldom mentioned for any company docs is the company employees. These users are expected to make use of the documentation when onboarding or to support other users. +```bash +#install Ruby Version Manager (rvm.io/rvm/install) +\curl -sSL https://get.rvm.io | bash -s stable +# restart terminal or run the following source command: +source ~/.rvm/scripts/rvm +# install Ruby 2.7 and the needed dependencies +rvm install 2.7 +rvm use 2.1 --default +gem install bundler +# make sure you're in the root of your clone of this repo and run +bundle install +``` -## Documentation backend +Then when authoring, run: + +```bash +jekyll serve +``` + +You can preview your changes by visiting `http://localhost:4000` + +## Docker Instructions for Authoring + +Don't want to install a bunch of stuff and don't mind the overhead of using Docker? Do this instead: + +```bash +docker build -t blockdocs . +docker run -p 4000:4000 -ti -v "$(pwd)":/usr/src/app blockdocs +``` -Our documentation is written in Markdown (`.md`), built using [Jekyll](https://jekyllrb.com/), and deployed to a Netlify server. Serving the content from Netlify allows us to use functionality (plugins/javascript) not supported with standard GitHub pages. +## Documentation backend -Blockstack versions it source files in a public GitHub repo (duh :smile). You can submit changes by cloning, forking, and submitting a pull request. You can also make use of the **Edit this page on GitHub** link from any https://docs.blockstack.org page. +Our documentation is written in Markdown (`.md`), built using [Jekyll](https://jekyllrb.com/), and deployed to a Netlify server. Serving the content from Netlify allows us to use functionality (plugins/javascript) not supported with standard GitHub pages. Some content is single sourced. Modifying single source content requires an understanding of that concept, how it works with Liquid tags, and the organization of this repo's source files. @@ -56,52 +57,52 @@ Directories that contain information used to build content. Technical Repo(s) - _android - SDK tutorial. Part of the developer menu. + android + SDK tutorial. https://github.com/blockstack/blockstack-android - _browser - Information for end-users about our identity, Storage, and using the browser. There are also three of the original tutorials in there. User docs controlled by in the the user menu. The three tutorials that appear in the developer menu There is an outstanding issue to move these. + browser + Information for end-users about our identity, Storage, and using the browser. https://github.com/blockstack/blockstack-browser - _common + common Contains several shell files that redirect to our reference documentation sites such as Javascript, IOS, and so forth. The reference docs are linked from the developer, core, and Gaia menus. Each of these references are generated by their respective repos, core.blockstack.org from blockstack-core, Javascript docs from the blockstack.js and so forth. - _core - Information for wallet, blockchain, or Clarity developers -- including Atlas, BNS, and so forth. This content STILL needs to be synced with the master docs subdirectory in blockstack-core. - blockstack-core + core + Information for wallet, blockchain, or Clarity developers -- including Atlas, BNS, and so forth. This content STILL needs to be synced with the master docs subdirectory in blockstack-core. + blockstack-core - _develop - Information for application developers covers using the Javascript library, our mobile SDKs, and the concepts hat support them. Navigation controlled by developer menu + develop + Information for application developers covers using the Javascript library, our mobile SDKs, and the concepts hat support them. This information was never associated with a single repo. Much of it does rely heavily on https://github.com/blockstack/blockstack.js. - _faqs - Contains files for single-sourcing all the FAQs. The Blockstack docs has a single page that lists all the faqs; then several pages in different sections re-use this information. See the FAQs section below for detail about how these files figure into FAQS. + faqs + Contains files for single-sourcing all the FAQs. The Blockstack docs has a single page that lists all the faqs; then several pages in different sections re-use this information. See the FAQs section below for detail about how these files figure into FAQS. Not related to repo. - _includes + -includes Information reused (markdown or html) in many places, common html used in pages and notes. These files don't correspond to a repository. - _ios - SDK tutorial. Part of the developer menu. + ios + SDK tutorial. https://github.com/blockstack/blockstack-ios - _org - Information for Stacks holders and people curious about what Blockstack does. Appear in the the organization menu + org + Information for Stacks holders and people curious about what Blockstack does Not associated with any repository. - _storage - Information for developers using storage in their apps or creating Gaia servers. Appear in the the storage menu + storage + Information for developers using storage in their apps or creating Gaia servers. https://github.com/blockstack/blockstack-gaia @@ -114,19 +115,15 @@ These are the other directories in the site structure: Purpose - _data + -data JSON source files for the FAQS, CLI, and clarity reference. Menu configurations YAML files. The CSV file with the glossary. - _layouts + -layouts Layouts for various pages. The community layout is significantly different from the other layouts. - - _plugins - Code files for plugins. - - _sass + -sass Style folder including customizations. @@ -135,73 +132,13 @@ These are the other directories in the site structure: - - -## Building the documentation source for display - -If you are making significant changes to the documentation, you should build and view the entire set locally before submitting a PR. - -## Run locally - -To run locally: - -1. Install Jekyll into your workstation environment -2. Build and serve locally. - - ``` - bundle exec jekyll serve --config _config.yml,staticman.yml --livereload - ``` - - Use this format to turn on production features: - - ``` - JEKYLL_ENV=production bundle exec jekyll serve --config _config.yml - ``` -## Test a Deploy with Surge - -You can also do a test deploy using a tool like [Surge](https://surge.sh/). - -``` -cd _site -surge -``` - -Make sure you delete the deployed Surge domain when you are done. Using the `teardown` command. - -``` - surge – single command web publishing. (v0.21.3) - - Usage: - surge - - Options: - -a, --add adds user to list of collaborators (email address) - -r, --remove removes user from list of collaborators (email address) - -V, --version show the version number - -h, --help show this help message - - Additional commands: - surge whoami show who you are logged in as - surge logout expire local token - surge login only performs authentication step - surge list list all domains you have access to - surge teardown tear down a published project - surge plan set account plan - - Guides: - Getting started surge.sh/help/getting-started-with-surge - Custom domains surge.sh/help/adding-a-custom-domain - Additional help surge.sh/help - - When in doubt, run surge from within your project directory. - ``` - ## Deployment of the site The documentation is deployed to Netlify using the following command: - ``` - JEKYLL_ENV=production bundle exec jekyll build --config _config.yml +``` +JEKYLL_ENV=production bundle exec jekyll build --config _config.yml +``` ## Generated documentation @@ -214,7 +151,7 @@ The `_data/cliRef.json` file is generated from the `blockstack-cli` subcommand ` 2. Generate the json for the cli in the `docs.blockstack` repo. ``` - $ blockstack-cli docs | python -m json.tool > _data/cliRef.json + $ blockstack-cli docs | python -m json.tool > _data/cliRef.json ``` 3. Make sure the generated docs are clean by building the documentation. @@ -247,7 +184,7 @@ As of 8/12/19 Clarity is in the [develop](https://github.com/blockstack/blocksta ``` $ docker run --name docsbuild -it blockstack-test blockstack-core docgen | jsonpp > ~/repos/docs.blockstack/_data/clarityRef.json ``` - + This generates the JSON source files which are consumed through Liquid templates into markdown. 7. Rebuild the documentation site with Jekyll. @@ -297,7 +234,7 @@ You can view [the source code](https://github.com/blockstack/blockstack-core/blo The FAQ system servers single-sourced content that support the FAQs that appear in blockstack.org, and stackstoken.com site. We have FAQs that fall into these categories: -* general +* general * appusers * dappdevs * coredevs @@ -311,10 +248,10 @@ FAQs are usually written internally by a team that are unfamiliar with markdown 1. Draft new or revised FAQs in a Google or Paper document. 2. Review the drafts and approve them. 3. Convert the FAQ document to HTML. -4. Strip out the unnecessary codes such as `id` or `class` designations. +4. Strip out the unnecessary codes such as `id` or `class` designations. This leaves behind plain html. 5. Add the new FAQs to the `_data/theFAQS.json` file. - Currently this is manually done through cut and paste. + Currently this is manually done through cut and paste. 6. Copy the JSON for `appminers` categories to the `_data/appFAQ.json` file. 7. Run the Jekyll build and verify the content builds correctly by viewing this `LOCAL_HOST/faqs/allfaqs` 8. Push your changes to the site and redeploy. @@ -343,9 +280,3 @@ FAQs are usually written internally by a team that are unfamiliar with markdown Source file for all the FAQs. - - -# Technology Reference - -* [UIKit](https://getuikit.com/docs/grid) -* [Liquid templates](https://shopify.github.io/liquid/) diff --git a/_config.yml b/_config.yml index b6583cab..8996bd33 100644 --- a/_config.yml +++ b/_config.yml @@ -129,40 +129,13 @@ include: - _redirects - _data exclude: - - package-lock.json - - package.json - - Guardfile - '*/glossary.md' - '*/README.md' - README.md - - THEME_README.md - Gemfile - Gemfile.lock - - 'node_modules' - collections.json - get-content.sh - - _core/aglio_templates - - _core/attic - - _core/api-specs.md - - _core/setup_core_portal.md - - _core/advanced_usage.md - - _core/atlas_network.md - - _core/basic_usage.md - - _core/blockstack_naming_service.md - - _core/cli.md - - _core/blockstack-did-spec.md - - _core/faq_evaluators.md - - _core/gai.md - - _core/glossary.md - - _core/interactive_regtest_macros.md - - _core/namespace_creation.md - - _core/openbazaar.md - - _core/resolver.md - - _core/search.md - - _core/subdomain.md - - _data/*.yml - - _data/*.csv - - _data/cliRef.json sass: style: compressed diff --git a/core/advanced_usage.md b/core/advanced_usage.md deleted file mode 100644 index aadc8584..00000000 --- a/core/advanced_usage.md +++ /dev/null @@ -1,2 +0,0 @@ - -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/aglio_templates/core.jade b/core/aglio_templates/core.jade deleted file mode 100644 index de87cfe9..00000000 --- a/core/aglio_templates/core.jade +++ /dev/null @@ -1,36 +0,0 @@ -doctype - -include mixins.jade - -html - head - meta(charset="utf-8") - title= self.api.name || 'API Documentation' - link(rel="stylesheet", href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css") - style!= self.css - body.preload - #nav-background - div.container-fluid.triple - .row - block nav - +Nav(false) - - .content - #right-panel-background - - block content - +ContentTriple(false) - - .middle - p.text-muted(style="text-align: center;") - - script: include scripts.js - - if self.livePreview - script(src="/socket.io/socket.io.js") - script. - var socket = io(); - socket.on('refresh', refresh); - socket.on('reconnect', function () { - socket.emit('request-refresh'); - }); diff --git a/core/aglio_templates/mixins.jade b/core/aglio_templates/mixins.jade deleted file mode 100644 index ddc54690..00000000 --- a/core/aglio_templates/mixins.jade +++ /dev/null @@ -1,357 +0,0 @@ -mixin TryMe(action) - //- Give a "try-me" link for the public api endpoint - - var myUri = action.uriTemplate - - action.parameters.forEach( function (x) { myUri = myUri.replace( "{" + x.name + "}", x.example) } ) - .title - strong - h4 - div - div - span.method(class="badge get",style="float:left") - a.method(href=myUri, style="color:rgb(51, 122, 183);font-size:12pt") - = "Try It!" - |   - p - div - |   - -mixin Badge(method) - //- Draw a badge for a given HTTP method - case method - when 'GET' - span.badge.get: i.fa.fa-arrow-down - when 'HEAD' - span.badge.head: i.fa.fa-info-circle - when 'OPTIONS' - span.badge.options: i.fa.fa-dot-circle-o - when 'POST' - span.badge.post: i.fa.fa-plus - when 'PUT' - span.badge.put: i.fa.fa-pencil - when 'PATCH' - span.badge.patch: i.fa.fa-pencil - when 'DELETE' - span.badge.delete: i.fa.fa-times - default - span.badge: i.fa.fa-dot-circle-o - -mixin Nav(onlyPublic) - //- Draw a navigation bar, which includes links to individual - //- resources and actions. - nav - if self.api.navItems && self.api.navItems.length - .resource-group - .heading - .chevron - i.open.fa.fa-angle-down - a(href='#top') Overview - .collapse-content - ul: each item in self.api.navItems - li - a(href=item[1])!= item[0] - - if (onlyPublic){ - - myGroups = self.api.resourceGroups.filter( filter_public_resourcegroups ) - - }else{ - - myGroups = self.api.resourceGroups.filter( filter_core_resourcegroups ) - - } - each resourceGroup in myGroups || [] - .resource-group - .heading - .chevron - i.open.fa.fa-angle-down - a(href=resourceGroup.elementLink)!= resourceGroup.name || 'Resource Group' - .collapse-content - ul - each item in resourceGroup.navItems || [] - li - a(href=item[1])!= item[0] - - if (onlyPublic){ - - myResources = resourceGroup.resources.filter( filter_public_resources ) - - }else{ - - myResources = resourceGroup.resources.filter( filter_core_resources ) - - } - each resource in myResources || [] - li - - if (onlyPublic){ - - myActions = resource.actions.filter( filter_public_actions ) - - }else{ - - myActions = resource.actions.filter( filter_core_actions ) - - } - if !self.condenseNav || (myActions.length != 1) - a(href=resource.elementLink)!= resource.name || 'Resource' - ul: each action in myActions || [] - li: a(href=resource.elementLink) - +Badge(action.method) - != action.name || action.method + ' ' + (action.attributes && action.attributes.uriTemplate || resource.uriTemplate) - else - - var action = myActions[0] - a(href=resource.elementLink) - +Badge(action.method) - != action.name || resource.name || action.method + ' ' + (action.attributes && action.attributes.uriTemplate || resource.uriTemplate) - //- Link to the API hostname, e.g. api.yourcompany.com - each meta in self.api.metadata || {} - if meta.name == 'HOST' - p(style="text-align: center; word-wrap: break-word;") - a(href=meta.value)= meta.value - -mixin Parameters(params) - //- Draw a definition list of parameter names, types, defaults, - //- examples and descriptions. - .title - strong URI Parameters - .collapse-button.show - span.close Hide - span.open Show - .collapse-content - dl.inner: each param in params || [] - dt= self.urldec(param.name) - dd - code= param.type || 'string' - |   - if param.required - span.required (required) - else - span (optional) - |   - if param.default - span.text-info.default - strong Default:  - span= param.default - |   - if param.example - span.text-muted.example - strong Example:  - span= param.example - != self.markdown(param.description) - if param.values.length - p.choices - strong Choices:  - each value in param.values - code= self.urldec(value.value) - = ' ' - -mixin RequestResponse(title, request, collapse) - .title - strong - = title - if request.name - |    - code= request.name - if collapse && request.hasContent - .collapse-button - span.close Hide - span.open Show - +RequestResponseBody(request, collapse) - -mixin RequestResponseBody(request, collapse, showBlank) - if request.hasContent || showBlank - div(class=collapse ? 'collapse-content' : ''): .inner - if request.description - .description!= self.markdown(request.description) - - if Object.keys(request.headers).length - h5 Headers - pre: code - each item, index in request.headers - != self.highlight(item.name + ': ' + item.value, 'http') - if index < request.headers.length - 1 - br - div(style="height: 1px;") - if request.body - h5 Body - pre: code - != self.highlight(request.body, null, ['json', 'yaml', 'xml', 'javascript']) - div(style="height: 1px;") - if request.schema - h5 Schema - pre: code - != self.highlight(request.schema, null, ['json', 'yaml', 'xml']) - div(style="height: 1px;") - if !request.hasContent - .description.text-muted This response has no content. - div(style="height: 1px;") - -mixin Examples(resourceGroup, resource, action) - each example in action.examples - each request in example.requests - +RequestResponse('Request', request, true) - each response in example.responses - +RequestResponse('Response', response, true) - -mixin Content() - //- Page header and API description - header - h1#top!= self.api.name || 'API Documentation' - - if self.api.descriptionHtml - != self.api.descriptionHtml - - //- Loop through and display information about all the resource - //- groups, resources, and actions. - each resourceGroup in self.api.resourceGroups || [] - section.resource-group(id=resourceGroup.elementId) - h2.group-heading - != resourceGroup.name || 'Resource Group' - = " " - a.permalink(href=resourceGroup.elementLink) ¶ - if resourceGroup.descriptionHtml - != resourceGroup.descriptionHtml - - each resource in resourceGroup.resources || [] - .resource(id=resource.elementId) - h3.resource-heading - != resource.name || ((resource.actions[0] != null) && resource.actions[0].name) || 'Resource' - = " " - a.permalink(href=resource.elementLink)  ¶ - if resource.description - != self.markdown(resource.description) - - each action in resource.actions || [] - .action(class=action.methodLower, id=action.elementId) - h4.action-heading - .name!= action.name - a.method(class=action.methodLower, href=action.elementLink) - = action.method - code.uri= self.urldec(action.uriTemplate) - if action.description - != self.markdown(action.description) - - h4 Example URI - .definition - span.method(class=action.methodLower)= action.method - |   - span.uri - span.hostname= self.api.host - != action.colorizedUriTemplate - - //- A list of sub-sections for parameters, requests - //- and responses. - if action.parameters.length - +Parameters(action.parameters) - if action.examples - +Examples(resourceGroup, resource, action) - -- function filter_public_actions(x){ -- return (x.description.includes('+ Public Endpoint') || x.description.includes('+ Public Only Endpoint')) -- } -- function filter_public_resources(x){ -- return (x.actions.filter( filter_public_actions ).length > 0) -- } -- function filter_public_resourcegroups(x){ -- return (x.resources.filter( filter_public_resources ).length > 0) -- } -- function filter_core_actions(x){ -- return !(x.description.includes('+ Public Only Endpoint')) -- } -- function filter_core_resources(x){ -- return (x.actions.filter( filter_core_actions ).length > 0) -- } -- function filter_core_resourcegroups(x){ -- return (x.resources.filter( filter_core_resources ).length > 0) -- } - -mixin ContentTriple(onlyPublic, descriptionHtml) - - .right - h5 API Endpoint - a(href=self.api.host)= self.api.host - .middle - if descriptionHtml - != descriptionHtml - - //- Loop through and display information about all the resource - //- groups, resources, and actions. - - if (onlyPublic){ - - myGroups = self.api.resourceGroups.filter( filter_public_resourcegroups ) - - }else{ - - myGroups = self.api.resourceGroups.filter( filter_core_resourcegroups ) - - } - each resourceGroup in myGroups || [] - .middle - section.resource-group(id=resourceGroup.elementId) - h2.group-heading - != resourceGroup.name || 'Resource Group' - = " " - a.permalink(href=resourceGroup.elementLink) ¶ - if resourceGroup.descriptionHtml - != resourceGroup.descriptionHtml - - - if (onlyPublic){ - - myResources = resourceGroup.resources.filter( filter_public_resources ) - - }else{ - - myResources = resourceGroup.resources.filter( filter_core_resources ) - - } - each resource in myResources || [] - if resource.public != null - .middle - .resource(id=resource.elementId) - a.permalink(href=resource.elementLink) - h3.resource-heading - != resource.name || ((resource.actions[0] != null) && resource.actions[0].name) || 'Resource' - = " " - ¶ - if resource.description - != self.markdown(resource.description) - - - if (onlyPublic){ - - myActions = resource.actions.filter( filter_public_actions ) - - }else{ - - myActions = resource.actions.filter( filter_core_actions ) - - } - each action in myActions || [] - if action.examples - .right - .definition - span.method(class=action.methodLower)= action.method - |   - span.uri - span.hostname= self.api.host - != action.colorizedUriTemplate - .tabs - if action.hasRequest - .example-names - span Requests - - var requestCount = 0 - each example in action.examples - each request in example.requests - - requestCount++ - span.tab-button= request.name || 'example ' + requestCount - each example in action.examples - each request in example.requests - .tab - +RequestResponseBody(request, false, true) - .tabs - .example-names - span Responses - each response in example.responses - span.tab-button= response.name - each response in example.responses - .tab - +RequestResponseBody(response, false, true) - else - each example in action.examples - .tabs - .example-names - span Responses - each response in example.responses - span.tab-button= response.name - each response in example.responses - .tab - +RequestResponseBody(response, false, true) - .middle - .action(class=action.methodLower, id=action.elementId) - h4.action-heading - .name!= action.name - a.method(class=action.methodLower, href=action.elementLink) - = action.method - code.uri= self.urldec(action.uriTemplate) - if action.description - != self.markdown(action.description) - - //- A list of sub-sections for parameters, requests - //- and responses. - if action.parameters.length - +Parameters(action.parameters) - if onlyPublic - +TryMe(action) - hr.split diff --git a/core/aglio_templates/public.jade b/core/aglio_templates/public.jade deleted file mode 100644 index 7901256f..00000000 --- a/core/aglio_templates/public.jade +++ /dev/null @@ -1,53 +0,0 @@ -doctype - - -include mixins.jade - -html - head - meta(charset="utf-8") - title= 'Stacks Node' - link(rel="stylesheet", href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css") - style!= self.css - body.preload - #nav-background - div.container-fluid.triple - .row - block nav - +Nav(true) - - .content - #right-panel-background - .middle - header - h1#top!= 'Getting Started' - p!= 'Welcome to this deployment of Stacks Node v{{server_info.server_version}}. You can read the documentation and make RESTful calls to this node.' - p - table - tr - td!= 'Consensus hash' - td!= '{{server_info.consensus}}' - tr - - td!= 'Last block seen' - td!= '{{server_info.last_block_seen}}' - tr - td!= 'Last block processed' - td!= '{{server_info.last_block_processed}}' - p!= 'Stacks Node is open-source software released under a GPLv3 license. The code for this API is available on Github and you can deploy your own nodes by following these instructions.' - block content - +ContentTriple(true) - - .middle - p.text-muted(style="text-align: center;") - - script: include scripts.js - - if self.livePreview - script(src="/socket.io/socket.io.js") - script. - var socket = io(); - socket.on('refresh', refresh); - socket.on('reconnect', function () { - socket.emit('request-refresh'); - }); diff --git a/core/aglio_templates/scripts.js b/core/aglio_templates/scripts.js deleted file mode 100644 index d105df6c..00000000 --- a/core/aglio_templates/scripts.js +++ /dev/null @@ -1,223 +0,0 @@ -/* eslint-env browser */ -/* eslint quotes: [2, "single"] */ -'use strict'; - -/* - Determine if a string ends with another string. -*/ -function endsWith(str, suffix) { - return str.indexOf(suffix, str.length - suffix.length) !== -1; -} - -/* - Get a list of direct child elements by class name. -*/ -function childrenByClass(element, name) { - var filtered = []; - - for (var i = 0; i < element.children.length; i++) { - var child = element.children[i]; - var classNames = child.className.split(' '); - if (classNames.indexOf(name) !== -1) { - filtered.push(child); - } - } - - return filtered; -} - -/* - Get an array [width, height] of the window. -*/ -function getWindowDimensions() { - var w = window, - d = document, - e = d.documentElement, - g = d.body, - x = w.innerWidth || e.clientWidth || g.clientWidth, - y = w.innerHeight || e.clientHeight || g.clientHeight; - - return [x, y]; -} - -/* - Collapse or show a request/response example. -*/ -function toggleCollapseButton(event) { - var button = event.target.parentNode; - var content = button.parentNode.nextSibling; - var inner = content.children[0]; - - if (button.className.indexOf('collapse-button') === -1) { - // Clicked without hitting the right element? - return; - } - - if (content.style.maxHeight && content.style.maxHeight !== '0px') { - // Currently showing, so let's hide it - button.className = 'collapse-button'; - content.style.maxHeight = '0px'; - } else { - // Currently hidden, so let's show it - button.className = 'collapse-button show'; - content.style.maxHeight = inner.offsetHeight + 12 + 'px'; - } -} - -function toggleTabButton(event) { - var i, index; - var button = event.target; - - // Get index of the current button. - var buttons = childrenByClass(button.parentNode, 'tab-button'); - for (i = 0; i < buttons.length; i++) { - if (buttons[i] === button) { - index = i; - button.className = 'tab-button active'; - } else { - buttons[i].className = 'tab-button'; - } - } - - // Hide other tabs and show this one. - var tabs = childrenByClass(button.parentNode.parentNode, 'tab'); - for (i = 0; i < tabs.length; i++) { - if (i === index) { - tabs[i].style.display = 'block'; - } else { - tabs[i].style.display = 'none'; - } - } -} - -/* - Collapse or show a navigation menu. It will not be hidden unless it - is currently selected or `force` has been passed. -*/ -function toggleCollapseNav(event, force) { - var heading = event.target.parentNode; - var content = heading.nextSibling; - var inner = content.children[0]; - - if (heading.className.indexOf('heading') === -1) { - // Clicked without hitting the right element? - return; - } - - if (content.style.maxHeight && content.style.maxHeight !== '0px') { - // Currently showing, so let's hide it, but only if this nav item - // is already selected. This prevents newly selected items from - // collapsing in an annoying fashion. - if (force || window.location.hash && endsWith(event.target.href, window.location.hash)) { - content.style.maxHeight = '0px'; - } - } else { - // Currently hidden, so let's show it - content.style.maxHeight = inner.offsetHeight + 12 + 'px'; - } -} - -/* - Refresh the page after a live update from the server. This only - works in live preview mode (using the `--server` parameter). -*/ -function refresh(body) { - document.querySelector('body').className = 'preload'; - document.body.innerHTML = body; - - // Re-initialize the page - init(); - autoCollapse(); - - document.querySelector('body').className = ''; -} - -/* - Determine which navigation items should be auto-collapsed to show as many - as possible on the screen, based on the current window height. This also - collapses them. -*/ -function autoCollapse() { - var windowHeight = getWindowDimensions()[1]; - var itemsHeight = 64; /* Account for some padding */ - var itemsArray = Array.prototype.slice.call( - document.querySelectorAll('nav .resource-group .heading')); - - // Get the total height of the navigation items - itemsArray.forEach(function (item) { - itemsHeight += item.parentNode.offsetHeight; - }); - - // Should we auto-collapse any nav items? Try to find the smallest item - // that can be collapsed to show all items on the screen. If not possible, - // then collapse the largest item and do it again. First, sort the items - // by height from smallest to largest. - var sortedItems = itemsArray.sort(function (a, b) { - return a.parentNode.offsetHeight - b.parentNode.offsetHeight; - }); - - while (sortedItems.length && itemsHeight > windowHeight) { - for (var i = 0; i < sortedItems.length; i++) { - // Will collapsing this item help? - var itemHeight = sortedItems[i].nextSibling.offsetHeight; - if ((itemsHeight - itemHeight <= windowHeight) || i === sortedItems.length - 1) { - // It will, so let's collapse it, remove its content height from - // our total and then remove it from our list of candidates - // that can be collapsed. - itemsHeight -= itemHeight; - toggleCollapseNav({target: sortedItems[i].children[0]}, true); - sortedItems.splice(i, 1); - break; - } - } - } -} - -/* - Initialize the interactive functionality of the page. -*/ -function init() { - var i, j; - - // Make collapse buttons clickable - var buttons = document.querySelectorAll('.collapse-button'); - for (i = 0; i < buttons.length; i++) { - buttons[i].onclick = toggleCollapseButton; - - // Show by default? Then toggle now. - if (buttons[i].className.indexOf('show') !== -1) { - toggleCollapseButton({target: buttons[i].children[0]}); - } - } - - var responseCodes = document.querySelectorAll('.example-names'); - for (i = 0; i < responseCodes.length; i++) { - var tabButtons = childrenByClass(responseCodes[i], 'tab-button'); - for (j = 0; j < tabButtons.length; j++) { - tabButtons[j].onclick = toggleTabButton; - - // Show by default? - if (j === 0) { - toggleTabButton({target: tabButtons[j]}); - } - } - } - - // Make nav items clickable to collapse/expand their content. - var navItems = document.querySelectorAll('nav .resource-group .heading'); - for (i = 0; i < navItems.length; i++) { - navItems[i].onclick = toggleCollapseNav; - - // Show all by default - toggleCollapseNav({target: navItems[i].children[0]}); - } -} - -// Initial call to set up buttons -init(); - -window.onload = function () { - autoCollapse(); - // Remove the `preload` class to enable animations - document.querySelector('body').className = ''; -}; diff --git a/core/api-specs.md b/core/api-specs.md deleted file mode 100644 index cec61226..00000000 --- a/core/api-specs.md +++ /dev/null @@ -1,2364 +0,0 @@ -# Group Core Node Administration - -Stacks Node API module provides a set of API calls for interacting with -the node's configuration. Most configuration state is in the [Blockstack -Browser](https://github.com/blockstack/blockstack-browser). Client-side state -is managed by [blockstack.js](https://github.com/blockstack/blockstack.js). - -## Ping the node [GET /v1/node/ping] - -Ping the Blockstack node to see if it's alive. - -+ Public Endpoint -+ Response 200 (application/json) - + Body - - { - "status": "alive", - "version": "###version###" - } - + Schema - - { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "status", - "version" - ] - } - -# Group Managing Names - -## Fetch zone file [GET /v1/names/{name}/zonefile] - -Fetch a user's raw zone file. This only works for RFC-compliant zone files. -This method returns an error for names that have non-standard zone files. - -+ Public Endpoint -+ Parameters - + name: bar.test (string) - fully-qualified name -+ Response 200 (application/json) - + Body - - { - "zonefile": "$ORIGIN bar.test\n$TTL 3600\n_https._tcp URI 10 1 \"https://gaia.blockstack.org/hub/17Zijx61Sp7SbVfRTdETo7PhizJHYEUxbY/profile.json\"\n" - } - - + Schema - - { - 'anyOf': [ - { - 'type': 'object', - 'properties': { - 'zonefile': { - 'type': 'string', - 'pattern': '.+', - }, - }, - { - 'type': 'object', - 'properties': { - 'error': { - 'type': 'string', - 'pattern': '.+', - }, - }, - ] - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name or subdomain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No zone file for name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -# Group Name Querying - -This family of API endpoints deals with querying name information. - -## Get all names [GET /v1/names?page={page}] -Fetch a list of all names known to the node. -+ Public Endpoint -+ Parameters - + page: 23 (number) - names are returned in pages of size 100, - so specify the page number. -+ Response 200 (application/json) - + Body - - [ "aldenquimby.id", "aldeoryn.id", - "alderete.id", "aldert.id", - "aldi.id", "aldighieri.id", ... ] - - + Schema - - { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '^([a-z0-9\\-_.+]{3,37})$', - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid page" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - - -## Get all subdomains [GET /v1/subdomains?page={page}] -Fetch a list of all names known to the node. -+ Public Endpoint -+ Parameters - + page: 3 (number) - names are returned in pages of size 100, - so specify the page number. -+ Response 200 (application/json) - + Body - - [ ... - "collegeinfogeek.verified.podcast", - "collider.verified.podcast", - "combatandclassics.verified.podcast", - "combatjack.verified.podcast", - "comedybangbang.verified.podcast", - "comedybutton.verified.podcast", - "commonsense.verified.podcast", - "concilio002.personal.id", ... ] - - + Schema - - { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$', - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid page" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get name info [GET /v1/names/{name}] -+ Public Endpoint -+ Subdomain Aware -+ Parameters - + name: muneeb.id (string) - fully-qualified name -+ Response 200 (application/json) - + Body - - { - "address": "1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs", - "blockchain": "bitcoin", - "expire_block": 599266, - "grace_period": false, - "last_txid": "1edfa419f7b83f33e00830bc9409210da6c6d1db60f99eda10c835aa339cad6b", - "renewal_deadline": 604266, - "resolver": null, - "status": "registered", - "zonefile": "$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp IN URI 10 1 \"https://gaia.blockstack.org/hub/1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs/0/profile.json\"\n", - "zonefile_hash": "37aecf837c6ae9bdc9dbd98a268f263dacd00361" - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'blockchain': { - 'type': 'string', - 'pattern': '^bitcoin$', - }, - 'expire_block': { - 'type': 'integer', - 'minimum': 0, - }, - 'grace_period': { - 'type': 'integer', - 'minimum': 0, - }, - 'last_txid': { - 'type': 'string', - 'pattern': '^[0-9a-fA-F]+$', - }, - 'resolver': { - 'type': 'string', - }, - 'status': { - 'type': 'string', - 'pattern': '^(registered|revoked)$', - }, - 'zonefile': { - 'anyOf': [ - { - 'type': 'string', - }, - { - 'type': 'object', - 'properties': { - 'error': { - 'type': 'string', - }, - }, - }, - ], - }, - 'zonefile_hash': { - 'type': 'string', - 'pattern': '^[0-9a-fA-F]{20}$`, - }, - }, - { 'required': - [ - 'address', 'blockchain', 'last_txid', - 'status', 'zonefile', 'zonefile_hash' - ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name or subdomain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No such name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get name history [GET /v1/names/{name}/history?page={page}] -Get a history of all blockchain records of a registered name. -+ Public Endpoint -+ Subdomain aware -+ Parameters - + name: muneeb.id (string) - name to query - + page: 0 (integer) - the page (in 20-entry pages) of the history to fetch -+ Response 200 (application/json) - + Body - - { - "373821": [ - { - "address": "1QJQxDas5JhdiXhEbNS14iNjr8auFT96GP", - "block_number": 373821, - "consensus_hash": null, - "first_registered": 373821, - "importer": "76a9143e2b5fdd12db7580fb4d3434b31d4fe9124bd9f088ac", - "importer_address": "16firc3qZU97D1pWkyL6ZYwPX5UVnWc82V", - "last_creation_op": ";", - "last_renewed": 373821, - "name": "muneeb.id", - "name_hash128": "deb7fe99776122b77925cbf0a24ab6f8", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ";", - "op_fee": 100000.0, - "opcode": "NAME_IMPORT", - "preorder_block_number": 373821, - } - ] - } - - + Schema - - { - 'type': 'object', - 'patternProperties': { - '^[0-9]+': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'base': { - 'type': 'integer', - 'minimum': 0, - 'maximum': 255, - }, - 'buckets': { - 'anyOf': [ - { - 'type': 'array', - 'items': { - 'type': 'integer', - 'minItems': 16, - 'maxItems': 16, - }, - }, - { - 'type': 'null', - }, - ], - }, - 'block_number': { - 'type': 'integer', - 'minimum': 0, - }, - 'coeff': { - 'anyOf': [ - { - 'type': 'integer', - 'minimum': 0, - 'maximum': 255, - }, - { - 'type': 'null' - }, - ], - }, - 'consensus_hash': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^[0-9a-fA-F]{32}', - }, - { - 'type': 'null' - }, - ], - }, - 'domain': { - 'type': 'string', - 'pattern': '^([a-z0-9\\-_.+]{3,37})$', - }, - 'fee': { - 'type': 'integer', - 'minimum': 0, - }, - 'first_registered': { - 'type': 'integer', - 'minimum': 0, - }, - 'history_snapshot': { - 'type': 'boolean', - }, - 'importer': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^76[aA]914[0-9a-fA-F]{40}88[aA][cC]$', - }, - { - 'type': 'null', - }, - ], - }, - 'importer_address': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - { - 'type': 'null', - }, - ], - }, - 'last_renewed': { - 'type': 'integer', - 'minimum': 0, - }, - 'name': { - 'type': 'string', - 'pattern': '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$', - }, - 'op': { - 'type': 'string', - 'pattern': '^([>?+~:!&*:;#]{1}|>>|>~|::)$', - }, - 'op_fee': { - 'type': 'number', - }, - 'opcode': { - 'type': 'string', - 'pattern': '^NAME_TRANSFER|NAME_PREORDER|NAME_UPDATE|NAME_REVOKE|NAME_REGISTRATION|NAMESPACE_READY|NAMESPACE_REVEAL|NAMESPACE_PREORDER|NAME_RENEWAL|NAME_IMPORT|ANNOUNCE$' - }, - 'revoked': { - 'type': 'boolean', - }, - 'sender': { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - 'sender_pubkey': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'sequence': { - 'type': 'integer', - 'minimum': 0 - } - 'recipient': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'recipient_address': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'recipient_pubkey': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'txid': { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - 'value_hash': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]{40})$', - }, - { - 'type': 'null', - }, - ], - }, - 'vtxindex': { - 'type': 'integer', - 'minimum': 0, - }, - }, - 'required': [ - 'txid', - 'vtxindex' - ], - } - } - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid page" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No such name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get subdomains at transaction [GET /v1/subdomains/{txid}] -Fetches the list of subdomain operations processed by a given transaction. -The returned array includes subdomain operations that have not yet been accepted -as part of any subdomain's history (checkable via the `accepted` field). If the -given transaction ID does not correspond to a Blockstack transaction that -introduced new subdomain operations, and empty array will be returned. - -+ Public Endpoint -+ Subdomain aware -+ Parameters - + txid: d04d708472ea3c147f50e43264efdb1535f71974053126dc4db67b3ac19d41fe (string) the transaction ID -+ Response 200 (application/json) - + Body - - [ - { - "accepted": 1, - "block_height": 546199, - "domain": "id.blockstack", - "fully_qualified_subdomain": "nturl345.id.blockstack", - "missing": "", - "owner": "17Q8hcsxRLCk3ypJiGeXQv9tFK9GnHr5Ea", - "parent_zonefile_hash": "58224144791919f6206251a9960a2dd5723b96b6", - "parent_zonefile_index": 95780, - "resolver": "https://registrar.blockstack.org", - "sequence": 0, - "signature": "None", - "txid": "d04d708472ea3c147f50e43264efdb1535f71974053126dc4db67b3ac19d41fe", - "zonefile_hash": "d3bdf1cf010aac3f21fac473e41450f5357e0817", - "zonefile_offset": 0 - }, - { - "accepted": 1, - "block_height": 546199, - "domain": "id.blockstack", - "fully_qualified_subdomain": "dwerner1.id.blockstack", - "missing": "", - "owner": "17tFeKEBMUAAiHVsCgqKo8ccwYqq7aCn9X", - "parent_zonefile_hash": "58224144791919f6206251a9960a2dd5723b96b6", - "parent_zonefile_index": 95780, - "resolver": "https://registrar.blockstack.org", - "sequence": 0, - "signature": "None", - "txid": "d04d708472ea3c147f50e43264efdb1535f71974053126dc4db67b3ac19d41fe", - "zonefile_hash": "ab79b1774fa7a4c5709b6ad4e5892fb7c0f79765", - "zonefile_offset": 1 - } - ] - - + Schema - - { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'accepted': { 'type': 'integer', 'minimum': 0, 'maximum': 1 }, - 'block_height': { 'type': 'integer', 'minimum': 0 }, - 'domain': { 'type': 'string', 'pattern': '^([a-z0-9\\-_.+]{3,37})$|^([a-z0-9\\-_.+]){3,37}$' }, - 'fully_qualified_subdomain: { 'type': 'string', 'pattern': '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$' }, - 'missing': { 'type': 'string' }, - 'owner': { 'type': 'string', 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$" }, - 'parent_zonefile_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{40}' }, - 'parent_zonefile_index': { 'type': 'integer', 'minimum': 0 }, - 'resolver': { 'type': 'string' }, - 'sequence': { 'type': 'integer', 'minimum': 0 }, - 'signature': { 'type': 'string' }, - 'txid': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{64}' }, - 'zonefile_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{40}' }, - 'zonefile_offset': { 'type': 'integer', 'minimum': 0 } - }, - 'required': [ 'accepted, 'block_height, 'domain', - 'fully_qualified_subdomain', 'missing', 'owner', - 'parent_zonefile_hash', 'parent_zonefile_index', 'resolver', - 'sequence', 'signature', 'txid', 'zonefile_hash', - 'zonefile_offset' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid txid" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get historical zone file [GET /v1/names/{name}/zonefile/{zoneFileHash}] -Fetches the historical zonefile specified by the username and zone hash. -+ Public Endpoint -+ Subdomain aware -+ Parameters - + name: muneeb.id (string) username to fetch - + zoneFileHash: b100a68235244b012854a95f9114695679002af9 -+ Response 200 (application/json) - + Body - - { - "zonefile": "$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp IN URI 10 1 \"https://blockstack.s3.amazonaws.com/muneeb.id\"\n" - } - - + Schema - - { - 'anyOf': [ - { - 'type': 'object', - 'properties': { - 'zonefile': { 'type': 'string' }, - }, - }, - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - }, - ], - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name or subdomain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No such zonefile" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get names owned by address [GET /v1/addresses/{blockchain}/{address}] -Retrieves a list of names owned by the address provided. -+ Subdomain Aware -+ Public Endpoint -+ Parameters - + blockchain: bitcoin (string) - the layer-1 blockchain for the address - + address: 1QJQxDas5JhdiXhEbNS14iNjr8auFT96GP (string) - the address to lookup - -+ Response 200 (application/json) - + Body - - { - "names": ["muneeb.id"] - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'names': { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '^([a-z0-9\-_.+]{3,37})$', - } - } - } - } - -+ Response 404 (application/json) - + Body - - { "error": "Unsupported blockchain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -# Group Price Checks - -## Get namespace price [GET /v2/prices/namespaces/{tld}] - -This endpoint is used to get the price of a namespace, while explicitly -indicating the cryptocurrency units. This is because going forward, namespaces -are not necessarily priced in Bitcoin. - -+ Public Endpoint -+ Parameters - + tld: id (string) - namespace to query price for -+ Response 200 (application/json) - + Body - - { - "units": "BTC", - "amount": "4000000000" - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'units': { - 'type': 'string', - }, - 'amount': { - 'type': 'string', - 'pattern': '^[0-9]+$', - }, - }, - 'required': [ 'units', 'amount' ] - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid namespace" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - }, - -## Get name price [GET /v2/prices/names/{name}] - -This endpoint is used to get the price of a name, denoted in a specific -cryptocurrency (not necessarily Bitcoin). - -+ Public Endpoint -+ Parameters - + name: muneeb.id (string) - name to query price information for -+ Response 200 (application/json) - + Body - - { - "name_price": { - "units": "BTC", - "amount": "100000" - }, - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'name_price': { - 'type': 'object', - 'properties': { - 'units': { 'type': 'string' }, - 'amount': { 'type': 'string', 'pattern': '^[0-9]+$' } - }, - 'required': [ 'units', 'amount' ], - }, - 'required': [ 'name_price' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - }, - -## Legacy Get namespace price [GET /v1/prices/namespaces/{tld}] - -This endpoint is used to get the price of a namespace in Bitcoin. - -+ Public Endpoint -+ Legacy Endpoint -+ Parameters - + tld: id (string) - namespace to query price for -+ Response 200 (application/json) - + Body - - { - "satoshis": 4000000000, - "units": "BTC", - "amount": "4000000000" - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'units': { - 'type': 'string', - }, - 'amount': { - 'type': 'string', - 'pattern': '^[0-9]+$', - }, - 'satoshis': { - 'type': 'integer', - 'minimum': 0, - }, - }, - 'required': [ 'satoshis' ] - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid namepace" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Legacy Get name price [GET /v1/prices/names/{name}] - -This endpoint is used to get the price of a name in Bitcoin. - -+ Public Endpoint -+ Legacy Endpoint -+ Parameters - + name: muneeb.id (string) - name to query price information for -+ Response 200 (application/json) - + Body - - { - "name_price": { - "satoshis": 100000, - "units": "BTC", - "amount": "100000" - }, - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'name_price': { - 'type': 'object', - 'properties': { - 'satoshis': { 'type': 'integer', 'minimum': 0 }, - 'units': { 'type': 'string' }, - 'amount': { 'type': 'string', 'pattern': '^[0-9]+$' } - }, - 'required': [ 'satoshis' ], - }, - 'required': [ 'name_price' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } -# Group Blockchain Operations - -## Get consensus hash [GET /v1/blockchains/{blockchainName}/consensus] - -Get the current Blockstack consensus hash on a blockchain. -+ Public Endpoint -+ Parameters - + blockchainName : bitcoin (string) - the given blockchain -+ Response 200 (application/json) - + Body - - { - "consensus_hash": "2fcbdf66c350894fe03b42c6a2e8a6ac" - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'consensus_hash': { - 'type': 'string', - 'pattern': '^[0-9a-fA-F]{32}$`, - }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "Unsupported blockchain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get total names on blockchain [GET /v1/blockchains/{blockchainName}/name_count{?all}] - -Get a count of the number of names on a blockchain. This does not include -subdomains. -+ Public Endpoint -+ Parameters - + blockchainName: bitcoin (string) - the given blockchain - + all: true (enum[string], optional) - include expired names -+ Response 200 (application/json) - + Body - - { - "names_count": 73950 - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'names_count': { - 'type': 'integer', - 'minimum': 0, - }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "Unsupported blockchain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - }, - - -## Get total subdomains on blockchain [GET /v1/blockchains/{blockchainName}/subdomains_count] -Get the number of subdomains on a blockchain. -+ Public Endpoint -+ Parameters - + blockchainName: bitcoin (string) - the given blockchain -+ Response 200 (application/json) - + Body - - { - "names_count": 1646 - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'names_count': { - 'type': 'integer', - 'minimum': 0, - }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "Unsupported blockchain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - }, - - -## Get operations in block [GET /v1/blockchains/{blockchainName}/operations/{blockHeight}] - -Get the Blockstack operations in a given block -+ Public Endpoint -+ Parameters - + blockchainName : bitcoin (string) - the given blockchain - + blockHeight : 462592 (integer) - the block height -+ Response 200 (application/json) - + Body - - [ - { - "address": "1GS1eHthSK2gqnU9MW9Nis1pUyHP3bJnFK", - "block_number": 462592, - "burn_address": "1111111111111111111114oLvT2", - "consensus_hash": "d206b2f615de00803402cade4d0d51d4", - "op": "?", - "op_fee": 6250, - "opcode": "NAME_PREORDER", - "preorder_hash": "ba22cdf24b05b9a7972e13ada69f96a7850b471e", - "sender": "76a914a944d29012f83c00105778e0bc717c46ea2accfc88ac", - "sender_pubkey": "0343b263f7adc6ae59e8d8310f4a6a87799f6b10cec608f3236cd6a802ffc71728", - "txid": "b3f4f7a43d60666d1a9b42131f9117ad7deac34a478b6ca152344da3d734691f", - "vtxindex": 173 - }, - { - "address": "1gijbF8NkbgwzcoZR1nXMa76NbdcD7GQW", - "block_number": 462592, - "burn_address": "1111111111111111111114oLvT2", - "consensus_hash": "d206b2f615de00803402cade4d0d51d4", - "op": "?", - "op_fee": 6250, - "opcode": "NAME_PREORDER", - "preorder_hash": "386e2de88a908ad056361e586faa95852be454ca", - "sender": "76a91407830f81167f6a2aa253c0f176b7ff2e1c04c61a88ac", - "sender_pubkey": "03b7795d33b362338179e5b2a579431b285f6c303d07ddd83c897277be4e5eb916", - "txid": "4dd315ad1d1b318614a19e15e767efb7ef327bd5cd4ebaf8f80ede58fd1da107", - "vtxindex": 174 - }, - { - "address": "17QEd6rrhNZp4xoyWu6BpA8NQ4axyNKaZy", - "block_number": 462592, - "burn_address": "1111111111111111111114oLvT2", - "consensus_hash": "d206b2f615de00803402cade4d0d51d4", - "op": "?", - "op_fee": 6250, - "opcode": "NAME_PREORDER", - "preorder_hash": "a7a388a2bbe0e7741c6cfdc54d7b5a67811cd582", - "sender": "76a9144635b1794a22bfbe6c5c5eba17b693f4aaf0e34888ac", - "sender_pubkey": "020d6e50b2660af27933c42bc1395fe93df90ffac5e2a989f6a134919fb8cf8075", - "txid": "51d6bd117da5889e710c62967d03233a84fc27f7fad10ca4359111928818f017", - "vtxindex": 332 - }, - { - "address": "15YMyvqz6v9ATSbmqJnudwrdm7RiVfkU3s", - "block_number": 462453, - "consensus_hash": "f6491e1d2b9817fa58512fc9bf8cd3df", - "first_registered": 462575, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462575, - "name": "ablankstein.id", - "name_hash128": "943b8e0613d975c05a05ccd5472e2a72", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462453, - "preorder_hash": "822d5cb6f2e3f0f901d6af8c1111ee466b6c07bd", - "revoked": false, - "sender": "76a91431cee995f242f0f66518080a291714cd7e8d2f5e88ac", - "sender_pubkey": null, - "txid": "121540e81223c45d139fbe03a9713ddd292372f2f88fe2b10b6a7c5e6738e87f", - "value_hash": "96ec93cbc57d17b16a347c11ddfa7ea88d2cf93b", - "vtxindex": 633 - }, - { - "address": "1Dwq9oA5BNz7DAR1LtDncEa647ZxgmkoVV", - "block_number": 462325, - "consensus_hash": "1288cef43f52bf97e2f458a4afe40b61", - "first_registered": 462359, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462359, - "name": "fpenrose.id", - "name_hash128": "7af28a9834934a0af81a19ee14a45f8e", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462325, - "preorder_hash": "59c25d7cddf433b5122cabcbf2ebcc1bc1519e4d", - "revoked": false, - "sender": "76a9148e002a93b9b1936b5d320967194eaff3deaa979088ac", - "sender_pubkey": null, - "txid": "6461bb4bbf517e9c80ffcac4c349836972656572e113aba736b356119655064e", - "value_hash": "ac73155702ca7aea1161d0f0c7877ac81d48d8fc", - "vtxindex": 637 - }, - { - "address": "1Q44Md5KFr6gxQ6TdUSFaCRm3MaUyXMF6t", - "block_number": 462316, - "consensus_hash": "1288cef43f52bf97e2f458a4afe40b61", - "first_registered": 462353, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462353, - "name": "rahulpradhan.id", - "name_hash128": "c55ff9e14c72b2950b14ff10067d7e27", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462316, - "preorder_hash": "fcb3389ca4d2ab8003ce8b6b3baa0a5ae1600cce", - "revoked": false, - "sender": "76a914fcdef125f40f984fafad4b58e30e3b1761a953f388ac", - "sender_pubkey": null, - "txid": "be58e02642c457fec2835a354fbc2de45e8c838aa5b7fd18ed831f67d08269e6", - "value_hash": "e213e58ca1446875b79d866720130cc90cbca681", - "vtxindex": 638 - }, - { - "address": "1D8pL725X9HWvoTVgzqDNbTPayHGG7tkY6", - "block_number": 462345, - "consensus_hash": "919df884f14f34fd15a791af2fddb569", - "first_registered": 462380, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462380, - "name": "sajithskurup.id", - "name_hash128": "3fda1c60620c42e1ede385bb246bd5f0", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "540daefe1f3b520253f7ab954dbc8bf131471133", - "revoked": false, - "sender": "76a914851bee0185dd799755234fb20710a26ec40354d288ac", - "sender_pubkey": null, - "txid": "e7d35196ca3eec697274d848136f5267b1c935055a917020f93e8ecaf821ba99", - "value_hash": "92534954e934019718478bb52150765dfad79171", - "vtxindex": 644 - }, - { - "address": "1EbjXtYv9QCVBp8iWiDH6xQ1B74oFW696X", - "block_number": 462345, - "consensus_hash": "e0c31e03125f2feefd4090e5c635ee45", - "first_registered": 462380, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462380, - "name": "hubject.id", - "name_hash128": "03e8bf92dd3cbde65cac012350efb79d", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "ded4d097614cf5321388bbe56b24d3d592b2ef76", - "revoked": false, - "sender": "76a914952b4844005dd98a1f7fc99813db2a649109b45988ac", - "sender_pubkey": null, - "txid": "7b7a2a2963f7454b93003031cfce64ac609f902b4c2cababfbbfad2c01bbeb9b", - "value_hash": "be968a1f17ac828179e5b2fbc70d238056af7482", - "vtxindex": 645 - }, - { - "address": "14YsDo5qgAP7kmnq33tw9JdHVBywpg9pge", - "block_number": 462326, - "consensus_hash": "e0c31e03125f2feefd4090e5c635ee45", - "first_registered": 462354, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462354, - "name": "ramimassoud.id", - "name_hash128": "61a48b6f8aeb027883ecd1f8d808c8ac", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462326, - "preorder_hash": "23aa275e42d7d6d7e538584a799252939687c457", - "revoked": false, - "sender": "76a91426ef31b7aac60eff23cbbab51d453b84700e330388ac", - "sender_pubkey": null, - "txid": "85babcf66caf41cb7beb2e637cbed4e728ab8030337fb5df8461d0e14dd2be75", - "value_hash": "e27c9c3dcce8a8445d84fb8b4d81fbd30fac9749", - "vtxindex": 646 - }, - { - "address": "1H934mT7AVVZmHwjddUZ9EiostLwm655oF", - "block_number": 462345, - "consensus_hash": "919df884f14f34fd15a791af2fddb569", - "first_registered": 462391, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462391, - "name": "was2bme.id", - "name_hash128": "f2b5688682fd47b8f3fbf709bb35ef33", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 6250, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "3dfdcee2b0e64697c4bb0b0dd791518bcb078dc7", - "revoked": false, - "sender": "76a914b107105f8ae57e7bb5bad58caba666faa679c70f88ac", - "sender_pubkey": null, - "txid": "16171e4e20778354a94c5353b0c6ed0b29a3e73c1b59b9bfbcbe6d26c570fd0c", - "value_hash": "ac73155702ca7aea1161d0f0c7877ac81d48d8fc", - "vtxindex": 649 - }, - { - "address": "1B4zxvVMPm1PBGarc8PrYQjQY2ezwniyG6", - "block_number": 462345, - "consensus_hash": "e0c31e03125f2feefd4090e5c635ee45", - "first_registered": 462391, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462391, - "name": "tadas_serbenta.id", - "name_hash128": "6d800932daf830925ab47dee5ceb8661", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 6250, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "07a85eac4dbf20000a66a14a4a89a01134b70fab", - "revoked": false, - "sender": "76a9146e72e44bbe4c1706ea5830096a4bb4449dcc948f88ac", - "sender_pubkey": null, - "txid": "e3f0b019550417a7acfe27addfbd34ec7ec5fc1dd9616ed8c6bc86a0ad148290", - "value_hash": "fbac107ba5d9bbfc30ecdeae3e10ca3db72b3431", - "vtxindex": 855 - }, - { - "address": "16BF35VputeLEmbsk7gDnUcwKXcjwPDUvf", - "block_number": 462345, - "consensus_hash": "919df884f14f34fd15a791af2fddb569", - "first_registered": 462359, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462359, - "name": "alexucf.id", - "name_hash128": "d9bc88b0fdc536e7ac5467609faed518", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "30f841114af6ada90ba720d563672113c4f74439", - "revoked": false, - "sender": "76a91438c8814ae2a9035e85bbf2b7976919c2e3387ac588ac", - "sender_pubkey": null, - "txid": "f8e9eebd48b9182b82b22e5ce10f805d3db38786bb2aaf56f9badf83aa3cc0ee", - "value_hash": "8ae0f51263f540be175230d6b46f5d9609de799d", - "vtxindex": 856 - }, - { - "address": "1EmXTRHC6f9bnLJkVZRavv7HLG1owLgNir", - "block_number": 462326, - "consensus_hash": "31a304b682e3291811441a12f19d14e5", - "first_registered": 462391, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462391, - "name": "seamur.id", - "name_hash128": "09f3b9d2da3d0aa1999824f7884f0d18", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 100000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462326, - "preorder_hash": "678991fd4d3833babe27f732206a40d1f15dd3ca", - "revoked": false, - "sender": "76a91497055c47fa0ab396fb321e9d37f6bce1796e3d5688ac", - "sender_pubkey": null, - "txid": "e32124770c359eaf57709e5a666894f2954aa687820c41c6911f214e9006b58e", - "value_hash": "4bcdd931185537902ef1af9975198c6404d4c73e", - "vtxindex": 857 - }, - { - "address": "13pGtMcHsNdq3EeLMa1yVVKppP1WjSKgFG", - "block_number": 462345, - "consensus_hash": "e0c31e03125f2feefd4090e5c635ee45", - "first_registered": 462354, - "importer": null, - "importer_address": null, - "keep_data": true, - "last_renewed": 462354, - "name": "innergame.id", - "name_hash128": "a3e4e010d82369ee19b64fccc2b97f69", - "namespace_block_number": 373601, - "namespace_id": "id", - "op": ">>", - "op_fee": 25000, - "opcode": "NAME_TRANSFER", - "preorder_block_number": 462345, - "preorder_hash": "f54850caf10c3041cb2a4d9186bbb234dd7d9f85", - "revoked": false, - "sender": "76a9141ee10ff0ae9969e2dc39d94a959e3160b26b6adf88ac", - "sender_pubkey": null, - "txid": "28de7193e28e1b0c950a32af393284578669c15dc98bad68f382f8b920d94509", - "value_hash": "bab40c2b10f676288edea119edade67ff5e853ba", - "vtxindex": 869 - } - ] - - + Schema - - { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'base': { - 'type': 'integer', - 'minimum': 0, - 'maximum': 255, - }, - 'buckets': { - 'anyOf': [ - { - 'type': 'array', - 'items': { - 'type': 'integer', - 'minItems': 16, - 'maxItems': 16, - }, - }, - { - 'type': 'null', - }, - ], - }, - 'block_number': { - 'type': 'integer', - 'minimum': 0, - }, - 'coeff': { - 'anyOf': [ - { - 'type': 'integer', - 'minimum': 0, - 'maximum': 255, - }, - { - 'type': 'null' - }, - ], - }, - 'consensus_hash': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^[0-9a-fA-F]{32}', - }, - { - 'type': 'null' - }, - ], - }, - 'domain': { - 'type': 'string', - 'pattern': '^([a-z0-9\-_.+]{3,37})$', - }, - 'fee': { - 'type': 'integer', - 'minimum': 0, - }, - 'first_registered': { - 'type': 'integer', - 'minimum': 0, - }, - 'history_snapshot': { - 'type': 'boolean', - }, - 'importer': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^76[aA]914[0-9a-fA-F]{40}88[aA][cC]$', - }, - { - 'type': 'null', - }, - ], - }, - 'importer_address': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - { - 'type': 'null', - }, - ], - }, - 'last_renewed': { - 'type': 'integer', - 'minimum': 0, - }, - 'name': { - 'type': 'string', - 'pattern': '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$', - }, - 'op': { - 'type': 'string', - 'pattern': '^([>?+~:!&*:;#]{1}|>>|>~|::)$', - }, - 'op_fee': { - 'type': 'number', - }, - 'opcode': { - 'type': 'string', - 'pattern': '^NAME_TRANSFER|NAME_PREORDER|NAME_UPDATE|NAME_REVOKE|NAME_REGISTRATION|NAMESPACE_READY|NAMESPACE_REVEAL|NAMESPACE_PREORDER|NAME_RENEWAL|NAME_IMPORT|ANNOUNCE$' - }, - 'revoked': { - 'type': 'boolean', - }, - 'sender': { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - 'sender_pubkey': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'sequence': { - 'type': 'integer', - 'minimum': 0 - } - 'recipient': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'recipient_address': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'recipient_pubkey': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - { - 'type': 'null' - }, - ], - }, - 'txid': { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]+)$', - }, - 'value_hash': { - 'anyOf': [ - { - 'type': 'string', - 'pattern': '^([0-9a-fA-F]{40})$', - }, - { - 'type': 'null', - }, - ], - }, - 'vtxindex': { - 'type': 'integer', - 'minimum': 0, - }, - }, - 'required': [ - 'txid', - 'vtxindex' - ], - } - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid name or subdomain" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No such name" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -# Group Namespace Operations - -## Get all namespaces [GET /v1/namespaces] -+ Public Endpoint -+ Response 200 (application/json) - + Body - - { - "namespaces": [ - "id", - "helloworld", - "podcast", - "graphite", - "blockstack" - ] - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'namespaces': { - 'type': 'array', - 'items': { 'type': 'string' } - } - }, - 'required': [ 'namespaces' ] - } - -## Get namespace names [GET /v1/namespaces/{tld}/names?page={page}] - -Fetch a list of names from the namespace. -+ Public Endpoint -+ Parameters - + tld: id (string) - the namespace to fetch names from - + page: 23 (number) - names are returned in pages of size 100, - so specify the page number. -+ Response 200 (application/json) - + Body - - [ "aldenquimby.id", "aldeoryn.id", - "alderete.id", "aldert.id", - "aldi.id", "aldighieri.id", ... ] - - + Schema - - { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '^([a-z0-9\-_.+]{3,37})$' - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid page" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "No such namespace" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Group Account Operations - -The set of methods in this section correspond to querying the states of -Blockstack token accounts. Each token account is represented by an account -address, which is a [Crockford base-32](https://en.wikipedia.org/wiki/Base32#Crockford's_Base32) -encoding of the RIPEMD160 hash of the SHA256 hash of one or more keys, -plus a version byte and a 4-byte SHA256 checksum. -Internally, Blockstack account addresses are generated and represented in the -same way as p2pkh and p2sh Bitcoin addresses -- that is, a Blockstack account addresses -are in 1-to-1 correspondance with Bitcoin addresses (Blockstack account addresses -simply use a different encoding alphabet). -We have a [reference library](http://github.com/blockstack/c32check) for -helping developers generate and convert between Bitcoin and Blockstack addresses. - -Right now, an account can only own Stacks tokens (designiated in the API -as having a toke type `STACKS`). However, in the future -Blockstack may be upgraded to support owning many different kinds of -app-specific tokens. The API presented here is designed to accomodate this -possible development. - -## Get account status [GET /v1/accounts/{address}/{tokenType}/status] - -Get the status of an account's current token allocation. The current number of -tokens held by the account's address is equal to the difference between the -`credit_value` and `debit_value`. These two numbers always increase and are -accounted in the smallest possible unit of the token type (e.g. microStacks for -the `STACKS` token). Programs that parse these values should be aware of this, -and should use an appropriate numeric representation like `BigInteger` when -parsing them. - -The last transaction's ID (`txid`) and transaction offset (`vtxindex`) are given. -If `vtxindex` is 0, then the transaction ID corresponds to a "sentinal" transaction -in Stacks Blockchain that indicates tokens getting generated or unlocked. These -transaction IDs will not appear in any block explorer, since they do not correspond -to "real" transactions. - -+ Public Endpoint -* Parameters - + address: SP1T1F14QX4KZYFZH8A5286Z4AK9S7GY93KZ4ZZD7 (string) - address to query. Can be either a base58check address or a c32check address - + tokenType: STACKS (string) - type of token to query (only `STACKS` is - supported right now). -+ Response 200 (application/json) - + Body - - { - "address": "1BaqZJqwt2dcdxt6oa3mwSK4DiEyfXCgnZ", - "block_id": 589689, - "credit_value": "100000000000", - "debit_value": "6400000000", - "lock_transfer_block_id": 0, - "txid": "65e99765cb332b1026049527ecf297223612a12cd6adec9aeb555105f655428b", - "type": "STACKS", - "vtxindex": 1 - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'block_id': { 'type': 'integer', 'minimum': 0 }, - 'credit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'debit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'lock_transfer_block_id': { 'type': 'integer', 'minimum': 0 }, - 'txid': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{64}$' }, - 'type': { 'type': 'string' }, - 'vtxindex': { 'type': 'integer', 'minimum': 0 } - }, - 'required': [ 'address, 'block_id', 'credit_value', 'debit_value', - 'lock_transfer_block_id', 'txid', 'type', 'vtxindex' ] - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid address" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -+ Response 404 (application/json) - + Body - - { "error": "Failed to get account record for STACKS ST3S24N1NK9JVGK6T06PR3E6HE7SBAH7VSG6C950F: No such account"} - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get account tokens [GET /v1/accounts/{address}/tokens] - -Get the types of tokens held by a particular account, given its address. For -now, this can only be `STACKS` tokens. - -+ Public Endpoint -* Parameters - + address: SP1T1F14QX4KZYFZH8A5286Z4AK9S7GY93KZ4ZZD7 (string) - address to query. Can be either a base58check address or a c32check address -+ Response 200 (application/json) - + Body - - { - "tokens": [ - "STACKS" - ] - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'tokens': { - 'type': 'array', - 'items': { 'type': 'string' } - }, - 'required': [ 'tokens' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid address" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get account balance [GET /v1/accounts/{address}/{tokenType}/balance] - -Get the number of tokens held by a particular account, given the account's -address and the token type. - -Note that the value returned by this endpoint can be very large, since the token -balances are integers that represent the number of smallest units of the token -(e.g. microStacks for the `STACKS` token). - -This endpoint returns a zero balance for accounts and token types that do not -exist. - -+ Public Endpoint -+ Parameters - + address: SP1T1F14QX4KZYFZH8A5286Z4AK9S7GY93KZ4ZZD7 (string) - address to query. Can be either a base58check address or a c32check address - + tokenType: STACKS (string) - type of token to query (only `STACKS` is - supported right now). -+ Response 200 (application/json) - + Body - - { - "balance": "936000000" - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'balance' { 'type': 'string', 'pattern': '^[0-9+]$' } - } - 'required': [ 'balance' ] - } - - -+ Response 400 (application/json) - + Body - - { "error": "Invalid address" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get account history [GET /v1/accounts/{address}/history?page={pageNum}] - -Get a page of an account's transaction history. Each entry in the history -corresponds to the status of the account at a particular transaction. -The history will be returned in reverse order -- the first item will be the -latest transaction. - -Queries on addresses that do not correspond to an existing account will simply -return an empty list. - -+ Public Endpoint -+ Parameters - + address: SP1T1F14QX4KZYFZH8A5286Z4AK9S7GY93KZ4ZZD7 (string) - address to query. Can be either a base58check address or a c32check address - + pageNum: 0 (integer) - page of the history to query -+ Response 200 (application/json) - + Body - - [ - { - "address": "1BaqZJqwt2dcdxt6oa3mwSK4DiEyfXCgnZ", - "block_id": 589689, - "credit_value": "100000000000", - "debit_value": "6400000000", - "lock_transfer_block_id": 0, - "txid": "65e99765cb332b1026049527ecf297223612a12cd6adec9aeb555105f655428b", - "type": "STACKS", - "vtxindex": 1 - }, - { - "address": "1BaqZJqwt2dcdxt6oa3mwSK4DiEyfXCgnZ", - "block_id": 589688, - "credit_value": "100000000000", - "debit_value": "0", - "lock_transfer_block_id": 0, - "txid": "c28d44fde97dbe59856fa62a4aa99b49c37291577a3e664621a6f03c77c08f47", - "type": "STACKS", - "vtxindex": 0 - } - ] - - + Schema - - { - 'type': 'array' - 'items': { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'block_id': { 'type': 'integer', 'minimum': 0 }, - 'credit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'debit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'lock_transfer_block_id': { 'type': 'integer', 'minimum': 0 }, - 'txid': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{64}$' }, - 'type': { 'type': 'string' }, - 'vtxindex': { 'type': 'integer', 'minimum': 0 } - }, - 'required': [ 'address, 'block_id', 'credit_value', 'debit_value', - 'lock_transfer_block_id', 'txid', 'type', 'vtxindex' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid address" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -## Get account statuses at block [GET /v1/accounts/{address}/history/{blockNum}] - -Get the status(es) of an account at a particular block height. If the account -was affected by a transaction at the given block height, the states the -account passed through will be returned (i.e. at least two entries). If the -account was not affected at this block height, then the last state the account -was in at that block height will be returned. - -If there is more than one state, then the states will be listed in reverse order -chronologically, with the latest state as the first entry. - -If the account does not exist, then an empty list will be returned. - -+ Public Endpoint -+ Parameters - + address: SP1T1F14QX4KZYFZH8A5286Z4AK9S7GY93KZ4ZZD7 (string) - address to query. Can be either a base58check address or a c32check address - + blockNum: 589688 (integer) - page of the history to query -+ Response 200 (application/json) - + Body - - [ - { - "address": "1BaqZJqwt2dcdxt6oa3mwSK4DiEyfXCgnZ", - "block_id": 589688, - "credit_value": "100000000000", - "debit_value": "0", - "lock_transfer_block_id": 0, - "txid": "c28d44fde97dbe59856fa62a4aa99b49c37291577a3e664621a6f03c77c08f47", - "type": "STACKS", - "vtxindex": 0 - } - ] - - + Schema - - { - 'type': 'array' - 'items': { - 'type': 'object', - 'properties': { - 'address': { - 'type': 'string', - 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$", - }, - 'block_id': { 'type': 'integer', 'minimum': 0 }, - 'credit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'debit_value': { 'type': 'string', 'pattern': '^[0-9]+$' }, - 'lock_transfer_block_id': { 'type': 'integer', 'minimum': 0 }, - 'txid': { 'type': 'string', 'pattern': '^[0-9a-fA-F]{64}$' }, - 'type': { 'type': 'string' }, - 'vtxindex': { 'type': 'integer', 'minimum': 0 } - }, - 'required': [ 'address, 'block_id', 'credit_value', 'debit_value', - 'lock_transfer_block_id', 'txid', 'type', 'vtxindex' ] - } - } - -+ Response 400 (application/json) - + Body - - { "error": "Invalid address" } - - + Schema - - { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' }, - }, - } - -# Group Resolver Endpoints - -## Lookup User [GET /v1/users/{username}] -Lookup and resolver a user's profile. Defaults to the `id` namespace. -Note that [blockstack.js](https://github.com/blockstack/blockstack.js) does -*not* rely on this endpoint. - -+ Public Endpoint -+ Subdomain Aware -+ Legacy Endpoint -+ Parameters - + username: fred (string) - username to lookup -+ Response 200 (application/json) - - { - "fred.id": { - "owner_address": "1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu", - "profile": { - "@context": "http://schema.org", - "@type": "Person", - "account": [ - { - "@type": "Account", - "identifier": "fredwilson", - "placeholder": false, - "proofType": "http", - "proofUrl": "https://twitter.com/fredwilson/status/943066895422455809", - "service": "twitter" - } - ], - "description": "I am a VC", - "image": [ - { - "@type": "ImageObject", - "contentUrl": "https://gaia.blockstack.org/hub/1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu/0/avatar-0", - "name": "avatar" - } - ], - "name": "Fred Wilson" - }, - "public_key": "026c94d1897fa148fa6401247a339b55abd869a3d562fdae8a7fcb9a11f1f846f3", - "verifications": [ - { - "identifier": "fredwilson", - "proof_url": "https://twitter.com/fredwilson/status/943066895422455809", - "service": "twitter", - "valid": true - } - ], - "zone_file": { - "$origin": "fred.id", - "$ttl": 3600, - "uri": [ - { - "name": "_http._tcp", - "priority": 10, - "target": "https://gaia.blockstack.org/hub/1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu/0/profile.json", - "weight": 1 - } - ] - } - } - } - - + Schema - - { - 'type': 'object', - 'patternProperties': { - '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$|^([a-z0-9\\-_.+]){3,37}$': { - 'type': 'object', - 'properties': { - 'owner_address': { 'type': 'string', 'pattern': "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$" }, - 'profile' : { 'type': 'object' }, - 'public_key': { 'type': 'string', 'pattern': "^([0-9a-fA-F]$" }, - 'verifications: { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'identifier': { 'type': 'string' }, - 'proof_url': { 'type': 'string' }, - 'service': { 'type': 'string' }, - 'valid': { 'type': 'boolean' } - }, - } - }, - 'zone-file': { 'type': 'object' } - } - } - } - } - -+ Response 404 (application/json) - + Body - - { - "nope.none": { - "error": "Name has no user record hash defined" - } - } - - + Schema - - { - 'type': 'object', - 'patternProperties': { - '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$|^([a-z0-9\\-_.+]){3,37}$': { - 'type': 'object', - 'properties': { - 'error': { 'type': 'string' } - }, - 'required': [ 'error' ] - } - } - } - -## Profile Search [GET /v1/search?query={query}] -Searches for a profile using a search string. -+ Public Only Endpoint -+ Parameters - + query: wenger (string) - the search query -+ Response 200 (application/json) - + Body - - { - "results": [ - { - "fullyQualifiedName": "albertwenger.id", - "username": "albertwenger", - "profile": { - "@type": "Person", - "account": [ - { - "@type": "Account", - "identifier": "albertwenger", - "proofType": "http", - "service": "twitter" - }, - { - "@type": "Account", - "identifier": "albertwenger", - "proofType": "http", - "service": "facebook" - }, - { - "@type": "Account", - "identifier": "albertwenger", - "proofType": "http", - "service": "github" - }, - { - "@type": "Account", - "identifier": "1QHDGGLEKK7FZWsBEL78acV9edGCTarqXt", - "role": "payment", - "service": "bitcoin" - } - ], - "address": { - "@type": "PostalAddress", - "addressLocality": "New York" - }, - "description": "VC at USV.com", - ... - } - - + Schema - - { - 'type': 'object', - 'properties': { - 'results': { - 'type': 'array', - 'items': { - 'fullyQualifiedName': { 'type': 'string', 'pattern': '^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$|^([a-z0-9\\-_.+]){3,37}$' }, - 'username': { 'type': 'string' }, - 'profile' : { 'type': 'object' }, - } - } - } - } - - -## Get Profile Index Data [GET /v1/index_files/profiles] - -Returns a 302 redirect to a data dump of the profiles indexed by the search indexer. -If not configured by the server, it returns a 404. - -+ Public Endpoint -+ Response 302 (application/json) - + Body - - { - "profileData": "https://storage.googleapis.com/blockstack-search_indexer_data/profile_data.json" - } - -## Get Profile Index Data [GET /v1/index_files/blockchain] - -Returns a 302 redirect to a data dump of the blockchain names indexed by the search indexer. -If not configured by the server, it returns a 404. - -+ Public Endpoint -+ Response 302 (application/json) - + Body - - { - "blockchainData": "https://storage.googleapis.com/blockstack-search_indexer_data/blockchain_data.json" - } - - -## Resolve DID [GET /v1/dids/{did}] -Resolve a Blockstack DID to its DID document object (DDO). In practice, the DDO -is stored in the same way as a user profile, but a few extra DDO-specific -fields will be filled in by this endpoint (namely, `@context` and `publicKey`). - -Blockstack DIDs correspond to non-revoked, non-expired names. A DID will not -resolve if its underlying name is revoked or expired, or if the DID does not -correspond to an existing name. - -+ Public Endpoint -+ Subdomain Aware -+ Parameters - + did: `did:stack:v0:15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr-0` (string) - DID to resolve -+ Response 200 (application/json) - + Body - - { - "document": { - "@context": "https://w3id.org/did/v1", - "publicKey": [ - { - "id": "did:stack:v0:15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr-0", - "publicKeyHex": "022af593b4449b37899b34244448726aa30e9de13c518f6184a29df40823d82840", - "type": "secp256k1" - } - ], - ... omitted for brevity ... - }, - "public_key": "022af593b4449b37899b34244448726aa30e9de13c518f6184a29df40823d82840" - } - - + Schema - - { - "type": "object", - "properties": { - "document": { - "type": "object", - "properties": { - "@context": { "type": "string" }, - "publicKey": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "type": { "type": "string" }, - "publicKeyHex": { "type": "string", "pattern": "^[0-9a-fA-F]$" }, - }, - "required": [ "id", "type", "publicKeyHex" ], - }, - }, - }, - "required": [ "@context", "publicKey" ], - }, - "public_key": { "type": "string", "pattern": "^[0-9a-fA-F]$" }, - } - "required": [ "document", "public_key" ] - } - - -+ Response 400 (application/json) - + Body - - { - "error": "Invalid DID" - } - - + Schema - - { - 'type': 'object', - 'properties': { 'error': 'string' }, - 'required': [ 'error' ] - } - -+ Response 404 (application/json) - + Body - - { - "error": "Failed to get DID record: Failed to resolve DID to a non-revoked name" - } - - + Schema - - { - 'type': 'object', - 'properties': { 'error': 'string' }, - 'required': [ 'error' ] - } diff --git a/core/atlas_network.md b/core/atlas_network.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/atlas_network.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/attic/README.md b/core/attic/README.md deleted file mode 100644 index 9871c12c..00000000 --- a/core/attic/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Legacy, Deprecated, or No longer Useful Documentation - -Documents here are out-of-date but preserved for posterity. Do not rely on -them. diff --git a/core/attic/advanced_usage.md b/core/attic/advanced_usage.md deleted file mode 100644 index 5d75b35e..00000000 --- a/core/attic/advanced_usage.md +++ /dev/null @@ -1,124 +0,0 @@ -# Advanced Usage - -This section details some of the advanced features in the CLI. - -## A Word of Warning - -Advanced features are meant to be used by experienced Blockstack users and developers, They receive less UI/UX testing than basic features, and their interfaces are expected to change to accomodate bugfixes and security fixes. Moreover, improper use of some advanced methods can cost you money, corrupt your profile, or compromise your wallet. Once they receive sufficient testing, an advanced feature may become a basic-mode feature in a subsequent release. - -**Do not use advanced mode unless you know what you are doing!** - -## Activating Advanced Mode - -To activate advanced mode, use the command `blockstack set_advanced_mode on`. - -To deactivate it later (recommended), use the command `blockstack set_advanced_mode off`. - -## Changing or Using Exiting Keys - -If you already have a payment key you want to use, or an owner key you want to migrate over, you can generate a wallet directly with `import_wallet`. We recommend using this command interactively, so you know which keys correspond to which usages. - -## Accounts - -With the accounts methods, you can directly manage your social proofs, link existing services to your profile, and store small bits of information. - -The account management methods are: -* `get_account`: Look up an account in a name's profile. There can be more than one match. -* `list_accounts`: List all accounts in a name's profile. -* `put_account`: Add or update an account in a name's profile. -* `delete_account`: Remove an account from a name's profile. This may need to be done more than once, if there are duplicates of the account. - -## Advanced Blockstack ID Queries - -Beyond `lookup` and `whois`, there are a few other more advanced queries you can run on Blockstack IDs. These include: - -### Listing Blockstack IDs -* `get_all_names`: Get the list of every single Blockstack ID in existance. -* `get_names_owned_by_address`: Get the list of names owned by a particular ownership address. - -### Querying the Blockchain -* `get_name_blockchain_record`: Get the raw database record for a Blockstack ID. It will contain a *compressed* history of all name operations that have affected it. This is meant primarily for debugging purposes; to get an easier-to-parse listing of the information this command returns, use `get_name_blockchain_history`. -* `get_name_blockchain_history`: Get the set of all prior states a Blockstack ID has been in, keyed by the block heights at which the state-change was processed. -* `get_records_at`: Get the list of name operation records processed at a particular block height. -* `list_update_history`: Get the list of all zonefile hashes that a Blockstack ID has ever had. - -### Zonefiles -* `get_name_zonefile`: Get only a Blockstack ID's zonefile. -* `list_zonefile_history`: Get the list of all zonefiles a Blockstack ID has ever had. **NOTE:** There is no guarantee that the server will hold copies of old zonefiles. This command is meant mainly for determining which historic zonefiles a server has processed. -* `set_zonefile_hash`: This is the counterpart to `update`, but instead of setting the zonefile directly and uploading it to storage, you can use this command to directly set the data hash for a Blockstack ID. **NOTE:** You should ensure that the associated zonefile data has been replicated off-chain to a place where other users can get at it. - -### Lightweight Queries - -The lightweight lookup protocol for Blockstack is called *Simplified Name Verification* (SNV). This command returns a prior blockchain-level record given a more recent known-good consensus hash, serial number, or transaction ID of a transaction that contains a consensus hash. The CLI does not need to trust the Blockstack server to use these commands. - -* `lookup_snv`: Use the Merkle skip-list in the name database to look up a historic name operation on a Blockstack ID. - -## Consensus Queries - -You can query consensus hash information from the server with the following commands: - -* `consensus`: Get the consensus hash at a particular block height - -## Namespace Queries - -In addition to querying Blockstack IDs, the CLI has advanced commands for querying namespaces. These include: - -* `get_namespace_blockchain_record`: Get the raw database record for a Blockstack namespace. It will contain a *compressed* history of all namespace operations that have affected it. -* `get_names_in_namespace`: Get the list of every Blockstack ID in a particular namespace. -* `get_namespace_cost`: Get the cost required to preorder a namespace. Does *not* include the cost to reveal and ready it, nor does it include the transaction fees. - -## Namespace Creation - -**WARNING:** We do not recommend that you try to do this by yourself. Creating a namespace is **EXTREMELY EXPENSIVE**. If you are interested in creating your own namespace, please contact the Blockstack developers on the [Blockstack Slack](http://chat.blockstack.org). - -These methods allow you to create a namespace. There are three steps: preordering, revealing, and readying. Preordering a namespace is like preordering a name--you announce the hash of the namespace ID and the address that will control it. Revealing a namespace not only reveals the namespace ID, but also sets the pricing and lifetime rules for names in the namespace. After revealing the namespace, the namespace controller can pre-populate the namespace by importing Blockstack IDs. Once the namespace has been pre-populated, the controller sends a final transaction that readies the namespace for general use. - -* `namespace_preorder`: Preorder a namespace. -* `namespace_reveal`: Reveal a namespace, and set its pricing and lifetime parameters. **NOTE:** This must be done within 144 blocks of sending the namespace preorder transaction. -* `name_import`: Import a name into a revealed (but not readied) namespace. You can set its owner address and zonefile hash directly. -* `namespace_ready`: Open a namespace for general registrations. - -## Data Storage - -Blockstack allows users to store arbitrary data to any set of storage providers for which the CLI has a driver. The data will be signed by the user's data key, so when other users read the data later on, they can verify that it is authentic (i.e. the storage provider is not trusted). Moreover, Blockstack is designed such that users don't have to know or care about which storage providers were used--as far as users can see, storage providers are just shared hard drives. - -There are two types of data supported by Blockstack: *mutable* data, and *immutable* data. Mutable data is linked by the profile, and can be written as fast and as frequently as the storage provider allows. Mutable data is addressed by URL. - -**WARNING:** While mutable data guarantees end-to-end authenticity, there is a chance that a malicious storage provider can serve new readers stale versions of the data. That is, users who have read the latest data already will not get tricked into reading stale data, but users who have *not yet* read the latest data *can* be tricked (i.e. the CLI keeps a version number for mutable data to do so). This must be taken into account if you intend to use this API. - -Immutable data, however, is content-addressed, and its cryptographic hash is stored to the user's zonefile. Writing immutable data will entail updating the zonefile and sending an `update` transaction (handled internally), so it will be slow by comparison. This has the advantage that storage providers cannot perform the aforementioned stale data attack, but has the downside that writes cost money and take a long time to complete. - -That said, we recommend using the mutable data API with several different storage providers whenever possible. - -### Mutable Data - -The following commands affect mutable data: - -* `get_mutable`: Use the profile to look up and fetch a piece of mutable data. -* `put_mutable`: Add a link to mutable data to the profile, and replicate the signed data itself to all storage providers. Other users will need the data's name to read it with `get_mutable`. -* `delete_mutable`: Remove a link to mutable data from the profile, and ask all storage providers to delete the signed data. - -### Immutable Data - -The following commnds affect immutable data: - -* `get_immutable`: Look up and fetch a piece of immutable data. You can supply either the name of the data, or its hash (both are stored in the zonefile, so there is no gain or loss of security in this choice). -* `put_immutable`: Replicate a piece of data to all storage providers, add its name and hash to the zonefile, and issue an `update` to upload the new zonefile to Blockstack servers and write the hash to the blockchain. -* `delete_immutable`: Remove the link to the data from the zonefile, ask all storage providers to delete the data, and issue an `update` to upload the new zonefile to Blockstack servers and write the new hash to the blockchain. -* `list_immutable_data_history`: Given the name of a piece of immutable data, query the zonefile history to find the historic list of hashes it has had. **NOTE:** Like `list_zonefile_history` above, this only returns data hashes for the data if the Blockstack server has the historic zonefile. - -## Fault Recovery - -Sometimes, things beyond our control can happen. Transactions can get stuck, storage providers can go offline or corrupt data, and so on. These commands are meant to assist in recovering from these problems: - -* `set_profile`: Directly set a Blockstack ID's profile. All previous accounts, data links, etc. must be included in the new profile, since the old profile (if still present) will be overwritten by the one given here. -* `convert_legacy_profile`: Given a legacy profile taken from a resolver, directly convert it into a new profile. This can be used with `set_profile` to recover from a failed profile migration. -* `unqueue`: If a transaction gets lost or stuck, you can remove it from the CLI's transaction queue with this command. This will allow you to re-try it. -* `rpcctl`: This lets you directly start or stop the Blockstack CLI's background daemon, which lets you recover from any crashes it experiences (you can find a trace of its behavior in `~/.blockstack/api_endpoint.log`) - -## Programmatic Access - -Other programs may want to make RPC calls the Blockstack CLI daemon. They can do so using either the `blockstack_client` Python package, or they can do so via the CLI as follows: - -* `rpc`: Issue a JSON RPC call. Takes a raw JSON string that encodes a list of arguments. - diff --git a/core/attic/figures/gaia-authentication.png b/core/attic/figures/gaia-authentication.png deleted file mode 100644 index 03ca186ef22c787b03777e335b3cae81de9822a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34159 zcmeFZWmuG5`!B2rf*>MY0|-cWGeb8b9fC+GDBaySQlf-(!yqjp-K9w9Py$MKH`4Gf zyzg7@=h^>#?7hFg^Top%u9$VLb)LUk6RfH%hmA>wdF|RY><9AF>esH__uh&Z`z8LdH7``>we@|4NE5qiYh6Vmbd#gM2N`}os4U2#a z?@bYzQm1)M&+}!}A38=ftZ{6RbW|3d);p02xc2d+$#whFTon)A-YO0brD$!s6}E$# zvqDn7!<*7dsn^6V{Pl9}@bs{M#gi%=9ZgI1z#AqRciJm*IPOT*xHs{&`p{sM7#F-E z0;`|mzrK1gB5AH(m}S5Ihr)LCpZDT#|KlU2d;inB|I-2d@c-%EtD|X_bP!@^GdPVZ zy*HAX8XIV2i+Fm`J;mln)aOaOmZhk;UnUor{rrM6jBn;}R3Jj^mMv{@q3<;!a(VM}Ggt%acJHk+A%kFP#a zL&!9nWsAT4a|mV`_`WVsa3uIEUJV4H88`$SYQ)RKgal)tANBxF#FdypV78+eJh}k> z_}7_#eFDZtmIqCj;P)XKe_iFT>t`gO6o|haU5E#tXCyp;KSIc?J1Bw!`@1v6-Qg-upF=DdsY+gMqtcHJ@n z2e-DilAe)`*Eqj5$+3Z;wZ-&0pA!{bjXQxE7*&-O3|^xVHxr1Zj}Ik9GXZ%=cFFsYC8hTx^8oVD)3a7T42A8zcoKmbln@?f|CoqV%*)B$9s14I#%9;j z)^=-jl;l<9F0GEYmd;arezAx*#X=vr1O(bBwY9b7WMxM^zi)MSE3P}axKywrEiEm% zPLjTjGj9bBk_yM9L{F9ns`3LhKLuuGi z9W!e>LbbgqG2PLhzbLDy3@%!Q1?=&B7t{4y>}e6vy=O>zkaPE&#vQs$>nFOp?-xIE zgnx82J0|-+zu1$+m8+sPcyKeRvb)tT>cSC@FqNaM^8H@GROkhNUDH2AHJi`0{ zpQP>_H8>*L9h#Wvk$cu{ZiN#=%`mo&1KIgj@WlC|ARK3c#U8nT^P2{CT>{$kFl(*~ z5@r+Z5<>F#j~?tqiEEgaaSWrj(THJ@XnlDvnZi|C7HKTq75Ui3$?1NMqF?8+-W_Rv z3chlsx$*}HbJ9dcr>Ga2d_P<0S%c;yqA=UIV;VgUEOhRz&AlFdw*ZI3HQn@DrAt+m zlv+G0LK8?d!<#ZtSWA(UlazenQSnmw*~jF^&T7x7JJYXcBxmN#&CS^tNZw3jUr=%A zqulwv>(hloQP7z#<7j{V^QP)g!Mh5JBZ9;beG9Iiy(9NR#pRTCZDlMV%F;c>$5_Pd z1UJ8LT&*><@0sFVxTrARGR{xIB+u@zZAB__`P18HGPMUqE*dvWmUO5xj(eM!+#Kta zOYGo$L`P-NGOyk<^6lGz8&4Za9Qtcr(L-9pUQL zhyzeH@3G%%kHv{|@Q!rREHz3=Nm(OZ@d%`_cRFi+Wd7buv%Ht!j$)ZG)&eprGB5!v z3O38~MMlzxNU$bxSC`~xm?LH$>6ref3SRAybB(35f&7SII?X&2+M=nZ%89G$p@vYx zEQ81)uq;)}n%eC{wzDp`a;%)eXuD251XEg(M=(-6<1trm$j|f_XmCm@s=l>wrS}K! zJsLik5BRFRPhAFjGBBM=`d*3W*bnk%_H;@YW zX~*aNDn`Gipt2f*fq?<5G*n6;C@^qfnZm?zt~FGS6D7s+WN1iJ0wI+crPlI1(4oh; zL4w`R+`;ZU2lUC4Cywym7oQ~HlYNU?rP-W!$zx`Wu5GE@93L8ru24d6ijgHV%|hG7 z3eUVao_Lp^pMPBFjGFi%yPir5L2Wz9o1Pp{=YDK6e`5eb`#nWvwf!>YOLaRMOh41U zQ*c{Q$0c!BRe4786TO#~#U$HzP+%IiOMh1^xw~e!x4_!qDodarY4va-eJrgvAUzpB z{lhRIK=vjI`Ez4q+ElrU%gvN$f-k!HTNgncd8hnyw7|yj@&eBB{p(Hp8Vejhyf+jfr(Qf;#9VYUHpzTgw=EHbaeBI)krUSrEQ@ z_<~cr^BG*&eD@}~EYx0zRy4G*jm>Wbk1pG*In@3Ef)?jh7xj3xBSToUzJ@@rGOuJw z-_M^e3Qy@y-#56Rx5+-P{Xj^jjz8 zIq9|>cMaigfzU@Epp9llZ+^E2cSg7miLxpp&E!r=>);J*k-Q}w(Zp=QRRL=cj~Wvw zx_;}gUXNM!03NGBygWQSeAIW*-u}A4!|GkNljT#tEjh1O32A8@Ds1{F5d#msMR+(M#K`!#k~~pZeR1i;K@F9Ka18;rnz*;+fqp zTqNOq(K@=Zy1F_&J-xneH82$s5s{ionaMLE;nKW0tJM4O;lmvx$?>xMd@NVi_4kOa zdi(uqhUYSmOVPxesJEy$6Z+em#vGE2|)i!n! z4t32*$-ECWU!v`5xGQuSdQmi64m;+Dt-XQ6uXi#v62EJ$b6irMfn|DS9^(>De&Xig z!Cy+OZ+`n_P-3AiY0KWhVOO}O{P!e+z7jW9tD=Vm6sO0NEcrP1+PJ#9Vi1|cPQD5G z`b@J{Yx@Hjt8omj##cR0ob+axt%DcRc3mxLBZz`P*4E|D2|^XUnP~q{LTm!6_pAt za-J3EbK5l60`YnRX7ebNO@*g5aQ%H=9+Pm4F%<gYn#E-!*XTa?YR^L(gNsmdfzB!R-hNOF1bP2JVU-f`AlgO0 zywl-Zx4|@9+v4Wt#=DV>M$K~Dj_5W=s0Y#Hqt_F&Re9Ub->}XXBEDu0*1Ik+L7Y)N z?Co*8mP~bQZ>MDhMny%L=Rj;fdsK#)<_jl)8uU#Qv}MWod@^oQY|sMpqG$2_Gb~EmzXyUjCh%Zvo#*~kk`foscea9 zlTttbD(NzjoQGb2^nXM4|qGmaAgl4S5)!cNM9c=Em$`mC8uon8dyE6lIb#&U%cU4po)npHb^BptS z=^6ze^fa}oCq_tW5Yw9sLEx<;h5EIN7@$7=VkgTCdI)rMblZsQu(1Qm zvc|rW5Z-*0_e!AzQt<}21lm|pUS9mtSB^URGugLN?nB*9X|AQkMMegCDu%<*;%D5M z$H?@?GX)<7Wh3H?PBP4u^=8!`;N~6r66X9c8Q|51(Cs|xiAVx#1ey}uAv!x)I1gH^5!uSb5!Lu z0%odA_j?i0H=*@%7l|<;F&*oV8K;`s`J~1PbuZILLN1vKe+U1&+;^tOS<- znuE6p%-rj`ySoV%W0UXg#qdEV%|*CVjukjf0793Kxk9Dbn^Wn%&sg_`xG0A|jo^sVOnFtc%m7xt0S#{MNz2!P2s_ zXi>=tSy@@eH~MX=G-K_G6z#!k#Tq{&18V?PI4T#8R|o(kb?mu^N1|{L<@(SNLBPF2 zi2iOnZ!#(2or&b6q`9YgI5Ewu>R8R&*0zM)^8p%_PST+myh$34URv8h+8} z;f_Z<_i+M{g4Ng>PsrYNDk>|t3fg>J%7qf!e~J=sQ!~!DlJQaYuy9d++(S#pBlJQ9 zE01n0*2LL&m@@;nk~M_Sz1yd_kM z{ey?YS275o?34@(Unpyn_gIi_9e{~TW!jamjTE+VfB$lVBxA*lc|hiW?|u53)@t7Z z!j3ybsp?+W(Ic{#ncbsmyXoyOJ&W!37JH75-C3Czq3;recUr!7tA1wmx9+d9VAQnsjn&VR zPo9vcl?WvUu=w8{bjmDK7cHepd>t;xu`-1l@5)-5@uSj~_(SL7i=G#bWX#G67v<^n zUZj{e=7*AFyflx#4Ug;Vk?B|2!F8_$A+VxM_qUoDeU;J39&{42Js?>PlqqP$`Vc3) zBCjFXURP5?*0rZKAXi1vSaNuAaly+--W$EnL$v)+kxMJ^EIt0Ld6((_#i^n1#|S(J zxbY9hWb4P_SO)bTggkTdgYqt>rlz7#lOKIDRjp)XGZ*>z@gsy8d2Gj;l;e)2NzeQl zmoQKl2lmNKXP&#<(ao28%^9969cCtWo%D$>Ct&szb>6cJbn=B>n5joxZ z`YCse=N6qTESwtIF%T)3*vc&MR+1RQ3%t z+Hmu0noPm0^LOI7r|R5GRTIt!3alX0=_n~%j2u)OZ&}{(#%0{$A{Qj9C@3iK>Mu#_ zfiEU6{s;>VT>zc>TWoCXZbY`PG}4Ic76S)rQlTdEyy7KkI}YarT0A?sprt0CzC>0R zPT1S-0AD7}4|a9OdI%VbH9*lo;{%j9hXx5+(*r{t8w(2s+ClW525&dGfsT$mdw?Z< zv5-6huulhCMMWj01^hPycdeA#6W)@=#-{r98`3GX^A%@{Yy8+n(3ixonae*vk2SZk zQKl`_q^F`VO_;NOegqYJ??e%q-H@3W6g;4J9BgTAUBH3l3+H98*?puWwY74K{B$^h zGoXv`d*=2uZf7`Fdi=YTPp@^T*uJ`}#NCBx*38S3(@#fZ=H#Y2V(X*2Q07rAFn;?h0%;t8`jB{PqxXm8GpO7639967a7t>e~m6it%3`#dsgd-H{_ z_1j6&va5UNzt|gVCUvStIoTQtDPU)HhAA(&Gy?F_$XVD;q{f6`Hz!%oOEoB-wEb)vR}N$Z$V?eAJYwaX0AQ zqSn%nO>NVxI9EA}s=&WhUhuRB3C-rSC2XTKUU+z%1bYqeztMBdJ$g3%@X4MSj-DCC z7SqVz`ZC&g_8jV)=;(73ZU=JF3uOr@DN3&EDbrmNf8=bBWLp|m9xg8X!e+I!Mo;yk zDTf!zKdt*hajGWsTO=Ga!iVa@*JT3#w-Ca?iBj0@>F;HPStg%Rw?FVO?P5P?%54rC z=-F3-G>UbcaVDNQqsy1QKC#Q)E)L)0E<>N~Y4~4yvozetqc&L~YgZK4Jfyc**{9)X z_U)P1ioiuFm-Lk&Ee&@;)s?nr`$TNuHWQV0HV0v0)@jaF_ zW$5Xx1>KZ^2z8ckjwg>EJu;#Tg5-4MzWD1w0pCUBqj=nTVP$1yP7b6cXV`ga45;jT5zkK82a5C?& z5~t$0+zBHHYH;5(p(ZEBk!AaP`ss(Q%%hQM)cKsBY;Lk=kADB2SeTZQ(ju`_3IIaS zNPdxOJH#XC$sX>D?1R0%J%WMhZ99Tg+thCwQWmLHWLN;rv5q%*3t@Ls+I9n&mxSh% z{qXH**Z8*kVvCnx zME^5Dc=aUb*Kl4LLzm^5{8dg*PqE~51?@4*e!D$Rt0>-g!S|{%ejJCB*z~3Im3SM5 zO{CQshZPR7;#%?N6CNUq&FGr+$YZ|GT=WkiH$L)Gt+k}jA$RLFwC)SW?m_SC1=&4z z2%!xf8@(P!gH4(DPjkI`#IP$Ku)ezb=8H09#|=fP0*EyZ{Frq~{lKPawI?4@VCBDb z2Ggw{!)c~h*roFm)S`~xFfF=LHD8wbvEYD%CCk4CGXdXh2&%-d^W=$8s`%FC=Fgu$ zi2}=v+o4o&b{x+U$UF9RCr?iyvDlWD7TG(Y`i{?3Q**sDahJVT9U;?ze2_V?53!{^ zYA7#{>C-mfmWSdVr}sPkdq5UZ$@-**jI7E5B}kLKkj#F}1DFRH(ZKVYL`N|(w6wIW znb1LFEhA#S;?~>ECl1SRB(9Gk{|-Z+W-VE9U_Wpaz`>=Fd%7ydshh!t?X; zZox%=rd?}mF_``03nAcB5g=~$+snO86#-u~a)0)02Dmw1{-_$2I%(m}j+yp`PsJ^V zga_gYdno73{X!xCF{E6Sba;LMTVHco-0SW7kU;h`&Zg574v{#JNs~J;M`_5vS2(j0aIu1J0G^vhMJ$&%^@wCo9gl~HC!lFC;u~p`HsbH%>jKTjCo-%1@MTFv z>{&=?s0iH_kwi1JYk@)P?e8hZ-X`yi3ZyMclb@x(%t%nR|DXKFOkh8PBeL7rkcV4S zhqcUC66i03mWyI?0nrJ4%hu0h=Qw%*;vM#r&F8pR5{^@%kMi$QY#4h)2 zFMrws53xZ-nymF2;LBG|pxCf}uZr)<;LOa-VdLdFN8R?Te;;a*+a-}9c39o#?Ba5w zPx!}wCG*BaC);q<`g4_C=#}&PZ?pHm{bA7Bez~|;UhgmC_5Z=%1@`hEtM-?>`@at8 ze~dKAUs(OOOdQJ~j{tlVU}v3ahAwOyK7a!}4$@Lnfhp^|zafj&-Pc$6@ndp^V|`_% zTuSAKqUpG)-v%_)8Qx0FVNmzlCp0v4qRO6Dpw#nl^FW&v0s;KAt8#UDS+M@(@Zf-r zot-~2$^y7`DMQM@%z-L?!UkqW?{}z7SRS=$W_~`4EolA&Lqnja`~UiNYV0dD}JGO5HiBzpAx)LLGr@nuO2?@OwH>~$? zc61!%X#B06?=qr#n40F)*Lyd@g03ehx5oP47JKN(92*yB|80Ec)y|GRq^z=1z{$(W zDLO_&Lj#Bb-ddycNG2NKUJ)o$uhSJgXQ{~Y!dzKdAtfh&doUE63{Z59c9wcxrV>2^ zL*DJ<+5m@wHmA2Ag;(ZdazX+S%BBy17K;dToKZ?MIah<+*{)@%qps#ZyRDB&RN9RZ)%dzr^I^?w~TY zW8Ugn#LfFRHvA4ND=M-R30wpO1=|T9R__Kp3=9*blhALi zuELhppEtsiS_&)we)=yNkq)wGHTCr(q?DaH$mUlSt%`=bZ7)GfUdzB;jyJ{Yax>K= zIaDeS9mB1Tl4*$R$)B}ww!tKs2OC2h--Kct7E2~T;)p^U2PYY5*E0fZ?f%H9S ziEoP80j|{lHrC0B9kV*ODU$@zdOn}XW`wL-3qt}J=%5(fK z(_PiX%K(|U>GA#?Z%>}fA^o0{l@(CIT*qMo9I%3d(1Tv*ir@nlQKj2%f1&& zz84!)7aL1yz8Bs!>Md6v{_>>nkisukK!?av@x~1GnF$~k_MV*zP&4>DnFEzZM9E%u zq@6tg#pd6aTd;#GlUaBDD;{L7iI6#~w>;p44+5a9tzE*5a;fR~OPE6l}J49cv+ zaB5l_hzE&fH8CaZl6O}Cfppt5(;Wv!^NoXpLoAjy>(TLw0hk(qZNSrVMvne|Hre7` z_%uk+U7E8%6-@KotOgZlzkhpsTbz&x)Y-iPfUrlmqd$lMLrK|}OqF|q_)%C`SZvb5 z=0q*S`$%f!;pRlXdnNz{YLw;|=DxnZCkL&e(cVwLcRfO%{G96f_j$ zncfs3fN+W(02!*L=;Axy3cjw*UO4|w#g6soZT_bp2EeN)N#HRF8Chq+A4jJQML!AD zmLd1X6P3$PpFZh8`S@b`*yWi)H+bXb?CJ`_M2i7{XqB>^4FC8c#L3ACDxiW>T~1C; zA!btZeK>4=eO*m?T8xWJt;)yD z#-`zr9gJHCM+SGas&9_@XVITpHpwO8Bf!>a0@JX5md zEX3YNBSr^*2^7L}X_JC~mIy#;K22yR_wZ$kwx4zjLSLZpbjg`&KYG*@|MhX9UUj5s z4d7HI9rsHPuKeqGs>bZcL`OD{Rj`<;vMJv`&eO!)3+eLvf*vZK6U-8{$!iMWce(62 z?(%NLY>Byzq8_w)_~F^xd!HA{lcD;fOh1#uUY*O%{CNTk_xlLQLi3+F2dIHu2@Vd< zl25{^S;P1=Z(t%yii`HBGpWU^E%gm@0UN}{I&a#j_kFmHSI*3u8G9s*lT&q4#t%jR z-FHx(?$?@!BoC?)?aQJjzFBBoRJZw4fGK|}0)|Q`E4zll+qh`_o{M_k{+81aQA?&m zywevll?Moxn9idkw-kMd3c@chFAp^OgOHn4aCJFEb*|Yq70RDGCR`2_e>FHr!ddYu zkjUS`)wMD||1F;xDdpJE(EcbIEKu9NSyrzC5VBT}!~DJ}!9a1~4AA9ep@B3^nWKfv z2ZHc^ggfq(8ktZpZ~z*<(jN9OzE`_U#+EWs(6K;AV{TXj59e_z@O%r_+>rQ3R~E zJ(h}~lu}|*k)bn2hQ(yiu(D05X;WPDRk3{*jaS?4bNR)-J|1Hl8z7j^Rk85r2GdK& zE&8q;8R6@1@m%|=B@oMS@cAYjWm}KTkGeCvrIS6-D(1POX z?PVqrZ2XQbcFhTEsB9p!|25e_hTyYw3=p~pJ)y6EL7ZQ8DHQ@29XPiJF!oop5>$af z_W#SECD5S%&#eKJ)MSY(z3O)m1^79#SAN#zyvoIVsKDf()FDu^qPhf$nyMdkU%2)Zwm0J z>rW8%zq!d}nHB2)8ifrp`ORo*A^%JI^va$5=kbC3?0*DfFU-d<{wId=`#ZWof5lq< z;&gvEJ2udv{v=?3F~DC#VdAllA|fE*dbp|YL-g(N=g$%!kiV>J$jMnk8iArZ=4EM_ z|HWee-~byN8=UJ`q71MhQ+-5STpWj96>@kurf__8v`RG#6mG-D>gtY8fHbAv*1K*| zLPthM$Un9Y=W7FVJPYJv|3;B1eoT-!cKsTc4c!J4FE7ZswYhn<+s^Fdq=Bwso~Di% zKmS!q_OEYA(vxZc-&|f6cLCzoU?NClgt!>?MIX(T9?9&~1c6ap5&y63TPamKq;*Ihp za2Pgp`)HU00K~?|209=3b_!aO7PU1sG?zSm!cxb;ilrV?Qc@ZcBNP=9dU!nQt9zw{ zBxYsNxk${cvopJ&pB!{_bVP@$0I?$#wCbbiuYC*wu9`FQW2dEkqDf?`zf;sd{jv5> zPCVELaCa^0HjSyB%YH?G{+*zkgJbH6&B%|j1m z&nS(SrSy+E<6=xz$k^`EDw-E^-2^HlsDgU6E}=?Dqi$zF68%hF1-XtpWYzMvK^jP* zYdCF}iETY0oY6n!eQ)}yIWh&aIoZ|)H?2g@p*4p@ECA69p`{wG7FPXTKvo`jhEO<+ z4GiFQ#q%bT@DS;=-uvni(SHA1E<;o2qvPhl?IG3CyUS;k%>e-cuL z>2jf2Ag?>(rgu09^fdU%W- z#zbC2WxT3ZuR}>jHoMf^EDg(zxBv3u26{_QK=8!MEcGXJJbS(3$VWy$Bq@HC2cS}f zn5YDZ0}3CI-deW=8j()8x?!DLF)(^wpbCVlx19$76Sg4{*D=8OxqviJBbR-nhb;{Y z4&L%8C+;kHsbEvco~egwzGlL!iB{Cxw}rT$Ue25YgC=<9`6twYVU#y%^x^`1d$X-Fl$=hXg>G5vq!v&FoTsQ zcpIlnLe&$sKhspRv9q?inzSI~$HDFaSDIi5G_<$3yZe5>;`+u$mM7}h7g&eG#cyF6 zf_J}pDUEl`Me1kyG9KZzGLRLog%@;}FT5IZIxIxHH$qpU@unV> zi;G%~8myoqeY)6R1@f=qEf>Fv&N&5~RaBp^_PD#v1DLr7Z4(j_(lG&AglKEXdL+;0 zXDs*~N9-oEwQ=bqpxiC?EhES}3_+Y(rLWy~`p5WqW}qfh!Hiw53t3bc^@f{^oIDS6 zw*#QL2KfBx^eZ&!sxwvgoDh9D5p+(!m+GL;+j6s9*!$el((vreRc!akCELQW-4e^k z%O=x?y?3W?97GR0Y$3LLbqa0D5Hx47PEza4hShU%J%#WyvG+Du7{B;7d|7trafOhO{4b~E=wG4J70V`^zjJ6?h4L8+`%ksk0S1w zEv)VSVLL%}^f`{UFURN7wleorEaQ{W{^+_CZxx!`oUpYF4`%$K3T zTnDGldm2f|PoAKjTyXddgMl}dKxFiRz8PW?bm6>YbMoczd|^NBT!f_>MT{0j2_iHZ zxby@O-UGsuApay9RW-c;Jc5OwW(w2=)$i$r7rlENtgH~;qKSL!Hty~T9^b}oy)Z-T z3O#LX?i6SvWO}p3#6b=b2W?=3&o(gCL6s%%7U7j{-E~TY| zEX2MZ#y;qe?(wp{d^z6AeFwyg`>3!1^1{pY%ZroCVdCZRvv0on_zzw?`zK~#@}dz{ ze4s_*p6rg%FOU(5dNZTy?&b#oa@SNJ10Kj@{AF#!$1l#Qyp{_sF!z@(x0CiCs6|yy z)m(O_`Gha0z1?+fJf1^uJmE{*-TSe(HZuk!5HYunAX_!%Zrb^!!^Ttmlj_ko3rB@( z#A25dX^rQ-F~{eIXK(J%!tQf(aM(1nzq}n#{qk~0W9s|(k-OK)qKeB=dA4{s_Bq=N z^{;go;rfUxfN&--vA@3`(Mn7C#Z1i|)pSUlRt zfllQ1%Yj*Gps{6XPBR1 zq#DBMd(RwP3$w-df>fm6VBGMhHIkfJ_1>VGI=gJc^u6dR)bhDo{Qe%&cSuYwnc5;? zF3e|kP0VLwWAu$aN8L$=PUC*4FLjtq`}@(+pN?r~H~AC`Bq&CO(>Tv#IDFFd+j0sE z&)2{_E?`2UT7SFCNx01L2vNL5Td&)~L$~`HE%BOC9liQU@(q#Wv8>l~hDY75%T^aN zTa(k;5MFaG?;GB&U~--3i2W4s_eqZ5OuvVGE@jt2 zd&hGBtrMZuDVULTKL&0^Bz$_68mP2f)Bf_C9K~p|;Yym0)cX%-Wamcg$dBnZuiaAA z(%NW{%^hxdX0$^?s!~z|AZ_99 z{Mu3e#<*ZZ5O)kzDJ&?^uXf0i;NuWzQtMmc$~6?!Qc!xs8y*s3X9n`lBE!rnXmI+M z(yyi1Eirjzy9)KTjf+3tUQ-fKj7qpG;YPiT+e5QA9_OQT*X$L^&YPD+0x;jRg+f^* z?NO1|nLxPyHf|%H-4P*f`0M6Gj2wb??qXmLF0N47<35G*8d12@)U-}ZvLlBqF8vp) znUE^cjH4JdIm}3|D)QjvZZcTp{?J=JgxL6Tr=Q{ZN$7}g>_gLimh>hrCnc44qAlr< z_u8n=*Y1N@?yZhgsj*`WLggpLiZ}#*g8@vC9Whl*#RPO;+n*`v<=VakmsVMULt@y> zrS$qZ_u+Ruv$Z{sikDz0q1=y{3CFX*t|U-&QeC5EVRPo`TviFKHXzMuRK&l~ENE=S zXL15upG8th#4+P;^7=?fjoJp-aFZ+LF~){I@Pw`&?|J~86rhG=wx7&xp99V0?Tcn7 z-~pd39WFQ?$@A+bQ#oKP1Az0RWbn)+y~x^$vrus!q>4k|4@7D0v^Wu{%}Bm2ehVVq zl33DMgBW?K;B3#=Ha8c`VhhnbQS?P~R#2XrnZ4f4v$)Wm9jXg(C8Wyi$M%;?pO z92j6iECQ^`ORP;6ed#Y#dbB3XrNR65(hL_dkmk;gWL&xMysVV{_!{dpzE=WykAJc6 zQbOkz$Mc6MN+C2VB}-1%!)0>{8blf|&bKZy7YXiQD%L(s55K*m!t;JyXeubdS0U}< zOV9=L124Sgq9uG%&qr582JHj`g#s>^briHHb~Zu&tfN}o_X4N!IP9yp3lqnEBM)hJ zSfqe&iAFqzyx{;S!)kW|>wkvZ4iqn_M3RB#F}1QQ;1f0y+veBhh`#{tmR`JQu zle#U$AI#3bo^V5$$x~Dw5fKlxd}C%VX_x_>ceBTBJi@O(2lgUVlkaYhqxDlrbJ|GE zXhgG2XySXcEymkiBoA^EsJqP(PCgP76UzGTMi~J3Mo@68T9N2QM*OByjuE8aBc_hN zT0AJ2UMU1+r)ylvSQXm&z^{QFwK4*P3}BXPJHQ4@u|5SW^K>sS7l zG+Y#Hh6f~b zLm1e*=bssxkBf+Ux1--mriHVgZQ!$DC^1dXqbMbhaZIQ~NV6~3x7NhY7-&qT@gO3N z2MI^PB5mnAxWubh^;tcaDM&RWIp*QiQQXML1>eQ>cngv}kyYUU+JM0*@4EUcotF{W zRu}xvjwSr6fR@smAi4}XVExY;kv--qSmL5*RGj=Cde+f|>Pm4%!n+4dD0cXOdq z@`dC)0!@3%XRi(8#D||}cOSK8d$z!fWcS|Shhw#x>Vl`5)W~C@>N~ISHXGtjo-AmE zlC~CmT@exzA>Va#S`>5{Sm_gst^BN|b}0xW>-TLSO691pqWu($w5e z@KP0ABd4SV`S&YNw
O0pypuaMYl8~W@30*{jT>yb7x;Xz{?jjoXo(gQzc%4MD{ z8$n?MmSSG{s=ekI`x`$hqjIgStRPPi#)(_IyAIDHZQ=)kT}OMz`##8R4c=V=QlvWX zhlnR84PLq88c*lbx4k@MB@kVEjJqyhnH=HDU1j3Yq_*rr%TA$DM;fXURq;OrViOP#ys_JPxtTJX3`)vR?T=@_p?v4it(? z9air-Lrj$V?bUD{c3}Y?n@D;i>AE*Xv5hacSq#rauQN0Tb6yz6+05Ll$ULl&cEbD; zTAS<$4*VZn1l5m zS@t2lwC_)V#g_FkRc4Mxx4Z%-*D~oHz$|)Q&uD9CNaYcP*4jL{v0;6C_iFcDr%s+` zWO7U5zM80-^YiDK1qE!C`CxC|;^Jai1^|?aF3!T7#>@{=@`MKxV7TiQK){8~`95!7 z;zW)-b^A#52~W4R_-Q`mp>NDxn~<~@7D6zX!marSd~zjo-vkJvu#ICm-ACsD%fnb! zrO#mKd{C%6pqG9II`%$jiDH*vZ8Ci6L4#@XDTRl113<@e{XS*f1G{@e^R6#cHN6tC zcu8k}uG#HWjxsI6ocXSbNM~9T?g2C}7=pR) zdBNs9(}Z?aWIr(>0j9L3u~pa^7dY{Ymr!#H(N}zQ5!C4EC;D{z(8PE@K#)>F$;(vA zgW@D4yzy+9!)sCK?4)%~?Cl8Ze9Co-ZUC{F=^ebby?selvNOV;<@lcUH-*&N8Ed_s`E!E^V*WZ7PpOU)`pebF8BjUXjvoJbL)=&94jT{C1Q?+Q? zQlg5szAwiyeXiq70*+PuZgYx7j*}^gWNe@FqINRj9*dYC3Y_JmN}D=~PAIfT?NYJ_ zN+fDTe7w!y_$l7G&v&X>`Bv00dgna!91tC z+4^;Ha8TGN@TLS4Wts|-)}`eL#aTStn2h%sn+3_G-JCYFIDF^byQ+esZOC%&S+L@~ zDq?Dn!S&TwJiv_b>5*uYXB~IERcfI1XEcP8zTJ|Og$?`n>*??Hs44SYz88C&nsG+o z6n_^FAIdqgzZ!MEs=4AtCVP8T`cT|_W%y>lT1(d*yPaj)73XD?!3{x8zH`^|d&v2a z%4m@@=`cX>pfrK+_l|Ea)k}Tcs}m~|Ogr1w#4Zz=7c%R8Exy#uBY-=_TbaHMF+(Aq zVX2P{CQ%11Hb9%Z{`}jy=J&I1v0<+Wh3}sJiEd9FKiu5ml!?c2ZHR25^=zw<+BwXx zyw48!mv1ZQx)c8WevS!Nc{^nxHVoeDu?SZhd}wcwIMv(~ou1do)Q25UG)88sV@A7W zw0xkYPokZS1{=)JarhEyi!QU>H)HpfI(PM^D$|&x$ zd)tYK$h&|5Q)xTZpt=Aeiw|*%?yC@tPEGml%*u#*{~R+NjN&-Vx22?!Vg-4bVh;8% zS5asg{aP2cG^*A|KoZSD6|M0)=B_nyP#lH+;lyf&!GOnH_d0rai@!bOe@hxW;r|z1S z2~OA*)z)?uuJp*F!Fwmj>}OK0Os&c^>VO>q%1Ufk8@T0$F&8~YV0gsXi-wc9%Qg015nnm zoO~{&F`Nj7K?u`jp^ouS7K&h*hZzZk@NgLf@GgHDA@KyuImyAn!OL+#+1}Nrz6s!% zw-)8dT+~`=dHFDi9@W(e3ki9Gz2*C_YksUOz6!Lzml2^ueLQUqrtN62q>eL z2=4s)ApkLJpap_QWNmM6Z*9HN8N(9Lc7Mq>7U~BSS7Th(vWkkuzIxfbzQi4{Nn$w& zZyEHRhjHv##Kd4*;P%qVGMWe2-*feI24{HVNfCn+!;>`cDlk#!9tE?qvLd*s z#s>5A(_`#6%yoNbOvGlhBr^-AQ|BE|E>DSfYQ6>e&PAel@1jhMjI=3yA^?o>NT?cw zb&YYCj|OK)+}bI8qxv3!xk<3>0L%3_^xer9TTK&kDK^YMn+8bU+%IA7MIG4Qi?@SE z8p5+;UME5EjIB;2iBFIb3n=0H=`%<#h05BB3Zli(i*LSKf=^l~J7nSZDq<`9boN z@i}@_SM+WaHe*~fi&s5j;3sW9Ud4jDyKgUSy8@?&5%~h% zJ4HvnwV!ylE+ldYgg>$6a)Y4kCKd}qGpHW{y(HLNGtWcEInvH4Dw=vT^15RWRjw9( znOnn^$+G$}V#RAzQ0X31-77X<*$s*2&+hIbv1!@|=0wZ=DqiO)QB^y8Vn;~BteEqy z%YpA=4adEo!HzXBY0A?!i}-L%KV+42 zN*=|ii$~Ok1d3ANne`+XRSI}&YHBZfwGl#~WI?JI!(Pc<2_!L#A7D5EWR17nq#t6Q z{o+e}mw?c>ahY?N@B)ew>+H$pmqH(XA7}oZpaU^q&q_|1xY-B%agXnpb!Um-Hyl=L zzYs3-DAj4wT`u(klw(PDoCFdp1k3V<$FqmW%X_{@J-o?#b0d>siCbr9afTNhEP1EL zvrCO{*>Sw*wN5f!TR&gyDEXW>HeUGdtFwk+pIgTt0wslnbULoqb1Ko3%~>AYJ{o*- zbhLehm5r?>c_ltJ;ahlE*dkBNV-qEtQFmJ*UfyWbn*4lA3kzm!Tj2Gz?jEd-fS;-` z28mhfY?q-RYvWk?XGiO+!}*}%VLIIwyHdUq)9|824^A&>WjNoD1G$m)jz0>H@;;}YD!a5Lwa6dGafbEO0qo^KcU9@Ppg>*`2tNw$4$n%?S( zT)LvN3g>{5Txsb@{fJPdflxopGGQZ--dd&s9;0)if(J9?7089WQ-&kf!~`X`>9G%CMYvA9zCn%gUbmAl?<)ft=sVbtBu^R(c!nejc5Xy_CC z9?9%}rwW?=a|hS0kI*s{Z^fgBAV^T_w1Ve5416hwcKtC++m#LiBQ|S3JgmL&1Tx9! z)D>ee@;=+*wi3KFT>uR}0)9b%z_rhg-UH9JbT=j0dMMV-gIs$j2aj!&9G8w~44I?p zwC{R)$5O{|Q?Y}}^>m@g1PG!z3e1-X(>{uW1SidmY}3K5k-E}tCIU0|-n`)})g5w@ zi2$nZ!PS$*u^Dyz&j0F(Xk=(~Y2d-JpQww^#X|zUs|@Y@3f^)elBzjG+$+)0@OW^G zkp42uK5^L?(@!J-io9|q7WD}lFOJG9cO1}kQz?}d5N&O3mZCQ^IpI&>qMC@dzzdf~ zC#jh>!;4j+Q0SftQ&lJsRaXW{^caOR@V~Mbf<*u)a&JO|E$U|Sa_w%MO-1Z*^wwbo z?{`hqtImUKd22}^E+-ljnu=DUuEf$&AS7F$g3IB7_>ysr{Iktn5Lx}mA(r23=CZ!O z%978Q@rZgjL?4%Mjww0f+4K!VWvZ5fd(D-?Endq(?wdJRDYy1x{N$g5Z=o4hGXeT> z=+}4Wo4S1~s+!;Ah8rd!cd6jnw)#@gV%((9N-dH!$5$ij6clIN@BpP3>=pZ|_dHGU zPWAfyn`a;uUjMp=Be<(>*e&`=0d$g-SCLO5S(_va-~>~3gC2MdMGtymaq;*5en-GQ zTVG!X4D#l~d=VrvSy04qs#Y*qSf~q$?|1hCGq>+o2Jjb=fdt2AZv{;JR-K;epO0$Y z+40#^MT<(-4RXI*0J*p*tN?1>^e-j)-u`$6nJg18HKMm~mJsNjDiTXGVLHhe9Itcx zen1%o^;P!fy9a0p0ic)$A;k&+6L0UkQGob}wEo(jbLQEb3Ofd^3xlHZ63QwV88pqlhO z8>yg_uCY)C>=`KVLpgl*370iqAfk8G9%DC8yKGq~%^u+0(l!x_e!xutRA`8liHQk( zcwl&PG6^L6q@?^EQ;}_jP*9BXZmfri>~6P5T}+yPQc7^zfpoZF0iY!SP<95Z=9rHf zLV#`sz+zSf&}H-2$F#c+3=i%-k(ckT@jRe;#}6NRJ&5jYmIGJ;pD{5~u>qTUsXrp( zRhJ0bfTi@BndE5^CTdT ztf12Gyd@$hw|j;`;|^5mmf7FxZ`1=zwMBLgl+e5fCH^%1V`B-vLj?<7{Er4noe7-p zkKgOBI995mSI_^^P*G*vs=_Q31YpStPGmd>H#g8ST~I?@cpf^K2Ic@I6MXMb0Xfao zCl>-f3@ay5n|A=jQ((}=5yI5%lZ-g9!jS|E*cq$HeNEQ&CB%Jq=zi!2k5MyA%b*RJ zqcrgGu>gFC^sd!2DE>D& zz$#o^q=CP?-*t_T>LHY~E;!KYI%2*2<6CB&r%#V5{pLv(bG#_?pMyGg6EVOAc)bgH zDMvfNi3`vE8qEBjNsu*oY3M3YMYv=wKY^w#(LmkDxzoj_ivWwO* zz<-z~)oN!MCQQD|EdIc~kCuZe(BZv#C7gPqGjaoeMT##mF3yn93Gb~nv8st|&^f6D zae9-cG7d!k5fKrQBwAn9?Rg>sUOtDu{&f9*XS5zEMRWwiAR%^zsX9c9f{`1zm7(wi zefzZV*u>m%oYij4A-0o8N;WYWc9P_2nV`iiR0%l#Qjk75&2n&iIjjxeCG=}$l9b3M z^68frlcHe3uTNDN&;1y|C|&~N@-48X(@oD1%8w4CGA$;zGMBzdot3tq!=~l)@AZI! znx-T8!RR*khatLiE1dFufwd78BoD5O=eGGbYhvvQ*yLq``^2vTMFubJNXIBEr?iu4 zI(n~<;48hC4*fyk59+|b%(baYfpIip?u9w-XNg4!BrQ^LdQL%t~=NIe5_bX;n?=v= zwR7JZtac868-j{t(R^lhnE867%HSLKj9z~F9*M6CtA#a?_X0vmMU^A|uoohk*thsZ zD-+4=jx~;rYL^u>jD110g{P^bqr=~l)8-Hr&M*k7YITg(SNtk;5U@uh-C+?7bs3)i zY8mjjIHKz6&q?cV&N4qAyeuM^Y$1^sw-HU*xn(~3nu)eVCW(if>!YCmd2|dKuaK)BgU!BV+Z6;(@Kvgfw>YCqXJ7kctuS`as@R`nl*L416=cve zPeDazV>ir$=v`+qWDK-&E}n|Z589Q$k}Q877ol4t;1NX`{D0yv8NjaDRsgg z`SM@e1-%L7v*_SBOBIwdrl^)?Xln`O@hU5 zaw*+G?anJ5L<}OL~eGhy8o}}GLKI^$h07q6?Mp4u2sKr$puC-kS zKR~gS2S*?l1zOE6Gp@cTy zW()dAKfP>u=kLjB(zv7tJC_@qIJR2IT_41R zM`whYQkn@?_@4^ybg=u6yhmT-NGiPTDmD)yX_MS+Sd*8f!igh=9St^*EVBsN%+VP?_U-=*vDSFQ*USW6^B zrPi%2pnJ0~f1HPneCn{L?DUg?f#ROSg1^~_Xl0G}7# zq}i|fg6b!<-4wOv`$%us4_1C+ho55t+})E%0|B>uk1q7te6{GjI1ksZhKnWA5LSL7 zIVSX;QS451b({8o&sKI$#r+R)JTTvR5W3wb&FqcnPxhG&<^IW-MT*`dq&}q%qX8E3 zNjr1h2^ZZ2uS`91Uo+)bV$QnaGrlS-u}V& zRZ0PLlwT~~pQLDz1OAoJd?5?^%kcL9JHbD&OS4mRH>xcItO_8547YaWm^eA%#{`lZ zfa#h-zg1}H=sfd_(bU$KUeTPKoaBoC%i^f5ybn*|jnElyH=lgU;uU?39!rW9zR zE@Lvevsn9xv4@3(G#~)B^@6f;U^9G5jP$eK3#UmW#E_rIlFX>s78z;Rzt1Hj-hcoS zKE>9pt*t^Pp&4bnUrJ(tG@tr4xq;!U{UiK57!2oFQmlno=4~>Kahv=+SnS1fkL>?%U_P#*8B{cL#t{HUo0XfFgCz{>FmhW?hfqQUW#@Aj{ z6Q#$bisiIIM-b!iQwMx^pJhh?gPWKc*T*ZKQ~}OG32;DwkTT@?y&_nyhvm+teN(~9 z7P$QnfR8r1OL=V<7@pYH8)~7!WS=Cl3f&i_JD2w^w|HyOVFRMBY<+TS zc54^wL+jhF9Sfl;EfyURtf)Cfhf$0C)ZA`(`E!K|OYt{=?d&9Kp{>IXX>|~M6_?`= z3Z3YuCz;Pbt5Cc4n4_x2U`1vCXB!(YEzE)0)#!(M2P(8OY#HveN~v3IJF;IOR@gq! zs7T?6ov1#E_GnC`cG?oi_kcG`SEVozSB{t4r?K#A+^M($)78+rE&3>4k>xUv@Z3f2jz z_O)$+=eHU+-3}6U^uTd_?U~iNk5#ltfalpz_+1}v?2CDqM1Kc->Q<5=PBLOfT z0d{a$a!?T|wU6elsZo&+f?Lc*rdBXHIKz$PwNnZ-;7><-Gu8B)pW9j4>-6!aGmS_0k7thuY`6%}3{(Ks_KV7V@WB}hAWOh&#j z_mk@6GEp*{-leqZeE9S`{^E%m;10i@_)JC0dOJ*$TDrb6GQ9w%;>PqA)Pt=1l3iYh z1Okki8Y1*yN}%LNYA5JFd(SVd;K)mCgEe2Kuf{w2Lv<8e6#2rFZyZmvW$w7p0XNKq z1S_q*dQ1*8KMF>fkgg3QnY?KE##VU*FisPERc#7sdxSoEVGj;`Se61S18-I=!CtoB zo_~@ybkdRhMR*>pxm%E?U}u_A*1IVATZ82jjFfkdGHzllm=$smy!$*%d({$!)Ll!}*TyS+|+sPTUkCZ_4BBXaP(AcP>`0VOr3h zLJWeiIrZ>?_}4$Z4EFcAh)*lJz1OdhAHMk0$$}&rrjXzx9=ZshXMRN3C+uQ&8 zRDaqR{0Bkqe>cBh=zhQvFD&_g>kj@YfC93qU-LvH%K7)Exk$kLKQL4Huf6hrUd>zx zP_@<+6&e4&!L&UAz*%=>Xh=Ovg}9@xu#ipB#KI!$tE`&3I;Iuy_yf)^81!If0ouN4 z&j|*HhPo}HKBj_Z$U^=o=n|&ENm_Y;6x6lpZ=0&5$y??sB_fU()1ddivADRnzHa+G z3gknsatA|0zr7vR%?hAP+!;>#?qzSk#qWdlr~=1P?r$fgEV0;EhCkxnCP8ch>8GWo z1<E3mc~fPX+BZG`Bxm_*rWo(K+So8+aVZPX@vyT;Z5V;R6K+df7{{CR*~MYL_EaN9 z2hh!lmcg96O0Y)?M6zbs2FVsY8y}`7^Y=^ zkAsjAxQ`_fhM_B?98<{)J^&Lwq^^^U8afPGdUIBfHt+m^W`hQhq!JIaN`eE%(DhaN z+B^7NZ`{*3AD!KWzPXzEd^Bq3HaSQ@jb*V?4xhY;W~{z+f6J0zV6D9qt~?H0M@K{d?v6ihhS4 z{Z7$h?Vnbdq~5{^AVS5!;Ol2az+^^FPB(6Qdp|~^E9l*QL-RH@2*33 z1EQWJY_sZGK8AdLM)$$)W%ftWitCE?CvTr;QOcJaFuYEIO8aw=wmbMpK3~KStA10? z4B~O=ygy+)x9X(@3hfGaK%#2v3{IF&>jf=P$%cN2aBYZ2vllJ_4G(cZjj~qubzZ$k zuB4tyo2cs4M?aWef1ek}pUQMHPtD^v-m1NFgqlzu-$t*zWBPSlhHM#3g^An0Q*zp! zT;Ig9*i3%-`=cxfd?PF_E}o-k0De77X#g1BF>0`gOeM&rKS*FJZ=X1Ld2&}ZrGS-= zg@-5b)`PHX3bohYNI|x58R3_*tcC_OvT(&2%L<dNxd;4toa1A8d#c^f z9`7_saFNVoygxRoK(Tn1So-(@4;rgR`!q$0y9q{LD@>AirTB|TX97-Btgnqu3g%R1 zyzvQ`B3ib-FOGr%MYt(pfZXKItWMM8!h=pHVd%v)lvPZM=Wl$3wDr(G*N|}U*lrL{ zDd_k#(c&a1Mv~BQBVewFMm?TSTcN<~%t>iLC#82J0C4KKW&MqpkL2*&t9p|xt~#c= z*PHX4oETE%$~cx=sTqLjsStEJ#s01m^puvJ{Hb6jFyd|XXIA1xV`bzcXRAY;m$;Tz zhcZ}@2nrc|J-U45Dk>?9fv~Xf3qO$;e(6}7QhGLOh5K&lFJ8R3BuxTr!EW9~yMuaz zg{4L6>eb5;C^v2}*nqbevt7H!^11kG4A;Gl8lOq`-4E+w&2f^Z+xEJ2PZJ%Sy?Kfkv;JAi{Fy_RuR-t%u9Z;!w(c3yt7D>^uxuem-?AgBUw1@lEqf zs0dkko>yOmBO|&OYzBHDij}6vB2=V%9utHoKtl=XAn=BhCh5(mK4W9#G18Ggb)kec z8ui+`aHuNL0^^w=MJ&}Cm#Vxgnqg}Zs@1sfd6ty3pli*Ea?nT~ZRr@OR0w{WG6>N% z-&|g$Xs!Z<=(ZxZ_=lE(|q1Fo~{cG>B>(>&#d=CV0bw^bl;N_QgNNFxAQm#o!j(vr?Kfw zipMaX8u5(3<-V0Yzf7esasYMAWLGuZ&@1UGRb7NGTl?Nw&S_wTEEjjI6c=M?j|q^+ z9v=>^4BZ*LNmbgo_gXB+HqigMHyU+MskcszP5VOj80ZCjSikw_l5HoHJ9CbPgr$p@ znha8y6^*#@t9=qEpAF7=F%>4o9j>C9N1grRDAXsLy3}qDffyaahfJ<^t{(;OsT(EE zWTYz_p&WD0r!^o{D;nXd8$>y8k{3(1Wt`MHdW;BMVVssn>yTbL@7$!l_j@l?o04Vk zM;CF@na*rYer)jNJ4|EGl}>D!pA|jG2*f&q$Lhyu`jj$1C_-O9UMW%I3v3!CBsRwN z<@cE|;%3e`hrQ^%;dd34_>!M#n>%WfT*`ESE39F+V1Lf-31#k)mrrZaI^H5QW5jyY z*NP?ne$NZxD`3zqPOvDJW_TWuRDnrAmgA|vUUkEUb4Y8NgeB$~Zz3WzFpi`d47RRu zpkTca#&g5Fe<_XVvY%MW0>h_Rdh%Iw%u;5*(eFaPEX8(ADT@Qu8Ks&Q%d;GR3Zi z^59y<&Uit?;E$|ROiNk zV^moCq}(`VUVM2&*_cgutlq=HI=sCIujXd&%=!7PU^HGwG_Bi*$X(ZH3)%o=(1^cv)BGPV&MdZMFaPJU#BCi#AfXckj2-KF;7_=ur0INH(kltu9Hfikxtq+KGjN4W{P!=d7zyaLshyvV9Ci8LD$*V z7IZvg^ejrPer3hVRkL@=DLQ<$KbvquQB?q}C*qDBK@!1wBT8O_i_znh=Gg+z=f$cc zjvoarN>p)leq1kV$0-AFT%qLM8%Nw0luy***gCHuUtd|DeN zu^m2_(k6xOB58niET|9t#@F=VJG&ip+d7mh_Wzisjx}LF7%?3YnW>|FNxh z%kqVxH8!4}$AYnYvwE;0%MvdvzI9azJE=2*_|Ey~k4QUv0mIhMYH^W0QsO`tvc83T z+K7`Sk$X(%J7$B6hOqVNPPS7HgEH6p$&)1yYtL|Y=&+wv`m}$y|MO#Q(Di_cRI;G= zwmx5C*inI8U1eoqi<_0MNmpZ|zaX&W48=+9-#R|nh#kL@DEXM)hOpU*HxzTBHqn^n zPD8rArd{=l99eGLpYmG9SX2!VUnHkfa;Fg6Q>M(u34n9E^Idp_-#J&Rdn3hf1W2q;%VG`cYt}=fu zK^&i14+z-~abX_Jujm|02(2Ya1gjHkOQ@A5X+%`|yp^XYh@p1TZGXjB;}9%8TG{tG zSH;|GJSk|?A=c{)JBlp8Ef?{OKUKKhqi)MbkaS&>l@xnp%&tEA$**6coIYwe7#6_D zQ)?%CwzbGp&o*T`?%nnK4V(WilpQ9aoSL2wk^M$cn=F1v%bU|NySkcALbFT1LtxA) zl=C9&ftG#p`N@J%XR7uKU&4@W5N44;?9C0pu{vK)K&y|Gu?sTG6zWj zME`aS5X%1**j)rx0Cm1ZzY@OkAA&pbj{XcOA*M*o_~rL{pkV!#9gvp|aO&@~|H6;R zY;$qszt;FSegvlhStJw*GjD=|26=Jd1xQNB3u)x63 zHVcEny1TlrzWVCK>%GjInF0n_>L&tWVrd)7Jzz|_w#N8p$iP#ggRq5y?+8&B;!ErT zvG8TTXU*iNbCDsb}i@Msn~*538j z-1A8MBO4<;Da>>Qx2(Bx1}p&;NIJjK)HI2}TzYkxhZI{slb8Sl&AHc=UQS(fYFY^E z0^MIc1k7S7%uGxGR|Bfr+%`zAYQEr7CQj-$at4+`M-AZ6wBAkS(Y4YUP@G0!N!j6m-N&8KDcZeA zVHdA}VwKxi6|yW0rN?Vrq2Kg(=WN4W>ED$qs%3_iniyd&^Lm?g0dzOe&-6GqDHv1L zF*>l;=$Iy>E@7jU2ME~C8M8pcfAToy@6}r52K>N*sK-YI*4>2mx}OlIwN)@l$m>3r z89C}GW~S2&!a%bkO_eno|I&Tym7X}B#bNHtQ)MWpTeIRh)mfh&#&j)1zw4w|r8LLT z^?3^OczWT(fovu2YcNog^p6ierBm^+Txp=o*I3qK;RL@pAIYW4iTtP8z+!JX`&t&TwlikMGJzqR#Gc?|eYwkJ%zz-r{Oyp{sQ8&CQzAubcw1UqdD5?^s|bodWg>o*-phl=NC>gzgB}mFqE-)&TgmQQ0|OVK-5c zNmUq*H(n`sU~6m_Wn|lG;eivBp=Uly-<@bG(UPqgIkUFVFVRvBvHXZ?AMS^{sIJ-< zsvnt+*Ga7U1fJz!<5^(2PErfc7<^`zHKDseLg$q4v-da+l|Iymj*Y1!M^qZdROklJ zwaih_UQ_c>ZSoLP&F(B9+aIv?98YS7GOK*&81nEmNIq~Mk6>s#XgiiF!YI)e!t)>f z=#$o~AOtvB4Kuq>AC^{3b-D&gr|5U~^SpQX6^QjIdW2Aq^u3&#q^CvX;hs*Q6i5?7 zN7NEXX0QuITGll%hao!>7d2zGfnRBv9}wtxmASs;$0!<+xy?inj5xY7q>mTeFeOno zRzi?&cjIoT*wjv3|IbGc8PpMaz-SfMb+rcnq_kRnC(P=cY4RmK``^)AFZ*{A`ZJ>- z@uK;qKTwwWrQc;yHJ6`{{Q;pMch`cKG&Y!a!shiPkxi1nij-i&#Rh3r+z!(shl-P+ zI?TYOv$NWony2VnPs76-w?5dZJol}6@cUk0+r=^6T9MGo8?^FJ6_0nRTHCmxE}gu# z^I1B*FUNiM-rsp~+8z}F5VWV~*rd_jbhXh>cY?t;yqs-^fwW>-lI`XRErV{jR1v_E z&$z5jj8<|N78ay7nA>8=7eGwz{^V-4*kA50T$yDpo)%H_W^@Hqx7BQ*_~-}56zB(iBphTB+H!40J79db#xV+WgE5TI^~=w8tDiRs82P? zj~CBTTUoU#wAJZRs@IcC+H`=_@`(qkYOfeNp8;R(?E*J%&Mka+N;n(yrR^gx#035C z;82%$+q^YuBYw?^H~&+gXn3sY5efG*zkF{WYl}Jf*$SxOR^mzKUfwo`*VWc0y)9P1 z6mPCYovj3lB?c8a3v{~g^ckd-Z^>XB!9!~Btf^e33g8?Y6jzvBbe>MKy7L(I9k=y%ucME!kmxn*n^tkT0)>86nQh5+&shwqEd)4SS z>ycZPXGgD-LP`n?w?jR1xJ0X>g5^G>q zRT^V0BB*e@c*6FWHm)j;@LF*PxJ~J3yakgLDLrXv6yDF;oAQr&U1CdeQ0%Pdw~HJk z8iw1fIz;n{oVh0YyaemWLH{hUOMNOkN;aCRzwLg8tI%L$NG-OiBq7i2)*~0`%JhTl z#gQgw#8I^5`q*VMxXz}3mwt#m%;MF~P=#%Lv{4*v930OYy$6$n%Ce<0h2nnYcfBVF|Ddk#TJGLAAj@Wmu4b~o$O~UNql$< zreS2GAvAEby!?JxcjQ<(0wUF@quJ?X5yq(d8Rb;LZ*WR%e#jMkH}yfsZ&-Kw26c4k zQMx&3xuEgd4nx=w`-!wW@1RPFrU@}iCTfC;z3r$TH~ zJ=4Wnc|*I|Vd#5bz@XPF;{LBU3)k=9E&}!jFj556MbCoLW_hS`qlOnq*F*6-dU|R( zs*PhSB?8_ciyR)xS(tp}@4N=l(;N}sp4DM0JCED7#quWBFPX3{gRGfzY^w)rd%=cw z+IEk<<$ax;=C<~`EFn2}Br8TEGoMj|<`G?v9!z`Tny;fXNP|yur&Nd_aQ|$hKf-)=&57Zf3x(W)Fa%_210gw{;6whd=2aUd`4QwWXTSrU%P@@9#jhRvz6{-qr z)6`nN$NnCT(XWEDW*|-UQLO-LkHTZI3clf*Ckn>N7zMM9Q8~M$hc(A2Ezl+J@(}_- zVgFw5&=xQcZ`9WRUDa*Qp)hKfP^n%wPgQsXDv4a-73BkoB4KTJ$otW6*%c{_H%KDC zf$Rl+wr;9-ucvTMDJz=5oOwOipX~14r8KR)j3S)_X9k@8erMGmp`D^U;|DomvnWS1 zE?GE?1!z-mp9}TJ?s93-9`nAD2y9U*JI2P zlULI1^Q_CpN;~VHjUr3CSuHzY&RgN#?2nC$Ss5tM6Nh3`^{(GP`?|ffJ-)f>q?#9` zX%@^|LmOt9+u(&Z-UOgE*>>;>b#yreTLzY*U6ylu%cI^U4$7{GwR6Pp+w}X^ze3Zx z${?HDX;Gq;uGDI~wBp1|U@=DNHLd)>d})t;-LrHIl~J$KLX1WpB0z}YpT}cg_05gH zbd10zR^oB&YF2?)&2^a%KCh0jj`TM4fkbyt?P_7clW0mrlbGX0|>)I*HyIyEBUq}z38TDp`ymykc7 zFM)v?^2hHg@?X%PK>i1iG4kghzxwB^|J@s3#5SB?W_S{*Htn+Bjy!|pQ#sN6#|AI| EA8C-|i~s-t diff --git a/core/attic/figures/gaia-connect.png b/core/attic/figures/gaia-connect.png deleted file mode 100644 index 34ab79479fe8be669826e8fac8b6bd5a512987f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62805 zcmagGbyStx_dTqnbax4eGzijN(p^f6G}0xFh_sZHG}7JO-Q65YO1h-`x54lI+&kWX zUWbDrczDk9?7j9{bIm!|2~?DqKtUu#eDdT8ij<_7@{=dfEl-|65kG?hKdBN_WO(xA z^AjmCVO3|yZX=qi>f7Xl9oON?@1G*izn}9&CPeq{CCnM9&*hJgpMA?Oer@oH_w~^B zfOOs5(0bM$veXT<=5sn>wj6vGp%+026clt9c+t=4FojjI(Jx~~Ufp0w=01m!5q=&7 z1C77LdGoSfK_2JLQ#D1{rC~_0qxrPJ^>D7}5qH9^Nt>w1GxD$KA^{7szo?#re}M0x z3qHSWHII|x{TFggUg?_Udy?vLfuB!yPL~D zAxFOxtVJX#C@4@#cvRKYCKnd=a#pr?cI@r#!$^2z!oy3<#@wKTB>wVGFGRwSLGRi>EjNkM=jZ3s^YRkaeRE&*yxtp3;5=ArCd=GdTQfX~h>HvS zak?{oeRak3uH=1pCo$U<`*WzBA9NM*%73tK+Bqla|=tTT++Z#zuGIJ^CoduTN+c*_` zg_E>D!j3mihtQNA;qi*sHmt8ht3z>toP?@ zt(z`?uXF~BHW{qwUtXIGrLy|^`qq8X z)Y4L#JYVwiGHo2XJ$0vk`I1SqVzYc$AYBLxk?p6@YsFLq@+GI)Ha~+8AAS!eR9h|7 zfere-vBAmCemebBTUXa}ccv6<#BhqB*Lap(W@ctjYZbq!ITj`+gcvbzd380NL{CXg z&G!d*Bo1mtRn@hf9W8Bb*@vC_ySl8NTl@P%0|VN14rVqsHm@tCxK#K!u6F*i4VKa4)lk?p;bxHp1r3O4=k))&cmdN#Gb z4+sdLVPqu9(rBYy@;F~eO?@8On?Y~1)Z{_LVPTUzp{}m(>gLvdr#}qV&{AHU7~*2U zO#?0@LNkI4zG_D#a9aEM`L%uWFCNk?D=RaE@g*F6ny%B}Z0nUSO#DVu6GCL&zyfu~ z@GEV(HNCbr?%&-u)P7DfED=gAV`F1}K9a!RJBezZcI(SO z>mYDH5((R!suyY+xvg=+#)ISl8}AJz7cd9CEF&v>a(rBFfBl`@M>&R3s|p;;%}rC2 zdJA#!uD)pcIq}59!^73?FqKpU*m%WM0uXH9jNI-v)5F@@+7kIwMY!BA4z;Ws*IO#r zuG*KDnp0EXuff(;RZY#!%`FFus-)76eEs`-HR1f$^EIOc?HmPV_8aolg$+NoG_7XK zj4ab(2m_3j|9yuV#KOWt5XFp)jQpSWwe86K(a46j(las)6(eUp7#K*5B@+=6f?(l< zS{MdvjlVoPTt`(pIC@|V%2`06c-n#q@?600FHfIdwaFTY}q|8$GNv885!Bk zT>U{)LU{OlHp2S)`s@DVjzBDW^#Yp-+|N!!rJ__4S!m8L=8O>H<6>gO{}W4N6;)L) zsi{F;Xu3U{D=jT0ARu@d*_%u{l9om>V=gKA%#eqN2QrqCpO+V2$Y0AH9!>u?w6A6@ zBDIP9q8$?JzD7u2zX{~eNaquDAx|8Md7Y5^JlA?K`ihSI zgjXYV%8f%>-*b81IGdPI{~Mt_HfENVI^Z3|#5!^q>Wx|B6kSbCO+`haJ*K6CXO~mU z$}qc+e-HAyUzCLS!qWbGwBS;6b9<+!KRNhQR##NKc=6)m`g(e5O4)@(MqFIn&@jW* zWe-v*m%zcO+fb8{0Se|ncWM}L<_+Oz`|maP2?J#o71Xq zBPk&4ogZTMy1!mZ=N7yg4eQDiT2&EnK1?-gn6(J~_N`-8(ant)EQ4h*IAr`wO6uxe zJ5rB(&1&U+4KW)A5vMqSr|V44!g8cc1{OSl$B~XgZTcm}5hllPT{|<@xWgBRHjhm|L#IPCj~{DeCySqwI_6cM~aBfjX#;^#nn#n zDzkx=RZ&XOk3zj47)9uX-9X);Z+0Vr{9}>Tmz3?8oDEt$dae}Dfv zwCAzT)5@vBii+r-UFY8JAWXtH0~w29d%0fnriU^t^*IeYCMD^Yd_Rrg^i{EUyq*+CVV)@-&u zHz%{(JvbjXJ@YL`CI=N(*>+L`i?^_f(VLuxy zni?m~HD`m>t`GoxGKIoEdc$2*y3cTOh{jdOr>cdqd$w2dcY{hmhe9fQG;YXhMp=l7 zh4p&ln&uLuC~*2a-UNh&EmeM;em{w*85bUYSbTp~9LD!2Kr;XuF`rG7dZf7djz@QU z%5OY0(@%(!ey@q~mBpSj^5$XpKF7w!=IrJ+C+OUs_bFMx zgD~v|#H|=lMrQC^>Jh=~*Ms!sH^@p$gR+K*gcPZ3;+vgK z4Fi#4jAt_&OAiys3$`#bYgJ(<4R$=rA@!{OdCimW2@v!Vt~J{KJsZF@q+Yo2^lIS- z{od$W`?BZ9l_dF4Uq{rIMP^|iINWr@VjASOJI6P9|OqePP)Y_oQdN%xB3 zjyqp%WqX-=r=+AziZ9P2+`b>)ZD&Ciqj~*05{f?twyv~PDQ4lbtuz|ThYF8g)*#W* z(NXgB#B~OeR|mVh7X8)Xwa2(MLPh`;GOp6o(T(8tU$nJ}=;(2gLK_b!54!n0mbVTL za0+E&nL5cTg|{YV%S|$~r~WYRwIC!3^9|#9T_f5L!#_RSBc-K9h#-zX8MdyWVgCKAcS&-R-lUXJmP8r@ zRs(uiIaQMzPyZ&1G^4pHONlU2lC~cq)K`i~rl!@@yT$ODehNZTjIr&J?ha6l@pq7q z#b)E}kZ7U)Cq{9KIXa@EthBVW5ww1gas6$8smts5gPNP03v@Gsi}Ul{)*>X{Z$nyV zSJC;l6L~*{LhoWNy2q*(siy;-7xVzT6u3m1-A=Kz@1EhQyr1&J<3HpzCp}w#VuOA@D9UP13A1 zxIWthSymM)1SZ^hVtJ<2podJ*hy*RV7bJ771~J;QZ*YCLqhX$3dESL~hr@D)C#cE9 zWD4#c43I_wP*SW}83e^I@0N=2x23?4PvU{SB`H$^O{Ql3o!=9|siJc7al}cs){YJ_ z$vj!Mn^rW>=f}rUWLlx#F#^UJVtk98wPkk|1>+1dtHSPTTLJvGnOhLc>9{>nbre!uZ0+H}|1W0gVh$foOG{hEkM1>ufL$)I@}3VR z;my)wtp%MN0ETRAs)g&{RNn7#!EQ|=4w{E>_qXDNzts>j*qJIED-FRk8mJ&t_`-&O zfG}3fFqdU&FI1?AYbR72V<0~!mY0{U_Uys?uzn?6L=GA1>2Y56#dF}r z!-NMo=ZinnUZ3&5T@Qf-F_+D+!{zqnK>Sri9BHSm8q7me%wzW zZ(5c%qoShr=BiT!JX{mQlt`aC?LjiD64Qmkib+lPh88(i28~~<5;ey-k3A$5ITRiB z)TCH$Qu3N@vWG|OnQ0#%kF1k|3m%xx5DJs?=7^Jxh=}m?^aOov%rz{8cBJmduV3#g z*%1tRUcGunLn9eSmFz(tUnW|!I|-Gs83XR`EHo&Hj)8%g2x?(`+$Z?+&cIyQV|^gm z+TON1C-`cp%H?%;15f5I$@y$PeL&=IXO9ofPypB*ViTt@Eftt*}S-| zuCA^!O#^{%8fwXazXz{>e&5WZE>W)tLrGosc@C0;uI}Pj1T17YXlp@4HjvIgWz^QX zfTmzVnDt#yP|%{=0Y6w)Y||g~H|$hYu*n-+TU+Sfequq=(%t1xsMRU+BENqJ**B_) z#5m;S)j?1YBHuo*ncJQcL7Vr-xv{afe{MfFFHf`Dio`J-Ii{?P_3@(4+q<*n`opuc zv!G2PB_&10FunL-Zcf+WK2@LrAq60$%<0IORx<&ugAkR3n3xy?LqDAyFa-7tB_=;$ zx`k988$#rum6a6~A`V6P-uI(UB+9AXQ9`2jMghLxx0aFE)@J(q^YhV&R&gmPDT#=P z0Mt^I1qjrs%>4cPUje5=34_KH-DQ#Z!=WH#SR2HUm^77@zb8S35WiGN9(bs8U|l#f zD=HjruTH_bd?nokJ-bS3cdC#m@p8?G@DH+rPuml@tWE^x^d4QWjR(S^S%o*%-bxD&OPBWyad11$n#5Cvc#!13W4&-T!oU2+Nes zuuX>N9I55z{7UDJ1bv_Y7k(Ey=d908`5d`>YgreCJXP7 zDkMY2=oUXpOpsp)%~+`^D&s9qq(2wK4akv)aQNBObeHsL@h9r{*6;E0eMY-o1wvt* zU?n#O;?lKd=E*NEFI}9SH-8I=v^v(KgRTzz*7=uwoA95d2Hl~N)C$V~>%a}?M`vd* z0oSGsHcF%PgRhkf^yBLvtL-v0~%l!AFut2_AjyJLBy7fwu{$2P8Zu#eW}Q z;CpPW$t!#g>qQIJI0hpcN=iyr*6-kWRz+T2U2!ftr&m@+gKzH^U)O2wg#z9aK%^SC zZhH%h-7=$ofJ7`VM(%E}A38-|DbT4SB7#GfCKTr3T~t)m)&5CefBAEqp@|8vqo_qT zMSY{8v2mXaAA)Qg>l^jFWIh+xCUL5!q9Q8=vKXYr&W?_TKYjFEhbJe*5LDVa5hGs< z>_!P6t6MW_9J*g1^hjf=*x7MV-r_xtU~WA5ZuC#_NtkDZ#D`n2d`0vcH3 z^4U_v&f;8K`Vr@O%^I6!(9lCcK?MZ|gTAU6o~ItoO?AMonV%EWR0o+9-3ZMdpKd_S zQ8G2;&SSG~PCvy)adXvvn4fbk**V`=I`9HCfX|B|)Nj=`Uk~%WUK7z@R^9}74V=@7 z?5*{6s$ew}BO|#a9yN~|=BA4eUcQ znVGOv9jdA!5k5XXHg?8o;lzY$srUuKH}!Qt;zP`6Z(hha-afkb{?=9;hh@A)7MDR6 z@}5?Xi=$(uot#V8XDexe7%i_kG{htUk2<5DknNuiYMY7N_QYD7197jZSh={~&BcBT z(-Qco?L~{7(xmJ@2NiOo#J><9`?nLZ81_jbd?1D9;2^*D_6l+Nze*jAO7`? zjqIvs@t4j>#&Dc_+uL6hWcbDc8h=WUy@ilT;(qYvC;F^K;{IjD5X-KxGW|EJC$ySc z1Wg<3`bddpjw)I#_Vf!13X!)o0+jxEh~8E4%9aCGm5TXLAyHT_Wy9f-A5Y}ltmn*1^|`iVZ}r7i^CAcWKE{$u0G@c!B?giewmSLhfT) zPwUt~xBv@FX<8Z-!S-2)lP;Qr7ii7$L@vc&L!*Xa!+ZTwE@W=_OiI(v+_?#Sg5Gw;Fc(`sCQ!bD{+# z2qP)g1R>&F4mLI=+g^JIde#s1=kRk<)6D27i~Voe=;Hvn_z7Hxl@5eS&I7&)Aq@X# zCz6Z34(foi6JtgJ-BWeAry zMLfaBFy*oWkL|hz7-&Opj)cJx+nQp+TjaPd&Zt}NmgY(sU1YgkVyclk+eKkv;V~jh zpMrvdjTA54!UL9@?d5SPY3Z_T#r{l@UHGt0$T*M~DpAOyge2a)kxS-_<9{Hjv=afL zegFb^Xo}X~OODZN=iPcI(RsbA)lwb&IF7gOAINg>B}&qHlQ_+Ng<0Ij=u@{;+s`U? z3h{N#`){mruLUFbP1ZigX5|?-%r|gk=ic>)@}3`5I4(0Ho_rSa#AVWcr>SXvx)3IC zC3ypou{aDUPyt9!(0nMbuCGPo$;C@(e#}SFs$^`u3#t69DfR6e+lV73C47?os@R%K zTG+2&zkd9{-hq@LOlW$88Qf_+vDM+6bE9@ zSf-3bOAhfJyAhukNh^qIVf(NIqJsdT>|Ht^PD;$>KbZ;6vrAhE>Pc^o*MA8ga7qTM zykK=+riPGig41BLQxky1rCZGfO-MrInGD6B$`ACLnVBiAC{UQ4U^EAC{=9&GWivl6 zkp!1%`(5ZKQ5Nz-g|o%(PdWr%{G-~8aIl_^PN5)aS@%nPDHh ziM%Zj{}pMmRIF;khi%#T3>{ku<ut1Vkf#NR;`1UOkNGUd5d?(bYWuv{4taQH8di8)~+CM^wj_AyIyaDZ) ztgM%MdV219+-lkJ))P^gO|CaS_j9GqMmf!8hBU=oMZ;u~zv|^q^;Q=AK3Wp_lPbbmIYh;`db#t)MsN(^pyWgZxaC8OQQ^-lAxFse+3x5&R>l)RdG4 zphf)`I@rDz5fK6SJ;_j#vuGWU`i_4>m#4jbdHX`nX;m#ls4QnjQ2icdA$1zc)#xkHo0875Bt*F4^ij0KR-`{V4VQwpW zC!18E_2LoDzLu1d;syjXv`3G&p1Xdxo)+TCy1jQg%?NSZa@j7VG8l@V!!5P^x+KYG zl5x}TbBITqzZB>c#8jLdTLI_Uy{T*8A9Hqc0^q2TkrDsyTrg2LG#%F%8wZDoJr)*L zirYSS_mrZO7xAt}j*F@)_9F)BDio3tbkLpG+k&avl4b(;Vu^6~u!v%b;O8b+8j5x_}Ecw&i-#$88`>8h7mSaqOe#{CYjsE1>NjigzOeMD3o1Zzg z6W#A$nO0A$^X5=ejjb}cqhFLv#C)xJR`WTBn?g-y(j*8#YG+IP!#Frt*ewB-N#)d! zxvxG>G3@Ps$2Ps=Uc+M`@Q2cIBggJaBs$h}Smk^W31!X>mJ}XX9~8#plM`%{FE4}x zql8w4PM-1PxFd1E<%>!$;4TGl5{7&yA5eC|`HHOfF3q8YZL2OOq>P`B&*9ozhAvG0k(=8!C`OsoIL2he#08pw zpL?OCtc`e)(~&NgQ&^<<89FdlJw1;@)13Q{aE4x`!%!l(DdjfhTeV4Pcsk~wFqoR( zV>X6gh}T%)xPQIdLk#unVL^3Bq5Tsfoi{8$t^8sHHzaHD2aAEjf#Dr&nh+K%jeIg+ zEsz1>uN23l=My(2o)4a`OFgS)xsN4meu~TR?!sgYt%eKRbfpU_DLy`LPy4F`owpzP zG9woOG1H3|V%G43^Vr<{rtAC zcz@nG5*j`i^Ga8I9+gw;8rYX3Zg#3Vr<{MJj-&=xFrus0A7d_4%C}HvGR@jp75UCl zl0G_iSW-wX>NbBEJ0)QMb!CHTPE}Q=bMk0YF#ZNg+s}t?#un~E^bk~XZkxT0Hhw{G zmbZqk`Q)Rp^}69lL|@-w5)sKf>>vpNL2l*pzP1$U~@4pVWFdJoDl=A&|L zOS!+;$m@0IF43#FZkE#Yl!$rW%4z~NFze;_yU$2U52^+pF0Q$M`_<)TpkymjrD(Wg zStiNL{K!#%4@!qfxzIZgKL6vI+`ojbv;iDr2D-CyOTZXO*>;EteVy<*d|FZI2weB|8t}@=A$g zQgSoF?WR{b{`oG-g-#p~MO++Vr;2nQ zmzU8F?s;+ed#=cvRRLyZG-h%&XH7(84e3kS|d{Z`RPAucfM%>Mc3H|2RyTo^_)eP8Q zf}PiV#zzeo3<8a0)Kd68^Q3}U%S0+wrC#R+g+b%N_?nN)Gz$o2I0+-ijnLX-Db-cT z`;GTFTV2XdW{48}^d4C6=;{*hkI`hpS=rjk6?c4OTsjy5KiUoc`Zan5(K7FwJ#!em ztmOD!J2X9UkyyI%1$aZgK4PC61l`H8F^b5=4hDUt0POY2Ax5_u&d>PP(b3UnZd4)S z=?qccQPNQnPnaX{&x~uwUQtX|aQH^iqf$%yA?m!P>3icU6DfMCNVf3)LvC#qJV_>{ zLaq;+p1iQ1c}zyeDEm~I;tTO$1|+qu!YWnXf;V&{dNN9uI@pl3$ zQemzT7ngO!IsC-GJ;N7ORaIm!&V#XZ=Jw*u<=v-9%I4|k^60XTs=bEn;7cNQ11fXIdvJ-`LDdo1*Iqpcy$o!||$E^MS z-IfVAN8kb=!7jJpoj)Vz4$X*FA20yj+}u1E7i#G1e*V-4Jd3k)`v2&VzHdd0mHzMGsiOogwcJyO=VDxcP~Q$RnX7g z{1@Sd$H&J%C8^sV)19%m8Zh{MwIXab{#j4O`u;MY_9&DI6Uq{F4?so|?aiUaZbDM*GIEU~|5FI<>CAD1%kkmHTyEy>e67muW!A$(8YDVp zbtGjkbdJFG_Von?1bpTaNirFXH>!Poc33*k*y*^rwbdFas;ir9(P!`qKk>Fj^f5Mt z{N)uCs`CV@n{xQbu3=yxswd0uE6rMpbCZbvlq+P)#P z`!*iI$SQGM$%~PO5YVd8qmh7S?n_AFRiV=*BlU93W{)%oiU}KY6}$3)b4;=?Rlx7; zmp9$dxUxasG7*fj_S&l-Ya+{~PrH>X&dA}XrFGCNRIQM;#cNsCAW*f^Kz-s;KZkn& zpFPjUCnhRfPtDyImV5Q8t&&*Gcy?<~Hv4@hvsUrq@1|24E$*jUqB)BPOTP{9=u&o* z6>`JB>1qYt0Yu>UkeeR8_Y}&{EFm;YzokFx{Rs&PNfDP#9@iCB5BqZu>r8&q)88+1 zC9$k~$at!*tc-brfe4%1R*K2c69ZZ)4l-waMUWY}+bt16)i z%bhzYQ}|9Xe13#WT$m!OhpaGs;0TM#_4Mh2gj_~5AE1}T6tA@3(7&M?71u#y8T;ih zDz^67V0~oU?k6^zbkY|CmQ$b@s>;sYGAK|&Zj`Vl5o^kxafaIJA7R4Npu(aoYc5|Y zB=O*+JS&<399=k$z=vG?WcWkkG}70qzK-`)&rnfg-1+$VGc#*G!}$m^A?<2gA@ss9 zl2~l;Jgi^<^wy)%uRHBcFz|V#iRGP%(Cl(E?{EDkdU@@;b$k`W$uV*BVblcLQ%=|` zw!vveIdu}>^j+CAHVOr@!YX3u5FdV}H`trY<@)V@fbHYqoBKFjveK6D71l*7DlVfwf zzW{7eEy+jOCZK@@N@6}+)^9O|uR?movZZ=Is{Foj-ho8p?(Pn_A(H*|-rimaZwR18r}|@@+`mjog9b8tXh`NuzbvF3EfD^-n9-t#UR(wPh(^@ScrG9-7oS!Z=!-UPE)367{CKLEGY)J$r{sK{n%ebf#>qjDp#B;XJL z86^o~YL@a!#1b~@(rhlxwO+}@Xa;g}aXWElpWl_n3fZ?QOx8p^X>YQ9zK!pa=Wg+g zP5y!C<qK{ws{I^`s|14HO#v34>cz)<|zJhj(wj2|wQ{6e-84d;&%|zUU$U2R4co65ZIB=> zR$9f7J|Gp#lNH`MZ@dW<`<9!hVOcWfRF6f7(%z(QuZ6j~0LUY3Qwa=0!uXh&-z`j* z{c$qjeJgaU9{iXEuL~qYq*~605(UtUPhXf)eaMoHqxfA|*#(j=@Y;N2#61{_XO~%H z09^lFc9QnRTBL$GZ?ol-NYMq>*RO4#gsGNK8SZftMCbdxOC@yX2K09B&-gTI%#^68 zuV*V_?5I!KCya}Vp5z6wVTSEcas*b%f?NM*I3fN#^eLjgopS-lRBHWeNk~MIU|frhq^NY|7SW(X_`RODqD+cVh5frgvo)A}*K@ zi2K8Mw00pTI~&`Ns}{T{r?OwcNX&rpC@~(MBNsm8jX7rYJ~=~H{%1*9m;(W31Jllir#J3kU7qDHj1pX1kQ!k^n`qfHweEy`A!+ZIh8HiWsjX+r-sCDAqp0Z4kE3rwkba)Y;!fn26E+KbJE;IKI>@A~1F}vB zi@@*(nVXXVwFFHmHEHl}a43r?a1mN*pN5Zy_}e}QBwd9`#)D^1uIJEuh2dSv zFW{b)_F&4o!9BB(jklT$Z+caIXV^-Wf5!08-|yE~_JLyMA1Mm_h`^w2Vv;?n75X4u zA+cUO<&qu>pij?&4&Cp5gv+e%($dmXg<9DY-2hxvi>4T))SSLq|D3F9cR97he23h1 z<0Gg+@NnyTAbSDtr@xbxynHACT`DRnUe&~pH%7Dcml1D&K}SbNNhvzft*r+L2Yi?Z zT*Yg-g=D{zf1u;XcJEcZ)orbqx)AFDaw)KSn)X{=TwQ6(6KDJnv-ZyDw|;>I0%6(K zd)pP}_rtMcxoHyCopJAS56BpQFelfrBzU3C3%I2dw7^uG0rua^^wB9{44 z>JLuqWIl~qQG5I2p(I{tD5wfv)PD&yLuBBSEAza)vYyVaPmICh$5;*?RzO?1KgApL znyfxM9y-}Em#iRcUXEwb**>6<4~wt)y-O;E7*(vA8NBb)D zIOr4B2D^Yi5^SyH_vmOGJiKYUawdT8XO*y+QjjY2N(73nUGzN(c3mz}Bb_8Gf-Abr|&qF{@Yb!#$EtWGa~ z&<^U%(x@b}7KR|R4vvl}<^&dh%}{TElgb+!zE4@tmmiN>-m=m1;EZ69v9RppdH=^e zn_Y2AESixs1^9U&w(d=G0ITgEz)UPOxY#RxA^~^L|EwZ`@8f78DbVhg4-S|UYjGs1Q{}Fo++TDL<1O(07rfh0h|7Ss9_vh?kKk+Vy0MWJT~RmM5hrC; z)e2yp%x@e5Zav_b1}bV^ULIka&O@)ZQ!fJeMyTtN{eFHL@2O59@yV?59xP6J*4V-l zD)Fm4;Nck13PnOfnw+K>P#&8rr}tM=gaQ5*E=3&CLPhjMoaQ&cwQ+QGgc)WoNm9}I z)1gB$323(!2sU-QLnL^3*~wThB7vo}<2mVN{yaKuEMBcy2*Ir8!Z-}~ik8b1DuckU_5(gXQyZr z=+>||51x`lEo3ZPhKnSXqspZ|wbEM;9VBJ*d&HMQ zLPG3+4@5X?a~ftA;AO93Hv})~zKG06{D=m?UQAa<$1hj&d>+Sb)&8sW4?q|cQvW-8 z5aWKFO3mwu_=u3t+$Ogatb00I7pRFK^XP~bNx*A$^V6R#J3HHYp^p9e^Y>s12A~)p zk`m#E{Do|R=9B=~^MwiSop4x9-8SYOwqMD(!u}8udMc^{O?TB^HctxUp7N`3pR;ut z=EjWBPTNA`kF&}%4JX0<>AqrVkXHti6kMg-yzt?U3s}zxp)$KFJKu;4m`0r~fGHgf zODJN^*zb?7II$Y5Z=d;1JTLCqmR`-$s>K#_Xg%bRFe&dQ*VAnPUSj`F96S(O)6=}$ zT@O8RvxK%bu_0$Y+K~?YnNTwj*vXe9T;rb_lGx=ssu(3w%O?f|1%3I1Do3GKT#~7f z&R8e#o`_M+F)|w|@T=F3rmDKS@oJeQypyr<%c9qGS(STtuBqMaNwOxHfFWSxiSM^d zqZUbRU%d255_c@GJ>~3Quv__s4#TtK90G)rE4TAVADoBIGGzRg?|Zip+6m}$lWY$j z6bCd$xwnpRyke=7lE`A_ct;~nw<1wW+8;ioP0@k@mI+(ngwIfE1diiGHnZiV$RCCdLg0^ab7&M zRIq^luu-Vr;b}WsK{Ii4d)q0HX`=ZdBUtm4c$I2E;Y!bFQC~wNE=X9Q&xedzzK6Wngu-JKIA}PmgpuT1e07aRm%v89uHQM$%*;(36vsS<^8F#k58! za80IwO1!_-M%+>n+U z66-|2$>`mYvC_u2hol5Jo(sO~xoA#-h5Hqs#iE&+8PNPcbu>R7bv;i4;=Z^1y!p-A z`_6D!*YUjaYU>62Pu@er!?6f&0W+-a?K#6qfXWK;7i_lb5F*MXs-AkC8An3p(b#>E zz1laUyAr9*taYs(6-S)>MQt$(7I)P-+hD^7s69wo`%(xwpT6c6L_95+o`|tQ}|5xv*Dz)OGrH=_+YY&oD*sW#z*D#2YK* zzU_wd)4EOqF8PJ~ILyu8L?l3*G#q)5>UXhH!s19b3$?0~c^rfO9WYu=`mKnpLqM-5f1B3ziImh#6Km!2bB}X z^-`<*(60BRe|wBEkT`J-b%LU^+(KGxSQX6ads{bLK>!V0SOL@ zAnrq`bl7$$T?5UKO^rQ_;6c0x0-o`MVflYEH(kt0mXozwq`pF&3Cavha*~n(At8I# zEAN%o<*JW=$IK0;V80v=bR}41Sbj@?|Jyv>ti^gL>x!ANn+b487~E55Lh#HtFtJt! ziZR=nq_3eofH~^$(1v;;=szMSbd$@70pHF#c|Td(eYW$lV8gK}_sn-(0noOrTa)+*<;McT55oq%imm*3aT;i>W1-#;0yjMC zD?)3>`C4WulF}PCWVb@=x{&A$9qm*w=@XuiAoIT=rO2cH=wt7ajW(U(bEi)yu`dM$ zm%twjj*rx+MYHykdvHAW$ML;+(;B|9Q@1x=h0Ji+n}7kJR$?OyAg87F)^eExTH-dqw@IHw zAF6eSUksbRXN9J@2sc{xW)uAm7WvY}gCJ zmA>xu8WuttpOAn8=My=#^pFb?2+SH98v%x^Ap8rYpQ{l7$0J^3md9~wck+pnMDu6< z`{~)v%M|w7)p(-74W|>SW3)=BB*&wUR1Rf=VJHtUeFz4HxKEQG(J#U1_1WpPo);LC z0s~Ekri2e!EWpxAow_Y~*xI9EM?Q&v%f9cRucH;V^%_VNA0731-@>I8xTfBdZ#MUP zlTR6x@M45&Jw)fwzGs$DeRV)aM#fDXI_H|;-KyZBJpk5fYHE*<&+(aU!_o~C$|Ie1 zG5KUVp*flD0CZ-2xw&8+!1O8bwr&h1+2gqh*jV{9oZSprSvS|rei**L7&@k!gat0Q zS-^yWslG%H6Xn!dXt|z%#p(-#D!}f1|NebwNdD|$kxE-R(Ojh?v)hyD$N6`qyoz^P zi(~ct_}#vGEskG@h?E>mEqZrmo-P&Z2|59$KV)wvI>hS%Q!_R` zE@8J-*BOlWR!uFWWl-uNvHT+f1W4bH5Gf$M6;-%ksjzQ=F z=sv*Zw`YKq^KBIZfdKcf%m(NHe9kPv(1YPxab1yeOwskZqspJY;qAr3>$W7^(kXq` zIKZHaTWlW3vwu9yU}HW1&%l~?@Zx@G8h_;b;kQHZkVsuQVm`;C{-;=+oSf~+oL2KS z4qM8Aw$RgC>Rc)XT@APWZx~oukCRaeKpL5wn%Y#I;i&#@NzflA#c0lJaLu)}&}Sp` z@$r%P@I+RoADE7RP57q#M{*dONM>(I4uQ|&+az&*l^@TAAK`BB%&4-eio;7nM5OIO zOR*{syAf^HyyPtF@v~sz>f!<;m0+Om*^Iq|!-*dX5tva0MvsTY4~9}%NzH2G5#5Fs z{%khR;XuDs$AUMJ_~EDL@b>LAKtU45i6=1?HgT*Mi$9-KiuU2J_C!$H+S(40)|P^< z3m7&resKL~1oQ3Mj{LFjo`P^HQGeR5)csUezB)B3YFscL^TY7u2bztFB!z+nZ5!D#_sc(HW6IPwPkKCL!j@LZ`@=|2mI>26C4 zcjm5tt#Zyw2ruh?Hb!y{ZZK$ne;q4~K>eMN*t9=zdb1xRK|aFxRs~#p(*6FD+ekE- zi|e_K0HChYM>oIm*KLS3TGUn?&#VH^C7JtSYnEI>43m!QpEW57DHpJXHN5O?0&0<>cmii-MUuZuhW#Ek;gwcC_JT z{u;{mIqT+-j{)==YHB!yguwGw?{$9%V*cm4x~68GQGW~=1>c>kE^ch}m^gU%A5$gQw@+=hy7Eh~GQAx>i))Rat0gYR0cSRXt2+{~e|$2&-T>Y)uA- zb+OTm_*JPavAd^yoB=f|#Ay?x6#f0t+x%#+^o8^}PgYh|@%OYwCI!v5Hy5`3I}aXW zFndBpP3`aJ2N;1*TVt8z4rg9PTVfv5pSG5hzRBR(B0I<8;GJg~QarMPr)qdNHAS~iy} zkZCQlRk7eH!{+gqrKct)0J9?U$FE9)Q`VJBpw8v^ce_7YeZ<3XAsFp&uvn`8H}nZe z24c@!{wXtiQRXYZv=YQk*2}=tHXRS~f-#3P2e^FxI=s$7(mT=x;KTt10!&d`=?{yi zW1tZ|R#mX*e<$8rh2nn>p>HNk2137#3G}fsHBlh05C*fzKSllD`)>@VkS+7qJ?w3A z@;)w9qxobWnD=7wI{y#dl5zQ4c(^metYo9lA?zuZ#Ebilj@JC&*Xg>)fD-up`7`)1 zguXs$A~%PF!63(|?_f^Ka-q%<3^<&go-$bt!=sUY-3jw2`tk2lQObGP;_uczzpG8Y zhL&aLbv%-pIerH2Ob*;xu1Yqj=MRlmTi4J`IvD=C1PQ3AsR>Lr!=n-drNn97n;5vm za`NaI#{T&P0DL_t6e($Xb9+@Qn_?gCYX1>Sm*O4aKbPu>J2O)#wE{fhqVkt|Q#3+q z61MN#(Q6Et1_G0xd0SZzR3-g6X0A(iOLtIxiHa&|VzRN^?vDc3etppFwL78Ty+3Nn z8V5+ikO5#<+S%F3?8wQ<0e-ofEPlOuCzLa7B_$U5JLiAQYKc@MB`M&n5>C)IBjw)K zTGyu2y)s**s+mUT!zaBT*jaK-FtENLpO%nOIN)qPDNZDFlCDKwKTV& zRAGX-d)ar{@|4VAWK1cM%M=Z4D=(_V{df>rYqD3hvF7jEZ_5stqM|?(Zf|P?3x-C_ zH8L@g!3eylAHl#qC^mNNZUBEgjQZ9czJ5f<4~7WxqsU6OcO(8 zE9L^8|1LJxbMQTCJyVQahjrs1{lWUH&as?QHeJBhMko}As*iM`AM1BEF+Z5D;Im%j z!#@PD0|@hI3?WahPIBRDj+ zr`^H-7YVOQgd{TKz4o>4tn>5ksW!`GH@Yff)O1tqJyihVUY7UNf%o&iYu+LWAdF;H7{N6)uu;5%^y6YF+Pk}naBB^p(*t5j? z^-;HK_zS&e89Cw#=>wnSo(cA{U*b1$Xlge=p9jO(k&%(p#d-%jJHbo20Lm1DaVjvJ zj=nSK0pwnxSd4?Mty=d>JIQ0fJb}-o0QDN40S~p&bTkdOxg3I)F=F~$ZJ4At1aYw7q}gFvh*0CuoURgb2} ztp=o%v^0^uinn@tVHZE67bhmxR#zkA<9X`NzP&8atTZQvfH;24=dFw6#2CGto?Cje z0KGPRWms8nKR|Q*EJo+;$(5mm9+NHkEec8E?WIEeCxo+t@2wge5<2xB)$jh+t z#c$qG-7TrBF+((|pW0>NjNh44toO0>RmKm;dxS{(m>@V;opiT<%Oty1cjFwRM~d1R z*YkKmrj|GEJfM9R%&vs)8c|&<8R+omn$Fb#dkYT7Q_?|860( zPC+6Q6@1PGC{1&v2Jj5-s=zWLxb*(jw@VWEe-KJLjwwz2_8YK(&#_=6#8VlMy?&o6 z7fQHV)v)rmz33|F3YtIgd|pROaa|v-NmcOwD0|DOD%&nWh!x z7fEyrzl4uSoK;k{WQv@4w`D%^D?_*kr5tT?S6o6OD=Q0NcAyLt9;NB(=sepPUj}~_ zeSJy0)Bnb`wab>4-BUb;S|vpf6|Qv_8_h26&WXZFP|6O|v~SPFw`A=(_-W7}d&{_P z>-KssxfWZ5z^(U$eEeUv7kZUXRAyGLch}%9%Ply)&iC8pkx4kURsTJz;^qXM)E`%+ z(EJA?iAies>iT8xu%vA*Q|CgxJv|#@#n+^c*QLje>o}N>)b^1}+YkKNvhGyg$xU&& zb@k(iXp+F#1FeOtwrbt6;mos-N+FU8P-KUHZHjoNPo|lbRmJJnnRR~Y`|!Pyd+bd^ zesxEmtnblxaY`PnszVijLTK;(`?sWK?jsm#4ZtIYo=L$xbP47=p>qH;lM4q@>Hqgb zARQ-LAkchlLeTJ4h34bIrnS|RFBzWJeM924L5TH0kGu=auaQJ%KU0ZfdU_j{Udmj+ zn8cdKH$1z@$WK+{Ga}N3BNTVr4ExO!Jd2?Fo!6v2RJtWf<>JHh?WWdaO_v=NrM8SZ zy{Ee$B`r?g2;#dcsfT&ylfMwCv@Tz)mqA8Fv>uN&x-u#&DP74-?pYH-@b+`MbuX>W zySNa+TVA<-CY2Q17E*ESflT!JqY{{lELWASt*zD620({@KmFG7tw?Ur(2nrtteLEq(o{L&GWO4a#RK`K zHsh7C?M4{QKiQ(2zouGsQoJ}*_sXkA!sc2N4yyAW{ZaMeNiq(AaT`r|UV6X8hlhtj zFs&>&_7Nv5JS+@m+#t^a$-1t6{cm>yHZts(DJQ{(_2EvQQ%H&Ox~n!t3W^G-T(y#N zivuQ{4|>na!peg=N1X5Ne610Q6n?31x7T5IoourH``YDS1S7ws3GQ=$=yu%p!l5M{ zO%t&<0BzL0dp!=S;8^nvjC-J50zv~UST^mSTAkSw0ZjE4se5WC=CvG^yegdP>QRw1 z6{b{gOk+c$_>7}aBZE(2SCi{+=~zT})#lpaPlHXk2oBw$ftuYyetM_m#TG|jKi25& z*SKw(TUdky1vO?vE9kzr^#e?4z$wbBVR9d8gE54Lg%vpV{4^h+A`=Ct?Q+K7)pxa(4OZ43>RFB3bZzeV#0 zzIDiVx0H$Pt0?8g`T2DiO^5O;<|z|XMww5WFSmr-#@Alx+F&YHTDsw^9mU57@*!2q zCwcNeT%E&Zf412Wy7=wl#ai3@&n7z0mR_;q9}s>U^$knzwzhYK}Z*1um6EsM4vWE)jlNWMhi#kAw? z;F2@XIPv#A|Kl0-l^y7gMU!uWBhKnAHgxR+Uu8Pe+7%xk6O<^5z{~jyH3j!kExj2_ zb)H|2>R7-1dvxbzQ)I=e-nEPqWRF5W-tUW(3oI!vB$3v5jsGBGpS{GW51&<5eaUD74x?11;Kka@ z)d`Mt!G}hU4bf|5n;6+|zRP#$H(Zfe_>#I5dTu>(^f>3?B?72iocuaNqHh)c?-MU= z-^5TAQ9_Bo%jo<9`8}x@GnS(5Nn!EBShg9B_9HrA>RH`-##lGO5LA=i8{iJ*jZG*_R?ok?dhy}%xSuc$>n|5-eZwB2Dc+fROG9kW-uPy*Yv^! ziYra=-m87!qcLMFeI?}e?ciy2=d<32GvRx?k2TspJZW?O%)nQ=pFgsi^RvpTu+cT< zH_ZdP=HKBjPmmkW^u5eRr%%4!q-?3Lc3<4(me7fOZ6{sUx9*#jcfS`#Zz~AKSazIeRg98oPM-^w6luxV-l(FDujcs)cEc^-U1OB!I~y9V zME#_!eH^eJC8>3lLT~;pidCh7Ic_(r^!!;B!(-e8RgC}c=LcpOjupaK`Li0v=Yrus zHO%)(D%qUg0`Z(~f&$sT#g2X+11{9wK}#Lm@}YGRcU{iSEH?L%VonB=b%TbU?za>p zzu=s@m8<2JW_H8pD&28Y|2_5d$7iPwUf@I^x`JmQOq2I@I2d+yWijv z4-@@t5>`F;@dmGrtzXsPpE0GP!o>OM^8*-v(?&(qAw#6c_w?sTKS%br4T2S$fN52X zyRwm055v{@3*Q5C{|KGw@_|Z>-!)S8JUxwndDkgaQ%~!hn+=N0Y8GECfB48^xI0cI z8N~79v&e=JD+UUO7p#wB%%n_K8pu!Q>(@pgD7!pnEGVa1j%~5>G+TKsB=dW2|EvCg z>zZTMrR8JuAun!0N6g*brN3rt&{?jVW0QX0f`g}f?|J)+C)%tPGY9fwJq6-;+G^V? zTr_nEpRd{sh7-#?ej^+t>JmiQL&VM#zE)RFp1crXQ9pru{*q zvmo|nj6Q4m%ZFp)3(;|HM6Q7^@0dLpjQ)0etG}f?^eYDwO+Cv#a(sIW^)}N|k90t$ z0O|IAQj}&)6cBp$0rFSttghijA)ucKEEj_hJ0%wbIEv8*xXWv z#q1!Bs5tdt;U-8obU2;zeXqfppN#&{Cw(fYJ-s_tAhv#-Rc7v7WVynjrcQBk^b?a)_VWIw0ppRe?eSuVTf&viPUoRk01l32ZU2`|!^yYG zp06?+eEGm{73>r-h|lvZ*q&3V2?^ps2iQP zC);_S<`DuE1r2MKuKGIT#KyOp`)3}70JV%o;#KDgD|Xk>_24rpdk{h;Qc6-Da#ey{ zGcVe!PbY)Wt0y#lq)*RW$Uj+h4>~``TVd*h&}3Iph=BRtKh%QeXej0-9OJ!~I&&Hm zfuZQ5^<4;JCo8j2DTxuh6NY7To9_776ApZz8Uz6&DfqMTF#p3?)**aQr?Y$e5BuaG z;Lm0n9CqKlF}?GV`A)?$I$6~6$Xn2@W#ND40DKj*?mzaRUlX(c{%Thu-)-qbXy9RQ zd4!4NAmc>rd+W-76Vbnr-?uZp z8y*btR}5Js^KAO(M(!J8l~Nc#c;_OR@M8vGu;1hM6^0(M26eUCX(Qh!_)3ZVexcvZ zVbn%`&8yzeBZRVdUtei`=^p*u|32n)A@;XnUe`6vx-|IqCDPxw|D@FkD!PoDwRFZ9z1zHbkygQN z2K_900}l03GV6bkI=72Ue_CwXhA=&4is+D64FW%Du$(GxjcHK^;q2u_`jnJS^S^N& z+c<)1L9Fjm2&VDW>@nj#xzGNCxCG92(Hmc7$`p6u5>@^0sYSd+8j2`TYmHTv}K}_jcBk=*U2=kZTj_8IrxCfK# zL~%D$xkKWN33r9I$a9&*cUzHrGSB5+jQf4o4j35bPh0Z2A1tfS z2|5L?$S{4UE4dO7W2!u5cygShSgu5JEPpKB`zLU3tcM`BShe)rGSv5K6*rUFmoEf* z+o`prI2~UgUrsoXHFk{ODtzJY_u1qjWvcG*zP=_!0QFq3cZ@(`iOo*}{nzzRQUh=( zuC2BzOKwx6JZA{yh9x7MFI-I<(%E`?JD=e9_b`P_7jHq0;ewjM$>YaOxp)7sQx_&H z%KQut(oK(m?6W32+7DHG)?_DUUVvN3oU1mXsCT?)Q4%)3jBSpP4# zS-*|hZjmWH0HJ{c0iY9bh3Xmx;g!1jdMOc+T^OtZL!1<0+p#|kfaiis4z%e19)GL6 z@8<;LRDQGgrLSMVv`5c^G3m03Xbqg?&heRVHT3^&AfkZ01hItV24>4NZ}~^1q44~b zZ*i;S{XxWIg%&^sluc@Hw{zm!dKL`(PCR|BFCT}zI-VQB^a;7E8Iwbrm2Q<7Qkee1 zL<3JJ-EZy4WlQwR@vg=tkoW-1r1y7AO9Qm|pr zfB)7mHfjW)BEXl%70}?_xw^6iGuMro^_hIzf;hFUmc=w-en*O5pn_#j)u zKv*vVTwH2#*Jxl6dFxVgVennu`Hj0-v|p~sDx&w?onp+m=k#vj=dO;9Y7{Vh$vkMt z{E~a!M6KCnen$V+`qG`&rfBH->7bz?xGP((!!yisi6FzHu5{^?H^cUnU$K!U+JfcCz1CMDX@l-SsakX; z@}+Nrybp3mL@g46kpCN*chd%A?H)5V5I$92y`$RjWW@e388F$NY>g33+!Z$?XGI;$l70)yV~_{xB0 z0=EN9ZgezLv1w^lm6*6VZK(0&ANLa0m_u@@J)`!QtiYB4R>{D?0Nxq{?be`T-r3!5 zWg4z>($=P#an%3UBG(j&w$0b#tb3<174T!UYI>~6SHnWKXUv!cXTknzU1UW*CF!dT z`-+vug-tb^flK$VSCa!_Oe}`?%R01{L`ocjr7IGJ zU_1?7_LW62sjUH*9N;OyyseBh@a@~Tph#oRI0?Rj{{JvYzUn+0!jJDcR{9j|6)f-f z8g2|j1Fhu>evj8io*Z=U1c2qn*Hlr*fPcX3^&xDZJmGeCqdO;27Ld9=*3mLJ%B+Mp zl}fzxu0EAtr@uo-jstPDDV<9Zb!#ob4JI0uuufgKc-lq*D5 zwzl%>Q+}t%nZLz%hkvCdCRPH3+$(k1C6A}`MAJ(QJpkqmAtzU**cN!4{lQF=^y3g& z1Pn&PXpkT^iPBr2I}f0?|FgTRm<&u179OqG=f1kyT0m;bWZ!^76NF=dhX@fYC)wtc zlEdsmGWJ+TxA+dG_82W)`cJnb%Kbt2_#*b*joR>zEW+F;VDq#wbt(4|*llEFFiqaQ zdv{RE{K+5x{%y)J>t2k*-`9JWXHf^&g(T zf0yn#AFrv_VUg~k@cWW%7MSIR#`Q|>j)O($l_914QgvKf$|(2R@JrjEQs@sx-cJ@J z)Rx?zd-alz%%$qb4x!KI#0xZ3RJ)c;V8QbyVkCGfe3~V%{naTy4GsG?cRG=aFL`8e z_^jTOfZL8lEZdhfkuQJfs}aUNeybYm7OPqpuHt{|Vf6r!!o4#_PqN&Nr8FC^@F$Nl z?wtye5M7+jwW7MfiLX!QV$IHkI6B86O+bQNm3G|vP_?l8qk%re%LTL-7Ut&M`qhG> zqN0+Lbugaz;2ucm91p-Y1?KM$>28ozJPVd228}S7F;OVz0mCdQ>+n4lKa375gfR>$ zD-Jd_+u9{3&cb#kCM+%wJUueA-BrZR`Vg!`NEb@G58{ED1rCyq08MnotiKH z6J0(0**1)A49nU!BF19-i2$8GvHH_|Azjox^I&anJWJv)@-8PQ7x(%#SwH8GI2bvx z15W?6cd`a4?>fJKQf2)~!=m6%!&uqOoabT2_s*WgQ_%_YvGnaf4i?`gdP<#Bsd7aTOuBwMIY81@YqS~p_S9UqpUpo(KLi{DT$DZl$_D2sxZCG zoDkC`5%ZCmH=(4=D8K!+>%%j`OX_AyVxrtnaCdAS)#RNsyVd~$%32Fn4)xkndnlmV*iXF~Kmf-m;4$UJ>Uf zhvK@CbqnVXK}A$lJ&AKtJHPPfV?B2%wD5Tv`>K8Lswp8L6xNM5879EtkiCT^7>YHV8yY%|;_1kKV-1=$ ze;LvZfeZh6#e zRW2$jssUb%MfmEP9QBhdQbuxIjh={1Ltp!$FKnL)EuNC#)qg(p(OJASD;{{DefDmZj z*_2i#`T4Og%GVh+Q|-O@0~O~Q7u8^t_5ToRXwY=to2MtFctQSQeHBXm40S^PGd7&NzLRl`eTohiZhBJ!%_Q|#KOYf#5-|;SCYc0=8se* z&AQx!Cf?q+h=n3=qVU&b0#f4nktNomHF04(R~1=MZ*L>+etXTPaCnEiu!GcHRtzb$ zC|bEca#d24EWKCUY)`BjD{a~zg+g?)W0`|8qBmXAYu+m@=^{r#em>IP(C^q)PVTwV zHCm>Op=b1*j?uT-j7l<+6LnRTN|6bxky_Vte%-?xM1s5FDa(2|C&uu7Ka{t7NwDvnz~onrSMqT z1DZ@3FZzkDE>3ZA9bV@n*S>JwtBWl^X2b=QuU+(3L-r=VbK;e+#d~j`eo=U@BrGCg z?o+P=@kk>1-^)*gCHT}=J;jd5lRKKvGxKXcTquzt^$DEnX6>flJ}@!8L`P?BYkNGX zX$a1&+3()XDjL4Ji~&^~hT{b`F9S7ouIe`k&eR&O`bu+UL&&x4O7Etnw`fj;O_gszK7Qqd7biawu3Nx_M{6vS$<+k zQiU`~oE#}ClPI)aKkd%BM;;Z3pORIRo7?u~%MA45o-bNCDZ|Mb#K90k!_e@4cHUJ` zWX{OUgS!@#Q9A8+l@NCkcUk`4MT0QfC5m~xdP3C3)5{8vC#c5XShvaqcK4B1g9*V% zgI`18B`hLv#>IVdUrC91WH60J@Z=M0{`gp03hn&D)>dlQ0U;V*&^2sJ4qS}Ny|C@Z zPo37t-k09SAN1ki)7nIBq^C22T|3Zz9)vY)u}ZLLXKs0UbZAJSHZRNQ*$Bu68~?z9 znlpn)T*_-GHWb^xkIgr`MdCHu0s{7{unWGDi=v5-#`3ac>EL(%`SZ-$dUan&absl# zK5B7Ag}sfa&pF7%%~xyN{KSMj_2@_SSczj0 zSU`pQ81}i;XWnTzUblx{hmr<4TjaeyCKP}F0)&CRSM1lPucA(3Vf@lO;VAmQU(-c> zVjS1AP<8x9u0>Sfsip3*jZ$X#tdm&v{dexvYEgE@MZr7ZM?zNVy;-*lbEh2d;9Zyc z9($@esicr7SHMOV6k@Ec?Z%!L9zOoY$VZ&}c+#i)y^A8J<>~P;F{tl|n7fF&y^n$1 z*#DkVg@bbbb35LfM`3-9O!97034h|m$cD-!hYw^(#S|-UXTrXYLEb-j#nhGTTFLQu zavJuUd3+E0Gx*2#ULXo?=|Y(?U|8?%@xD21C^eH58x62Wvx%d!a%fJDnWg0tbh}4! zd$t%vx7OH&P`NMVFwUp1r?+K6Mo!K|Lvw+oZDid||B zHa2sU8O8f8OW_xI?>%_%z|fGXns`Cs?{$C_OJdkm_j})B3LDwUDt&OdGw)mGEVHy? zg_2V*rjU^Og7h{m_E5&j&UGU*@YO}1q}bPE1qM*Uz&-?U%t9c!)S0KtR-6#BE-0w^ zY*z$Kb23Q#rZ#*EuK;&<=#TwQer52T%W|g2{tcZA-zqrku#4W%0u?OR2(jJ!_wS9v zTgMFq6{uW}W|>Z3;KTV%WJj6`4*Y7>V*w9YY*}lQPUG{4Na>fMq3y8zrkT@zi?_n+ z&XF*fD6bWoc}Liu=Q23k2?R0`Q&Rwn=w(Z=V6xO--x5_peG9az>+|1{CB|T-Jo*6s zY*P#9utkIMZ#D?AMnu@0s434`=9-@e=7hUlN~q>tHU(K|aXTin&BbJwM@P6A%`QUCVab@OXY(k_`db~%F8AKPIq za5Ne5e!eqIv5wsiS=&Z^Dp!YbrD_dSn-`_%g4`)y_UbD?hoSgcbmPL3IW09cs7wJ>t#UZHl5wg4vmgtZCQ z@~*I0DF_RLeQgjI4Tjd0br9A`8mq8CE!(*nRb$*7cDWzRMOBq#7+e5eHHwr^jE@)V zYiYHul=t=SzO;m+NrG->IrYR-BDGi3bu5B``g`#}Zqt ze%prX@?~Ql=ENz6wx~Oei7QzSwQvStf=`7Kt*u5`JdcgAymaYR61Iz-9d`xQ?_4Yz zXB?;RsxapFQ#JS1j7`UX4toOnAylc!W z6L+>h2z-%Ypo)ShC=;g?<@TEdb5zUWjZ)w-)4*T-PnDh>^d?#G62{phqK|m;PBA># zD*B1jmGTyd^2Fd28wv+C>9#ub)t|0B*W)Hg34nDqfe5tvPd-2Sq*3Ir-PiH)ST9EJ z@J`ct(eya2#}gbm+!=4%giFN}_r%mRtBO>Rk=$VkV$nMlG3U&L1Wj1n5kO!Gy~Ht2 zDLk`sJQ*=dy#M4o3fCdUz;xn(gvg!KEtOU=vV*Ty0#s)wm@+prv$3bA5X89(qOOZQ z4CeXywZv_m#<>V(5QY{-WFl=#jiY?9QTS0MXm>E*Pff#Ts%#vxZ#XVDLfV}#$1d>L zArX?<1&wX73Y7;XRT$73oLpS*ez6HYKpB*ncf+cy&LZP_A5VPCTi!+~#8cZZZT@o# zzg$4mERmpI56U~mr_Q3^N6Uq`@{iC@bclnB$HZiY(?-}=m~~!txa*qiJdt2{Vr*R8 zSNqdN>C+_B$5=>#cTE7A-cU3%*IJvK`zl89vpt>k=X4{E`OC)5sFsmD{`0La2(DNq z#CAt^{lMJ%x(|S_LAV$;Ha2fLfET?1%KS}^*(>EVtfv?3HE}_u)3pBQJzm2Z4sQ<) z8zGnJ6?!WDliwsNu%V;~OWAr=3u-Q1Z3rtMtg^GVPQkn9;prKG4}K$Oiva5P z-uA3fH#l~NXuI(;V->%_x`9pV3yXbfPfrf@ltd|sqfPa&kb!#I81bG0UN*L1F;0FI zem%|%9|5uoP6fTdRU5nW3X7sdA#D%?CtdiKsgbA4_xMY=Sa+CSF zne2q*pHH2g&azi5b!CRSuiz1E>*JVxXnBJdEJpD!o%;=A4c-Y-8olGVpvCmBMV=G% zI$W=Kc-ks`5<6>ZMrT<*8Sy$-k!nX0QlGT0J1DQ*(8BTkZ*QMq8 zyH0jdeF`#{k5JXH+~+aV*43>jFQ>hM4AcM(GG06cvC0r(yYUyAHsQ@Cf~Hl*Bf=S; z4||#9JdnI1tzSo)ZE+H+jKwGwNi%x3acLMCqdLIaGBlJBb2beH-NE0m_Oj6m{Wy+l zj}1{>u}*MPuE&u#?_m^ z=5BiAi*N?s;OjfM_=^!>C|$0I;*J?TDOKbtFOIxAgY@>gSSrJ+tBL=_**~W$j@#xr ztf#yAJ=FobmEa~Js)szU;_GEf%GZgBmS}`+F}Bt0LX&OBAY2XDNNEFE<-hNMH;0;u zGg6P#(^qf$tGaNzf@V@^*^;Q`v{<#emAku^nP3H8_UF%^0pvdy(L?UOd$#&RTl>P= z%59cdrJTzISf%10vpE(P7C4pNp^PcH_T#z%G}r$GN&KAu70#P$g24)Gr=yt~;m|6i zXL*VH3xOj9m0+*DoE%D4>UigIYPc#}C+zNk_=lTBtgNG^sY%6HO-*nS*^BHlqODl? zpq@7p432~TMg+&M09TzgW7w`jtbu=P=z(Kd#xkDcl+u4b|KJj!x6rl|Gc2#IuWLWS zdkdF9(d;?t%W@a6>YvYlj*BUxD%5%KAO<#p!QRHHEvPj9smy8O{#PVp>E#&S4xwZq zC|bx6*`lAY!o8TBg;naW#1ad8wQvatEG#TKpYWULrJZ@fLFt5x2`7+PVu|^u=i2j3 zd_v;ca#Pd!-6uocsKC$jv)cqDw-hTpZKvwfSX5%nKR~ey!?S1E@T}S)!rEbpQ=>LY&+B}}11FaT4H&?I*_7vj+1iyhW22)qL`XL0)$M=pLY{F{;Ej>Q&Nkwkio4d(g~NJFS@_eP9L-X>G8-z4*+LQLo^G+T+b$}~J5P0_u@MCVlZ$<26v$+w{G zd7z*KaGd*xhrQCs5>&@df#QEEt%cmbX;XeJgy*fsix34iKMO+v#n#3Rto@$P(Ucld zc6SHH#sCbG`6Ba8H6DPE3m5oK5w>8SE4r-oPY8f6lvwRkwbB_(@G16W(^vhj&oyTk zdhY>)lJm|k)+}LPWRlak^(tdxWBD==-9PtX`n+dya&p#7Ip-Ub4@29NzXY`cP}7P6 z@wwoiS_RNAV5mUnYm13=Sqt&;`5RClHIYkyebUw4y|38F-9;3#w7S}apAs4wNji*w z$y`7YN6=iL@h0Pg{{|*sTuXd$9JIu0gTTkF(6qeS=`Rp(LxV#?8un(0&%Tf=06w8| z{22%?%5Yde3w#v}8#y%qzsEd`hBi}<_+nb(qkH$rrpsV$U~fI-Fy=K_?9=iI9su$O z&0QQH{|0KxtRGy$4it8@2s2f3RT39~KNx8|;`b;78o!RHV#3q#%mcDY2vDQlXZ`Ru zkb`r?deCED2~?;+eu*vJaAZg6IxfrLd93UW%{^!Sr( zU|N_c$V3V&Svit00w?u ze2ZVbU%-x$m&^*c?(AV6BLrV)%efkAOI4yr6QO-lwLUxRZ8Z`c=If%B=bT(_S{oTLb8(SkU>leRFo@5e z}?1($bDKz6pM5)*eShzT*KhWS*`Ig`jmShknwj?$xWu;PUbP1U65J zB`*Bh0N&3+Fa%ooy*+mx9v;9uz{Flv8G-TESa?;f#ktUfeTh==20J^HFU^?Z7&o|8mJvh30xMJ0K*w?|06|iTJM_0qX z&b++vz)TG0LClWog)q+U0Y6htI~2Gv)Vpn_%iy@cNHe$#I{D1Sjr@W3PAy7IzwQoX zrb6u!{8nt)S@fPLTwX$i&O8d~QApEsdz2YpDEB&iDiSQT_EYN(`8rP&zSZW`#dj@B zU-mn*lduKxDRv%_V+t48y{#|FG(HHRxrpS^W^W;Y#t7ifS%^nx0mRRtFePYqdZw+9 zYcCY`U*2+FAn}cjH@+b$Inmn-*aSjH762*060+XCvydr7g5KkoCVF4EpT0a9@}~Pv zXlN)9`otG25pVGjbvC2?^EjENkmB4Z!HF&a-^kIM|E!5=!dhAg-sp=Zj7Ql1R#yEP z9|A|hhHbr|_qNZ*_Tihl>^~CH9~w{kBKE{x9^x-O<`(-I)mYtePoc|V{1D!^dXH@CDvnGQQG=@}TBO+L~xRy)lDa)(tK z3=oxrqa&zbcr8)p-kin$ukYl*$}Q7LUmgn+oJhxr$Vizv>{sL@H;VNYa7xwiEsOfsp>kWS&Jiq^*T1HJKCZTgECgTAj&Eha*zhFzLFO*k2*l0ChUTVfXB`LR(5 ze>mVyR-im!-J&ADV-e_yf__vp|5NEKi&}Y}7`x|weACqHeV=M`No#J`64T~o%y7N! zP@*E;Dp&v3M23}2@HVR^&x0rhXCW9rr;2MSJk&p1X09tcg&ZR)bMh44x=B0hHhS@> z#GZ7w{-9uvp5WI9d~@*ula4-8*hmS+Q(G{r%AcgVN+FM^6U3s8)&)4t=Lle;Kv`|= zQEzNP;+n?jFAue}ZlDc7zW0FGy}PR`m79nl+~-QH60+Al&zn=No{!b6NXkeY$Bv#A zsMZi(e*Q1BcotJ#s-mz?_apHvVzlpbOG|KXKf+R#T-F%d$hwxJUm9{zwgn2`g#VMA zac4D3v)qOgVToU~)GShsAP9V*9Y^B8)s|=v#&qBJX)e~2vk+|4BLzH%I>rQ`5U~cjdGm+}u~QK* z!{ZSZD8rrxhah%-X=8O2XXa~j^YXdubLa#%Buobf2L=7Um-7>x{b(5((?w8!U@CF% znAz2#;8XtpKx2A$hFij(Lszqe#{Bxw z&EE4Q-KZ2S!7Pgh5~D~SJaslZTuIG|@tv1IY={(lC*BrVGvTP044N~Hl5~cT6&I-f zNF^0?BgI4CN7UV5y-a{g-%K;)6Xr~LP|LgRD@fcb!>zchuxrQ@ML$6l^rgFd9k3#C zGxjuW!Ft@D%Ej(nV#cvS#Y~lNAge~ zLWTIW4_h!S+F5u-CKnrJzR=c>C0LP(kJe?CyfTUR*^(qD^(pJs`Y2~s8+)G?Y8?cI znqZ=}mExt2nD5G)K>3Fjos~5FIF>@jYXdm><+-UI za?%q}nMG~D4qHef`m=HOuxK;f<~Ps(#xt~D3Ea{n_rXj_1n|(G%t{`14}C)*T+b`Z z$*5tKEt$x`P>Z&;Ro5#<_ud7&eT_LiwC&l~vZF4#QjGOg21XH&IvAA0( z5P~tD?w0u#UWxWt7gwA&=c6N4D>->nBZWj$>~YpBC1WGA;&DT8G5ER4%`cW##4*mZ z3@WvE+1JzlA~kMP4|-=R`9X5?`t@soYE?+lLWE*P6Mm{(>?m#y4sgE&z0lO165a(C0P?^;;F70OVf9_6o zPNR{J^KHn}b8j4q_bpdfF87XntJx_q(3fqu@(#j8b}^DX@ZOxxFh zy9wiqJFAGuMFa1V(JXt&C-|5>e&hHXaB#=c2j z;M7~7*{%IEWU;2Tww;2|iIijM1E)h+@u{{U>2n}Rl^lTZ#4;t&$GwPEia=X;NE9~` zAs2m2`s1iOJ>^c3G4IHznkVI!>AbV3A|fB=;&{W)YbAp)~q5+aORo+Z;xWb!ewP#!@4C=C07zhQX6}?acW!L}2U6ewVyQWb#*jdwHKYa@Mq`YWIg%AeJEU z+9lWWwX)z&Z`8s?`OIlLln;+1g7n7X_mJ#~+{RrJtkUFCc6oVuE84avpI`{PWXtZ~ z?}=E_rZU=b49U+bU+!IUqK6FwItfs+oylsr?Rb3)yu1BLxZWg^ zhx61YFzr0nbM|Gg->V;Lcx&*Jo_9;Fi#lOmAzt}#G*E=GSP0AVBv7y%55dJ7JQP&- zd!|P&mlMomAd_D}o)sY~3}@6P-CJ?1FEaK)i?5@1DjcE$gM?_s$bevS!=>g402mJx zH&qTlzKk2^vTR?);=b8mQkx}11*_)l7QGW_24>!;RNbGxJU|?rE`e+{r06FqeHNdd z?h6~||JRn6HZFT)WHYKxW|NDjh z!WyJ1JZ#rHOd}8uWy^1&ldqqqyn6uOr}wQV*IN{wHz_$e7|rT(Cs+rCsBzsseUa{p zh0*&QIk{o%AQ0Zt#G$CjhN^n0Q$?G{0WxT_!~AH6G`Y zy|*j3>!I%px-IiRBte*2h^hu_8uSCSG#h5X*eyH~5kH}AmGO<*h&vpn+WrkY=>ca$ zKfBoDTCVms(Fwy@JdReI#KmyT&&>@$tMz~UGK$}wcYb0|$t}NHV5~dfa;CT0^o@kd z9G;s3fCIpfIzK_D+iB}>GzP?E+_l)vuaM)g>R?YuZ9_ehA^csXh>&amZtEsDH{^@I z(9+ope@-zQ$V#Q@|08*$>MP}r<&tRSjkCTFTw2M+HX(hVuhZ)7;t$ zMi#cumX5S2^t`tvTRP18R==-2+Ix-RSWZ$EJ%`4tcHcGuHTl2DNP+l))69HF@=r34 zR-?S^ccSl-Iz!H689{R|-FfvuIPg?=!ahGw(2-s*U#uEl9T$0)N|uz-lHSFAH}{+8 zTKO0xFTrUbreI)*Oo=(8zyO%i*v{zxk*TTi4w8!L@BW2gyVp-7AlHLjfH;!u4skCR z!S^x^TzjcMo)8XGvvgMx6B-Flr^$W0l(d_Ylz6)?o$74N1G*gc*h_c?Ae#NpiTmQz zB5D6<`}QPXo0+)Ld(vxVMJGv&44gnyKh+1pz~`C|DJfBM%7&|=m6gtb>Oj{9T@Y=s zhwu5r>%l!inVW)?44ccZyRj3Yf31lZjC64Pi|$~}L_}6VOEwa^^Njqup-0<#^#zT|W0$2k6*2+5_TCuuMNDd%mh^~pN41jG{E@sJ z_EOG!nJQ60q%>8sclncMr{g8``-QmeISj_ds)hRC)YbBC8){v@Rxqy zUcRzob7kS`(}!Rc1~uE&f6uGmji(}3ym{wNXNJoo$SCV{By2V!#dYytQYI*EmkU+| zt=G90BtI0oQMKYL5q?WubF_Ww){>T#XS)PGTx62S%;g&SjAXTl@rF;7xo*-;p<-kk zGlhn&OY~S%Qw}N`?rBo+`(;iQ&nps%bGyl1mNVvUP+c_~& zS6=@5-?Ma*NwFwsssXUYfQa*Wx~SA!OM9PkKNWgSLQjRMe#H$ZL^uD=r;7`^J7NBI z16!nG2VROgtdbzE(1>=jHSj3cKNvKO5=Nz;PL%oH-o9-Ox~#ec({0RGa049)gQT(TfV+x~}1 zDF-ibme8jA;|8Avt#F6F1&v0>-y}pQyztZ!7}a^NVhO7+y~jif$Jh2pF#eqjDp%l- zekd$7AFcJOo{tXmsmj0ch7M}S)FM|SIKju$Nn?}s*2CQ6fcXAJzIVu3B|aJ;>N$vk zI_Oa_GyVOz(7(o&wjxjcCr7*dZvPcuW6Ezu^RC!S&F{7s_2sEF0`>#A6$M&l`mSEq zpi$va+>Iy&q-a~8DPH>_9Q5kPGBWd34{) z?}Jc1ROY89QUy&#AUxmaXHJfhtc6ztCs(-+-)F_@PQCL+-SVe5 z=b_OBXWpEg92kl39>xWU3MK44`!~WGQhm*)V|v^sfsglbrShCxVhPmB7fzZ-UXa|F z7jgLRwK~6xB@%~K4JXTLPq@G9wax=sL>Em=~Ju?jocmzPCae#drAZoEnf;^W*J$EeSy(+&so^#Jmclf`+4kRN(a7FRn*~m|(y+4wJ?uGoo&B7_ zYv+Ta6K}MGcxz+scnoVIz|HvcGZ1g6#i{hQ*e?^zEl%L8EF1H^M2ulv4*%HF(WQWq zq9l)eMOhi>3aq`oQ~y2Gl$3O@v|hVBU|T2HRKSl5@S)4g_(a?DBO0$ZuX<`@)3X(N zt3H8bzHAMAOA=x|{AXEL$Fit&U)`(!8KZ$th%!*UcdN3V@toxk#>{Vy4(y9d8o$~e zCR82QJP%lWT@mN08u90&K9q!-g?fCrC@HHH?kx_oZEp7hucpZ2pETMI7m&^`+n)g9 z4SsCUQ+P^P>gbGt<-lkiz{`ID<~$?I^SlY$xU@`<=PZ`QRQ#OFVgM7mP)u=(WS&Wiz=m@kT<@ng^FS*vqfj zX%)w;wNYb#mNh*qr3moMTQ-Pf?d*mFo02}6_Z_b8H_(SEn3foLmIz5>xle`CkOJDqLu_r;ZC3TI-}1=i;(eP;z1WIC$*z>cELr z_h78(J?|9DYZ-uA(N6%nhOGBf;2P)WoCJNg8~eGo;^mikH0zI~XwBhWXeg7@mgwVR z1O}n@cElMN9$vNEr-_&x9)5QL8Mx&9?yKvxRdsds(s#)I|BzBo-@J?DWB#)KCq$;V zp*(*EOy8sI-u4_UeQO&eNn_G8oVwnfwtNl*H6i3of3~+{@8r-vifvv7SYaT}uheHR zw`{e{@UhXnz=lUhJfLjT$;$li-ii+&Dv=WCxZ0+pIi;F)q*R7Odh-sPw@=k=RL;7A zOw`mMF_c~!ZEdxHq8c`v0OhfA!gFf78`j&Q{_R)M9}Rv_UoIq5+1;YNHMJ_v0ul@a zy?J?Cy_Ck2huD@}AL{BRI?l#8lvec^>F91&jvC-#Og_Te_i*wK;K0YfLv;c=llAWv zDM?A-b5d1Y9CN<~egJ*N@q_6T6FO3`LaD@uu#qdHNb=&sqsNc&LKI-#`zja?EgdGn zDL7MxdisAT80Tr#8v9ybGtDucd2n%h!0j*ihly*7wUAOB_P7w9G}(5kS_L5o4X)&Mr>^WSozh zH7TK%*CFrl54pj`rq!4>J3ajwZwfIhZEO%ktO0p~@b2H``TIsXj<9zYzju|teA@@K{D9F+nt=5FJN<;c zs6drlio3t0lzqyRI`VITMV;LS*voP;U#~65&8>8t4UUc`ue5?i41nqh3ky>ormh`3 zpDyJGr2ExuD()QVpzQK}J9dw7h)Pg&(BO!C>Ck4ix>n}I-FU}-cgyHBH+NduSyse4 z;;bAzhc08ef4>*@w{USkmG<0G+V}O6JOf7;=H?uDyB{R>cB75Q%Pxj~1zT?#bf3P5 z>U%XS8=HuzE*i%tcLIc|i-Gsr3i$g*%qFptPgF~^N;1?U;`9x`G|JAqwJ|3(%gaXV z&y8V)yBcv-mhSG<=*Rl{1?eH;^O98m4`*)~R^`@x57UU0f`F11jUX+(5do1>LAs>7 zyF)<rtEwOkXT?T43tWUz@GLA}p?&!6+qd4{sPH$?n)qEvQjsIDDaS~T zo;uM^&&}h>aOFkreKFT}Dx#5KZ@cRk=1O{=hQ@1qS(E?fYo7+Ai6L3P5|s|bUZG<9 zNuk+Tj5X`a{i88MezXEc-8ozYctywmyd1}=yMaclvRo*^nU7O}p0+&@endwcfarGj zV;`G3@)1@klI-)3b9cxf-}+6-4f`1i!60?#(4Z-H?Ki_~)2bx43*Y-8_r{&+&!|wI z(RW8IdI%WCxh?8@sL^DYd1v*~7<$Bqw2FV$&mng^(#m7BpYe>T;Av^Z)%}gFtELcA`+VzJgMz`qPb)bRy?aXXkt{X`~hN ze61`o(dOAT;kmIEVtLEi( znh!M4BqeLLBKwNsk2y8vgFbyRA(9D@XtL*b+U7gpk`f%_{5QOoKGrL;V-JGH(}cF# zXeHHW9XwJU0sX5&)q9!`K6X2`hNf3REf}raJMFIbNs~9j+c{H!W2LpCIJGL{A|@Kk zg>kgO??l0i@%nX$;cxZ5`bkbd$)78w+E4*Vu=+JN9%aAw_Kq?JBDv!lp~8^AGKmM3 zg~M)*6Dl|PvJ#rRo$H|i zR2hNdx?S_=$mRq3;W(v zGbKBqqTOom>CyN-$fq|0a1!lN4=p$7M*@JXXQNVVypQ@sM?|UMi#wrXXvLqFN3Qb zD#v!5F0_It&DCwpJBQX}+t zdG;~PUr)0areEe|H)EJvUd@q$1`A*a_n)gnW_SOy0xL!tkHyLH4Tr$*Kond0GC8}E zE-=Zp|D)_y&d^@__5Sb(?`E;WM;oDrGju_L4wYndhip9Dv;KG)*T?}QFR3w1ok%{U z+5CJmU2EwuH=n8+UK(?-Ak5y@&PqP_x_5k~K2nH$4k$H8ZweTC))?pl(_ddfqoQgw>u)+OhKXj4qg`g}@a?$7u;WUKZ6DCi;!QITaGJI3F4g8h z6f*_apk7>x;DMK{f9+*Qe;&Oe;>lx6D=a~tajXn(j$2;Ud4V7B4`eUBGBQRBufF8( zW8a=DP--Y1uR4W);*;ld3FgeC7vf^(e;^RXA%x0mYj3B?Y?Joyl7)E&eCu;*MWINE zh^}i~XO+MD3PxIBB!Yu8XiVs6X`w!$qM;EX3?jxd*Uih!Gs)a_LH z@UCc|HKZzV<}nF!D9T>Z1HWQPMng!DUNPhBf?MY& zl5R>!@np1@89AYaM^12^kLQBcxcX_wlxd81H6M76IF|Z8W8UCyc=E!pv|tv_=%kJt z=ZeM7$EAS{=xT%Aw#CJvUF!^ z9DX)K3m44jfc|mHV(5)rQUXlM$H&LBnZ%F_VtC9`+-~chI8CdY9T6myium0f<3C}M z%i;7_;+kIGYGPc$f!OA=rE%_6QJ-}rC&S_-USJcao3M8R?DnDEWKPlc zQcXb>75+m`YAok?yPkK26UPrQpMuoWEct*!yYh#bG^=QZPL1Y+w_3rv*G7)}e_W}U zuH75Vu<{rKqP^240hnaP$Y>&m$!9_}04-%{kiW*GDCR*Q3YrNp^X@vcmHBXCn-#N0 za?1V8*N%?qZI~ZzGh9kg1Cv8Ogprm3M-p-mh=ouWfMk={-dvnABiQAF0s-A#?(p~T zj4&F8%|GKOHwN8M{Go1PeVne&O}TO^CnZJ28CM{FVYnt!g7=0yk%Qq6P3lj7klIL4CYfx&a(Q&hu?DXG1NhAb75u}K=h@3l{ScHvr9z0Jllm!b?+kp`KKvn7y&S74HG)K zsmP_s{qZK1*z{D#?ELnAKBLVKwyP&%k(HM#&>{D4{=n5B*rZm)(;2Q1OM+NpVGniu zwDP@%4Zb@YJ*k!3G3dSFvXpNN4Z_eO#|3_;$wFJ%&K5?52w5$l44*C@zMZPXxNlHo zki58P*^C6;Fl8xz<_1+{V+wrawsK0Oo@7K=7@^;atG)fpsatqo*afkEsh(rJCN7?u zbY+*KGBSu~gFb=GuZVUzthMA`%=X1Lj0jEeaetT4@G(F6;IvVmwsq!exPi6S1ekkFVRXPL;u>Lshrfr^5|5jwi zqJFQE4=^&uFe zGxkYLMmwF`S3{47@fh8bEgO5+Adt>F+|n&2E`QiXR7S;(P-c_K{DI-C_WI50q7abC zKG`Uy_jEo06(oEq06b3jq5?)0m`L1ybD!g;KM67MjJD_|KMzlOEf%rB%!sZ6em7Lx zmLzX$5nTnlXVofW)Q9%$z^!~wZ6L4?Dl6#U72?jr2Zd5blK1%eAM$+|8FEWAxj_Mo z^Brndj7z=aB~T7;t5M}O<+HGn+XiLs5mam;pTStPm*-Bi%4{IwgE{rms&5|!0{ajg ziN5aqA`fdC^}P9&NBlU%J_<8tUNn6$0h1-+5wd< zXcllPjnDH|@*Diht*bkN8@hS99e1vivC3xr6gC{x{9@hwp=1e|Lw~f>7-DYF zv4o@nI?85o6eiVAMwAbliRX;3UA+nuh}YX|5UsmlS<{qX(!}qfTq8Vprn{%{>Q*D| zckI%JB|6TXIapwj)_?>nW!%E9du``a6G`=%KXoupwS_e$@If^BMaEJd$q5s!>omyR8fU7A^f#ijyND zx!3^JDf~WcnIi7ECnKJHz$^#Q#b+PA@U)V|M~L|eW-0P;&FEzELQ%AKvhRv)?_zX3 z^p^up)63+kH$^}X7(4~evCTbNF1H)l8Ig@>9PvTXB3X!FW@H3r_0qn;zb!Cm*>chQ zn`%D5=;SEf@2RAo;M8HZWoihD5D*Q3w_hiVb4KB_GQP;7l5}T8} z<8qv1wmIxJMITjw$geE}*AlOrBaC@|sGYNukUX#U739rLCPg|Kiv$#jH={DW!zbhWb#=S-M+EMMbWR=F}dWaef&$@j-t$6fg$VS4f0B;{3 z2t!+>PKpoZ92E5&d$wMFi(XY<*~anNr&{w%d=V)~dpv?tI$Bbn(m#GTLVZP;;Se*0 zzcc`{$w%e7T~$LL8QF^WubaA?6Je~B@APN>XaZoj>e1p;!fpsR2Rmy67QZ0b{;Mwt zjDx2!TX{;oeIvie?etNAD{O6@4?U*HNM#F)JkH93p9>W~nhz4vlc-9%_P@{#`%O6^ zZ~D6ntKrFL2ghUNVfKHtLI~VXq9IN$z)Jy|#vE7luy)$IV%mcbQzmf)=FRLAc>92Q z3yc=@X#}DmdBp1$?;3*ICs&0?QBjeTm9@a@oKjE#nQVdYD*OLFqpG?J4^;Zf zR@pLP#hY>VUcTJ>5SReXUaEj||Ryr@zAm`lRx$|i(ln80BUZE3>pzV88!h}J0>3$n6 zre>qSj=-X|rrplXjA>}Em)}b{uaB>`>MN}3(ja!6UI~}6(1m-JGr4XfURJKBf-Y-o zYqaUUHwa2ZSr=Ab@aXv4CXo3^{JHF)p^dW`J=?{{epbHn2nH2yCfR$9Gsd+`qG0|+ zaY@NYy${f0_%EYe?*RtK&CBcL;2;D?u=88yDE?5zJwsH^0YlB|2d;1EKJt^(L!nC0 z)*yivWD;+XrTJjzZi>*-{1mirXwecqRCM{iHnA`l@G!2v`r6s4$Y467tIMpM`pso> zP7{ldGa%K@A(9p7hVpBFqz>SMp_dQJ`%V`2w)tJ-;Un?Sa+NmrqGMa7=~KS_M@ezT zLEFi@)?o)}<$EUwY4yk7ox|FaL8(hcWFj$h%nsnY(98hE zGa7*cg&uqp;5(kfq(&Kg*5^3o@b&5Kr$LAG6!!owL{PBTlG$qtX|(y*o8-2rxN7|A zm>WC1>||VH1n6*=L7I()mhlFapS}1|$83k~D(kj!PPcia1>e!D=b}jNV%)fY`*z@a z-eI6Gf%*yRgQXS+d%V+cB49VZJTqfrZ4LZqVo~C=XA>8=OH-Sm&GXM4hpSbp({bVdbDcS4>EiEo+3{6k3*?cZfRS>-p zL*sa5A^d5Orje6R;bSXF4ClLd@1B}?ao%=vDgiD&SZAaTq?&!eN{Nmx0oFL+Xv7b0 z2?_0iPy@ZW2_G1&PB6a(eu9*Emsr4h@Pp5Rt0?#6bdlT7<_Le6W4-Wm=gxsz9H#*U z@NoHuA3C<(rS9y9QI-~cOslOy*yiDI%N+9}I?VsvR`PdQqr7iYg411$W8N0&_%$dlZ6Hy|6W0VQExXEL9!D&OpVn_ra>G#N6MsF@0U^B@A;krL-CFV=1z39qIxNBaKhJI~cY{kki<0<;o+pCceAi zilol&ik;~Dkrm=S^fi=UJjrXp>J#egE1o86L#lHOfqD+MMm8&gR>LK2c@ z{l=aiZm99y2mM!F>9EkC=7ivWvFXP#wlX1+fGKgeq@*NlXh^}^9>`a6gWp4u7&mv( zv!bBEus^-I^BAR<+3%V8@cFIXma8m?Pk!lI@mgS(F-9gNGtC~PXJ(VKmOA_58;AIt z$OdJZIx0c5ry z&j4Wqq!&3UDRg(&K;00>rH`ivkS4VK!Nq4A=BIgOgSt57)hlp$u<)1AtLC5j+S)oK zeoE}mL*whK1CgV<0ESBsy#~=()%PFJTv8(t$8##N3D~((=>ajQgC~iL_Nja(G;_oc ze|-iW0Jj(Ezqv!{8%#7(rvvg=J&HCHY3}JKBe1m>nP)24RXE28MCtuL3OlzmGat{v z$t|?CD)%W_|7fxa=Y#v{`JKfzzE+EJvun} zjD1^6itr=f*Gj z#$(L~L~K*rVEpxw^Ci_J;h{^dG2R6=xIx146tMqfEahrC`?I=mdZ5?gU+Xc|1E~Z^ zByL>x-`?DmS5VMFOX&SYQnAdBFwyf!RU!7aTISK!`IuNiik#5~U-6~aEiNMP33DA5 zcp;>w1Ta+T4bepTUd`jvx?aV+V%w7^KT-Rxq+}DU>fq`3^@$)T0!E^%t4kP|3it=T zKywR~Uq5{c#;HgOJ{M?P;WBucn0W8mY4Lwrj*}xICDtBxg{IFv83{riEM=0esbxve z1Sczq8Z#7qhD#~OY2g5FD7dH)G!4_&IlVzW`lK_dU`CyT!LQvc{v+v1BXzO#Jb@VpZLQE^k(|fPJy?W;6 z`24XIKc|nEl=xPqEtT&s?o%{)DaCdy_N^a{$`n9npf#P}GDvoEfuzwIty-J~u6Mu;Y z9vIT{!&cqC$mBBabg$WE`5usv13CbQwuHnw|M|2dOcD$P4)Wc*Utvrki2aC$US?EQ zUR2RVTP*)g)`cgK*-}QIA$9eYPPH>Z(81mwh|`L%;o;x_U83>k z0$^*G&^o%hbTO{h6-}|2crDNlT`my~wRg>j@dR&c5BE-@Lmet}- zQyFhMHfdbtS>LAW#He=8LQG+O^zn&nO|rY+z|kef(OB1tXV-TguIiJ@NjOX|il1(4 zg4}ShX)!eq=bRtxVb5BlJTeEzF+o9?GEK32k(yddM@KYH+Ry;VO^E>7K7A_f?Ck92 zC32zx2@5DaVd;ZqP&^4l>IjobGdQaMWPM`t{xE8 z+psF3FB<@*Z+hW*srx`#gR$gENh8n)Lwp2g2OI|s!>xIOVQ|g5r>sm$ zNGM`IiNQ;V`Ba&zDIMw%;3(n6B%MQtm(;`D%!dbIr^oPjo`uHjW@%NYH>4_Y+;)Je zwZa#E=yn62FUGxW|2iH&&<+OK+1#&2gRK`?%bH%|NT4au2bQ(2jwr`5%feP^;qOM@01%l=m z3fWYp^;`Bs-m?BhiT-U2UMIG8UvpB6NZ=fps$B=EwmvOpOk5!NiolR6Ln9;Q_o3XPo z)*X`j&Ftlk_4+o7lQPZP27JM|W>&>m#NLq&EHWm*hfdHdn)8Xuy;*ZogF0$Rpgi2_ z&re&cEFK=U>nplODXHcaDDjB=zDLGEp=2+Fo>axHdu$P$HXYbzT&wyFg zX=&fS;6eTF$8D|?13R>G*E`j~jfTp@Uf6vr*IXeIpH>7FYz0dD_N{oTOr5%7Vq$Or zs5o^no}viFz|$57 zc8&vK2VyZ!#T7OBgPT29a!RI|&-B96AZfzKrhRP861v<12OUep>t0)KiN?g!y|TR} zU;_pHeR6X0jI?t-03ASO4pl8yJ=Z$>|Nb6!9C%0?cia@@L8>a!o?=DX7D_b_f^?uUiC&>NP(VLKa~){tG#$gL;&t} zkMqjPzE4b~JuY=6&VbqsoQuFDrlh2V|2a7@^not?+q$9*yBiefRe6#3QB7aEagdE) z091Rlqn{N$DLZYz-$GYhNsSQF0w}-<)BKm*$R3_h&y(k-2xTErHhzYGQCCCFDK zgu5f7-E@8rIzkMHF@-yJVj8oG6`LGFIA(vf;P{gW$D$ZC$^B=oycK%-N0UGZnKA?H%L69!Q zC_w!L z1pWep>@r}ib;@)4V<@8w{C^;-{JYgb+YbNtkEtz$G+>$j^Uv^&|2TmD`RD&KN#I%j zCItZlWxgpSXr$b?2!sscCx=e^mrt*N-~aQ^g8e^#7k(7}=AQ?H?CS36<3Ks{yC#6Y z`M=Ky|MTCU`13fwALjIrpT5Qa@pt}23~+?}`*(iRsZRgzzq^%+1L0TS8UD~!IR~b$ zcH<|UKFz;gvuLw)ey{((t8)6Tr@#C^k6dktmSnnt>jF23v2ilYPJ@!;bgJ6}^HUiS zR3gxD2FnWggfAi^t(NRzbOg)}mXni%!Mq^#nX6a#_C5^4C-wC7{PXF4zYe^7)D`fX zxy8uXG(PSN^w7xxxThq%cRzsLkJ~-SBu2rJ;nZsouYXea!`ku-=oZ4J3lmwfiA4yFgRD4ksEUq;=hvD;0K==MyrI-U? z*wUMW_KU086;vQVk?~0`DGI1KT+QbZ*7!1Rh;287HtszJ zp7(o3noGntIq>GH?PowmibCuCQzn!oh<6*{4{1v==Uv0tXGSe!Uu3 zptC}M&8Hf75_-zn8)GnFC!_oEezVJ@{^P8F5KLLgRY&Fx~hs4IkR4oRZrfk zI-C9iyQHzs(jn98h5jUC!7({u59_Ec;i9mg__62hi13Vv@Q4PBiKZS0abFC=6p7D? zxS`iv+h~CK>9(i|f)X>peaIj%VrKXFlZ4mXGv~0bUuoRoZFv0RSa_~5Bl_B2hQ9Bd z+iIlJtDjL{T`Nc#T)4iy4`4zu-RK`L7u8onMd|ew&qsyFYA4~{b(KpQDs5$6s#L#H zk)4oLu|Iud(Y}E!W$df?#GNI-^V*S|v>&zNQ&TxvSiqhW7_Su1@7&9Be4v!~FwcAw ze0iY^>QrY@u(dhsWm;NR21b^T)YN(jVJ}9DMNhs+B=Qte5#ht3#v;bRp?=I1@Sb%w z+YC2VI$42P`dgRB`70{M#g^Nz`)1M44@g_%HS^HqodebhPmg3RuD3;#(pOoxPMY?s zv~=ir6A%l|hIeX9Sj7oWmJlh(y14MCp{UN_z-89X*REY*ODFC1A$8_==Z#S(8IvBmYiH4G%jLC;$B`#9Ga6A#f^RvF z_gjs;-v<<3ym%32eKSqy)(cyy=;(B?u~deV@Myt!?!C8?;nKjNhHgox0g6c29Q|3U zKurpXi9?M*o>$}O?$!25zS<|OBZf}4S=NZaeX;XYxl}fPIzetAk> zQPIWGG3s6x)0Vs^1u1DH*sMcyIbqmjb7KQ02HmoB1?Oa7Iba3goioP>kkQCOw48lA zpEuk~kBvKQB9AvDP>|-mk;ERLF~b)p(a-u38B?Wwk&~rcDXEW{LG)@;T8Vl}vDa&X z0Y6mSkZivE_j>+io7m7}#tGXo=9rU8_LcaF28xgqQl5pRIlW~L7wSip5BQ$>BS ztkBcDkJK!~OW-WX8+#R`u)mPc127g?dW_*VHqMR8euSqfH6- zlN&y;q2M09DLvGj z{H3KODR(ni$w~;;u7@IU{BoV*89sjm_8GoU>9~nHRoRtEgipPn;JIk=&|K}#f4teJ zd4oTmGmL$;_iW>P+^hlNg*Rxmw17+I{goMI7XE4~JIcmscK1SakFJ)d+T1OEKZo@N zH&Vka&D!gW2nWTHh+BwDnrf8HiNwgh)KqJh+(`#tqO{boRcQ4jK^e{jc7NB`uXn-M z83@*pW$Y6HCEkP=n95v>SIfcp$Z5FbVIEkxS6u2v-G0;E@f{_6qiDf~b8a>KocS3( zjC1BsT5+}Tqf{U2@#vv&c!GAlc1P)YE?{rE+NO^)q0%e}tc)mwhcJ?GV$fm*32< z*C9wEodppPLLu3!2@`V8pKnZS92pV0etmknHJbHAahizF+|EvU+Z86_g85UC1`rLz zCX&HQ74{`h{|yY{+U6Ioy`n+}PW6RD-6H_qK0RIZ)5D{R?4*RvC)WmB!E)!5_U)I& zA$z09yjWM+^}YItGL;_sIg&%OuQu5|en%ETM$VB6+ybLM1$FMEL%e3a6g?8w_4|(- zmX|+2*Yg(Aur3z*L#c-(40=2s9v;9Ucu8b#V{>E35^Snk`8>9*qiroL-dGSPbUp)@ z9ee4;s7_@gqiaXZLH|5de>FmT<9t#|=<)pE8t+?qn`_l_$OO5OGi#&PNyzWb_+P}z zFt_w;-|9|El3Kh>{Z#SfDY&LzK6l1lR1X@_3QXEc-@$?&c;e%FzKrBiw>*1UGVDOBf zP5}>q!`<}<2KNjN4d?Gm{r6)9h|?cSS`#38p-9+!pg+p`nEFUWaHy$xswJ^-Xn(rx zT4>-48t)aX$c<=;%M~&KAwrjEXu@8+FwHaU+?Wy?&+Cz!(rlI0V6^1EqwbU#NWh zbbos3yO2*@$mxCF*5qeIxgn9&seoqod-I zPIZZIoWF8kc-7arqwWuwbfR(UmBVp|9s$4#?u>bMIJr__569{S#h&qivq?8vzaKoe zP;>fKjwX(dWdGcU{s`@A1S&4n^ygFJopI861L~v0a+#gV8r`=cC4zqG2@o0GVui;< zchX%0T2_+X_A`rEerYfP#0Zc&R)B%@@cY)84Jan?aB*2hpw1V(`OW$k{QdJ>i zV`DHR4ImK6TK)|znwxnBtsQZpOx3ESbQxZirgUrg&ZFklg=TLT3WHS(FiVo$9Qps$DY;Q0P^3|#e{(en?6 zF|U==7M+9AV?OSA7gB@6703fXBS?SP^Uo9D;CME5i+U(5ikh({UZhRhmS3Gobg5k( zO4Jo=<6nv=SDU=T<@Qc-|EX($tjab+gS9ZfO9Ot3cfvNn1V^JzC?Dl8nC{fv+A60l zsG_1`!OzYkzfb%NMwRu^^!Vxnp^Jr$O-m6=@g#;zulCj)S33AmgUsR7NbK*{TJo<= zSoY{r<#SjIm{nc<$mKCH-u|nit20MBh%_gS?Y1q4^BUhz%$TByjn zkNdP?0-&dBFnk^Uhm)^jVx)609oYN^zv6FbB8flQy5~C&*w;@ zl7a#_d?PTO2*FU zWdpNLR-Q2w7I%vuUZA9mlH$^6$Nc9!A&>>E6rH)RBmCH2I&})uW_Y3bU_bSmm`LSb z-&BNMUA@_`_;!PS>4xq#Tzcboz_1LSV4LZFBbAwCT&>__7M+l=xA?BGS6Jd`LAljO z^9Z|YnHMEmVml_xqqV&(&sBG)zg^(5mH5GON&dzyF0RN-S6~58oE-01BwuiahBDvr zMmv|2Nq;G7nbG_cm7aTmTDD82Dz}Z2au0iPXPVclP-5~EuP(Z5pNzbDE>CBB=&d~W zJ)CdIKKEY;GGR-+Y{BHh6ky7vcu&!=Zg9Z!(B2w0LD|Rb4RqwK=xh_}Hx8bzW%SeQ z>kjmh6}dH8Fl#OkJQF2thYea%a;h(12D_A$Ld^+ ze8fgUZd^YR^0O|&`M3mu_#hJ#jq}&LBk}HTG$dPHm#8sbQ@Ys-K8tZ z-&f!($mfY^1iGbCVl42Ox)sV!2M%CseJHl}Y$(xxiuWoYH99eo8q&iE z8En|PexE^#0*&(7!w1sJAj1`6WtBT2g1`o)3hYp{I%iy8ydM|RZ$f$)=zrOa#3%e4+E8i@)V7JIg$+?;lqLt0!#}pFD4b`v9YpBgEQmws)J*cHxTk>;tk&27%rCZ5Bpqr}yc^=N&LizSIbAk59p zVOueGLwf-|64uv+o4D!zfJ;OT`J*NRTZ{k9%rv72}#cUqv%jmxPVW55%>d}U5siyS)P@LVhPm~ zn!>0U@=cHmaJ|d${yD%4u+=>*Xuusj@wM9HqXpZ-m#n>V3&v?b;hB zc?qWMjz|}reem-`e~Z1LT{>W9BN&e;F=8ZodyXkEaKRNP}93!Og2y4 zAmu0>bvNr}5y?nMz2D9|66(5m!Tsx_;AT4k`g%V#f21DgC=z~)w7k|zvj;MG4dSfZ+rb|$^SSG;&wu6d@Z-|d7rWC9VyIeVZyDeCBz2 zw>Yc*bzg++mcUZtMUWDjD@?)-ms(l^*+R+ z#)8dWd9ES{*M!SQCOrFa??juGL=mhuvy@mNHLa>nFP~<)7jWfNfwzs7S(#kokZ3rl z{Yzr1ZriBcu7eOp=HRItWmL}W`Bp`v!otRUbFW&qkQK7Z3uke0JQWGiAPP!ge`hdD z);rADgRar6!Ale$&-@0=`(y^#*;ZjZ_z_kT)5#hlQ#O@|!ZXGw;il^tr#D%wf|Pov zY>RJ0t|}k*Ede_Bsdg&2d+{=mzbC@^*4QjN?`FN|tDMHS?b;;*36>zLZcuZP?=6RK zdVPus@BkET$PFl4NdpE1b)dfeyu!J+R63>ai_-LTwk^vvlXA*z7pATjiTSe zL(&qIWen8A`mL0wjbn7icYwVt|IIp=a#bl=2`LGe9; zJO>ip6#CYFjhKT*d?LN# zf9I+P3}~GKA=gYmZo{y)+oK+A4gKZ=G%}n}-MNbYlCH8wFo$)M`=gov|u;BKB zyU0qE;>bCBZVbxIiK?!J(K+$n;SbxysWV7=!`Jk8QcK98Z1Re1*Lr6yJQM& z?G(aJ-De_Dw$CJU&Uf;TXfEJ$AKmX0YK_IXR6Z5mt<;t9el_Ls_N@ZZgA}sa2J7<( zNcjz#RCTvx`TpSz+=8NDrMl%+o22Zf{1LG%ln!}HPsd4!^W9MB)H z+-v!{Ub^%FW_?KLhY%ZFI6ORbwnbtF=s97*3zsEN;gVV5>@W88(bN3?6_=d!OEJX` zG*fhcU=3Z>ic+&)XD|8pqW@qUC6HolekVOJF>5VRTu(Q?-Ok}(er|YVWI_M^A8q8y zh(ET9JtYm4P_qd9BsohyNks?#M@`SvGA;&&C#l)E{ve;&I78^m)nVO3+{fhtG4o9duK~6 zt_+=Wz<%Iwf?x?NK<^P&fhya(w{N>r#oAZHBR*rDJ}e*DK8-sqO2o#7GSOSrcNNh2 zjFrSJdCWy;($Xdg%z1h6#Mu<0t? zIBU9RN?mxx#1v1yg27YRF}w#T%dBxfS_YKdMh28+re8AYT_=rnb`)EK(nGj`Z>JMC z%{*HsrYR*$34&X$?xcgrT#C5GvNtY0Aoid&48=phnwj{+R^p|^C3 z2PoXJ*TCR8eTADYY>8J^5=PJWH}NlhI6q!BBv5p9ZK=_|B%QO8+b0@;h=SLC^Y7Q| z2GsNFnC{*B*vrDs4ph(}L?PLV0U>onHjLwIZznui#{7L36Uj;Yo!bz}$V`9E`CY0I zXJ&Jx-sbck3W0j?UR~M$2?SVXGXpaRCb1)f42pE>y)W4;t0f_va=%;BQUdIYKsE*{ zc)LijjE!mJnH$<$YrPyl`JqJ6H}B_aSEV6f9h~a6*?3lTdd9X)uA%!B%h>kZeItnX zTJh%X4=ga?4(t@KbiY&ijlN&*{%HSp*!Chfg`#M@r=u3%?v6KWpScz?gs-yL&dITK z<-JCCe0?6r;w7bQJEppC510E#QU!U!livD2UEkPO*={(Scp@if1U>DK&wjv@{3$&UfUN#EVH z9gU@x_~!)dnRF?)!gqUV=)TK73iTxSh>y-79OmrAr=ty{FyG%|yl~c~i}P=h9-&&g zuF?~pWJ50SNkk#zWWO(%?y+ufs+>wg3ebLGLKuA{6+OM4iV80u-2_72Ibzomc>qRR0#{0aYqJ%4Uf!yVqH(Oz8@}%4hpuP#0;o!0-Z? zFayTSVDtM^3i!19Vj4qms=H7D>Wy1JM`USu!mmhSnDIvYH1{_|G~6qE}Jj zcIOVx-vSR0FDw1z`;Pi0e!1q9!*OiIFDBo)JSqU0?5`54M;zIER&@%4&>8yP=Pq4> z#$CAUR(yJW#(pk*iHRG(1`(cOH6NuCE5cF>c-L!jxr>j1qHh3gMLFOIJ^KY_K1 zDOx)2)!6@564lP&_C4*vj-LwqL%Ne_JG(Kmo!fqH{5YNzXPlv@3QUCgj)Gdyj{@cY zZ_MS>XjMh`C8WBgYa5-+jsXD5JVN918?%WuKn=&?CB8ThO7GfOLqVvHhF|NS?0jx8 zwDnPstvZY2Inkewm=le=amngFa%6beT{QJ!o-t`_CJYz)pI_Kh<;!>|P%o4jZPh<@ zajfs{VcSb$e(H$A!nG{M4bQmK~vl{&Gu?l{r)L`OIg-FJ>F1ZOCSw zf=H056iV(?$`ZXqq~d3G*fp)N#9+(7%m@(uuQ-wbOOBJ^-#!rpjI(fG!d|Y)wIwq* z?S&nFy?DXhD=E#CF;s24r(?xQN&N=C@;$HnL^Wg>CKM)sFm8Kq4Lrzfyb zSBEoq@6|K}J)6m~xNWjCpS6qUIbSLy#;>KLGOC#5zWP;j3=0_5KsqkG&*I!HA|e9x z&GslbYri`?uxT&ed#;LBnk-aI31tdyVF0AQD%GvQDO#6 z5X0BdWs$dmuM4VVPO53>Qo{-I4BGb+3KWoX+0bWC7Rc$_c(8N(tQ1ZnrKokWMS@NO z&i)fOZuY5M=!fGL+ebNihT5>auau{*W5Z1xa?;dHNFDJc#KHO-42d~}e?N|_XVcfE z)CqwlcZZzozdpr{heXcJ&1na^w1y_fGr9>fq08rpS&};X@DpDU#St(?n_?+mTReWg zAWN+&f#`A@JcjD~C)r{O3Ra;0 z`7g@EriPkc5E%86Kn7W$t54oKJzF%lW}q!2Q@GL%eP0)xL@T6ZzdT$192>$WAe(=S zuyk8A?gx!l5?=q;lrv`6E}Vt@EKBTqo5E?Yw%5RbKKYk|6#~R))>Q|dIy_vhtFPR>yrllk*~|^5Rh^Y=-Y)2wJ399E z_p22gXE!+J7|t7fN=aMUEuR}>7)>JIj9Gm1s_b&N4t{m~%d@0O%LW5jE0UoQiKO-s zeOOhM<#D_c*&Z75B9v3UjC^x>*Jeh)Ke19lE_?yZ3H9GH-SlM}zUDADS?8-#8+!ZA zE&IujZq%(lLf$_fqGU$wyvFN(xQlRPm?6Z97jZrLeKy0jNMV}de+Mr9I>nLfNdwh) zvx`2*fEhqLKxnm~fc`nv7^9ad_0gs-*~zBvbib7jGOTzc7@uMONv$+-fF2K&x&QqY z4HY(F5UKz=7dfHBws53gXbNe5Nm=91a2+=FYuFJ)rA5y|Lr*LGQvv~`Fo_R)ASh9B z>FHEzf9kA1A+m%{$MRVl{UKAj-D+)qEFbXl{%?Edvr^a~5xjR3J*McccmID?U1=bc zYa1>JEmXqEQc0p@Df^J6q)3gDV;NbpFGX3BL7k!0QFc2U0xXJCI(_@y#*_3zCQRVp zp!#7ny6#EhquIW)!s~v?CFIt|BtO&!P&!}08gBHr-Cu=kjrH-;pz_GKoq2Zkks=u$ zPj{2F{8tO&9X`7$bQ}B6m3Or}!03k)WM%cHr<2dYRWj?Z$rU3wr{CKm_tdKg(Cv9n z@d!yuNFW{bH~0htZ8g%@)X?ZG@u}Xd=$m!(vvH*yDjznd_d5LO@|N=T_RWueXy3m2 zS?-q6$;k`sseNw3L>n~%fw0FkT{uAr%70Br=gC#Q3G*wunEy$|ic~!EH3VG0|nTM0i+t}J#960I8UKZKSf?D6~ z9!KY({Dg))2aXz~gm0*#<)#h0qL#}&*?XF4Jshv3P#*epZiae{cp*&pwkHtpkWQR8 zHq~@OlTsxg6E1XwrB(9y&($}^B{BI&g;^0@;x|?1qlI4$@YYc}Q>yw}bUi)lfqfv} z8AyWJkYB5XO4dbDhVH*xi~lfFd&{Zm!%TGCM%@SKS*fB;UmFa{`$u$2_QA*UBAkrlx-bblEQ^}IN`%NkJF<# zto()o?&^ttDY_zXXltot(>lhMkxFvD<(%20&=n7ZJawtUG70-O3qY6x-EprE>+4G} zYvQB_9*43QnRJ+m!a9)aP{DGJmL48-(PI6iq(hrWFE*}_h zn>S?2pu$ z(dAR`Uwwon2KvmjVv>dYQf8bQOZaB7Gof4`Fr!DDN&AzYx;gPV$gfX*+s5&du-#H|i=wD(MGFDBLZMg* z_YDnqZjX*bnlZci#?>7J!Zjlu_DzyUHerfHNXg6Bf#|q(Ywd1{qWzR_c{OHVJJYnZ z>AH!1wU%<+ob9^jb{!20DreG%M@D+bPW$d*S90^(O<3CmVrh=`9F+TYb@Bv4NoMAw z3{DLji<}hG7KMgFMLG53M7oo0S@s0ihKA{ZPoM4-7vIj!RV_`V)9D^*6t1}JQ}9Aubo^{Ybu06q%WjN)g4t=M>Px^1qVj0nf^4JhRpWi@6Uw=y$(`f&`2!(PoE z_Go#Y&=W*KUHymKr!Zc=hCoQ@#~?K#WZVX_dIJC-PQmOw1~7?h7S?gT#+@7yZr4 zWkhZX0A{ZGvvS0}NJCq@v!lcMM`S2_`flxl-Gz#qs+V*@f{}ixptQI+H6!C;w2G7B zHS{G$BfubY-g#~}d9%EHWJH8@*Ie&L!3rru1A}{~$3BF-OjWS0eDQG%7z19NPxId1 z9$l;zj@-)|J+M7G+$IprY@YMGW;#@H?L~?a6t`{5`|A!L`?CEc)Q^B$PeE2shAejo zB+1X8bzE9XN=w^oYir-UDMJ(aB`#~(X2nAvc}JVW;0~BLrnHDbB{WF;U41>yjc3jL z|1;YUM3$-PtBk;8x2z03`GBu0&MfIT68x;k8*35k9Aki%5jeQO3Ia%5`8s6&VGx8O z`QAt|%MfdT*5)>Lr#(+vdNeuvGKzZOtU!s4)zvRA?_m1DHJ@(HyBxxW*Q_~l>Xc1^ zgK%uPRCCy6k{ef29q-}f`TJLG=xMD{i|h=ezpm_f+W9Iax`ig8)Z*CzZZ~6U?VVMZ zo5qz<*;%#*C*}R=fB@nAaW3}qWrtHJ3)e+~ZRH|6Y5zp@ zI^V3EOMR8js8Wi(D^KC3OcMrx3`(rb)<3{fco$c%pF4LBr#kbVd0)rfV!pYx^g0c` zmx6kt-+84*Weesu^Ku+_Mn4mTN&9^Z*ylG-5z%S3K(IoAcQ#^?OI zRT z0LB{(TT~F9mL}y@=Ip7ZtDWEr7LRdxre-lvRCoGlQJuK3&!JOR0hLF(EFUi^1k@Ur z@Uy#H_#e7kH19oda!v93LueOA5ms+KfA9~rfcLnEfG;skEL== zV*`_uk)pT4uvm9#;Hv_BMK@#@L- zQu?n-kJbF4D|(TX(>p#THCV+4vOJJ+bax*FjRk^SPoL}6SBJc_LxgD<Q1}D)YC^#2re~QaU59 z>m>E->W^)TOAQ*m$eHxYvO{NsM}HOk(9Vn-R4236vEAb;TC~O4t6759F$RuxEq*Aj z!<}|kXUrc*Bp5g!lu_dh0gr6--n+MYD0_L$lqCNWH@wY}gR>K7LlNhx+>V zR>i;Y(U><^VF$CD9a$h}unvmy^G}{QAztH?ihlH-z|KHa8#@DKVK5P{sWkNd>?Tol z(Hk6nSe43G&aBip^Yfme=sZ7bL8X(UrmVXly6hz)x zMTD1y#s9~!-MV7r45zvpuqi z{OsHMzQ1_i$FbA)`D==$EER#jhQR@`+6UcA>g(06#DgXTLZ2!Nzvv{&zOfesgTWD_ zXC%r0*J$JGVlP|p$Jf@N6(34g>gwuX$AD8Vd;Bg^ye!sC;G~qabW}t{&i4WK*~N6U zx04#R55HX$bSOghvJJ;ku4n$3jiMDdOc>=S-g5}!U|*=ALE`nda+5gK^yZAr%z>&9 zbo>TEqPv@RKKcKC5}#bcKJ(|hLqkFU@ALHISi5?)584&BRUgh|zO4+_)Y3}n1S-1> zRD7g;BsOjYPS2Q}0*sN$BOnI8)ve^`k4;O{*|yEjO?uw_pqr*QKJ^ny+Jf7eP`*GY z^{JpQGLlcjewh#{dVicSTGYlTCieCAIy*ZA$iHBM+1WV)SaNK! zg!Ul*^LvH0ECsM>WX_v|_XT-v%_9yC506D~nJo;`)Yh&OI^SWVO*C5Ith8+#5;+Sg zx>Qq{mqVG@%b-*i3I#%wV#2`zRJ?>`%G&%3SkJNy=HE=df=A)uOO>n`#l>oFg}?I@ zA`o(N>ba>S4Aakg!qA%d!^p@wF)`V=nirWgD9eKU>wW6f$iP7UiNMO!V;O+1lGIsO z1?#z_o5>Uq5P;A9rF|1RDsmQ)QW6q+y1G_khTlJ2jFxWc=^HK;^ZY%T#mE_ zp1j>yb|po{??JQBON;2t)RRwy%h}kCe9_YLArem9Zm;;~ zvlbGF*g;GNT9_6EgqMnnO06M(Tv+(-3~2L#sFRe`j(!_6B$VnQxFck-JjaC5&-0?~ zJI)Ym@CCijsCsH@zG-dsM`qdaK2DpUprGXA>E^g&Rx$~_Jw50RhGUaou(Duus?=gL zQs-80u)voJT*$3`^=Y<;=Son0Wj%Ww5L7|lR!eKwj-G`2xuLL|cZ!BkB;1c`w{Ss2Koec-u8eC4iEa}q^aV5I!%TIk;P z(dc^K?c4R8owHwhYPWjSPY3~9(L&Wig6!{4M8Ts5XXD;I^@35s{Jz0KcUXahgd)`_ z9r$8+?oY$1K)(-Y=6HE}s?s%9@bcp2G}YB{Omo^of6Zy088$Jx6o8oPoGQdbwgBlr zSWfX^+u93j|Cu(sCzmf@#=0PN4Ux&~#LO%cH$a&|*aL|wlJIN1!9$w`u!uA!9NMRH zmveJ+vaU@9oq;INhTvVlcFq0g%4AGD>@T8(+U*0#Pjq)X!qJ68gI+|o9_~o=vz|Qi z)9Px>2f~mV8pIF4Mm_{V5>pvoMiaEqA}(K^7##(b02UL>3UwqbS)ckt#j!CVApyJ* zlqV%w$(>oHydNdNA~n5(<%NYu5+(&C*LPKOuNa4MZbqGd4fwtHiaf3^#cQ`v)}+z8 pv0M|y2-S;<5>iPYBUFT*%yFwK*{)2@Z0}(WWvEZwox95}K-8=`q z@89=+-|KoF|3Vl(!#QW~wbx#Ioe9%WQ^3Wd!n$+k4z7}-tk#`7$Y1Z=L88Gx0^g~T z(%`&v=j|OO*~dDblbg+68oK&lPG+FF>?Vo%MHhwJsmgi#v)xl%RmX(cz)ft{aQRo{>U*RHpsY>z4#FU6y&3m3;T_e;XNbTOZ8Z9jmIU;?OUh zZt|+E#?Kjerll2^nCSMai;&Rn^x?FJlf9dpTe=jKt|8J}@_a1^Zd6Mr>WTr+&(CK$ zij9j4NQj~q5)~2QGOU7}Y|kt&FOxuci;zsTwF4cC9zK$k^t(BEM1iw0RR4N4J3&zD z%bKL5q#`}!cU?f!o3jcpZzm@n_RZSU_6YJ=t_KfLZd`l1yIB#_x97mSx$)+7*W8o+ zdXkKkw0iRH@Y(6!QrXne@3FCwk%>7ntnW<=z5f3G`RbV+Q+`uLrKQo~;VvE?ArmYt zEci>mgiuqE?6JGb`-1PjA<<73m_t&R6Fg$m8JVv4m*_6e%g?vzh@>2q+^QA4tb7N} zVL3WF>Ph0FhWsXh{0WSyU%!5JB^-by8lo#|YirBM1mxr_Wk~pN+6I!v|ERK`60{8V znp)~zk=_=vpZvAB7#AD+*q<4h4D!aTxv5F7)Yxldm<@jVJuK@ZVzI1@hxD!U%FpB= zZ1P3X{x>NGzjIir>FK$};wqb)XXuuz#|sw6%U>vteS%4?iJZseAV$$N<(W<~X5N1q z&~-KXy;#I<`Bg!~)|jIhTF%DC78Dc&AzYu7cjm04lU5s!AmR+3Kp@I|FWiS;NE+o+g@=cO!y6dLQ5d)x&5BJ; zZS+2}g+gzpY8|y)_5P#O}Q89R2` zp03~5basBUA5piYnCY`E0y)h2@|KvQQtN=+?2TpvAq~x|M;RbvLBhS?d->DL%WJpK z?e}PJs*qz}nn+(?pXA*B50*?}Vc~l-t*uM*-vYZPCMI4&d%t}7g3!1mbfm>o%an}j z`*;&;|MKNyeW6$5Jaq;(c6@WOv9T&29yWU)v7@GpGa*hp=9M*@eJ{3Zt24V*R!)XI;aKQs5$fVM-Rplg z(*l9x`y6lj3l-Pe^rdMYbg#vD={vi!GF%jBP#4Phe*yr~C7fGZOD;%5M8pfdzO1$z zqZ4s?z{gjamGx~B#Yt0B)7W^rBZ``w^BDmNiH?TGTdG%6eAmkIva(fp9BUnMOe$4- zq7rrr-@;-CA3mM9qLPxq zmp3BUvdqlPqa!1@U2J=uB<=d2O}92SY`HWj93+U2ITI2SxlEg$UE4G^HPIa7e6y#0 zgqT(o<45(5!{Fcax;j5n7R~hDU=!fu8o+ zJ|7=3ROssJ3L6V67?R}FtuA#n+}he|dVvRtu$|+bwFt8m38;SyW5J5_PSjKKtfCb@QI@Xot~i7Dw5e^reAYPI*$zK;smmJ82v=#!mI z3S59)dapXUv7uqUZgGy4wHCpEOeMqgf!k~p9vB$&@FXjBDoI{0qFN$hu|Us_$SWbX zXP}UQyJ?+ufFISY7IxKZW0bD=r36+Z7U0-l>jqo^y8&t_+j}zl@)LljmQ;i;wn3zk%LPRUZEMS}(A=BX(kuae%C|Xgj`E$HlCu8Q z1g{vq87~CU9Zt&O4p72=swUQbA~!czUGgl~ZFukCK+J3Z0mxh;NLWr;-61b!J@I3k zyxa8RnLJ41G8+ACCN+4MRL0fyFofPuIMVKiLF>qf00)QNA?o@0(QiCFyw)$mAWXF| z`Lm>7FG=CbbjjAP0$_=e9S@fK-rA}FS;n0ibm7n|fzUEKy%m0n1zxBPtJehJx)hX@ zlvGqy6c7*qYPH-EAuVnCtb(cO>{|y5Y+PJgRiD!0;#4WC)5FcOBN)PyJMFsH!3vnbe-*xy8^(CFA`yZGbo0^8U=) zYA|lIFD1UmSg0w~01Tgsaa{gwv6D84=S+$hXaA5({R*^FBKUb{b?zh^_EzW zVgnW-QOJ3hLCj-&8mwewwguXUV$K;@UDa7jK7Sr-*J(OiNd@%K z#P@5KuAgvu+>2#I*=$NmN|5h7Iac+Lq4qt-k>TOo$&tN56>fv7OZv-s^yuj5Kl^M+ zgxnY&8tUZiOu3GJcOx_+BCsM;*g2p=%*7lbTxmC2@-1^eo<-f=-CYaDhKMIKj{Qw{ zkN-sn&Q?j8w}Z$Vs%UCrVq})lAg`vYuz)Eyt@%?wy>_ z$6JlzpdlNc938=ni*t6O5f<*_fW3UXzC1g~$;q+jY z-DhLC5bWQQE(-z~H?@WtL8gw9o(L#>G7UdJzp#i%l)bPEpk=bM?~03m16o+v)T*MT zr3J9o+sMR(mW1Tj=4RT54+^&rX9uX@$WPU~rKifWq|MFE{i9HoCR_SuT^-7+j)RBi zw-7`wjC@Nro?7@wdTblF(CL|(LFd2v13C`9-0OTllT~7C69s~H;KY*#W3uRN}ar`kbFwi|n?3qA?s&LDj-|$)|VX2FWe&%B7B~E$~mp1Vk2tOJc+MVQ{-K zVLkrH=$BVlTO=j=re3H?2HM&=DmQ>4%tCK`1HZkGjV-tQLG1UHFu)m6 zKo$2sL$7`Z<5JI07je$Y%gZw}F=Ng#|eBm&zA22?@h|5Lt7EgdtOz)SZOy-(YzqzS6MF6+inGpWQ@+qGf9OQ0~Dh zvAXzu!V!StyC#-?AnXPR5~z}6@xJMrk1npUV%T+Z@ZN0NNIhZNXA6H4bpIQVOBJi` z<2rj9aw@qX(8;x3m%r#_Uc@=)ak)HorunkvgY_pN{~YTl277yZQ2vm;4Z{Z@B*FrCBqZGX&~mxF*GaFB?JRAcDE}Mf{OV+`(`aVW zY4VvZ27l3@WG!kiJgW1KXT)V(Xa&M9@Ec5$iSyTF(!A4H?63s_`TG*kw2$Atu%NczG>FM0RuNuhtUvO=IujCemkau)kT) z`;bdy@N@|j>`Q$e8hdS$EItx7)uu~|+gx=k@kqLo^bzafaJ;N^9;zuc3W zl7g124Vr_*WW$4)Dt}^8|D@9wCVutsUC?l@AmP$NK{#i6E{2&jx)%!L!kvuL27@1| zFtG-uc~&350H1hIADyx53tC#X*a>X|SVVX@z%;JeKZPm&ZW&}C8xXaZ`k}eEi@i@A zoi66l(b0j&V7;W^TY$=66~j^`h|IM>tf6(VyqimxE**O*V{&Zhh%ux40gkg(r5p zDs{6CdhfKf$YQNO^oqB9ZFAGO?D=C8lNng1;Qrx|I`nwLhG_PEeEibZ)>RwGGLUve zGv+)LmTKh8xEHd5AJ@R4ejcrp_OtXnnenLZ8GpHhks$YbxQMpVeam~ZyfZ0<6?W#mT*A3;-4^>-WA;H|@Yx1=rmeM$<}6>XI!+_c%S@jCd9)M#nt{aVtZ zDHKLV#`}dXIScB3`^5E9>SyI%I8{F%F|rKqv2}N!4^^mDaz>%=>B6}UDrAi?ag4sF zXd(~ZpWF3`P_gZb>!*LS>)+0pc(iZ&X0Ls;Fe*M?+uoiFHH8mhsn{wBy?z5CTRUHk zl$_kd-Q5N4Hbj%3Ny}GOR)$#Upaq(bm6}vEpxQ=6L=15y8*6J<0?FgDT*FQz2cv{m z?!6ftQ8N0G55M$nQ#TTonEU4YF#9UjM?>rxC|-cPTACWrrDntLHp>_l+}%p)Oe+}2 zAO1}D0pjeB$CF6@4sBs!p}f5OPt1z*SRedD+*3VWm$0X|C<1nhKs@AQ6 zgwOuJ3``EEk$fX8D(aohG1HyMv0Njw0P<;A-s8PFDAocE`9!yD=dbMWl=QjG6P&kn zEW^XYZEbCvlhqttT=wCetT9MFC)*Nk8zldSXk9v%0MLe2c{P6dss5(~DCp~t$+iT( zkHjQ@Xgpr^lK6kWk9tq!Vx%aO&w1(^8vgSV5iBe$L5JyEdWCO+=6$p= za=Y2Ly$t4k?dWeoPP-l%Na-0FbR;CQw-w@V_AD2`;a8_iF`#g)`4iF8_gifOLGCYn z%AwU_p+i^M5CFUZA;0bF{z6-_i>tePUou|^cpV+<_VzYf;GbUo_6_e_79oJVnUqum zAPDfOmYeGfAS^B^z{a@MC+O28URcYdi4wJ8A<+YnG$BV* zM@R1eZO(&yIGhVKAcLE0YjwUC$HXjZzgAXmizVoBz%$MJ$08hY3qo&-s#c6>1$k-k z`yK7K-&sDXWmpG0BVD%Q4R(S{`nxWA?#uX z)@NW-MEU)Z@#)!_NrP+H?MD1rRnE7*HY1^@Gc+NZD~s(BfLR;WItWnUtnelzB#=;0 z2-hGrZ?x9MU8bHidZ#$LeRY+CnOMuO+KjrnyT0H!&o*!09QU(Vz3u?j3~>Fpc_Pl|1M?9AD3eOCZyp=D%r@eQ3GXtsag9Z4bxWzzm6Do@Oo z{mW*By+~L5Y5NxD$x)@R@ya}fb8hR1x1!9_e8-lW!e@z9D;P>AwZfq|nU4EIjMAj5 zm6{C3^Y%C|YkbhrgJehr`f zgCt~?ci^Gn7>FHbNO>|mZesC4L6T7|eZiBV22QQr@cX>`x8Z9*@BmC!KSk+6+ zSN#2sgd*G&rV*>{780~3_yZ3+vI;)EX1yB7FiRNBF#F-ScbT2JR#x*;hhwpkZ;#B_ z;6qEdr`Z?JNjnkaqO95$SI$8-m7FO8JDu;DLs?E2$M&phKvYqDcDpaoD=GXrL*4{^ z8V_*%^NqOGW>A}rA|oN6v~mSlwFj|<84IG}`C4pfZN@YbEg2aZ9o@s2ebWj{B^w)- zzuBj)2)nV;lQb=FZrVs$W5ijcIDOQ%1unJA={euE($#b3pWy!eS zj$!V7DY06OR7z^wK%I%QDXF?dWi?lM_j~q=`d4j&J#+W2LRQx|cE-N`a&kTRGFV_s zXdl+I=(ZkBrF(|cf<=jPi2kCW12=?i$r_$ngKC)mp#{$N!M*pl=6cc1__X_+#*(!S zG?z}mK{0kzE?{qc>Nk7UQsIzmnlFE@ShxWC@Am5f=**tQq3hW)#iP@Vi{GwCFupY| zs9Ff5AGuk;>6Hyks4lPj`rDQWL-nj$7~O%I^1H+KDrMnA1nRk`r=$%GUDd!K8FX@n zhXl-Es`L17!N`9v-D*8AQ~|9oF}YlkN{=wFa!T=i$((Cv18Zk%)qd(B>K&6S#8{qn z_PcG~lTo~4vFD*@{?@5Us4$joEr=%S__p23x%wm+>EVz>w%Vs8t4X4(1Q8w9i`NIA z3;gh0(Wu67v}8FD1(a+L&8r*sFvXpTd9lP2ybPW(d*_`qE|J9{3OZB=t)6NicV`Ft zp&CvmN-8!|pxYhIbGcYNX>>B%s!KjWACns0&|D>FLA5zROfV;gMi7X!IGN3i;Mv9# zmZ1+^6<~9@uZ+nDW#J!bu{Fs$Rio?Ox0D%) ztmZm&%CC^@>5#cDNY?yb+S;CjhLDJesA_=*n~YN<9<&X&g-hMfU$491*gSjJI&n)N z#%}WFT>rW#RXd?xsctwW@Tew;RQVlNH8qMFvoqJeT|UDIy`}b*tmrTN&lQg^5V{c| z*7z%OB~krzqX|nCx`H2>3_I~eVYEWVid}VC@eO{Hcr`VnrPbcBTw$jzobnVsa^%q? zbX5C81?v+xlen^1A}xNMRIaP~SM)&=p4*?Fhk6MUX z3+6^6>e|)WsqmrBZmjgnKURI01aPZjm=MwF$$ z_tTaZ6&ho%COY%&x;4z=HQJ^Vg{PBKJ8QPRu9o}ebU*dvNLlt(bU+>c7qWwrW`F&d+l{fDK zczCG$QcQ<~AHQcz9C;wyrkP4b4@uk1v95}KaXFRZq7zM$tK#=dbBS5|JFi30&7eAe zR&XE9N1+DzWMZLjWKGGAbvYg84`~Kol{UeBSmxxlA`gE>R`KXYtefKSnXXz%Z%kT& zHu+nBf0^FnG-V8lzWKL$BVX6QY8F~YT99Er6|Ed9Kme>Eex`G|r9 zLR(*74`j%PtgL0H>!5q<%al_8TO1ycL;A1WG#+{q$*LY=UsQA;;b0=MBympMgH>o% zOkPF{6i_PviVgaqp)4dJ!YO@`E5*aJMZ)Htw^F$fFqul8)xJ;o6Q9hE(fUsH%NP|r zJt4`9!KdR2;a&7p0Rq`BYmM$-Mi=WOHn1;hM%7>YCk1o`*YI>r9%OI$>lJy=k9HlP z*J{0aw-@Wzy|-wr2-QG-DE0Fq(EGi?#a#ukh_iUQT>p%L) z?ek@riK?rs0ULRw8XZXrl$}3~_3b8NBrAf!GzuzeR0iO_-j7`EOW!c!bDttVW6f&l7iOiuVCWMi+zZzErh}$aHF_P}3IHb3Pe(sGRQ$h>rOWO>)Dkp7E^K zwFkVN)-}qVRUvn%<*)7BPF#<2&~lfwk7V(uj-LI_s&;;O{Rf*x->B)ge55H+JEEWBga)QCw0{w7d1_)*-06-#Qg>yqT3=UK?cUDY zdlBOrSx;qy^C7ab+WUDGyPV-z)J?$r24F>#L+TM*Mb3!Pm`|D;TW+M2djqCu^F6yM zodVZ?v}IXg*ENEF4$%zuVY|Tp!H?_Z3in*biCRR5rQA&NZ4bRM0f?$eXN6 z)ye3rgsE-n20sSWtG2a5>|p%BBEMBbi`mi|zckLsxMA)v3NHbN$>Mukgt2?lpd0q| z6uuQ-ZyVBHdlXc|!lKC#XIuK!J+Nwfh=1rO39~x|iQ8=V2_D<=jS8Zik8YtujkHVC z?^fGSwYakfxGw4nuED^DSNjj&89Njkg~?7>NVp$sY~4&R6qU~09M?a*Qb7NC!A)0E zbQNe+7|F+8{w&6}Z&Cu4Q{_PwyT6IZ%AwlwPZy%#FZ&U+1R zzgZEMB^bE4{{%QY7XJe!N>UxAd@J|xl`C|7n=@+H{z5+=6S*g^Poz-|tu47fR4?W1 zlEmZslZk~8epxX1lzJxbowz3%{^aOA)Mk-Ov1ngE;s{3v);lHPvs`+3<59{q2u!gPloDxiBJC>W+9le<5(XgGi^fUCOqH+9%b6A%RhuZ^$ zT~daPiL%ITca3~{cW#2QFK*X3ytn(NKM0d#4O0QQb^eJMC}}jMA87?Y_3=U-f$^ET zR{=$na)9%~XV9IDKOj3^)*XAV{oA%x##@tGl##33mWX$R3n{7(U=pMAh+=Hn^Cku> zkPeb^i`qNnUj=d=R^96d(4puWQ{dCPM1@sUucf50>KtjyFlr$|CKkqlWxyiafqT?d zH`8z>J@ydqaWKY+;bu!geq`lSO-5>CvyI1eCK435{J9-w)bOm8G0i|xhN|LoHtn53 zb^Asl9Ih>kH=Lu~pfiefeuA%?BdiLJzAv-UxqUECg@c2mGe#Qfm-~zb0lNKINTbdH zJlc;b6-feb@A&wy%mDzYYV}&wlT;itfXO?=_pHT}f~ZY})1cxpD{)I5R|J30ibsjL zXA94Vp2_MXm7JJ!nR{h7=(U3e*J$f34Y}Lc@7#NIgmCb~*#=Nq3szbdU_=*2R!uD{ z&n2pe!h}Ul?$oX|meNIZy@eSb-VKD&)(&5at!&v|(0eZWTq)51>@+aKKhzmP?yQ!$ zCRdppzI=4fO{#2Elvz<0Y)j5oaV$7ltp{!YU{WA^oxa!GqkoEo6;~tCAD_LGB( zQ&M71%kbItl`tE%q@L>}fmK-7xKecer}P)wn`?SVaO|v4(ngG;qN0x;l@}JiED?1A zE;&iXpg$vxwL+Cw*2NCEk`oj=D$FRrLGujsxi4R??`~+C*1uGOR2Lki^|SMp@*iJ_ z;a|BWQ`$d7u%l5WaUw;vRgLo=P(U^}@%uhWPd(ApjQ#LotVp-m<@M{%Tx8G&aIv!9 zs-FMIZ0{{CEx+ak+woR3eDT_fozxfq{3QKmry+caQYbaW=)5`13I2Mpnj?xVKd%>6 zRAj}_&pN$($nQiF)!Qje($^adw6e0Ya>PkZ^!0^+1Z>>&pXrDW7^&gYit-;it?vHf zzS+2{7JUK>R2v?lHrg}}Vm$tu_^~-?@@Ugi1TO*!cM7N=jDwK@G5n8ir9umSDr6)i zadGjY;$j8(0FX?9sbQ(@zmK1soCN2clAbQ%${MulYUTaYXey)B2oi;R|< zMAZBZ=S^ zj=uD0)7lv!MABA>3wkH@)_Tn9bpuGbOI#X!3LG?69Y4QoX{&;=#YU%9D4Jdd_bZx1 zQN){s6AECHtoGbn)O1<{%?&zw2s%F9|7mhm7KcEwnp6-qS~9ah0WAw%|X?t^VfC@JSW97w1#`AtK9p~ocq#4iy(%H$*9JiUs{}B!WEsgvCm6_OXWu_%huF*he`GzyEa`z^( z13Q)(O=aH)EaZ-{e&xS>I_=<6wus$ut^JQrDEsqgxyO?|BcuYCy0eIhiS5M*WW5|W zJQn({HRrHBGNh53hkqiTsX;d2m8e~~2P5($^mx3vSZ=wXIdW~xQZSKnt;qm4ARlqH2=rz!S$(#`mp;00^g!UI4>UDf zN$+QDU&NiZ!is<##Lo|v7+R;(WTEvu+?nX;yj` z{VcPf_o6!r(v@ZaWZTk|ax~Pm@Vd)$aZn~IKUXD^*H+qK_<0T==!F;8NCk6S4XSUV zo-Z|hTqQ?@9~%3(#0D(2I~P(=P(s($otiYK=-C47aMEOr<>qxqtjpziYYvZ(w`ZGu zfb*C|Ee#Q_V;=N!y^mdU)!=S$-9HW&rn0kN>DP6xST9hJR+XZL4S`&*2+P>7^`5n?Xj&+->uKo@X$ZbimwqDuA;%^dXXIH*Z{o~d}y=`-# zqU0RJ8|znC4*BVinvF;CK47UonjnB+%9W*?p@;w67h21RxjJqL54J8oDgAbDME0eF zT*$_q!MR<|p1c=BGh&D_#9%X~8k_yT@GQo`O8 zT%i|2yL4PDuv|dHrugBqE2l&Ilb@Bi?oD1M>E;-B7H5IIw#EW_1+_D?3#pNI^p%59sJKJ5A@hs@whA{B8sD6^^*Gw%9Tzm)^mIllE4F8^Xdw3a%SHiLlvXuHiyP;(n*G zt-|**1{?SBXHAhq6R{gx$qX%0`4K}YE+nBuZ$v{8`cfngbyQDtRi3y+I$4Rh8$5e5MQ_}p2zAn`3Jhi_T47)E6+Qv&7+5_E81c!thJ$f1 zd#bU!Z)L;5Pu0Yi^-(M8F9Z+G`Kf?SOzYMeK*ntaHbd1*%bfe z%wKNLj|20dCBbK*<0H4n*3J%eu`TSrUWMbFB$#2(&YJ$Md~Ap%l4Q>$)%KU~v$O%R zKHmM%YHAOLV5iW@zTvEk$Nf@iPd=R`^lbF`bvg|DO^8G6i;9H!1yY$arC-3r$(eDM z(aG8`;FeIQV?ak$I-}9;oL(Zs z4fp1`Pr#h#>}>K06#YH|%nTOpCYxV>Ft(PrTTP6`*qhmOme-Q>-f25uW&^yJA)un{ zGciObfNFQ32!ClGehncnW3*%)7V>D^xzQRvgI6QM1U*VW(nhqsccTOoN}C7NeQBJXeX9!Lu@t|&MxQ~+ zlYbW(CF*kc3(maiZ+2RmOzdccn=B%_<|YPwAHjL0D)GV?5L%d2wgt_V-?-d>Hy2p= zFOIjUrz@z{)YMjl@cuK%em>bqx2?#pRCmCi8SY{7z1VgG4c<3Je0jaUena>OsM;UK zXs;k?>QeaLXrc_PD#sCDAc_%Ot!gemt9Rc%1ydyrQ)e?v(-!e|3k-#iH%wmGd`Vb# zxLlpB2TX)ia1^TKW-_QG^L-i@jx1p1lU7L=cK$vvFwim0_ZP=*U5zL?Cky(StFy`5 zcJG~RZiqXI8kkvF@*iW2!asGGC_PqA{}9~U&C!$6CPZj)nA95@chyB(AFLI>`PofP zv`zw@8T4P%Z;GGvvYt>Q<7&>*r$vdJ~d5N@66ve{^W5u*)yS zmI#T?&Q4J00kqCua|37hKQ6JZ)4b;2=Fh^{1wManO`kihTKrnSvYoLb!NRoo z1GIJ)$7J63?3UF z7lwUi`rltBynHY%=6I&t-BxKei$QEa!N)7`j~O15MU+S;;r9u?u^8=9E`cV2EyA_Q~5oc^!l(7AIY#RvO| ztz3HgcZY-#4}+eUMzDqM9rWh=8#p1+-Q!Y-kld$K{u!b%`?phknOHZK*PBzd{R0Ee z!2BX2A`*D*_rI)*WQ>I4H^ul7Z(sIxDBIUn%JK5@0{6J}Ldy-r!tYx|?U`r8-XT5BVN{7!rOWy1dj3gsTU|PfWW+=iw zbNufYpJ}-)f!3})OK8^}CIBqO>Ah;#kp7VDKIqxu%`5fY;ufzLC1jC6SRnTA>+L<- z+XEK?Z#NtiwD&&(*VX#Lo9foRwq2NctfOUDbQ#ibCNGnYo?8TD1a7a@k5QyN!;7S3 zLLZU`ka>Gh4`^pobAS3lubt8xfBt+5+`j+2T9Az6dh(|F{Pz~YG7#&)(3Thj!K=!7kRgS6t8Hr+gsiEF+Mu_T(5^E)e+PTw-I=bh=7_m%W7FfV}2v z?InBs{tix6@Dwc<*@yw;)hpLOrH;ba-&ByX`^~j**TJicnG1$qupV}Q`M$uZ*Oo-* zpbCNVC5$W~LlM;>@_Gd{B>!DgPUC7Z@@fje8Vkfi-`2_Yw#e1Q@7b0FG1M7+&Jy0F zR2yJ40|G9sum5btit%<3b%X3jXZec9sIR7XHVFMqABmAU?lpYls$Po-F5w#?StDEo zeAv&=kMR)xKeH4iTc5FgYI&hDb4D`*^+swVy3VDkM~GTF2bFS()%ND5tBVUe=)VqSCB z;vE;P3+8FB+0m4MqQ1L*Msrf`k1QH?9B+}q+O+U2drm7kIk~j76b#n*Q5&+3`v8&n zsb5VjGTJBY!*xxQt}`%5KE%$3V3Y+W$^caChK7c}Ca@L3=l-)K7h#SGM)1PH4y88w zm%o0ns-`=cNlkTH;YAZFh#JG``^E+8ob6gX#xf3gHSjXKL@v5qoSpKeu@>E_&*%pK@!|7G0Q-D8BE!lAtj}CS-_3v z4S!AKzDvj}og*gJAO|at`3WrDk*rvUWd!u}EiXEwV=v;g|2Y06l2NHT0;Rsz+?>la z?dE&;ulFqV{&^_o8H7`w^Pai64+J5&}KhGNjn| zsNR}##1thTE zT2VUJ6YB@mMLnrjLAYJ~P4(6FmAfuid%Kswa^^z42t>dx&Ip%rMg%zM_@l?{!d3S( zc;kQkT3ZvA`Tb8?Nt~flUHeP5o>Hf2reL)U7<473aQBfiefNhYDmQ7M7FmsD4>L6gq$ekrT9p=snepW6>C$}@asXd&cFFl>KX2()UI zJg;h1e;nZE>vY_?kz{+q8Tl z=K50RlI|0EZSSNp7jgggMGK8aU1hx}{<0J?2-{oVHkVNiPLDW0{j$UY-7+n>pF~2! zpFQXPe{xyR5ZSNK6>E$nHs)P(OoW-&AI7j5Om`LCKF5_Lp(+KO&olNviCAWwc=hy( zp`~F}$-Y3f@mEs)%$J*q-#}4{rNuxQ)RiiSj|=Ia9gnM?fFgCyAQm)+6ZcdaO4JN=#k z9)Yr?y}Eny9}m)2{%8bK&W%fxhV-Gf+YwZ-g`LG@?B?sKfL7oJzWlRuWRs-Q?vL}9 z_DZ{yH!bf-g?7YtN{QVvD)X2>yF6d$J1r_czzFHE>OeH2gj|C=6HU#{Az#X9QN1lN zs|Fx6>+3duHzxm`bStV=F#d%LJ(1R~2bBx5LRe3_=5$l65%(WA(kJ1}Lxqklr;djL4sj1(1W;*^2^?}D21^eg zPqqs`D@J#WC8nMXva{{%ZIY_HF4v0@Z4qV@PQ^5%(G9D^h&{kg9x~a230gG^N~agt z=xXT0jo|0BtJ?_*bK$yehO2MHCwBB0%Z zUU5K2vaK!mZ2T??k7{myK3UPoau59a<3Xw1?8K?hf9*(>|FI)2B0Q>vTEB5JRgu#o zqNyJ~u$<<}_{WX(@OH%5Rp1`{Otm=T?(g%!0Ks#{%8Q1FO3!N2%pN`8%HOzQJtu|W z1RaZFkuJVl9PF~Vu|KrAMAnq_UI0}e<1o6-KS*pTa>py6XGg1aX z_Wpt8ZgR7eYo?z>^jY_0dxI-is2-XV{8F?Mz$A1Y{?xHLf2J{Ut5ABmft(sJy$HQRLfD%lx(&gVgGmt z+Mjah)w$b2BMvnc6&5x&VEAClv#ac%!HQ(hPc>Fz5Xg}?a3=b9%yU~s&ylSBZMzPB zTAGbMdwc(}U0WOzHHwa&vK}?RVy^}RK0n@>=KndFF8UmX)ReOIZ6&GIJ~ew0b}-X_ zyL?_Qc#Tf;ub0VrA{Ka=gmI|?er4Tynf!+Tc$xIe{{Ov9%f+`|Cgex$3KaC~`83>p zL5Ju9^ZTt$QU&PAd2~1x?FUA7MY43a)>jLZ^K=$@VwZab%9Bxjlic)KHxy6TTT1k~ zt~w2djywAVPA!8P2h1qX)f60`8|Sg%KP8C5~{gbn6!B`CwCeZ-i$hX_LK zjE>CHN?uB=AVpzksiq1>t$qJP~e|@V{O-$MOYlyoyaqA{(lem6d%p)8Hl}&T2^j^>tMz zr#}ZA^1^$Mi<@Gp?}%4OW@ z0zxydJ{LPk)JfR9Lje@Q8(d5VAE%Nda`N=w!LgR}xpIKRmiUCugKgHp-*+Rf%FEwk zQnFNeNKAvB$MTT$&T8*-vI*T!LZPqM)Eb`XI0)?EGB-B|A4vja&>fGXcV}jXztb#P z1-`wFt@HE3BD&uQt~o>pFH3A**|u*!%N3g2AUK)XNH2w>SO8%tQmgD2P$~%5a2*N@ zP((C;0Oy6y{(uil8Gf>S4ruWh?<2sCHE_@1$B!Q`_L=_Nb(Q0{@?fUV`mH585vQcGO`_nLiWgt zviHv3GO~+==pdV9?-3PchsYM$dt_w%?&I}(eZKEsfAm+K^El7v<8eQ(`?|0Dx`EP} z{q+lYP8okQCXyQ|E4Mb@shcJx8%;^j&v|NN(@7K;J_ao}^S4y-o{q5t868<55A=V$ zd3kp*LSfGS^F@N0n>0l9ckH2=JFlRCu8{YFQgnVzkdA4a_5fw3;bPBMDA(xQ!5jx@qBImIXaGS^@E^d)$-1qjx)Cu z-IcyPHgksz%_ns~C7dx0_4Vm5UMw~K7=-S-B^~>Jb@0QOqj~%N6Qcshg`(T_t!ee% z>rC}D8G}E$Z0FfjEo41Cg&9C_=V&W?_$h+o!{H3Mr9eLS&Zk0&C{f0A(%DH{o95+1-w-a7O8za;b%Rb|dMse~7M z>1&>H`vJ>SFQ!fYa>Zf+Sv3=L_a%XQjFQ9B`jX_h?w}`RT!|v2yN{n!1c7%0nkkgT z@_D%V=Z~_A3KLJDU_#2P1{b2go1=Bh+N%aig&tc^)ws(M-+@_kuU!1mn)@OgxxA+j8K;N;ZWbP_jt%${ldrG(w~l=OVIrTO z{;9z-yN3x|B{gBW$Yl|@X&50)XQ;qVDg-D4fDE8=pKa>g=+N^}KqblYJxgV)pm=3s|pEgmdx9=B65+ z==b{8dMXq59cmga#ZzgBG9&m*9^~XF;wf}ER&C+#bibc#eH#{P9^R}4X zF#AR&nE%SRrHbnh1sA4&V#1}r^WUsL-L{E5CX_jSzdfsQ@yFTE<7<-zN7P|Wh3ORU zZ+C|Fv_xqQmW--WC7J|l7v!#gF?z5z3z!e@x%}+ z8b^2@1YW=H_N9kX4Sis0p*s+YRj-B6cRuvxhw=0s)8_t1cX<(XBO$BDaTrUi)4jjh zU^no4;JSd3CVzq^ZD%~*`=Yc!s*-2#CRf()9sF9MPX$yLavb54#f5 zY&Pa7+juM5ho0|K(zl*Wy|qxvd?ubpQwG7dkUwOiQUbM4?$#~mM$=j*GRYT<^Poi4 z|5|N$(Y$)%)xEOfxNt|J^3FKz`=a**H@$>L{Bmcmvctv!k!)#mbMv9;<~@yv4{HFf z=j3qwgJI7ZuuqSe?cxl7+d<08;!-WD$2@S;YK`c973JhIhr-N2-a=Y*a}u!wFeBH- zv`ZUCeJA9fG{zZE3_Om*JoNjyBb@i)8-6lXV3XTIPNiSUu!CrGN;TuOYzMj&;MrNC z&XInSxklhFSCSy2vVXFcptZ0OT3Wro*q;T33~2nLInl=l*z}(a3P_rl7#Av(2A($` zF&L7(eMvjDFX?@v&`sT^nwN(;c!yd-mC5; z{v{`q6IM3<(f0S04=U;+96vYJ-c*Y`;V&^tlH|9_TCe$&Hi4^A?Y~P|14j|`z@Su;ABPty^K@UM!K@pqg0{Q2r zMk+~M78l+NO1J6hu=81u`B{q>d=oH`mVDguT}78kPhYa`U7=AbQ`+!+3FJ$a*m|WC z(cTlJZ38KqH9LVW-6x@^hy`U}49{~{}+%~v+R6UK2 zjqU7;D`*%P8o&eO>j%e~%zX~7oq3*j|DDJbqFAI01A@&P7^ATmS>nEGDlsv;e#`->siSk1gX6tX^W?{mGf++; zCMF)O0x$#yb@3@FB9rOY?fL0$VO~{9ecH>XcdbTLgiO*xd%tRTMK{@~Z zk8yn(_3O(GLc4NbqrFcG${i9?L)wvP)ocfOKYeejf}IgSkA{YZd2qkL0+GZtc%U(V zsv4rGGSt*WcS|xdLdz)6W0nt&9<`sfp=Fnf`=RmH&kz&KUZG_yJQAh+0kp5iIrkoA zWA9$^j`EXq*4A@hl5p9InVt>XBBdLv76iJPMt9S;=xCZlm&FV!Dl0ERW2>wz)W-V1 ze#Mtm0H6xSCLrhxedw^(*4~a+7q$Dd+@eIUlHj`!*o}aX9{4i(t%S+&8rJQu{w%Km zCgeZsA6lXbaicZy0q&U|kIzkO|3SYy7ng~m-#fgYxf#RB@eHSAyDsyWlAO`ncc5I&h#vd?fij6e-{` z1g(~Z+uuSZ)GalI0>J#ynpQIC zBjv^cZRF^D!5(}f-Imr5uib7mOX(e+=^f95({bu7yV7ytnn|s4+Sta#@5PJK|L231EUhUp={^Bc5|>BW zza1Bj=IN$5t0ldT=?4#ihp%Eg7+<%X`Tzfq@ufxLD4PVw1uKb5u-fjS+S=|<{jC49 z-e&=vOpTjRXMFXtnj4~cLPlqtc^)4&9i4A^WqOwU|18rwUh79jYnsk#afyK2SXR$o zw*Z3(+Fcah$voO)i}3vY9=??t5+1(6oz@RWKYieB!ZusRn%@(mq!t)D zdpeCL34R?_f?(@)ii))w$gvu5m};_1x4Z~WYI7lJV?U!U-unI-(lG-6xpNCPT3=AA zgl79tuQMc1exKM$R7O|auDMA(y_H$NAc0=-^}gx+-1MMkYmGk}Q=})pV07Yl(8l!C z%`JZy7W@tm7Z+WF|L2h4FZvz~L7bV~E=)LAoV=>qcyLXJKcPm>hk5z9Zl9Mloitm7 zLOSp?1#U8#r_tc{m@HsJRdjT2B`W7$WKc`aRo4>r=g(6+U6()r7lPX(ynSFi_@nIO zyjm*H#ly;1l0uFb1Vw%h4w}wtxLPe^zLQ${_W73T3f-6ME2|E(Mkz8T8x6FP)iHb*+F~9ar5c$+4kn9Y9$UH9%~zjOXf5@ z8Y~O5vRIu9j^GlLEdw(*oLwWWm>|w3a0*Ne3YPu$yECaDn@)Nmo1F5KrKM;n&rIC! zfvMy9J6l^@qn$(nP2zt>OeBwINWo0yzsJgw=dk|gxh7?cWv(SqVBC~t&w(x0s_#>0(aX5XYfz&~uL!*@ zM11C5ExCY7<1{<$A3TT_2$VB7-Q3@o_Y3EGo~3MOry{;b$>u#;VYTV(IcEoV#*tK_z^(P6dHo2(jZl9L1?Xqk3iwWJK=t}C%m3qj4Ur8+d>JABD?u4HD# z>Z2XRcl&ZH6BXTwh0bz7iV#J?Hh%a&G8uEb8ot4wcfPH~GM;fPH?V)qggxKf)8E=h}2m3{pNlXqP1d3q%XMP(nanQ)H7RL)AXl>X%EMl zxg6V5CR`1BLiKGXv&3h$$P^h={Nr$nbA}Ur0tH@dH{-j1nWsK!L?fx35fuP#bu3@f zmX$8x)G!_?eea3bKD=^^aqot4*a>8Is|)k;3~)l;=g`eoJ_%9+cjKbR(Kgq=tpJ(Z1z{^LTd_}~}UG49FSx2ei@HZiEa(Y}9+qMjxa= z+4ME!su+FbSBs-)AFy7`u4v~>W>==e%G7WC?+%(JHd(>i$b#~7b9w3Q%FTMq`9I$7 z?%DQKZeOb4EEMo1kAvQmgN+T2Gml{%5hW8rMpU0{y_*age|EijdGl z{0b%Ew$z#52dAs7v^*+Rg<|B@Z-wNwfUpW1^lcA87);5(T^76h4Fjz{$Q#DRmZUM-bfJ9Lb9drHKv>$K`fS4c$Vf#wxi6o{EWseLW|ok*0o7=y+>O2RB<5Do=I}zgw=#V!OF^;LBV7k& zvaCuc3YH43ddvzXgpI?ML4pcw&O#hGr^VKIIzQf*g^8F=5b1u?3(DxXs9dbb!gdbX|z`K|@o8SMay@tZF)=EWGw2*AcXQ%s4Wdua*d*F^mt&%1J&YM&;G#A=J zo4;i|-#$HCZ6s9H)T!II^EE0kFW}I6Sg-4Hohw9ZrG4p{OS@C z@R3*fVk#8#b^0d)&+MR-Tfry8v+xu6_W@&Ehkx=e`U3Le%+Gs z2tnvm$N(wAigl~8@0wx27c7K2n+h{gA5otzQ6Klty&YrIvs&+v9wuC$jdigjSGJRt za!ir2(6hw;WHYr-23lG;>*LM-XK;Rpi}j&)%Iy&i#=HZNaxL9X=H}rc5e^FtB`W#Z z+e=DQpk3%~Aq~y;(k5(Mmr&p>#V>I4W?zlkLWEos_#s2p>FMkj;z(Re12esZyY4JV z=V-F_DAvzkz7Y7ekp-xSo3U`eyJCu%Rv2etL)e*^$b=|hyo12O)>(FMn!cW&Q3>;R zt_@8@#{H^r_3qg|MOF` z1jM#i@A_3wuQMbL?^zyjWw@AYz1Ul5W_5i;Z>=>L*O?S)hEI3-G7d4;dqKO=3IKb2 z7Ci|N_aL$4M;L(jeoBfLn1X^HF)Sp+p#CYbz~X|)w1$$B(nb_Px1*yY*WYBqlfsvp4^DHtiy7%67TzklrdyH4x7Tf8m5ygccU%XDeboM7>I zKe&@7O_wSYcpAv3S4T?Q#>Pa!RJ^g#S3xOXyHL#sP6-bW4}~y6aPb4FUbcWK;CH#E z?`mjJEYb#y+1#FSH8)8yyt|;z?C9Qd~=1OF>-AS6}5FHTBv%946B2+Q#fF z{8rY9wBb?7E)s?I6e-a8inOAi*tHusDyyrLI)8&-Tq=id5Ep#o^_O2=!DZ*yFEC10 z!m9+h2~M&o|2`Kuza@2>H}mBV~77*y|~ zy@#cs!&w49@o~$UxvRNujEJZx2LANKQdapxaDAJTV)1YdumpzV>NajN7x?*?7}ozF z+Er?mZ3_;QGbz}UqD3v-tlp9}KL6+k1vBv$R|)IR8ukTiMdjx$aVvSp(+X2N8CZ2F zL`pXQ+DYH<+UziCGTNGz87?wzZfTepxwRdqF!kYmg6aCJ$EO5spYF4)s5Jumm5 zW@KapDzed>^8Ms{!}?usKRzTMvYZC>lLn=${(Fk%!)Ze@ZhGUasOCi5y@vcc7F79A z)0r{+k_3bgfKwocae0iMR5()Ixl_&CbnvSqo;An(Cu|ph(SK45LD&c6F)aQT`g3m~ z%ZXl$On90+T&bL=j&HDcAM{SIV0V4AzSFs=7>3KVw^R88+rQ`gvl)@*-@H=Xw$wC%Mc1TVMC)z5vSej%-voRH zz@lHT!CK>e6nbER!pjk$q0N=O>>V7?cM@&r+u)#}uGJH6{D|mk;j|%IT2!-^t82vv z5oRp@Nc8a#kaW$qH}3vOwf%E5>O^ix+~@40xSYi+F6_lF;Qfe+E16y@aS&d(Amp{X zn7=_O$iW6)umO{Q)+fNjI7^i?UCi^gS{mRqfGd2J*r-64)xLW>Q5dN^zDooSeB$D1 z7+!UmdxY?;&|$OaFk@_=QIyHys_P^7n#$!KG9+ycktMDO7Amm6U|qXOwP=Y{5Xe<% z7xn|=N${73xfbfz5<{Z`v^6yYw87gQV*sF2Kl@T>D6Xc>Jv+WUc;`LOjmi$))7$bP0v_5T3@XdE!ot_(b^UFI0)!Z7MO*(7q2>h!{LIl25`y- zwo*E}y0Gt$jg6TE-=r&n`w@D%&A)sDtWsVZ*;Q8sEi>I(c{k`#L)Lqmk(QOC5!yIc z^EIzw71A*<3~D6K?A`o#zbO^NM(CmP-&kje&tFEf~jEq$PNC@U)igJq>H1Gt`5RpTIOy9v$Gw}gahlFSr9KTMS5)r7GNnM_1U5A-(! z4%~$d@Ot96Y!mVYcuBH?nIm&^rnX553EW0aKK-vJJ!YdJA-?|%I9cB2f$gBr~&LUCDR!j8G&-o?SkdC>ZzWN4l)gaZ<)9ZM_*O^f~?gHzC#52CyWVe{Wwr{ zbbl(EVZFR)<_b~f=;#P6=PdI^T%~@1z!Kb{-zFq{in37$hd+E3?j2%OL~39zkj1(U z9$Ot99jUO!t-U>2K{~%!2;*jo)I`?RziLl!t%(`l>Vm%nT!lxYl z23i7*?WfCb_NbV_^@Uu!I~VuP?!Rl7j~MT%#M6k=9}|a6EH|?6c#|tU(LOkN)%Ww3 zvzwa>tr7c=T`fI5YYU5gpcj%^82J{>KzU{y_2r8khap9NaWOIJHSpCc0k`@1O8gr* zsLx#rG9525;Q>`T^0TsHakUs_NE^SOCd0gfccppnhdu=c|G~q&YqxKcb9sDz3LIfo zyu9-jTuUk}ek}gZF7kR&{liJ+YilAJ4Bd-eDNcd!VYCcv7yIRB2zG@B4{*vLCf;04 z=^>_jy9!>{t7~hJ{oaJ@jtQani}LXWWU&3Stb6j$L7=ZX1F!hg=Ojquzk84>^(L(b2?J>@ocar~kg$2f4GWtDyUKdfkV!m^E9h|7d6GqDTpGW!+7t%1b#$HNHCv z#;|l^BgVAMAfF)kN?~#(fQr;F5`!-Lk^hO?eH(y`UlH9;(3eiKd}1}@DeIiR`@-e^ z8&1zGJ}(-ekwCbB#`5AKT;FdD-RD3+3vOJ%QG>(dt?iy7*z2EO3h3+UNlQyZ#jLQP zfCgp3h%)m0ed)eUaZwT60O%LZtx@=ZZ}q9P>|(>bap%@JA+x!(#Z6apEpnqPKcWU) z03g0&$WhP#H9PC;;{){(MEyX7^_}?d0|VV{Th^5#hVo!WxkHYkr>EaCy>efZlM*m) zY)nl0vg+;|3`=is?;R}u-wD{mCe$SVyvBEQgA(FCGfmU$t8WvY?DQ@IpbLSAsJ$qB z<;pL}+PAL612e-eDk|y}B04QF;-!4^H`<#kIv35EBqk>A5TUlX-U_>zkLQL@PaFG~ zLbP&WM1jfj_I4+)O{L!GXWZ9A$A||SxX`EUm~i!C84U^|W6r?hfQ8kisd`cGw61aT zt*MZn>&Jens^o3wo5`2>-9k|j_sy1G|I?k@VF&=M9vE4!+s)R2)e#Y zTWK*2!ewwPh+R4-lqUA7yNjSe1K{=8J?-35hv>I zzRv{l;XoVi$@As#y)O`zSs|%@(fcJQ%ZfhsVPwCj$J{M=@LiJS(J||zm7Ogk)Gbe# z15GWpv(-<)RU7TIez!)L8bhzT5-#U^lAhah(vg?!gkwgG+x+3jdai=q3OzIaUB_+S!rywWSE_oE4#XJEsdg#QcV$go& z(|Ali0Ym_~G;k~jLtUNH2=78aqp_uok1&<)_HbQcVd1-Xch3|ia_j>>_+>D+pi2w? zZr-9L8`Z!3S2SeSd;BL;_wILy+!7&`SYA;4bUO`MIIY;0qyQiWLp#V7QgQm4%yw6$>_fDicWrDWJ7Z?nh)BjUsPGKFqWH{=mSNw5dVNe!aH8Wu_+ z0)&OVy}v-o^J^-WvHycRn3n;|5JnYLsYb$tN2x>c40(7gwe+|;AdWNGLW<3$e2)T-XLNLHjA*w36R6Bz)l?4 zg2$-~kh54w_(oIQR{K0#zx0_d~+cVK`E&|*I>3sLJS&i;M} zbE7gVEs?6KeL=(??l8OyrYYP;()0SH8u=amM!Sr|y$1fraA}PAp6m^4UAy$}(#YtG{UJ_ zRgf#f54ZA3l8gL!sZ|X%20pDE&UvV^U-w)TvdIO=kV&sz{o-VPXu!}BbN7DQQI=!F z(Q+Y(a0sbTT-Ov~ZUR=tR_pKbs;V5WD5QnHzJ6&NTo3=?EcX1mFu=0`JsX|hk~U6O z#Y?CckDFGFj>!#a({#->yuIrITh8>*Q^>0R+1|cFP3U-&cuN71BInO;7Rw+UB*yH4 zX?d^OZ(5+`&dr--7nHLGvHOJ5>`#r(j)t-O0=zN3c;h>6=t~bh2{_$sBQ1%9DMPZ8 zlP>HuZ@FMHNELK!^!KabE_!y@`CL4Q+6!^Gl`5<*{QkR5IIgD?%1QfXXV*{wJQGVu zJKu;nP9q^n*32kqYI-z$Q97$X;6Y&O+zvCwqSN6+u}me2zF%1o^bk+z@Ns=+IcJLE zjH+7!ky!h!RSx^*u!5ws%@?)h5ukClC@-nkah>|;@88HY4_b7{JCE_@*1JpPkNJ~9K6+aqD&nPaV($~nY_-Zxb@}>jlNd zkZ`@V6a;km-=2}4u=E8##^gTFg=YLkpZctHUJ@JaU0|Bfjg=SPMl;3Uch9zQ{z~JH zopQw-y1Ab3oWbaWizAwtef&#~Kx5XaCF4gzYvD8eXHUv<6=2Fu2fK^`L$Z_WIFf+^ zqe49&`_sycBWVp#jY~;k{J-y($oGDG@Mi7dwL;(Cm6rN4hkigYdk=<)n}mvfeg`i; zkjMfcjc(zBP&GZT;(s&%_Q7gV76=<-W9ElDmBWu%H%RneW41geGPXB8_(W009I!%hoFx{F|4_Vg(W31n7vTU%&bAOd-6-i3%eg9WzuY zU&bJg;2SjR?s+gGvErJ5Y{Vhyg9r^i?&mlDc{XEwwOx0*Xt<2|Yxkokd1#DNP@tjf6=Q2DqG*W3H= z^z^i@flb`M8D0t(?6C^rW0F44h=sF@eYJTkNhL&`(trT@?fI*P-?7Tapc(Ke9ukjg z%l<2PczB_P8W%c5-cz@8BU~Rpo&l>ZXfEDVeP%wx5`j+LFjBhTA=VZ@oKXD02AVGQ zlvL^;I%?yq@`Xj)lfw-HYrfh@W8H+76v&5NQWgM{26Uo*5ho+{ihDXc|L&Fe-_Wg% z69~r4`jw$rIMgG792*_|F*vx{`}+I~Y!Tf|FPFZohRLU=b!?m(@9QWwoFW&G?;LL2 zE_@;PHpcO+rHnsK!WX>bt=_YyMMe^a>u&0x1HhN)42 zM4J9Ub1UzmVXx#xku(3leyOK>x{#%QCSc=#fM-bX^R_4vw6itvd zAqaXn&_9PqziM@F*vP2N^lRD1;K&GP&+N)dWY(lftD2ZOM$%{6Z=IdsJH0wL7xE_0 z5kSKWI*v<=}xyu7?1373sU z2H%zH`jr4k5zy#k>JWmwOR==9zth|&lMARTKP8zB6=?nX=*hnUd-qYfdGzav-_F7` zddEDIUMpbZuAvC27<&H$YqEfcj1_$~&Uf?I)=;8*m4bKi;&nfBUw2zl*W|I^yvnEcEhFf^-f3C3;cTuW>%&w5{e7tVkZN2>Bm#5zn# zgv$hS!pxPMO|DDofw5aWu1xZAn7=Ikc{S-PIz$PphmP7xqe6s3j~Qb-f|L&ksG@v9Pth3JUV`lV2h( z)6t2PBcgGkBl0=kYXIfgC^RTtqN*q@y_j<&^TqbI^Zn2lFUU(%@z6n=9&6X2;R$1D zrJ~prMQE~1iB|FESluU>VAr&=S0bw7=}u~SP~Ds2QczSxL_mNJnu1Th%>ymNO^v$h zJcD2$JPiC$H(*+^8DvW?9=q>XaT?t&Oq=Z!5TOw_h&i-_hsks)^n?5;E`UxFq^!lCy7z zy!UOyqbXOBb+@yRzNbUw^LfCtaU^x3@7`#dK%gC};pNY5Z15)E0g0K97kHD%IQy! z&sFvH^}@B$-ZH=$Xdre!^SRCX{ZNsAYnEO(Y((|5rEK1(8P9A=Vi_wd*Z*_RtMQBd zJNs249e=dt`OYSFUG!F4KO*ejyoY)_40udMH2NGm-=`4;YeB=%FKWq3^J{C3u>F{q zY96n0dN91c^151l0G^d{BWsmPD1bVQhUWu^5OI ztwL=UtVeDp*tgN#Ot)b`3~@1;dR2)s!A@f;}xOv6ZZq zM(#x74058mE}sdkH=0CA#G7gS9?ewm_it*PHkQvCX_Evn?4tdL#a|}j=SjOc6_k4y1FWi=qu;>hc2k#LALe0 zZHSSvU@iP`W4~ji>FlPDznc75Fm>$j0>AO0xEJnC@wlM^`?%~ft@qy9j=ZvKP&FJS zVUX8txb}R5pjw1MTHF$;sIebe-=r)a^!ak}UEDstWd<*y@toCL>(3`@-5v5*Pw*29UVL-CYk{DKVa(X3uBzU4K#hvlt3E8Q`OivBL<&JG?j4GFYP06W zspuM`)BRBui4k!Uao)tnJ)=`aV81tn8`m7`9IR!<(EC^oAUsT41yw4zMxMg#96)Xh zB1jbx%;=bBbzDzpUN;R|??Ew0US6ISbydyTc{_B&)WM--Wfr3q5Y46S*Ed#iv38Gf zEq60!e~`W>m@;BJ9zOHon9sX-m=Ts{E!EdhCdJ32OE*(n=#TyRHb#mBX5AP*;szrl zl>{>#d6Q?Oh7cvw))T7Rj=BL8ZQcZIOa#%72oc3+x;UiL9iau5)Qh&ChTH75RyPcF z&K8=YSK7q(-$*d%J66@z7CmqYGZ8DFuY*ZwFk%m*yC#uI+>4)`T{c72!_!ksQ}ZDv z@@;fcK}l2C6mR-l$ntmt?~3u6w9RB;p9C{k1pbQOF630#c%RAh`ytZFTd`z*l6mi{ zhe128a^RJ}Z-8LPy(Z?1gM+i=_YtlwbdBM)KjKDmO{o1AoCD*ypQWPs#lUed)|tkAeKSl}n7+#ZrJb3e6?(iY1H zm5LH z;X(~e!9`yQHa!S_S`i717aW+DuJK1#OYfhq@?oPcODOc6M5>Y^u_*Q&=}GR#^r!`V zX~YY&{-#A?D7S@oSEhAAQIqQ|aW4;yB$I{0J0K@E zf@k6#g1Ak~&SB}&^1JI1xtDEOFGtjwGb5P@IjJNFOJ{;9rg$MuB($DB1T_{=@d5$@ zULK2s`5N$hEsI;)XZ}WBK=t#DH%#6)WcTtDZ@cm&;7iG)d+k-&sAt5Fx4&wh6jKYK zC+2pTmi6_iqM^bM1I)$Xvg3@fHq@AtFN*8R-PAHX-zV>mujT3ZPzERt494B)T2Oep z{U9ab28(1Lp9kSjN1p9*9PBpLg&A=it6ckOGA|d$8wwZqek2sCzB=Xnr1l2qAkw?# zXUDZCW{rU{A5+<>t0`c3$V^Rw~x+6_QQHL_G`GS|tCh z8tI2fBR#^~A|lAbpi8@XV#2X|uSVl0l3wDt0Rk=fynyILTU-15wgb@d8SA+*H(f3z zrc*cuU4%-gyyz%ncm@U0bE1&exq$1(iWjhC2GjzN*><_PZLY>#4kV!-yocg&n&}YJ z;T6Wg$w#qoaV}!#sadkTrtii26px9VoyRD9%jG3_8JXqjVRVoB$rBpPzM9tEb+$|D z&qsV|nRpC&WDqF@mndpYO;eRf5fKxgXMEh0sKD~Y`#4zk zn=UcWyT~4<^x>E$=spkE=QkqB={$;Khdk&8(@nQU<$n>p4ca8Co=m-%bDe2c@ zTS$SsJWLCj1?(N1_G}~=vkKem(~QV)u8O$hJD+9;>cFLVpsq1{7!yN}+xZMVROYVS_uC1T*PZDJ5pWj}5rKJ*zU$+{FUu0R zT1PVYq?mp+v*Mjp^|e1qJ!Kn|I>p^DSlwl~5~j#?Ui7-3kPf7S zB1Id%W4wg{HOaJS2e~IA$Wm)Ng6TllWY zQQ0VS3J46L>$gGz`j;;-zixF3f3V&BmYw@lh|!s> zkOh;MW$XxF!LsGU5xO37yoiOVTIOIc_JP3`YtIFGsm5O!8hSTX#3ZgoJ?^8y7Z%Y- zBM;CPv_$sSF)~XZuuV{1x%esS4*LPpgnlhyu-p+b`h;52qLkaHySw|(pFc1fY3CBk zD*94HzjY2#Uyg>AReo@=3@9SlPC!qfUuAm{H{+ZXqayC(M=IJ_!$}tJ zT*pkQgxlhbqkoAY$2+2Ik_|3YiydW7@T-ebg#mjVN`X5cqC;8uuKC;+BcL#l&%1Bw zh_ZP<&Ki3!OjRD)4&AaA2j-DVERLJ8N!}2qtvwF`*K-AV32ZDecbbxZdV>er8fQd z*oY)8EG*D~y?3>Y3z#sk+j&FFpkaYx4*EuUm5r$A$K4%YcynnnrI6lDxn(`L%;&_V zuH7(&KKm0R^DoaEzjV1Zo6}KNmMkA=1cNgK&nYWH-OHCRL+=vwfX~ld6Rp4T_5%kQ zkMf4JIyJ>W@ROgM-vUvpK0abi zA?T!_$n!#9;QQK%eI^Meefdr83EvTuwF^&I3O629OcDUe`}v%^d{6-M8qfdlJPQ)C zXC^Npq9-u~*DjHN>>kQqvvgFedV&7GR(FSrM_tFDS<^aWvk7tM4JVMjqtW zaQt53_Cf0PU3r2mH{o}+ftW^av*!Lu82PGsK$Q=a`MD(}-=4>%62xft{P94)g|*gM zjXdcFmk^aIw}%sU-8|eT_Z{X+pT6VN=VEx_J(pn-OK^>S-rj0CXZPR&j&K-KND<%+ z`bXc+1rRUjFllRrF#PL=SN8yS@fivTg9ElJL{I&zp*N^ z+MYft^S%Pbu`SYMf$9nvW;#D_-icx9nu>gU{|Z86!-ti~&`hmL{os19zkE#Q0gs6K zZYCy@mHuevXxST3uth+XL1hx+?Vtp+%J@b@q(ii_9EZY3rqDXPQt_XE5xM0XkTc4UH)Y~k(Rp_N`apQ67; zk0EzAJ~LqnK6s`2!X1z6q*0HKi$%tqEj_XTjw2k%oP3aaEl*zkAeZ<@Z-w3D&p9FWQK4b>&4*Bq{XM#V>?%*Qv#Yl{PwnAx@wHI#w$^s*Lq{7yJcm~sEW){ zWi-&WLcA}{_Qsz;xmX26^xe|PwCUDBVnb|r*+>|h`WJ?eV)n&VR_=9lgbT5Q_x;tY zVg3tH`R`;aH>_IfZT}^%GPiG#P@LdBcadp@#A6Y|a`$g8vGQIaF3za|XuJs)7Kq+VCBl6uo*q&541nK%hU6{^PWmea~pCKld;; zPRIZQ0b|nD&CShWI;pL|bXPJT6gFOBx!T&=%E^Tap&8p&!4VNjNh6*lAjPh-v4yMY z7Y_Zx=9CZ;3U_6Y6>NCS60BDYvHGc#(?=VSM=NB%cvF{?Bj;?5mLXKI{K#4L6gjdT z?{HnLc^m6#ujpN5%dHj2=@Fg%t`Vu7PhnXmT{^Nzs>IZyE zSS>osxZwdRR1Gat9Sp?82=6a`GT0!ZAl%$<3lQZCYKC&3tXSi%qQvDX|8+)X>NlhJ zkJCIVlSVb%EEZSvPgc_YT+$H?2+&$i*L`yrLhx)&0&yL zoMGE{Pg+2uPH#wM2NPJTXE4kLfC%k&&z%^;KId4mcbZ96E9A9o9u((TbK8(PAXh(j zg5CIJXL5{Bx<$LGI$yfIqdsqHE#$ef``j;I>lWG1gvZ^@w~*cSz8kj$Ja(7(SSKCS z)Gj{!Mid->BuXZ`Ww_N5)beQ-lb=|6|0!t(rPnOPM4~>qMJUM__dr=S*^{#lG@}DK z4^+~{k{M7e{A$J8gk#9b2xe|d`yQ>^ciDgRNt#~X7;rwPXV1g&buEtmKaHD zLsGg;klBpme$a>59*br+=fem;$>Xh~s{BJLR8K@_n^-VozOA(WoGsZ^^;V$6jR?@1 zXtT8IZRxNzy!GKzzDBM&HR?B`r*y@YtqT<%?9yMov=*KF+wG0g*oy9k6U(&HMqrG7 zwVIS$7`Lvr`%a4ELqkc)_VO!q>2~4vfeE5~EMxY@<#2eI>Vp!4}YccNm-KnbYc1Dbd!p|GL)Q37@} zm9{JkB~|8VG+|%O{kb#;K#SJ~bziu*XFeI}h77r^Z`bqVCNc<*=qo|YEZyzYt2YIE zu2`{2q`ZzRv$Ny=5P4w zk~ST{aXV!|n51Qbez5r_NG$4+U3^@L3e1{rZUR`lnAnziMMbtNKZ-#~Tva6q;-c-T zo0KRS85t<|wY2LMYu{4>iAGEe)l-Z<=*8nFL#bu3)r5K2U*UqT4KXo;7t!Y;Qgg-t zs@SGkHI}Z0=XyhD$Mw(5cR%6nI(6~WBO~!XZ(X>nC<~;8Ipn#PAFT-9@-^KzD_zCB zb!NakAC{7mqVx^0)GMMsvPDnW$w0RNg9^&Wtq}2G1gKpI9c^KjurfAnuoo2U(qj+# zO}wEt10|x62J1??F=)bv_E}Dbmm?H(OK?3~$9*-0%+ttgDO)y@3S*$w2IRN_=Bb7O zRG~X~f0-m{8Hb1uMAB5*j>KhLdj&2cUjnGld^XVhWO}~iP0ZPLtlzN9@A`CquU?z# zm57~xmr5&RVQzjK$%_mKg%Qo0IN)E(Ke5S2lZJ99Ks=cJSZDHe+8p%(qE5{Zx&CX68F*iq|A@jpmMetH5>fNyz zH9@|zD~)BDGP5uv5s0b%?c1HO%57 z9+LYu)0bH7Pyc?*$$n(ixKMfKTk=xTtdd;N(E9+p9{GXW01QkZ)tG`)qoDAOC@3Lq zf{GAdCGgcvp0L@#{`km_Xn`|Eo5X^7*4>`GG!5q7ao-} z%l^ZjY`)KTTx{%(>iqsHG;Yh;TwjejT5o)mI8uklKi>EurvU7wU=T`h`fuk$$h$#c z4}IkVMkXxuPWw_*0`WSpXD9})7GpQQ@u+on!E}|E4}&xvMiF&AvUc=*@+5Pv^WRho zih7JF_Wg*3OiqToU!|3Z%z|+n6vqNg^tRM~H7P~7Qf+xPQ((9%YTTid30=F|mepeU zcnw#^c4CUvf5GWnT1j8z3?0Rhri|VCesFO+s>A0YQ5BV z6kXE>B_x~qj=pEyzmdVlQGU%zy|BhDyROz&{iT>;l+AI+EfEnqGBR*vRp}cT8KJp! z2`B2Qi%Xjvh)mSYo$xIc5sM46hrSQodcM3%MD4s&{tog(Dd9~rfnX;7CSg!#N^cVX zm#*z5V5Gc4=Kg<#y>~p;d-y+YMs|p7GBY!?$t-0iTMF5dy|R*(U1Vfava>QWLPj!f zdsDLaCi8pUI;Zpbem{@j-39&+9p^lVc!=^?*`UFyVGO@3!-@+I@a*J)&JWFZ5~fwV=Sz1NLtrqL-^~Jl!9p`Q&3{ zSL>Y@p1jR6T-9HSOO)nC%?~rMpmiSN)-cynkw`fwkA>+MU0;0^2~y4&XSJJsO4Qe1 z5a1`{5rmvE%QCCqe7CR&0$)QtP}4M=te1 zGy!7FvSiXUOC=*1Zm6+xnfi})Y!?gCM}M&HL$$cF7J7@PU5nDb8I%j2Dns036KSD6 z>)##DDC6g!)p(f<<7Ura!z>^6Sm9Ql3vKI9;#}y;^;R1^*icvwJ-8ehm`zoavHmEM zA+vNyzdpq&MmxR63i}IlY%}F^{{~A>Jij~hA5>WaG`(ly4UhUJea@`EoF()Ny(k+DnlR`;a>2t{kMAAUUJCFa1<527W& zJ)t^e6CZ}ouNgP?-uerr+&g3H7b9MYVO1uuSGm`c2;%zmJ^EbXi9Hh4V1ojtVxIwH zUKDEpcn=c;BT3xdVZ7^ni15!T)px*+-wS9kv_esU6e>E}5#69-IDv*$d4w^?00uc# zJgQh}P0tGHYnj#~dbDlSj&^M9yMs{A1g>p(6+LXd<#StzXrp{C{Z-&i9DXdx_ZyU- ze%jtk)M9%PPSW@|t&zhST|jZ8p-Fws+)QnIH~Lro$?3+B#5zgV6UnV~hPET}sWZXs zZ>Lff$CKE;5s_*Lm(?K}fuF+Ahsu*>@S-^|Wu7X>dE~glc=es(hW*`J6uaRIYiyUU zaP2wDVp*t=6TC9u2Hjn5z)SQn zzq-s&gW+AUok}H_1O+W~n-FDM&n*GFtB0w*m#MrCInP>9)Z(wWZujUgl4-aL9HW&i zuS;fNDud)hjo!S1gdNJ#doLgC_xOn|6V&_KfKrJxR-_;!GNY&5GEfAk6^)$89BO0N zwQ=5nY`NtdozG>1X*qIgpUrv{dUI61N!B41%SrB#GHb)$nHoHayM)4ZVB(vFsrq=U zMA&Cbv^s6=h%m>e$?-Hx67d1G7T<%`fgt^>32HN%w5nk4++EZ%ne>f~jd&G&m@C1# z02K&{*Ye+${|iOn36rm8NutBR!?Rz=>NH?+J`hC!?{Rdne)Mo8kt=0ZT32Oe>~Ko~ zt{{5(Vv$A@DkVL)KuN~O%dV0R1PL1S1SiSg!Uq+hHoa#3%z}N#{V;4=L3@G%&6M@Q zDke30iM_@TKKiltA+@##KeG)SH{_4S)(;5WUsCR7#q6f5Fii6AYi|Q5_dYnwEgL@M z>%!7oiBeEqS+EMECE$3u&XW4!TRnmaMZgx;V5--vt15E3sA;VQU-3}zMTCX>2L~y& z_u6AQK=T3cn@629>}Q=6pA3&OvrbAqooFQbV(X1krc?R3Ou#u+%H0sJ;R4!Dv9Ixj z9L}|g_bZoFZd#WF+o=b_zxgvuNsC#_<$#@!3mw=k$9WUI1WcW~mvT_szsy1*ex;6> zp`h%!MoRINn%iP&vqV`5Jw0udgm@!IZihrbV4&IK$Gp;1XoyBSBl!`fr8tB$b~53W zQEcB91(;_181gIZB}NhD=3WCzFdz3yAY9HGIsIn^{G@3&Y=*D1ddtIH6H-=WtZ$aV z+!<7Ib0X`Y6v_Fl!H8V4V+I%&j)|>@5Cr`!(ZE7o+lD*W{Nam1l8; zsbDJWdtI8T9){Ib-xiK`h4!M}Kq!=LZC9bH&emgRW^RUfnX}>2n4_O5F_ePL{3a&l6iJjW+2Z1MOpv#zUsianKUA_xv0Y0|j%UUq8Vo|8l?i8QFO z`#P>@Dr-g>-QktROl*&na%545m7PKhjxdt}tc=y=q2^0ae8ZUrGe()OqT*l3&BhD4 zZKYt{(=JB0eiOYE{ERzS?>LBR)qC$Y4j*>UvhVjs>IPW-A29B#Gl^x`+A{+o-U2G$ zKq*~Ifkdc$Aw%oiOMeA4f$IXIq8`xMBRT7C{bOTPc(w;a0H6bD2q=Zn<9}#nqF!2F z#w8?dO$USx%mwXp%E|W%twLR z#{i?oEB6g@#e&8WASyXWI=eDScI%ifuW^r+=J8f3kEz6^@z#_1HJZAosq>PFGO%&5 z2&fU3;-MNuDBCE+J#>@b~CZs4|*^y4CoBW2{eOWXUI^a zaTgg>X}G;$v*EK zw2LEaw^xz@h#OHZAj=uU=C5BN6xyu!VK@D4XsUciV(Q!gs4+64YePyAh5aHg4B{?f zX1%;O-6}WsMQPJQph`cO|CenI=zXebJ6=79?y6tt5qUqsXiH8*`*adL2=5*2@3*19 zdT&cDbMq%rZ*zirdL{d@nlo@A9GFnTwbE^;FWH+CeSYPi(hN!_K~`pQbu61g29D{paAh>6!RPnx<(9xDU@`0`2)rO>w&13~|AqQtKLNN{%YYy5Sd35P{0Y0vqKU-Q_pj}7FjAmtExVaLNj+NGv zyRq@~wopH#i*WQo>N&WE#9ep>mq`O&Y!I461PzP@TdFR3-@q2uE!+3kfP z4H+~%QN<5v1p`%N+S4_Th=Z=JgM1wPk%UirQ?_S1&06!zVuV*`Qg<790 zD{m3Q6ruSG{xOZ~=@h^OIL`e;L#%k4N-bTO4{0jW3i~i$#>B<>7qmKKs^@6lGOBWT z_f$awCH&C2H5WOe_%j%}H{c(XnY;FAqAId+dg)&B(E{;=N@(7lIY|Pmd0JEC;6|0n zmzhYHIPn*ppn$qem71$Qemv_`=k^|L;rRF&1AXAI;Bz4us(ih-rl6n@b#>1r9y<*+ z?bV_eam^dVN9lJKVQw<%azM41E`41T>?UCN3>&|x+gZc6h037ZD%N!2d>Ue_g`C8E zR@EVCYiRKEY1@{5b^f6gI=tk}zKyqrzO*CPuJ}?F2|`d1FzWiE)VlZ8tPa{pP6#m4 zC28b9as`?IG`9+JaxlVwGWH2Lo;}z>_}i#E+q^?RVXL7%4v_IP^b0A*HGV%#>E@Ys z-|xw{qpM(JN{BC@!bwn$>Y;EG=N;C}J6#X7IHYL+=p;z{&|{Ii>dL^NRrwd)22^zX zFM^i?6HtqWnIlaf-eAA<>*zaAJ)ZIV=fdQa^atFT68*ROeMdj~v0UVg&;V;Lxnp6* zQO24$SpLP^7w?Pp#7ms7?8xjAoxY)sHhw(=L%#hU{yi!^gNfktFFjoqnTR##Z!<2s z56)XCKr+cmeEasslktVQxji7(&p^ygd3om#^6s)b?y!Jhrcj9-&qg`Ic>~sAzIsu4 z!b&v50(+^#O7V!zLRaDm zrSxQ27@qyjhfhFah?AlBu+}Y$;+?TGlgq33R_bc>o&4LwFjlYncq8d3}xF0nQGw5G4L*8U|-UsGvDhhgXfp z{_6A+tdD!}kHz;lO>f@dDpYZ#Yr2{N0yZE(=_ghLfhc}qp`iMRcKO~eDfycn6W^3; z;5$Yu{M7dkDuC1t8+UT_OfOYC(gidR;HMrPY@*Iq%eqoWlpiG3aj4ovR(=rGcH$|O zF?6aetpj&%<%-*=q6oo?y=4LkiVZW@k@u=jnrqQRUS|yGI~_QY_o4L%a_{+^4D?_+ zxGIg~t?l|#+=bi;M+ft@fn8n(i>{u^QN&TT+osmijfT>D3C|;NAM?0nh9$F_c!+i>|II z&rnCKpT}^Vv;?ih>PIfDyGR}}$vfJqy}Cl85%?95`HwVnj`AoAZ{9z7ZlLJOGIRZas~9=U!zD~4H0_{NDm^jQE8H$Z3lUJbw+g^&mea(APlG(u_OSNhxhN{IQ`!3Vn)K zIp@~x+aa;B06CmL6e$)M<8j@EEBxU1Z)a!c1bk#$Z#OVO?$VuFL(mim^(>4-;L8)V zZ^5t*15pxA{?T5j1n1q;g<=;u^=EO)8-+5`9ymqP zZfFaj2L9GK`i5oOUlMtmkz7Ik9r~C7MilsXcwu2-fSUpv4apXE`4yqni1DeA&8F79 zmY*ey6Iw~k0^IE?jU#78uiaYUz&S+LtjxS^3>M_`|A>#VusY`2F;w52^vO20YaYn& zAox`#_i3W{rKP40i->qoZZ$w z!90>d0pybk7rv?I-ZbEHxmKH%h4C2x>ax%hs85J}L2TKQ4tkdJ6XqAa&s~^@2QY55 z0K*#sIK=P$LcFPp*%x0Md@q7X0XhINvGGz-!cA^!6s_xJV5{L5``owTE6Nja+zgQE z86CxmYUYm84r>zz%c8(Ubssl3;mxwAq=L5$gu%53>J;C$+1Xh%>H3qsu@461X-Eed zYwPdlieT!QNKmGfqfi_o(q%z!`TD{qIJ3-=#ee7ZV;drA|9hyJ2i$>yfiGJ_c5xBM zc}6EnKlHHsm%+fa%O8&~;jSuvwIspx9Wb_m`Koj;SnLlYT`bl(n*e(T%)g_f18hKR_@uip z`(7Yh8!5$7RWdtLNFYkvq%kbFx_teHsOTtcl$9PoJM%}6(qm)q|BQ$6GKQU{jheBH z44Os!r~B-&l@6qev(l#DZePX;Ai}DK=vJ5ve309af(!P1c4tiDHR!8J*Lqh1vtgu- zC4bP`3cZhTPwIW(MDFJz8-zFoZS#}clQgi3t*=@NP$IS){IMVn4^`M6ETJ469BBK% z)(nOA$D5`gLNGA{V-b=h+llG{nd#5z%+P&{&rofK6|^3^&IHRIDDNcMS^2j3Bj!_m zo-BRoor`a-fXEx-31YOz|AM(p=u+)MF~3h zVRkRnhg#;QixCg(T=#h+Ct;!L_#4dae-Yi%dsXM<{Hh0mM?EAv^T9pi@i#c}Q4uh2 za^e7p9j~uGWh6^`W%0wO&&-+Erao~VhBqSQuU{7cM*6nCUcunV$cV6%<%If~y@bHG^uWn&~kA;zq#`eccBpNI;7?~VY0&TulmIFq&@66D;v)#W} zn7CjxdOejRkiYier39_!L|$ZJ?Z=XZ1;UWGn80(S$nIhFA3fD_9LOgaez*BOcE1e2Tv3I{rujrTX2w=7|Xj z7M7L{lWrD_1*mMN*0a>uDv$mQsjyJ+^MKy0Xjx!5)4+ulh8xvffUU-{=hsqz>3Yq6 z1V}T&O0JykA#c?*)hvN;?51D3mgh6l=sca zLqmQm4WDsM7TkUiC~j6N*1Q((PSs&~!_j7gw$tWvv0ZGcTVIkE^=8RTPq1x--WT(F zLA10*hAE&ZX4o)0J1smy#G-~SiWn`tk0POXM$M1e#UdLSiL1U?9+l$xu5`K1ugpn|F5R+Ff+&wWS@%$`rV}q+R7OQ8z1#ZYht8LfUsdH!wto7z zp!tQWw_?S4!D3wgqhU-zmaMPgO0Ux{T))GTz>q3LPR@w|;}0lB2=7-a_>b`Oy`6kA zP(>(t)VBG>u1oH?`ufUQum4RmTEDuys64xt#F4PmsVNJpC0l_~&!)Ctl4}*Lu?m?W zG`+`0y4{VXM=jug$l+uR(>__kpn=@emyKYPuSF$D>g#u;z7i~CDj%E*KweA$^G_Q`Wdz_-- zDSvY5J`=urMi(c0W+^So(B<#5o{#wsumV8v7V}Xhy@35?0KPC6P!pe}HB`Fg7IE8V zD|&3P`K#wM82Vm#km*kxUkQ9WN;N{vbVXyRr$aO^p2(9eB;HBr`K9daehqB_ZhG*J zgpkQ+IG`6m`cccuzS-VA-_hr*9|Ix%h&n?*0`N?#4n)(V@ps0u94VpV+!n_=(+zlS zWNW;y(FCk$SA52&@@Q^o8G<^X*_m;CvEJA`v>O*iSxAWfwMq02y1OClWq>{}Guep}}AhmW0H z%kFT~eMpDF%6L9o-JOQ5o^3T|sAttKy65!F$T<1mTWzTbyGBn>4_*tUrG04iRDoza z0{)h!po(m10s7EZ(I2#$8_g-rn%nn2wTHWg?|XHMakHm%#ELV+^GN|VAY)tb(59Qb z2l4`3(ulEmCIcGGg-Z9@zF>|yuhBb=h(=$hj-RO&_Yb$%lgm-=>*`wC*%?8;7r1n2 z-Uy11iC?PoF4Xxx>d98X5v(kNk$7j?NWI z%J%w4=Y>iss(=m!DaV!YMI{+N0Jy(Au|g5Kap$QnxT>Xb(#ffux#9F%V@m^f62-$? zl1!E|7D#_z71=BvFj5woqh+LU2#IgG?KVh7HX$C^VPy*uSfy^kr@Rgh;Ly>;r=&=7 z;L(67e@sjn0%dfo{_<-S0a`Bz+WiM+&g|hZ@ejeru%M!Po0LQiC?0qTK^f5^_3)oh zSSIJ&4;z|+CHW@`{xZz^4Op`-Y}^q0JqHBR0o6N~u}`nSh~qw*)7t9kqVIY8V0!IU&^&Y>%Zvf&1>46Q13tABN`YI~w$MiHYE$t+rV5k;p?f?cyOqUlH zs=U)s7j>gCQoAi7Z8c#Pt(>FjJ++>v3GNqi$C_MqwvFmU?hX!oiI*rTm)6!IZ2v$F zJ1dE=oiolNl0XC36gNRTBs~uecqaR=rD%iVJ41cUjEHsj+TZGFLmIkVCZIR5c5*_x z_Cr|++TgiVrTBz|ZzvLRD2bXH8fbxJ_g1pd+`-Yp-wCx-^BDj!Xwv8|K-!9M%3>pZ z3Hil-UW-H$W{X8+2|4sjq-s~3K_QvJPR|!XMn*PGnr17Sn3{SvsBc$bQ1wa$ClTw> zpBg!B#HlD=eAd%^L6y+f(`b)p_(12hwNr7s0TI@dACM0oUjV~Hd=5CXY$F_jmMbUs zqO{Zz(v3igi?&c#C;2oRjPT-HT3e}fc(BWBY7Fq|0H_Z{L8R$yUUvk7U6gKpX?bX9 zsHrF;!k|E_Pv{E-PHPBb$dOh21g-TY2N{sd08n$jC??KVopM_$N~h1xBnYZCTq_RO zvEm+)GttD8PCL~E@Ftdj3CaLVWe{yNHZ|EzR6iDV8nh6&cI_HGJuoa2^Exa8cGqyU zKk8^NDrM@MAJ^2O{eD;ro>Q^gD)H(CjMuO)c8+zH|`GRZmJv&iW&GzkwA+W{WQK93ak%8T=)-j4qU0hu_=|EZo z2Ov-!_-QlI$9KW`Dt!yc*gz=~WprCS*!(4v!sVhbnUGylKEX$aGAg|IiaS`>mG}`P z2ta~Oc(}5jUSgCo;rnGRm`pUCH%8FCZ8oIT1xdV$S(@Wh6TEUrIBCZk+x)p?o}&u>}TDl8z(W@2|{%xF52T$C?!h+$HQ)j z?f~U55M+s-!qsMP&+DrrGnARQG`1?#lp66B*VOB z860Q0%T&iTQNq_T;^PgX?z0boA{+KBKp}0o6#dIHGje0lheOXQJu`3efMRfP5Tl(9 zH-*d$C!-BUjMrjlRer*TEJ~D~`~X8`N1{!o&u+$^l5@@{AaBLy?g3z9xS8W0$fIaj zvwjb=JVEQ|6dkX2d_GQOsEZNSTJu!^Bfu>au;5K7iC~2tc!`LKt&fxfYKrxcMu^1* zJuaG{adTq><(uy_=;?sM&sso-R|`CBV6pK_bgKdbZEtrMQvuyER_U>_GCo^E{AKz) zHMTE^v`64P@XU_sG5B44$j5M0FEHS4WgsObyq?)L%p2V*^uRLCO;l2ncIpD+|r;-wJP~YnH~!Z%f#a#NFs&R){@O*D5qd%z2Qoy@uE^@4@v|CczofP zH)(W%{n{Iz_c1dQT}uCY$4W2%WFrXD$yg-blKs>0h#u{fOv1OE%H# zBilV2vPwLbS4_jqitlEF4jDW)09YR!7)T&V{#;!R3xFE19wXg9YwBDi5T5zsRs7Vt z2QJ=8kDn_zT)uE>u^{`N1#m#CikrcEcYu{^3XBDT;ScE_ZwWGC{ecM^*uy>0(`z3}`uph^!0Du!hW>VA*ujK0tOZqQeZqgOF_(f z4$hsENzIgXZ`=opRDDBV+EU1MkIsfS`Ab+~J)DDh#sUvrVZsTI0%-+CaC@rS8HRve zpup(sgE%zD3`GC=Ie5;8vo;eD-#U0&UG#Cs_3c~)6S@hYW1_GcAqWSIeEhQrX~pAX zV!&ExaB}iVaH;~>TIlG+zkU0*w)O-Zc;0;u{DbBpsUe+w>A7#eONwrAUpd_WJgLMU zI?(wA`LiZw0nHI6!TYOYSn)1TpKef)6wDJ}z8o;*>x*J%X9vk|;2eTDbOL=rN9W&0 zU@-r7%}#~M%+e9z+Tz@|dR`O{gVC+e zXIkfk2C}S-K!Zn%>m9jF6L|DyPx;}yAyp#hKO(^1bpw@meE1bWyYc5bMNaYVq{1^T z*gFaOxO3zG`R6P#Zi{yHa@z2Uw|PY?-lrDP{?C`=QByA4sqhY)yfUcQd%aCN5~*Q1 zw_1ZC7I_A|?4wuj>fs>gga`jGDlEuN;Zwh}KSjv>n)3t-3*+K{%*DWYINv_YXVK0u zOeJsO==u+W|NGPM7${foRH&SqhiH5L->>O$)4KP6z0a;HpXs6tJozC|FH0CF- zSqu-yh{6hMcB6`z{;%&sx+}3V;%t?7`mUa}*<$|J>QG|PfpN+Icv3qu(G36V=`DLs z_&n{7`rmI~`>Nd-U-!_{AWTvhVLR*j7S6o?`FP%dohlIGtlD~~s*whL(cOQZMZ#D- z@wtl?c|6k{pDE3Wcn$l1zQuS;%opSxQA_0fIdgL3f4`^k;(8{<=}cGgX4}i#ai>BU znLx&w#{G_b#{Y<)@_%z~_D)@7=2hsYZ&*mSpBk^*kLTh1M@w|RPUZ^0bcB@W#H&cV z`TzNSZabB4ZfVAyBG;tOKZ{oA!U852ye1r!_y)-D8`0K(+;c<*zaFzXh|FAE_Q;K% z6@%vzELR`C_dv9QHUDjPtJJ((NI*c`earN{%Fy5-*r3J$kPE43#Kc?8u1YE@g}J#) zi;D>pc@4;&cK#c7l7z&aa$B_tR;Q%+MKhAGBNsEAL24cz)uEx^!M*%T5vT#H?SHk@ zdhUC)W@+U$bb{jzD6tqmURZzb6)qO1mB+=&iNT#o3tESdA3uV63Ooll;cA0s=gU4o z!3PHikS`@HD*9xkWELt6uU5rb>DNy?~bX0lb*CuWuI^ za-vVbF#?4Wl{YsjhP(e;sE!*JhLd*;0Ir8>1`bVn&yTx!1pk@?BXw}<3OwhVAsQrS zmTkY+CO+5RgETH}_*%8KUf`;ul{esXHC(|F%)m@9xKlNDR)atR9|vc&&dU>6{r~N+ z$2DK?_|U2BC-?SF1wM3oYZlML_gx0#7G|K(v+TLKIk36Qw5Fn=k?=mQ%*$H_pGVK^ zbhv&q6(ciJLc~R%W_DuI~e++9#rK<6!o{sp>MFkuB!$Z(Cjk5V7;a0 z@9lA+zvb)KovsfEJS?oB>1pGiaxlifb^Gq!6+u6gWq1nU`}W^Y{bn=qw08>X^^pN6 zn*gl^_2$pj)#QYPk;zF(=J%R;18m?W_5@5oL#P892H&TdYnYh)0uC;m{ZBI>m;%9% zQZZ!OxOle{V90-7cW4dD5oYc1VE;mzsb<+KFe#K$j~>(v=hL$>vHkcDCC{e1>5`LP?=X42lH`5;&6IEPE-Qakw&Q0z7FI`x z!*NMRk5`MH=Dn`fzjj^rEsi*^DM{j9*ReeU?PJ%`oZ?fujzLcyhAXr&Jn z1F98WUzMitpl_xbe>3bl;+FQP>Iu*2w((As!&wRy@WkO1fnkxTA$PdKFF$mwy_FGu z@KF{KxtKb*yvseHnrbAn1ykKzN3OQhj`Jjh^T3)ASz(Ty8-j_IXxIP%K(}V( z=vaE^gt#076BDUTl$4wV@(zSV!kqF_1qlU(JD9uujd%-jtQ?L16@!?Huqa#n>F6SC zk4S;}6ZNG_KbJ0Eehza6(6ox#b5$*ZA182xoa?1w{sG>d**pY))9KuJ2x%wxReuj( zORrzG-tl?i(qiO(U0flYg@4Qu_BO|R+hHakmC1A1>2Pw9ladOQNdLgFPy8E>L}LC* z*Yog3di_(S1v{%Uaz0q}utb3C0>Drhxv81ioBAIxek}C}Msh2X_iP}A8+`c#f6fEn z>qfWtCmmv{Y?0K3u)n!%#eR;mKKC-?P6^*<&o2$+LEpVZ4w1TY3JSC$4m0CMA)ctj z&<8xS14Au$E2~_UY%sb{EbM?pFsQ&qI55)uyNA=G*C^0k=G}Gu`#QdV&;0uv3R7%X zbgNDT$EDZnuL%m*;#llNl==k9-peFkf9ME`GKI|FE2Z7UBqX@FxcC?R85z@{Yxp<- zXSU4ypCf}T6N7_+#x&PDL%_Y>7kvc=2T)_I@HILFM8?K4Zl@RPiPz%-gv|07)Uap2!YUIUCE*Gaq7#LVfLBU z0~1$>bfIP_ggMwHL-@TbdWhMO=^|fa86#dIrsg>!K3jcxOS#$rvr&jm2~Ia2;wm8{ zC$I3>U4m>o(ZV}b-Y24KI&A;rBfMelrd{tIo!db!x}AfWij}i~cc7ztr;#k`+>XD@ zyS#e{3-?7}AWVz;oDAhuRSBPHzIy!{yocxL-u|1fEx@oBm0s^da)`?sc>1ZRXMMHG ztHd;zvX=f!p~k&?Fex#h!A3kEA2(q0ba4@SJmlP$w%NHhS*u^51zy{r3wZt~E)Ig( zrrBfC>-|*}Acp5WSvolHspW#5^{6N7$?Ncb3)fLc&@qJ34o*#_Laqe-AtQ5{ z>!8r)oJ@*~oA-{iv$YNQybee($doO7N#dwCiJ-l*H#d&{(6 zhes!EJ}w^cE|lvkYMBzPDNv9+aG#B(V{?OGE?ECD)d?^}wh3+Hv?tsEyWMHInEBmN z>mpEp@-X|gR6P6Hi22r4E{K2zZs#N5MEp%KGzj3^aqW0Fp+X2pn+xkxBdpb`j~~_I zA6r==#rLqofF?5qPyv%ny&NqQ`;>IZPf$or?Vo{&DR?l?BF(nJ5|_r{Xu63|>V-ukPizP<(|~F1Z~gM-f;=l? zz5Yy+(ni8G!V^6UIrV-}u2ts$-=P&%^$T7JR$%G;)aK`SDyX1(tjY;+1|eMpJ^KZ( zepXOGfY;VH)(igW85xa3L)vbv)RcT&e4qv;&_9_D<%zlTY-Ormii@kDvhu*S{%8Vz zhUMku=;4V88qjkXDT=ts(}pTNssJ}*X#jZq;HzHbiAtS*O1*V7b#^-8It7{ac>$Xo z4T=`4MLs9Xi{q5#oNdpUaGT*i|AFA|n*BG_Rk^L^sp^8=5#@>ZOmf)LC9549zXH%Z zh|sb>h6oCTa(p4ez#1&Kyuk&Jp&MxiT3Hl-h7yO&T6^HNd;dzo!A@NLF>}5)^;L(u z&jW11 zmrY2sZ&HGvpGF>*;miMwwRXD2{h%iJE!|N!DKftenX|<5^h-$S;2pv2mh9IHgGGOOVm71$sC2Bk80FP6D#p?+d5ZILM92q)Gjr zA*m_9QmobWE>Jp?ZC2pohcPJY9~JKeCB3hK6w8(GOJDE#8rM)9A)Y+L;nJdwK#RUY zM`!0Hn&IC2Da4>iHnRsD<^CpIf2Gl^m~xZaN}V7&97}xb$}-sEd@qxx!9oCT&sJ8u zVe0TeR}eDY$74Ve{)`h#0;KCVTd0ca4s)A}H%w;yhH(5^iiONsvtb%7FW(R-e_1BY z$a7V&ro1hT_=Pm?!0E}lPradE{G0IY@%6@}tCrbj3I$hNl*Awmnr2RZl#-#xBFq`M&gS&b-#qsC`$7OYOw4+>s6=2%@ z_}Ssw=XLgNq?tY$X59(e3Y>(D^FaLcwhBm1P2HtP?<|=e)U5epO(P0!>u}Tly@KuO zhTd+Clfjdh;P}x1ARU~9NwF#+BOOAm_RU`}0)T1l7r0Wl)y^SAHvzoUQZkDLVT~W1 zz*`13;b5b!<1MO|d}=>QDCPZGnYDgKk(6*9Ossp)can$$EpfoAyfgda-%QbIc3SZo zy7=mLTjbS7-~d-EG&>_pnm#^Knpd`RlYBURS5$7Gan0S*d9g!c%ziv9lV%5JP9)_2 zrg!kXnIJ;r+Ka_}DI4RM#zhc>DjOY8q*@`Ay30p1ZP^S)-<@w+9e!wK=jVt0O&VQm z=}fOT?_XFMRo||d%{yIwp zEco+O$Fn^0)oyo*iewa~+>W3@S6d-+|w)DDS{!P7Tl(c)O)FlHGYAZ3`%M zev?I}=}gdasPlU`YYO{EPEWn5;q0R)Yx8HWKU(|T9@5_yR{dkzA|&aKt&h7T^>d+L zS#bHPl{kNqUx#v;8GIG~EHk@H79TESSbyN~*;spb$>f{sRAlk-$D(%AHV@IsyzWES zYdXRhR4*!rXwuZ ziR`&5^g?9dCezCq$!?)eJJ}`4 zLd)_QoODHGv-Z>O#`x1{&6;F&tuC;pOKCTxutKk~&uYQnFXyY@FUoOrw@%zSOsm#xEQmWb! zHmn+^XB>(?`nYd0r9)lXb7NOycBk*@7ID(mGPM^;Y?4qvFMw6jeyTosA&u9fz_Eym zEWLhx&y}!l;YqukT&=KhH4KB=I^#-zi<*HMMkel7ZJg1xCyG__M6ja?N| z{jpO%%ViG!&wXz6`DS!pvJhC=RKpcAk;Rj||6V_mI&?2oq`eL0=1NXv6mup2;+vHwyIZr zKjs__AuV&Xk!H2KqE?r`pQ2*DeRO%2uq^xASE(B`u_y17$TGwk=X?84%Haf%!Iy7} z|Jga2*#mjB-5nhUD@xfKIWgNGAp%8c0*C7BHOTTFyUNb+XPe$JNPCyt?sbLgSjWu& z`n7B_`nTVr1b=DsWD#Mp-w6H@w*A;PLVD_WOS}D&+R-P&*T;-WjoPd}EJ6!ulFL)g ziWP;0q|9FgKU>MZV;kdaZ6ISm>NKnEE3cn!o8rJfSav*PI;6l-8S+-2aOyt(cE+Lh z>0W!G4eL^K!Sjv_37-zU3%-++^vTyVlx|%>&kf&MH!!Kdy>d8aEl9~C(0vg>E2F50 zl_di4csx9+6c>^zp93s1H$RVzRD6N9I)H|6`C2xGh_R-eh*MFnPh9X+dCl{>)a+o) zw*K&p4Q6%02IH;CraJa#JM-@|T`=@ISp7nTvd;8Gwz#xjy75_k`FT(ELUg@0U0#jq zN8K(POpj_0{leo*bRl~jiU@|ol2m&mbcAHx)mL${)UaS!OrW1^Uf2I5TV==Fp%s+A~I`WYR+rSdDG*((fEtE z8bp*Xm2sPk-fpJBEcxaw`&zF4XN$CMUC9GpX4x{j^0qx$iN{i*x4*TS@tG=X6ZEP_ zulT&<_`c~JL*IR?jHHNc^+owF40SVY+Yj=!Lf+74&wJ^IXRvVkpZz9`l3K~U?Z6(4cp`8)5bGzI^&Ac${6`ZF# zjF{RJ^sqH>y+3wfTyOmLE{l(k&k}tC7hnbe{AK=W4x_QZWne@s?+Eg)(5DO?cZEmp zUz7D&|LstEBgGJM@)&z z?ml-tdeyT4O)3B=$hW%S&v5}!}P^l#pPt2=JRf7DNw`eW%3M!*U`C~ zZ(4yC5Q$TL@HZu3L_o$s#y{=r>MC3~y7>*PLbGT-rs)9#j50p@8!NwEDFzrrH8Vv5 z{5!%yjD-wB__tj!wg178ULO~zu)nioGgX%?dduuP&|WLUX#PZ?zu;sMXWiL19$Kg> zX#BZe@!NzCe}USLXaRowjEt*)8(U63ai*OLMoPn}-^2VzPmPVI`&6Zp3&b}??ap2; z(NXmhROgU@FY_a`vhrzs9vNe9TPya^>%z0~R0!Ww6%v|E-iZ2y z9JG;>rwZE}LtmEqY%8S40=Y10vg_-8R!7UtO8-fzFCwuBj+Vb={#LrQ-Pq?NJx5$8 zjt>3kMKPyiqDw*Dy7*u}+?(3PK0hKS)wRE=_TA?DP%ZpY2i^`Kgz0nu`kHz70$BJ3eT;T2JEl zGDI!-x`}$Z1K#Cb_K6-9u~qC3&MNBUYZS0m6vLRw0-(sue1>a&`F>_Ho7zZfM)KhA zY?EpSQzKMKl2-$s&j4!5P1@c05b>iPz zsZCAxu;}OA;WV+>i&CV<82GuuTl-gO^cBBB)$Gke(ma?Kd3koY!;XZ_aG==dBO6wb z6ouejSL~Tn~z3&w4Z)h?qqKN;oB?V5Y1=NH3S^fSf{&c?!g za#rSib=OnnkyK&jp47qBGM*imcJ;k&I21)(p4itl8f1UxY0yo}sJ}gc>-Q$8ZTtQw ztkm|sHt$oYQp!lg%2~ay-f6O|=4Z)JR(gvIE4@NFT=Jgi&Sc8ilfi}DT=sH38gg>; z>sRt0e*pVn7M4Kxnl4c=V*z_~d_uy1t|l%tujQq7WDQZ(_!?>mdTEEO?MFrfmAB8_ zK430|IL$sS?~LwR+#17J!=1nP#NU-?#J>FvhtCUX+037<$v65lP|to33HKV?T*i+w zHqTD(^YcWp57tOiFR7#>V$2^_q|MszS4`tBmJ&+KyL}p+epT&&ElGbTyO=>?k99QC z<)uh_MlxH2ib>2YbP%@QJZyAbqQ9`qI**CVlq?6PsiU87d-b2iCgu6>sSeTFW3TaU zFi&$Er%5QkF)LNr-~RFQB<-Fx@)3kLY<;s+eN%Zm6FB+MP(c{tjz=vGov7;?HC$<{ z^f3B>OBx{EKTFv&RJv&<=Fv^3`KcJjx|lF&zF;E^^z;6!@~#eq$MNI-m8U$ zdbS1JqB#6qSUQf*6Z-_Q0OtH)NYUEdyt}_Irk!r!k*wOQwamWWxkP09bQ9s<>cY3O z%kxZND-O4-$Llibf;)lK(ZK;EZ6mD%AnWa)?-?L1J2#`oRzqeNa3v&qBFO9h(;O(w z${DR1J)-F}9`n}=UjJd|FjX2HIf1N6CY^%5(9cTeT(P>0FYN)lB9?K)VHPXY<>fW9 zE@F$a`rli0G3dWHG#PeEqEhy)gev$I+v|Gm)C02 zQ`FP)BF`8J;+XZt<%B1~aa2&}Rz-#~ju>lG$PUMnDJ4WjahicY5p^J%CJ%V#Ct9$!m(Rw^%)GUKSkLl$2g#&#o>ni}CW_JU^RvddV#|Q&(u1 zseZ^Be<04?PvbYl79d6zA-~&iT~fKwt)TQhR%-elQ)ASR=R(_J_LvuV-&|C!y;pTV zh9}H6O#=U@0Q0-LAf7&KOpz1Ha&4AlwUI7po1A8UF$x#QzYo(MuK5Z6g?ksy~zBC$(vi!Ky(H8WUV6s@`JVW{7W={IjljRV!XQx z3i3H&}Zd`j=%+ZMyrWE#DgaF4*9z(=&ffS8~ zM&tR{jC}oDtpxe5)lHAOh3$(?s--4PuC%BJ3iZK$Q=9qPrerdN-K$QpCD4E6$b<8$)H~WjWthAEjsW zIZtpbwE|BAH9S|y1$@H0Iy=LIgP-Qy5jhbhjF#}sda$B>dFm1xerv$WOSxN54Rop) z(ZZ9HskS~6I;VJ;k!5zV<$lV-6=TDAPW$odJ!-c+OO#wVzM>(xz|(ZlTi zUtmoFlXrtth_wZmNmT*A9qVdxKruthcIIl?xb;Q{VoIfd0fsuc154lq(#(wL^=OuT zA(O@^WaK6KoBE028=tYRjnV+=rpU*K@Fa|_f=Dgi#h4uNEza4@>w9KP105X<683g> zbh4&k`2MRU+?eQ}%N1v*aoefJHBF-6Y;aK|Qo?moO<%lA8sc{tSE7$siM$Larx=&f3c{cQ6kZ>Ts@=!_)4f%^A8s>3>@` zljf4etOK7-PxosCcYJ~@HAi8-wYYH^6a z(F;RM_W0m(+;i{B_B+QZ>8AnGbQ9W}PFwDSwtb#Pnj02Xw^5 zGJi4mA`|r&rzz^0O=N}a^~Ififq7$)0{FP_+T-l(Y7w&_0Y zEF{>s5GdLvwZMJu@BjDFPuFt3K};!uK?fm?X#ap1hI63wXT41KoFn1BU?3hyQsSnGX`x}U|U7VHkV#GP8eSYGo<7i_c}ZOFi@CM98!4g-O|qEhRq| zBcK_+e#KQ7-%JO2kgL=|d60#NUrG;Srt%zWn$gtN|a0eDz-k6=6%xj2tcLM5;?rlN=4{NI%)E=KG zVOB%-A|T*zC-$P_%SrTu)USjRtUIni1_8bSb^p9sYrY`teoky`?7y=p>;#HShetkZ z$0F2+{^(~VA7Kivrw6Tuq&aG0Eb^1Q0#5+oLH+mI!Y=_Ziarj;467)y?0XMPl;81D z{>aau1dO1jrl!BYx{TQk(qtXChYhkmje3s_j>x#tPu^q2oo94<0A-h`w1HqWhv^_-k*Mn+RW ztj^Yn*2wfBA53`qPTQ)Cap?ExtHR2U4xup|w#Uh{c9Pygf$_s8>m znSvp(EbSeaOC*Q5oJO|}w}TSnt!Kcq8_NI0=&5isu!hKW3CZV#2kRkeK&v?=B_%jG z7-J3jM^79+d>LS?xzRtDo%r<~gYSYMKYu5Lg@M0sKAKwmjdaO^Tfn7!$gMs+DJ{h1 z0x8T0){mN`M8S3rrU3u&KzyMf93=IvJubZA4?~H4|qENoi!gr__N2zs|)UQgbQL6)yeg2Jic`yhp{ zkNo^tM|%=sR;uA90m1&8gcnM_Nzvh3DD^i=r4$;#$bDxDI8l; zXLS`4LrI4so@ZxAZ8|cMG0wzoqB^T!QtY#86@ouK2kirIzdpT^sd&IdD%s5~+#wqW zV3)9gC07l#PKUhb{Nmk*k{66p`{&Mr6Cg1mL7^)e$Y~H(x*II7+>Q$Lt}4pQffF!q zz`$umML$MKpoO%9ljg(R_sV;5rq-JLDkGx--TX9-aOk`E4+6F z?U#$!8{ww0j3D{}^Hz8m=E}M#J=1-PZ-$?Hv_W<8LuuqF=#VhZ49P?;)7&e4I-xp! zlb)WQ49q{9*lpMZ1)~9=;Be(q>&U;yvn)VE04k1e{{k%yq@wf^)VFU8QWX*C zQ{BIRKjBAGa`LK`D~Y0KMW+UzW&}eZcR zSTTK!%eCMu2QX}Y!9P;jvw6SZoLJ+4gLXyMO0PFin=`am`YUcb6W_;uGYlWhYkLC7 z*+<}zvMt~jmCY_X0c9gu4>hfk4~4zVBqKX2O{B(!DhwYsWKb#c0(hw@phZsg)03txX8a?`A$#?0~ z58y)dkJ2qZl8`KVt)sul`4aRDQC@^H!_Z5iM=r8IQWBr4lkZM@@t#?PtR!Dw_Cko0tPid=r3&u0kWlsYL+!HmGD)mU)c_UaSlzF@^i-$k_P z#)a*p*iBUV>GFil;@?tpRYfg7*=bw#R2 zKZ)BpYTOgiH8dBYNG5!_vPxycX^v2lI+h)Irn=|QC})0SW#HGzSOgy_ENq^q1@Q&7 zQ^SGE^orC3qYE?$RfQGL@=m0+4fP9CAT=GN-@`WTa}@`z+DAqB1>1$JyAmQ^O$@Loy z(bOX2 zO(eFOI+YN-5Su8vTSGPyB?uUzxIhKETkq6NZr)FbeO7818%i-c9X@*MrOyxFmxO(t zZJnJj`k54ThW*Y}fQ+sBC+?q)-MdZ-w|T{anzu#dF#(pzqbiM(f}$MyygFi9qDNF_ zXkrF?IwYEK$<+03M!_)NySS4_UF5pPw8Gw@TVhKQPo<~%!i4j`_4OXC)8S@6v^J-E z^i1WA)VA(9EhJbK@bk$xuiQn~b-1j7+x*w&ZaP(ZBlpcaQJDiKc15Z?K5&O?JhC6! zBCt#K3(u`Ht4!A|hGo?y62!81)fdh(@p+6vig9CAdq+nRFpZ#K(4TxSOgBrBa~hQ6 zXlk(~|HaScMfqU$Vd3G78TP4ID4{02+ECeyu)$XhX+0+YQ@v#hi1 zZg*x*2jmKnoYcv&H5Nim+hy~ohg2RpU|;>}j2i?~A2QfA-@uu!R*#G98#Z7#g{Yg8 z^Q=eiotro5?DVLs*AC|E{E5Dv`&Cs}<3{xg*k~~-!4FRK)WJ(?eD3K=6wTVcI3a-k zTVJJ8>O-IFL4>xJ7TltC0mt;z)OIi=gYw$Mq*K7%aoHPk*krKTjGZ*UP&Qv2eaph> z`NC7vVY5PtsBat=Alu2zZRZ7K)f(9f`wYqQY25|?Zq`g+pfhK^z(QSUOE)0j zR;FiKz0drT8Bt+y%ZNT zK!?V=cm71dmRokp$bcyvvFI$*%;@)~qURT9Pv@Lvw2hEq*m&FJ5Gk4yoy@e96d1%m zkGTtA^6S^H5gf_0IG~C#B=V&}rC#qKr7!ZFC)S@Y@5aCfd1{=R&X=CvyU}spH#x&O zY?93ZlFl$wRa88%oMc+A1U44w7N-BYwos5Jcp3MfpkDPDiTCB}4P}v<`j^?Es&5@i zV`)VS$@2qW#*waUxNxvYLQqvrPe6m@#EkJ19c}H)T@A}1D9ZtJxd;%(#XNZMMUJ%Y zxNBj>PTPCek)lzoHq5%tvm_Ew0$bC};pdFNF$Ar&|3mR<_79GC^^>Y}svR_`{FP@z}$zUA)|J799^a#n6^xt}_7&Ni@+DLc@D z4|<$gzQ_kDu_aTV12FnBEp02`>u751{Le~TGjdM_n+^4MJeR{VMcKY7KQ<^{m$ZF!^r=Iq8FSa{zLcKlww zDrMEp^dr24h-8y4wcPb48caDrJHJFUj!B39{{BS0#cc`zTFv--46h^^ z`Q(YX2Mzes9y1Pp-wF4?f`F%^S{(i|Lzhv4oeI#h~VZazo_xSISHAX|T-UQC(x;X}QRRMJdL>+;PfIMM=^CpYviq4->#zQzUeDPC zS`MF4Un80PWGaZm=Bx;n`%Nv%2{G5_biJ)2lhMqO!`MEMlVeC1v85~vW@d)!d&Hwhqru%P|6I1!S^e~6 zie(c8*$qtIwJ-wxKnrM>w=+GfU32VS;Z-%kBbn@I3#d!xve8geXw_$Qzp$XU)v@)! zD>fReDc3~cMu8xrdiYf?8r@^M?FVBAwh{Ch$@4pxchXP!7Dm-@Mp#5CAXGye5{DZE9hQtnjXrSh7Q;b;s^GE9L2FJK-B(H#fOW*vr+L ztd?bN^k~_}Ay6JjoVZjdaXxKpvDjOe)HSk;2iSH5K|i6xVbh}ILh&vu<(D3V6pX4FGL|LX5|Cxr z1~|i|U>v_5tWov$t-6&}(urpuOFT-N+h{v^)*`Ya_Q=S{V3IwqoJysF#Ca)J!vD8i zzkAP~qeez~z}w!@48d5niODu7Q4%oQh;bZ{Ug#tuNX1xyVe1}6MP3N;NT@9}?di)F z5P|&xMj2KJ8OfWQ4bjRb$B(ZO$-7jW`3xFeE0yTSQehop{ z@6QWwDy347fty=XvmB5dSw2<=N_V#hrl&v}$2L^JZ7x(4_!F@jYNKk8ks$9?Qo@P^ z_LarT+jXeZ&HK_a9oLm$|55+VCnr)6T+R@TC2T~dB-%Br| zX9adaNl8h34_C49*!m0S&%Zy9iM+gP6RHS{=*u#OygSQR6Ud?#$ z)J%5NC;#75jZoYNxh$O%CZ(cxExZ`ivf}gv*{Nl%#g()eO zj(p&v5Wpl18{1)oGAjT7uQ0{#f{>Ejh&aDKiszKE@vZx?#865U8}dGk@&isyrD!t^ z3%yart>EQLHx-Gl_IBrq;p3{RC0Jul4i4RXS+q))4)k^xOrKR(SBr{@nm2*`1+qz) zxzvnryywh^KEv;+#q+szdD5<~u3>!yFnE9;cen%Q)(4uCu>maMU~gb`CHeKE$l}?C z5)bBh@htc|x`ZdKF&+q^czJrQp8jrT#G)KLA}YuY1w^_*O1fJ?q+39`yQI6j>n`wp_5Hs4 z-RJV-JPPORv({cS#vF6Z9UvzohKfXp^x(k*RPoos3J)GY|9J2KiWmV3{HB~=j^V+B z4-dqJUnx0FZq>QUDXGq!Ch&ie$p4hT#M!a9nIN&8Y4a(*JFX*6inm_Yc_ov|nfe8_ zvrHmSM=hUBx0k9J>=Knfd3x#x2MqG`Czt`b{+-%Q(!y1+K30lMP~}i;jiW2s2t$GR zeX66CDZDia*;RJ7m+mGwWv<(0V>+&NP}2ARMSzXJ{|E*WtL4M{camX4e!r8Z|Nrk2J(>dl`y&7I64{Xg z%w$7Yva+)7?*l^A8)m$8>u7!a;630G$k-M}ziLiQOu(ZNkAHs`R99DbhNDq#M&K>{ zRV9VPI=#N${mq*<=`v%JlNxGjpX1{Rv9PcR30>xB#l^*OaB#G>wIdn&uLPtN_wtsd zpOoJYf4$y<85$P9di=y&E#crDuoCjthKr+6NhL zVR6w%t=VzDUY|R*@lAVQpC403^6}=_?sU!Rc(Fc*>#J9hvHwF zqLJ{7kB`6hqyl%z(=Z*})$BknQhs;h^`ui_(v>M#&Dk>bi%TUq4qMiDin=`7bt6hmpD=K!UD$tKhOG{B4)4jdDUz(04 za#%xc?~;%%FE4ABo5>f9@bdEh=aRz4-Qb4r^*-iy_@Y&1Gx7Z$6BE;o>_n||iA0uQ zeMQCTK!%w7_lAbqgLr5tsMIvBq(WD64%ZU~LficXk(L1P#r?xc+>W7N$DAvZcPlF^ z!KrB1zmJ2G237{uBMhvPXZ^bm>h5fV$4I{NRE1?&SQs-ct+AygX(4oFb~e?^m-b_Y z+9xL`X=!Q7%F4NowY)+m`g(fR)Yz=e0|W9Ty7IcZVToWr7W8r&8XHSXN-8R%f6wW; zD*--!dq;=0t?l9QaZh*mut`~ljYN`+Uvq`o#KO)FpH}L#Uz3C<3=jxJt;WIJ+L}dX zczhhe)pyQ86E(4S5>47O8=Uw3OEwcFB_$dfnn_u8e!fYfA!5$2a`S|WiVD#T`NZY5 zfsDq+#?i>h>T0fN3D`?NUR5O}J57T5{?VZ2)W4^#7@=8V0Sg23!?CTX*XH2hKp4gc zd*ES)y|py~6QM!+Ygt*{YP&qtE%grxzVPUEIwSUro&=@F_FqeraiGx@eOoYQO*3wPJg+(^E`HX04?ZUzPhDk?Fe8O53Kz?HDeH+FZ?iQU=-MHPnLnLI6FJPd-rbr_#)t-3Phl} zxi{3*)DSyC!KR(*nwo%@0l~pPzkrq@(Bg6TP9NJy&)gkd3BiW(sF1Jmz~p4tL0+s;X)^Q#&y> zR*{zGnQcm`p{co_YO^=jI5|1FUnKqdubeHY52#dWt%mFFk-ZmsR^4DaG|0s;bK zW8*=|Qs?<5pYd-cCCDf!*l}=PuO_qa-MpB^N*8&Xlb#+q@cd-TaxtYvQYbS!yElcO zG)`fR>iPa7HnzGYg^YnY@wsWoS&_wk%OeJqz1K1_t!)oJNqZ)T@b*(}W4RkD1WD^D zG|Hkq#AIe>ZnN}ma$_vg+Q8H;g$!7^ieW=4sp_XHbIZ%wKp>Lzo^ttd)^K$oX(kY~ z|KY9Hg9^!;N6DyDqFt-Nkvy%WHgjX^G~5h>)7r&JRUi zG&MCzwMMET$j~LT2Gch_4&O<0f?!ex1qFp{zH$wIA^(W~=O7mHeVA^CQBYCw^>Ad+ zrF#b)`ApjPvtX1oF2-$TYWHSQ1DZ2VOKN+29JgbkoDL?;;P^NV8YX3m$Bi?ld{ROJ z@~p_bQHmQb^+$z_X9r}J3ZKiY?1&Le+jOzr4|~|<1IB}z)0)EH;B)rU5 z_~3ec>i&1RRm;nG3~FzllcF(Rt3LR>Y2ksXsRD&O(J~FB8{S873|BY~L?k4IYhRST zt^B_kUo}bA^;)TqZv!)Wg2;+Amm+vpyhexX_5#UtgtvuRcUhvZzD=VrfVEYIc@I3C|iW( zGyJ*i@YnB+MZ}7hp-`Elx{5o5qzomX7_S zQ-#&F8H-%1^g{v)^)i-RoT1SG{YdF@ctD-D-@6-sk9p2<){R}G?4wHS&!6v)2E_XK zF2As1!egrpLVN@~jz?6T@;(#EkVv9>iYg!2YrYvja6kh=QPV_R$p($Oq8WSJD%nelI=ykRL6$jqr6HB0s3`s)I;zXXp~0ufe{lS$6M@em_q;W9??!_BD~Llz;h zgzT#!>@&|o2}yCzcnPipWXl!liIFM!?kH|8kt{X}1T$ z+gx*V^M$M^=7oiQyGsx)n>kvR91j8l0SXHDdXG?$ng7htiSfYA&27F$q1}&T9pnyb zep&<7WMkr8WFh5(kwMAVFQN#W0#)XNk@1+Yp|`-2C5f3nvRFCL+6Z}b1g+11BlA(r zU?C$TTL^r5?)zb3QiLdVa=dlk2~NOAAsi9yXZh2-N&!~)M9Xl1nwN*f`A7nXp3(j~ zdzHxb;+K5t{oy-oPx^QWi_$BH>n{o*)aft_KAB5ug}T1Lph{9kDE9Y^*=1y4z#i)G z1nG6(3!M++6`_Ljmapqk7oVQ@A$W?KAExwA= z!IHQ>h!PDK8wGv*w^tRj?({9j?LJcmv24NWN*^=i9(gd<=6?VFJjyR4=azzq%?u-A zqC`E_)Wl@3sH9`S8-!_!{-K})vg|j_d#-f2Tms}eZ__iZ>|A;O%IQ&Cx2T|K=z?CVS7Ruy)Huo4dBAV>PTrQ=H- zZCA|3tW*j(W8dX^@|0E?K5{uJ4eFlBeejpwxEErNAlM&%W}xQf<>iukwD6E9P?CCF zvFI!?=nD6jJ3G5y)jvz?P2_~Weq17N zKJi_I@7DK$J41?*5DI;iFJfy;%PWNzf#z6UclF@D$g6PZju#;ozcw^h0=JSP$`)DoRVe{ruozU|!pDE@G&0qrGxA_BAvP z)4sS=d2J0_@V=OS{?p+5TccK){gp zI-A+}6JH#pmEI)!u$?DZy#V~fwD&_tAQ65mS_C8pn6_k{eR8SZMR-cfN zz}=-EW&Q)Cf!K(MS9fKCUg$`HYTM7BfXcYHtnO!kNXbnwDD~fu2O*r5jN*OukMHlg zczAh{k&&~|jFDJjjXh!E#q| zv0+bqZEY=pm;Zc7r^wOTIt}g9fP#ibwSF5K602(}BEkGnmO|b~FE0=@O-xMzMxTHN zm4pGDoUU$z+oi+C69Ps6(|<4K2|>wzPH3+L`1=LGCb-1JQjeczh-3^@*3{guKX_kJ z%qU9$>$zKAe*R>cDV}|Ja2mV|KriSJXHwVYoR0T69 zXBDWYhq9%!va&J`sM*;anZCXxuH<~7le&L|LrnbT%p?1wj!S%cMOyG9vQ#?Ju~KDJUoaCjtu4p0oa9{kFS(A_IfmKRH1|M$Y&{8N?ae z+1r~>mKuXnm@COb4=0e{twbetzp@M@A=9x!XD27X%>8Er#4au_sT|-+qu*$5j(Rja zL&54pLw86tI;RE(iW?eI{yNUe_#wm(P65Qf6=MiQE>CGN)9=}OhFI9$uYSixDOWgn zc#v{slepgTMtt9p)lJouF;iR5McY?Tx^a8|H4Z9NH&KeyCXeHkkS<3cEChg=o&@%s zoSd#^&aLh3EE!<1?p5K5^iDgW+JO21IIVP|fx|JN^`0vMN{F!uG~W8D~`EQ$&W z3u|lRlau-FmL?_|C59nu-hZi{xR|Z+;>E3rlF`vT#M|{ljbsf~=fnE>x2xNHp9?V{ zV=V#El#@60@ULI;m%C181&>3Apb{&5{z~BV%ztt)R2z4?FZUty%VU??Uz@7^GcKz$ z)0d7lsN*7@BoTljD>EHaQC5!oRRdV4tE=~a_iQZg=2i!y1!}NKlgCA8ki`>Dck4md zWn=9rZL)sxS>@)0hyc6gLB?9*ojth}+sgOF`;a}OsGnryLyp_02PBY`k#(z0nq&0w znVnCtA)zRA=>lPpK3G^-!<(u3Sj0nJR=cj^z1*2zFY+=hGI@ zH=+2I40vmozJ3bsjz;`8OHim4F>QVZ$@vBK zFD9p^k`fbvBV=a?WL$ru6ms@isA!58I)~QrKLLTCY1O^$%z2t%LI; zX%I*WECguVJ2E=je(uM^|J+O8hKAdgAiSJBfo2O+cQZ$ws5#?UD0$q_ge1G=&MeJ# z>?ysB0i*8+LHtw1Us;yzu{^q;O55N)z!65hhG|2Bi<^briA}cN!xhX@nJkxM(Fz`?qp07m#fcbR%{Xh>gQ z->6nV3=YSQRJY*us2Yk76t4y#KJQEJ`#_kD1$qpCk3pGF6_CZ9bvu3hXBqc-&9giT zaHoIn*S*t0nbWp~KK@Tckufkb0&rleJ7)BYdW|;Z#3xcAMlH&pozS6tgP}@!pk_m?t=-bWHI=pTd)<>)dR}!fDao$h1!& zo3y&m3VyN-J*yA?%Innj)vn?aB`n5I$8z`m6P@fRyI9@r%`G>4-G174osF7@$RqEx z@~$GOm^jmN3pO+w+NGGcRj7Xvo9lxf1L)CkO~GMyifwUnR(20pZs15h&aM;yG}%9K z&gi>st?0`M|KZZ3+ldB559)kZ`|eZJ-F8#Sg4QRY zh945rc`F6zr_FijYKzkeTN$*Q8mhxCUFJ*Bp{KZ;j%4Yta-~kU zHx$+|zr0Mj$$+xp&2I%adeZFWZXRv_i!*rVz`m`4nVEW%5xU>UcZ7mI|3Mx$$*f`A z3O$>ABKX0hNS#SHkxTaW@TVUuT;VL%NK>B%!~3;gnoe<(rtF4b;`L1y}bY=mvT z_TuUqd%V@z8WA1dBgT>cwj-yJS|zCNwc`bx*p|Rcrhozr&Tm|ag4P~;j~pMM;~yLb zCT~SOT6V)a#X1jkK!Zp7c}dRo4kv`PkmMKXQU-5e0<&e9R;u(U#SUYyKhZ};ea-!w zboc$8E?LimZ#q@`84q9xx7#M(wzj7Dd06MQ)KHun=d!Vlij>ljxbE>WAysot%63)T zZxRv_-B~n|qLLCe2F5>0H2ECrx=&Z-X2?V7NgcSI@s##7fl?97!We`wvVy(4b%j@* zX>ddwxNyGOezwO7ysuYk+++Q8VkIQj$E!l;JDc~mn&Y!RrK6I-TfP}PS>zW#w|Y)? zw8ts3OhNcrd+(*Zf`w=L!B~t6!EDMJaUH~$qbRC@Mbz~DEcUqqcMo#um0LvTV!re! zbXU}Y$ErLtVu7hrK`rkmfrKw&PS0%Qw(#=14o*)6R?N>Y3lLyEZ^#uf^B=n61_o0< z6yZS9NoUJTP=Ehan8=DO5FYydGda#~ccq5cpp{tTxC{6_HcuHTsqXIXt+ln!44$E3 zVXK04_Xwv%F!gq%4vh|a`J+?7t+_1C#>ZKN^}OoQ+tGYU5dY^*p1n9zaWSrVMnv=S zX<5lB*&~DYVALQ!d74B;1XGO*A7R1c{w?MaLJpd85m#aE*48!)MvIqG2?2&}BR&gm;Usu6^DvUQ5%SyEbq$Vf5iI zT(|gEu0A>&pBq)bvGtVHB$_dM`&Nr^(l+~`H`hG^4i1j^@#D?SP1^nviMxXEJ;;o; zwVhpE)FP=Bma{s_%Ku;_U=5746y;+grT({~eos5N^_J5RXy81QhoSXxlVZQIUVbw? zy!Me}PgIJ?l+nVveM~w)&QF0NYeFrIVUC5^M7NtCr5o>)`lyABYFGC4fpmN6mGgsD zpIW-fs$)n(rDc0tk9_G+H?&te<-uu-0k4%KPhY#MzmGr$ixczGHYSvLJueM~%jq(4 z@3m_fHxf}pL#~{{9_Fj5pWENR@g(cW>7;GN$f>Cz#C~@$dJ5};pD6y!TJ38 zV5|1P?{1Kj(?5Z?PtPLa-MbiZM`JVD8Dpvv2vPvQ1XEb8ao~+lBi(9F)>u z8&>1Lbx#jcwZpj;v{z>pK+*E5>EbTQ>NPyinpZ=n2xG)tTO;P>QTX(lrT=T);lod2z zDQb)}*vKCAdlUG|QYCAGvbv<8sBO+sXblwppiWn z0A(!wTuDqE9OF|{HC0s;hEPdyaaESHeDC-EhIn*?8Q<3djXM3zm?fHWL#`s16~N~j zZBnJl&+y&hL_}|5O;7_HV^Y<}ao-lDhwYu}sJ>}UubHe2a^XpJFNL4+y#U@9W{a36 z%tuI(goo;DBq_AB^|5H4lIhi2();#!C@ol|#X#YPFZgP-!s^xhm5k(1q51q2uR7<& zXBlOX#9QP+Xa?lOyR3!!G`azI5$+xY))_ove|jHOq0p>T5gqiWYWZRatR}c_GaSr3 zI^MQ4lV16mC;peTMeu(9r>ehTeqo(o1{u-Gldvmde(*#`M{3uP@0r@mH5|d1AEQ8n zekpEgxeKD1grp?3YHCARkut)OPpzRrJb(V7!>s=&UQej&rB@KvdW%G>GymwHzR_$W zGvyOcntuKSg|1kFkFD8k{o~d2-$=jD%2Nio{W;ky(?Q9amhy0-C4V$YHSBJw?vMvU zHX$ZBE#co7VI+?P7PHnQeGNnKZFw~2vgHH@@Q_QQs(*+?{&XIAqZMJ-zMcHg8Zo@- zdcC3>U(IM&$myG%_Tc-D!E4We7~O5GSccZ>c??Xn8&ekJVig~E5$8U;;g%}L;ntSlJvAKc_=_kE3S+scDqZ%42sncVxZ+=i{ zeNiG=Rj6&Cd9clP=uhs+E+42^fl)hs@F9I5eE^aw2l|PTH2pmxNl0Ha1*Xh!Ljf`O zMZ0Dc4s99$b%i_-6aKLstpKaehqlTn#}tYWd2G5b^E;Q~X>H~vGBlpR^*sWIxy(Vm zYGGzp>MJxm==e_C>{eG&CE=E;Q1{ap)0%>IZ-H36X@Q%_u%m6hGS$NNuppWS$I}}C zev#}PPmn!Fhc^#p*!c*r2>jHPQ%^5&mW;GSCU-tjhOxaun~XftF56rXChOdr14!Fv zf)F4<5DXrb;?^vkGBx5$%4%r88a9BRGp&6v4D;L&p>LA%+)DtK)Dy=p*IFR{jM>?)Wk!)6U6g#DA} zH^XsSXG1HWO>b@Ww>>lu42D;3ug9iW8Uh9yDKX>#<3@Q|cug|(?Dc$LJD!NZ? zlgfbEeCo3;6=^(%p;}0&ZmMQa(@4SkdW}p*fomS?)v&Y zF1&lmiAl+db!fx0BV@+bBSRF?Zl%Bz`To?&vB?upChw%%2~-L|vyiS*Ff}3WS6`~sXt;5M&jU$a(mM3SAzOdHBr6sR8r z%_%)&E`sNeAZb>*d5%01*IqX(yz})mTV*^W1_*viBsRg#BA4^C=| zNll%AmlsH1K{2SI>>58~U-^`M<+eQYKsI5Mtxb#jTF7-%HYp~T?nqvk4+RezH5wZ# zq#M))pu#Xiz$z;j;C8oG2vh>*RXkry^KeHe(G_(RISsf>QX569z#_&lv`CE6g1X=% zhIu9By8Cj7Uw?Phgxbp;}zw|ypME}(}l7Di%jV)6(rb9aqP zHxF6b?A%nY`L_7G22;=Nk8GgxlE$x>(7> zsgn^&FQWM&ey!0EBizs^ir7!}1u=a_)K`O<0?p;SL?lSYt)5};So+H`*MOVp5zQnz z=gS!EOt|P6tQcuM_7VtELtCdx{UnYJVWEX5NvE>%j0QZdtCN#|2m3#P;;#RQeSUsE zRc>D6zIc*%Xr4T4ak=QEc-c@Nd_8n9O;22xl$69sYz?`|LH|yZG9Val zMZummuVk0iE*$C~i=n6kB7;!I+wnaad3;yOva)=EAZt(iX!a@1UH`SEjUe-J-_4-H zHQ*$zJ3(~|%T`czLyIVA483(!R3vd)o^THzJ_LdVEWN&TNzIG_8a}iCRGJAy7x323 z)wjj0JM5viZ@Mwo&}&V|hU7L1zCIo_>5d12ujwxuokXI@#-V6To?j%3i2;@Jt04n} z1O>5`t@90Dpg0Ar4|`DTI3<$*l|TitaVi;`o*;87ooo&EQqaWpQuMgO9gZ3;)aJe! z@CK3_po;;WS(cmjzeXj+Z=#XRumB+)y`uLcY@zw#arpI=+vfTReVc#1+N>nJvlL^E zpggL=dDz6>#^!*7p7Z^gm4LvHxw$8QioEvHrJEla2L*0#jk#*(OfA2h`N@B9I^Qh% zR8CsRubVgIXeYh(;5pKf9roJ6fekZr(f)9FboBE4{J^ZGO91I#GoqD9nIEW5;Ls-kkg@ES6M!SIGadlwuxq_1Dj|M~dd>fZh6EQkCOY~KRno`sfqm_b zXHNs2%yW|eGKM~tg*BwQ{Z&lq%evE>;3Bt6L*I@enk!+vhPa5jfJjm)$O7>XM+gx( zrw^y^5^2LA%v=9v5J3VElqx+s|0Az%%Aw;KJ6EA+{ z-qXeRL;wbnb&lnp)N;~xo5w|@tk*ux4|`0;wqAR!>yBs1ic8DOK=dPz8^8j70LMTf zbCMVnldX_@`kK$bJYb{O@sA?-#h6Q zH|1la+ib8-F30u4IQb8Y*lU2-*c2ZhCKg`X+Tv2wPaVr2l^%9g1&X@WRip1?RhgLv zK)MLHp5xipH#pwUiyzPh+~LksOlOmt1x&OtFV(T_UNT5K7SAVBW;~$nPxNUf zEV25qv0*~XYBWUdf*mSN;<@q@pR>p(v=J*WT zqnC`=Y!=FI-@bKn;sB;;9xR$+?cm_cYGi0ADlF{e0JIHwe<{mYk*;o)P1bKA9OwlNO-^#j z|7TU<9uEW)<%XB7_k8!iQ+e#UKS#oln4Y+_3M@SV-3*|Kyt_;X3FJN7m;JoIOpx>U zFCFt*b#7{hMZ_l9UGZ1IACs&Oe`VFU`HCr)?CZ_H13TAv4q!Q`)-_m=FybzUEYp5KVqeB#13BE#&=5eyAj1Qq(5A9(wrvc+G_w^ez_Mbm zA>yrl`t+zw12iT;EWeW@MHUYkIoa(DPNzn0dz@H4*BLc1cRHNcy2ja_&7QW$!NrAx zg_TYh02oL|v4~yqLCBGM65lT!0Mg8DE6QLm*6P2vr=}xbAx>^5#o8==ii2`W|B(eg zu~@tT2*6;R*E^ z6Vn>#QSMZUK$?gJ8z0+isFeI^^nf1+lr9@#<8#I&;$7 zIvbogS}~^MQ{Kuc^AA-LP<2z>MRmtAfUk8ZGpT+*<{l;$<;;5af_U-{sUfq{Z`WK{$)_aQ96DWR2EV?HQ{bm*T^6ko^Q@m8j^XPU@){uda@r zPz2%&rtZ<#4~d@1ll3P%&^iS)JR687ogynM$A*~OvK!z{Sz|6gGd9~grvHG7Y^>Ap zl%T@8MluF;m3z}`qcmP>ldFmFJV5XaRk(c+ha2rw#KXwT7|aMUNQb!q;vbM{RW82$ ziHZi3R{tZo>S50{R1OygK{y=>7eRQNaJB{AOu(aqa>1OTe?nYUuUVo8p14`eN3lt3 z*MTVfO<%YS5%N($E|T#e`Y#q*J(xja0wr%a3ak)JR9{?r6AWL*CYhhP!nEGdC&X(p z6w1$WV7NFqD!+XT|07pU4k>lydriAOgMVm%o%-u@MED|BLCXvvSZn1|Gc$iqPiyB4 zO(>)SfaAm{`!ab%roFfpo^T^TRAOMTrE1KKq2FczFFuHB-EyXxG74|{gH9K$h8c}u z7HOBLkYKEjz$NFqKnd>*Sy<0elQJNChVv>Tq56lRej%MYR&=T+=-W6nWUKLhy70z; zBe6giZ{UC^$3tz@U`ACo=H-O@RgP`!PVYDQ4_G2nQc?l}0zlPf4s&PJ=O}ho5-iGE zshVh+1ZYUEFHA}xvBNhA0Zuzrb5Ib+$HsJtirKvRf`i8*@t`JeMLiWfLciVvMW0qiJK z!=&Sr!*cDtvI-S#1qRdaG;1bm@jH6Wbp$*}R_XY}#J{R+jexe!9Of>}Y-Q39O5*1~ z&6D3CO-ehvfgGL7fEseQ{@pPk z26(GF&GzC=<}W-)H;;j|SS8-$Pw#t0Izj3JMOO4-K9+@hee+Kmfy-|zYs7BSlKdX; zMS~jOjF+2FCG)ycWssXD4&|PCDCP$OEX7qDe&@x1^s5Ygx3WITwd;=jg4>P`lmL4$^dMnpvXEwe8zje_D; zgw-e*sjjRX9vhpQ6Z+HWJ^D_-XeU+{h5zLk z4zqdZ0qk1kE(~3(p^4F%+{U^zP{#rof7W@}mAE!SVX#O3gCaql4!Y}1oofZ?LV|)Q zGBUDD5ww0v^jeSrhsEo90`$M41tU$};FsJYhAd)|H2qYKUj1Xb9_AwfDgU;g)@~&L z{lRT{+7WrPQU_wGtgy1bdSUld?3nD@GHDx~D9{y!U!C4meOAo=H8oomhTbo0J@`~- zY&wj2O$%>8j|XW_mJf9*>^ACL9~~ftY|z_YPXT)A5+K6gS^ohf21XkuVh5`*K;z59 z!vl(RtA2;se<1A97hFiOXnf(eh2pk(L_87qE>UtfLR#Kf4U-J3Ekoz)Ae<>G5%}1- z%xgFF)H5vmAwao&k*TCTro5dR6^+pSf2TPdKkTt%8}-^MpqV7Ngjk(EUp)IczW zkQZ7@t%ce(A3uIHdu9a!>~AZ*f%gnWrH?iOXhsV-h`aMZ2(5hws2G9o2iX?!5?-l) z*<|ZYplV`EZDD4m}Qq&xvGZsHm=91qKNq1jmk7AZKM~XKNJQ ztgNh{60w0SHvWD0k58~M_UqNLfNbSp?%46D7>lo9s6`jMRo7slC`TKKZSH$3SCBT% zlNQgpaloT2s$I2|UkTH!RC8dyd{b0<7H2K^uoV8Jc8VLFC_{Uu`z#x0_$Y8@IrjDf zJ*}JkI!JQ6+CK)gra+vY8}m@X1j96s9tmDQ=GV~yT)eVMJ`X$lSYsm@=qW4kJ^dHE zmLhtJ3Q{?wJt!A)>wU|;USoneJurLv;L+8YF#`OJo~Bw^)ZOVg5P1vi&dU3n=lP7s zeEe)3_3f?vVMb$$Ul0+dG>#<9rsYf|9ci<)qPIECpwU!<#VN`jJ-;b{VB?k68Ok*> zM$lisel1Y>Dj_2SLLZi9iD<^%z!Mnj0mD$#n?iT<2KRF>3Ahk|1h?|*$EgsHet0zw zUd3cwcHVK=Ed6?x0K*Ly*PAwoh2rbwo^<-)Zcgs#K{G>7+suvTN*tLZdy0A-7Eo#ZSAdT<`&u5FjC2G#PwKYd=*exOENRh~*V`k2Q4~qlmRMc?81tj}D zJ&fS)q-XL_QMJy@@bU6apS=Bp@{ih~7>CRAPRcXeF=prCFqmksX z)^&i7Zr1#Heqm63QgipS`Hs25W+L3%{mQAi!=FJz!o7U*o)S$5fq~(c;iJ_0VM~8=5%O~^m^G~*?Du8kb zXgW@gj-)Qy{-lm_rBs}^Z8n~`+D+WNy|4KgCr;d&g@CP@L{g8ROj~%_#asm!tW2rv z*g>}};fDH>wMliCS}R;%cA(!>Q#?IiX~o|Lkny&>Y@c1`B^5NMl#HR6ArVm7^w+Z# zJ>(-hJ3q(4#+KrC_1y(Ax7{*ZrGVG{iUY+75I4`(KYjXyDQ2>OfgJ>QzEWdPUsQf;|1@_!vVL-s$xMMDrg;Ek$8o)`gg^TMs2hhK{j@(Y9>@6l z(~>8=R~Vc}OrPrX?5P0PB8R1h(QY&SWCO5ykcE)yW>VaPbe+jL?WCo94B{YQMn>an za_FIDBA?sj+1<>JPW^i@07v%Z$(!ZQXh6<^sU_Fb9bTIygd;9cL-FvupRIQTt$+0w z!g6wQ4h|<@H5GR*|0s`u5f0?NC(mzsGM@!UoZb(($% zbf;F89db@2HAg8Z7}O=5BPRsZ)#JRpgv7-=GC$|a6%Zt9%x1I4JqIRSVi1^N^L z!sFLox0%>jE^qrr4{?!7%d0e>+c?v8kD?geVnd#Lva+#padN&oplT62-I-4K{Fx&J zhU@85AU}I&=<)Oq<(B1@UuTm*#2t|W2)iXU^8VhSN2$Hl(w8@QP}Qu9dipVzf1L?j`hw<>L+Ca720p2fW zWoS<$*+i>^M_JdbprDphE7ewN4VIV*jzJ+c05!L$=yY!n0R`ntK|x8#r}BylF=1ga zQCM1DE@SNq+P!|8eZFB2e{)wZD#)ysgk<__fqb?r!9Z=+;BotznynnBPA4TXacgM_ zn}ERi>dabKcQ%i>-Fm(Wmern4YEbG=#jKdxp_B=#au$|>#>Tg+y-8SnVt%3-fZ}>a zhmMG7Y;KNYgo2FB4Os5s($$p}!*N@4^KAy_(|@x$WQJ9+wH?gMxx3egg`pp@(9vxG zVfNzsQ(s?0Lqj+?xO}Dj#kMd&3U~Frdxj4*i+zclFGjZ1bB5;8J|~|2o{>!9GP#$+ z_#1;`j*gGt*xalE8V3A5FnJji82IGp$_Q4uwxS}C^58svTxY!~iirz_OlpCP{8a_0 zN%*rysl0g?^TUWapBKzn{Ka4);fNXFtMl{e0C56F2myI^)?QUv2}qfdzCLulI!6Q# z50ACy2isd)Ko3sl=k1v~q6@wROYT1`Cqi5+07_t*wyLV? zosp5IYzE+bf%aZYTU$~>!m01ikqWk#=9HDaWMx%?9Q}k71=sWS_U7Q=SXx=pcrFVR zLSSU@x6XS=JcFzTq*f$kWO^DJ{4jBVJ0J793{Olr0~ReVF0L6&OWqsXy{~}lR#dR_ z^YcG@hCx*aq9RCuppgeD(~w+X1%MA+C%AZvjW)N2U@@MmkbfuEf{c1G&o#EvD{9!aSUY-)33 zQ`ALjrg<^Ql%#!av;*DmOV92~?TcwRAK z{T7toZK_^ztDG80u)q+d+}-RJFqMBl1%@gC-1|TNlooSeK!UIO2YDQ3@7G9yA@=)0 z=^@y288C`^H>my(+XQICe^(W60_8?m{T&cUJfOBN0M(zclFuR@bq{G!Qxz>LTctvx z$UytaD0kL5BS^^L%l}*_0qF?PO&r2w4ix}Pyav5G(Ep3b`vZKn+D*$FqZb%B@Cd11 zDop(fNfh(q_q#|0gPmZzUp^U6IJq_G65z|TmkbTE@f_SHPL6^_Z@ zOn^N3{;go_nY9BdWa+F$e4wjlni82g36JuJE&!gmOhFBRN*UkNaV8X(hjvK&fDQjq z9}q5K`uliO2UuyJK?imCL!G-!94->8LP0k2`G0Pz@c}F$V%)e7)HvEPr{8wwZoY_} zn8z&i>%GMsGGZ#&imKv65YZ8iZXN@?sNug|=MI~WA1Wy0Fo<)H8$%XFrAEWzK^_3? z#ohf;)J{D-JXHOn77-bl(SCYzBI+(G>T6vO+|z#~J1c8`&({|YIidJ%Gu%DdcsC7H zo_xn(=&2sJu!*O_lb`@9ig;QT7f+rk%oEr3j?xM}*1qJm`H3M^rpi>RHs*jwMAeqPjlaaFb^j+jT?0(_k;BX+7 zBy-x0k@Ef^fTtlRr;TIiDL@o7h};$52rO&&TfxjE7}x)2O~_^D`E`u6-^u6Bip?DeB2?J8baGW8qA>#3>M@0ITR`wN`?1` zUj5nHD(C@5u=al0_7R}m9;es=;-ej;gL?yojW>ovuyYuUo`>Pu9)DLGwG!p<#S9K9e4`^+YqD$lGRS8XbIBe+N5LN*W z6aKknPLv(q*zrt1eCePl=}Oz(e}^K%Pzi~Sr;{SN5Nc~H;&a?5u!vaO*ce_#|(ULO^!Tdq+59D zvvI(GE#|{hS6;eNXJ2+ZTiyx?SivH|P|T|)V?2+5V!TL*{PZa^QB}wJT}vPi`I}}y zjdkjNd(&uIR7X|kO-dmK<2o1q4so2&EmAEdWuZ2-d@LOp);=wMKi zIc*P_xpr=Qn{fme7uOdGj6CZBJqe`1%L`gU;utifkvrU1lN|fq^K6Lyn?d!RMXbeO z!=zK|uQ(?Rsm+CfU$AH=@}-*p)G~8A)u|BalmMx5aGrL zH4ivNi4mAd-Y|0YT36N%X=CplALERLMlO8v*^v~YCR=l=vYHokdT|n%18Z&cfY6I8 zt+!H?7_zee;XX_O_0fM|?BmB;9}};+kuEPu+Nr}uc`p)9v5(ulb;e7MuQ*`2B(9qm zBbxZ7W>`DYbk7SAU6W6hM}YpteHoDqi?;s(2?}h~RK9-{hCA&Sc4}&|L9txwD7*_A z^xO}==>lL*SqZUQVUoU9%SKP%vvsDnmdE*)$p(x~WKAxWc>E}dfM$-h>2HtKaapfB zooQxE)FJUi9l>?$CO?A-X_K74I6(H`!EX0#B5x-W3>NA~F=j^lsiRdUXA8naaLM95 zLXu*`fRw3P*y>XsypSE~xO4$Z!^3o#+>*j=rh_c?jqn2*b_w1I@>ky@6xGuohuwvz zrmhJ7{1$|)1S-y>uAp1VB;9jU%9<2Jve8EnfS!SE_&=M474m;S{>}fV6A!EB<8sir z|E8^@6KcNHPVc!T5l01&DX2VO*^J2gODWk)U*7BUl*};Im}#lpOdA76-P|{WfgH3; zk1IRT2!H|C1%HYJP(OVAjEUH20Kytb1!O@3Szj?6_rssSxLgg~<0!*;E6;kzQ+E)Y zB1lkgu1-^qewhxQ@%(Rq{!fj0xMG3|NF@AhqV(~^ zA%4v`itF=g*tnP!t!49C2g&-cz$m`K_MrX;hzST#Xqe_+1pL4U(+Qj&g+rx^B$gU< zbG&?R9d$)0@)naiged)U-S6ZIthV@VmULOgavo~~EEm0DYNP_7upMZ*@*^TaH_DpD z*{EcxKewdrIP~*28X9Ad$tn=DR2qsjsbhzD2d!qaZk_ZJtx89>2{rHxUo#8>&T#~h zJ#WAuW@vUcB{_L#XQ$p`n(NFINUO6XV=cf_4tTv~a=h4eE3L@*_;mbVzQ^0)F1H0w zW1%6iBRB?4$F2W7Ee1%?k9eu6;W=v@wr#*;B1#N<8ol7b0BTO0K+u_?Q~qaXp`&j| zZ~DH8{(^m-vo;j{1-s@d1cSGR3RZ(AuY*bRbME``S$`;A%Nd@$1TAs~2B}Aofn^j+ z-`Jo^G$kKoXCCYUvXoB3F%lpUp(4Sg3enFRUHBAIB=5})z!AtjNZ?66@xRhm-ISx1 zXAX^SsZ3bYxc<*4)F3ktnuuY-`#`^)*;@$@55Ifx!?ORXiG_vC>(_uAqUa{E;Pp(J z9mRnRysH861U!ibIH@=ZAz-jz!<2+^R+pDMxbw4iOpM{U(rN>(?SX~_56M&^73WYO z=(Djif}d9E{Lj{bCwko}2no2D-QS!c#r|}jloVn|Ws5dXU2$L0LTNqG@E7xGlNG9N z=_aw6ifO6`Los)=iOKQo(l!vk`PSVCz-M(~h}^saNzai7kBiH}N7Mr--V9fDt; zKepN2+$@j3VjjRw1YLD|u~`IE0ATPd$4}t$;-cyCtn=#Q^KYDa)M}Wv!Q2QQZeYHA zX&+y(Y`K$uB>@W|$~q1y*Kzxb&% zN{&xx9z#`!d%fdvwMe?mc)k=V8-9Mao+{o_y*y4|7I+_8vDau_hvxc$xLsbVKCOQ( zd?`W8-bdlj*0b zNE^>^Aw1{-&YNJQUd}^9V-gJa=E#}I2Vn19Ing*lbM7|W)+>nya|?^tDsvPeT!oX6 z&5bstF@sDB)wG_aLV(Ol@*q6J3F@ED>*NVL>JfodSFu(G5M;c6a>({FUaF7&imnxamU>s9Akd~)_R_Q%=xR?2R3}@D3!HyAX5gESf~n8%72GV zb#H&)#N1Ox<}V@L{LzP+7~tqpup<4#`M9){N9ZB++EyzM=}Ldy;^Bdw_aOw$q<=<> zZQvqj<~PUI3Q_F&6+;4*n5ujGU$X3jHVoXkjAW0$bF?v#qB+~zvf}HhU5BQ%*zkn{ z!<;Ys(NoOwz(Zrc_>8WU9wxbvyU|h}m%dT6b}r}sS;)KbZSt{&+{aFHrydg(}tGFfb@(Vf`_`926B9xty*wj1SG2U!X!zkfg`et5@qwWbEzVB_;wsJvBy#o?6EZx{G=! zTShYoL2i9E`6qzaL8t=r|B!m*F0uqT1b_l1tThiGKIBNo-6ISrEhs>~7ih~Wq3*wp zNLRzhLSHqiXoQdkXal>JpA?QezIbNQ+A>G78=I*}QslAngyY-5g%o{ipeR8@ZvzOj0lc+bxn88F=8ut|Z$v zwFT(xH$WTaJ>HEw_^eGYZEVbe?+5Y;Mgh>(A2%`${Xa${C9-FYoG;wH6U$5Zx+FL?_1<9Zoxtu9OuPiU*$swh_S} z#FW$3)s1l=GO@PKBE{C0;kx`xJUYGk+J=>L%(B4ku9E3k=j3$fuKtr_6QJau$CtQS^f(7I^Za{jD;0e zB*?^M1#kvQ4Mt|D)#|YF*PTmWx9ej*+Puxr*U9XTHf#Y52YM(pb*HkCmi_wYKufvy z3#~c9J@fybrWF4&EG+E80(kM+vlL106ciWh7L9Wxb8v7JmX^9mXp;cM!e@W^@?|IN z*sgn;nnT&yj5LlmUS8FMZ3-;cAZN(ER8}$%(>Q-Lc8}=kN4{@`-=9Dl4PH^b&qjJm zAy--W--o)LrD9I-l9pU-Iu8V^1;GOV?gq@y{!Ndv154p`g7T`j7l--{*io-u{j6TB zVr_lHWmk;^DKhJePX7kw;ZLzmPZ4oVSIqGX#`a4oFXtmAAx}+83RzoNSdc#3iXXz? znszLM>>hTGo!#A_`A~}T{kmW2CQbgrCx)vt^*>}yURzMdf0=>XtMWzX#Myw>+dLv2&2EF2Y58Y<=~1p zfXq23X{SZ}^Ad5Zg@ulQ8tr`8bW)Qdf8PKkcp#Sh0{6*n2M3NMNingMO2;NXyT&R= zW_#%7CK`0)6&!r7Mr5a;6~c^mr6GBbkzNeg?H3#;kX5i09(*t#?g>gHjZ6qM$$JiR z+2=xEr=~1Sh$*iS=l>&4LUWdkJ*x^P5%#|e>1NwoTM+4!D6sY#c(z7AxBwr6?s3D| zUf`C~*!Z|b0B989bv$4pPoqOCdG%`QD&oaZE(3;fVMnbjaU_45O#iKxCA8QaKqK<) z*5E+-r(Oafc8)D22#5g0O{9r~1CW@6WO03cc5F<3>5U;^pg*1p12+wIf|;o)>=CwM z65e6nrk&^6H2|Od7oc0Q_fp;-6w%k!$#Hfaf;B)t(hkvHuuQ>ac++_rW9r&av3Gky zdb$fu{KT@?vLdh>pOg_Uc6P0ak&IOk956nV~Mf=#=Iksz>7n_tcpXVO|On%s@mf zf6nve@P&{HR-aR6n#8oUnD|RK0{ro+H>bg~{`1EVXpC+LcgjD!Np5%jK|XonH|NRn zdDye<`TrJ!y{aHK1{K|Ujl{#fVyT>AJCIX>lJP|0H4)149T>=!c8q3>&#dJ&_`as5 z>Fj6)&Wgt2!DY7Lu9An|-il`lOiB;FnvT4?sbP|bP2L8RcI=p)<6lZ}h(hF)5`EB(wA%^ike|_dTbNqi!XgVW_P)mB z^#)WtT6z>(kHI@#C>YQ3Gal7@{?hOp;xUJ$jHRDHADwJ<7syYFX&_D@uSbpcDiKkp z=yGo&E5xS6H1W+qFye?G*P4O_?GtqAgYW311qB6^B{DfTfAp`UF@sJ5i@;fht6Na# z&XSaj9ZC`Wwe<2Hxok`mD(*r^YXkBllzu|E6|X;j zRb}P(2GNr#+ldym@?%Ba$)b=i4t^zVqTj$VqB}yoaUrLX0RarklAg zrV@R!%pwH*bT!)YIsp#}fVC-XBrg}bMuQdK@PM;X5b{F!@xoVo;UbpqViQ9AS8g;CI zC4tpR=N`OQjzH?*3hpnXM4=UztjI$ZTz6c9kH13R&PeT|sY3~pmjWU|ua+pFLl}nb zT8IyLFr|RX#q?kOK6=sypxt&KCs09P+JWBMR}69k;d=f1?cGNxMiKCQECnvpcezG_ ztamFq5xj82j!vyMLHhYt?GN1Qp*;AhV*C&Prd;*J%eH9QBKtP)G^Mi6*5JOqrA8&e(4wQf) z>On*y>FynzD}3JTMvTKO!v229-Ie;|lO}=qe`BQZMV@ZIRZo?Vz?3lb+Ty@4-Z|rl zyFy5)L`B(1WCsaSJJbseushjmk$L23v7=NkgZF2ALS^LELx)|TGqhEb>2p&cVVkZ# zkAZ`ccumrbWw8p2g2&X&)02jlHdkgyCV5`{I!fHEhgn}KAKkG|wl+R4m9Yi01 z6!%+Y3hy4lPV`6!<22wLVL4oH`Cw%8tl5w)FXcg!jT8_ zLf%%R$l$X|4>Nf@;c0w8O~B?yQ=$ts1=VF)j8y>e^nl)Vg(X{>P+H`@omHskuAUAed2D_ zK?rTl>DIKe%1KQ%QBvwI@cIp6MMlFZUy3Ay&sw3+AsBJaP%dkljR|Xy9fMk&houvb zknrV#(2uq&A08bpy(A-3O^%?m>$e@^6I`Bsf{9n&PrbsWK>;8eEiG*r&3{8PO*n=b z)7lL)Ex-g%2s+0|Go}4xiwW}};9_&)w$^EXhtoFbcDgN zLOt^UQJxt2?a8~$ZJ*r9RTAa`{|wIm%q2lP9Z{ms>u>$@7xm*4Zj<)|9tbd1fFI)@ zl2IpvkvKM__N+cuC1S%^w}w{0QFsc=1J((PtgW-o)jJ zl-|S%-FnV9s{Z2R$+qbd_W8GToLhQx*OJ~SDv`J<@jSVT!5ndkY$t+J`;zvJ?Cjev zj0w@cm*jb(On>mOUB`&0Bf_}BM!S33_Pcm$>Q~#PPxD8oW2HLB#Z7zAxOh(fs-kc# z%TUZo5Y!y9HZ?T`Smc85Mg3C*z*SR^T4BZA%nGFI{+PjXr(m#0sW`telY?z@Ut|Jf zn>!)ru%U74`o6TlL0xX)XMkPU&|ot4e7eFFq!C1hJlriy!w>Q?xHay1;vX4 zd6Bub)r^!0eo8kBi+RJCLP!kZ%BS8`Cu_vy~eYYGhu9W)I zr5bf*Wvy#yep&+CR=gt>u}ljxeOotrp30Au;rG5ExzqoQCp)CX%CD>rz zu1=$~74>SThH?MgSV)jZmf1h3kGZ#prB%=gu?#*8LDj~{<0K54Ezc<*2x zksQ0H_r)(+#>!p%?3c6?-j1ZP&pE<^5Fj$ri(8fx6uNnphp6D8gL+eUe zMO%idSYD-BJe`b+r4gZ4Vov)DVP0t+xpe>0v(uQEn9+Q2tESLVQWBX>SP^f1`t%8o zC2+QyMD)*$jxsqsNtN*QlULt_s4r4G9v#RSyq~kXv&*jJ&i1lp-Sd&B-W0w&lB!^Y zFN>exarzC=F?V-$g@uONJa{0hjjZ)vDk^J!f~%2>dODVHRPZ(*EPQosk^B_^7e$ia z$?0juxDU2dr!%>iQA$>3=J%2hvj7e%XpkO!y0uZDN=Y6#UOoYLlRGvkqyCRC04-`a zMMPlJ_I&+HP5{dN9}Vy4o4Kfy2(7JE}GAAM#Ta7xRM)rEe>gu48sx#HaI+ zB2{MXB!hzDx_@$F9_fFtQWHcwv z;ey94EiIK#0a7+$9!9kku|B5Nb_sz_#G&91E)W2<5l6V+g?a`L)Bp3$X#=BQ26W~@ zr+eSaV~5k!-H_62+ku1c8k+(h2d@SnYZtAaX`Zi)D(3LsYX*z4JcQ8sT6+$@7EUzC z9K16Bn702!%h1Xhe05ywbfPUdp;igv_~Q<`-5LiMMz`=hh$>mavgD~fz-JuIwVMt)XXnT zy@lb}dhzR2((;Dd+7{akZLnUIH>-xEie6LY@vnUp;wxS*au(zd4W&Q;q3?94f#LvZsb&p?tghUwYoaFaE7ZvT_WINJd3n!-|z9{%I9sd|-!`ikn-x3IYpIv`M^%MK-oRPi(_lp@;lf)W2i; zBE+o{RgXHI|LX9EMbz`yU{MV1VlCLnV!V!tV|wY+o^_2eE%<1H(>7|O>Nc0-PSI;e zojW-YR{o{zp60b1Ow543f)rvQATu2E=WF4R(B5T;mwWb6lrKiLW>9^gcyzfOjO{#e zHjU%oA{D)>`zu84pEhNNr0_oL-LWSx<1)iuWMHMPt*U;d( znkY6bI%=LdQDR~%F^NDc0rd~_&6|6G5RjUUbx}dNU2YGVt340uQqxeF8_Uaq+}9_b zSNfQD<(FJqoNUsW0(hB%*0OW?>Fy*6)(1(OJQLkZ>}1bGn@3Qv59@^fa8wF=`{8)! z5c9C8je6?(3zeqNV!gsgPz1s~0$|{`a*KArya2~i`mMQot2~hG_3R!zj~6^<4tyXv zZ3iZ^{6_#>%rV`*t>qwFV)zsDwHnmU0?ruqr=`p9yo>tRMbE|be;~XVJ8c#EDC3#? zsNVRAhMU7%jEjpaaP~wyGrzpAoVX{6+|DMdY*8c+^J&#e zS_D`64YZ)91)kq3i1d_i%ML~)=M=>0o1LM|OR-H(i3tunWiuRZ8~hB^GZPcQLFA9v zK@4GXM#dbdOKjK}8PQl!qZ~|tWB3lV$VHLGk|PtHMUYK0T`3d5E6E)2PMx4$E4HCr zG1J{{afJFOhW~E&){7c*$Q_kb=qk$`JdN#S|#9+iK%KhcH90g$p) zlW3XIjz#b_cQRLtCN`3`*qN=H;<-er-x~_7H=ZgP5)Yl<&Z!_Xj@eESV-4DjT>bL) zxRS7;D2Gt*s;1lmS&g#`vK5hp#=S~4E`BUZQ!B6#Y@N~vTKY|*t-PJ`dyeg zHiCScV@#h*%a*c`a$|mXS*2J`ZE2VQ$#sK_T@|4}B}l$XK>X6C{!{!@zxI*Xa5tI2 zV|priga`4{_X;9a1s2Gkv~|LVNZ|xX-}||zhM>C)&wJdR{=9|rlf;Hrn%V5&&6E)8 znW-t9&dB)q4~fcCdYSGvL@$X~C`^mPf}}czn8`%WnYdHXN^USRLag20kZn-ttwTB` zO1YWhiwMi=%d5*mzxwU?dqUc}I{Wa^SIMsSg#I#oER!>*+m>UW0*mFbme@bEm3Q)n zvt2gHAc!T@j?3T~aFA#GX0T^%LWv%Gk84TPzLCuAXLeYL`o23&CUxw!au&IhPmwvT z>F#kit8H<24z9P6)Mpr;j<%SmG!+-uycyAR$^@3MOs(m&y<7lYXAUA!J~KxS*S&^n zgy&Y!C+V64yUQ*!?lre7jLXz;caR0|-ho8N<8wPY^wEDuoU>RjU>YZ5N0XroCM|I8 z=uW=pXrX*xF}^qeCq_q9sF5fg;X@zcvG<&q(-T`XVsELA@EFK*qy{AABT6>!8;W`z zZtb7iW`~`|=dq;95Pn6EEwZ%GX9{H9kX^qC67u;FKt!aU13 z7=iG`+K>q8neU+RKBP=luSE_H*#xE6UK;*QDhTqKakFbdO9sYSBMGYng1Ds(yQ#PqI0AY1YMee5;n)h7V~BbbjJjXmYU&%EP(|MFkU zzES+0XtMK1Fz{7fv>=Fv2-4)*;PW%6<4}_3XDY12ZIPXZkc!)W>mj#U;XtR~)2mPC zu(r4|ImYG^nqF=-WYfY@U^*$-krq%M*S{huU;nCGE<{=vSLo4;^fR}UYF!6yIbFiz z!Z5e*N{;zMeoJy8Zg$0s`Eh8HOGNWH6B(vk@zJ>716BO4IVDy&dRd2^=?&IsJMI7n z1rA~$q28v+u+le$MR!4)R`BMq_8s774^4C2YHo{{ves5!xfO!WIeG0R>1uMiR_qE* zsYLD1@Aa37C;V*|xJ#|-Qbe8!&KKRaeqSf2DUF&s;py$|;^1&M?;czgV1B72fwL4+ zf$w4qRqN#*i$BV_YRA76>Jb>a|5@kY9Z>>W!oA6o%6n9wxZn0@eQHBwkcf$4&F*)}A~J*yBN)=?mY;bnc}l}8Eu`iMPqXO=2biVxe)w@Qsmh-Z{7YxAbczYCJdDmei zBUZjqftl&)wwBx&iL1r0Z3bEP;abhs__Pu%k4uR;x+$3==$E(^JY>Li-O7z zhRnl!#)VRq=JnGvxId5dV;0D$~!WRy%H> z%I#8uI?wnMER4DthkKREdXc(@SDQIXxSBzaO>~o)mv=}O3;eBthuh7~QWx6{hX|?7 z3xLJirj+fvbm}uJ!&R0KLU@F8ufE|mM0|WwsLqHVb+XT<|K2~1IB_(E^UCKKdOkce zCHy7HapHNLrvj%BxOosiZXZmtES8Ocj}RPOAUD?01^jaRE%pAIZ069L!em1J_AEX0 z0Y%o~+RFK`dnYY;6hcYtbOc#4@vk#8Gw;0QxxgsYm=UN})Xmzrt-K0nxZ&5eC_D%M zNiOft$f^E5H3u(M)jk+f)is#n^l15yr^=e$26xM6<9m7Cj2Lj@rk2Jv|E|2HK;gRU zC8;Y(DJhO1w;IWM5DuIV#NN-RTZ);SAa zH(HpJM>o3T+%SPSIPbRE6% zZF)hHW{pl}q*=l|4j#?+qeXL^SQD}@JrAhp5#(dSH6=5y_hP@;>GNEFAhQV4g}BJb zk1sDgL)N$;0nV_3^>=L*Pe{VPz`4cT{X>mCAKGSn^Ci5h0+gK$7V*RzQ&ZjZl890d zHl3jdR3ZpEkysXax4+BC*U#Q@!^ZC~tLA7(^Epb}2-++-Pq>ZM4|(kkjBO+f!s`o? zlV79p?x?!#R2r?yLw^ODPxaTacXKj)*uJdRo8Jw1*{1Z5LFBv%qqtY51W-}!F$JK{#i695mkDLIRuSA+EaBeJYrIJKu(_AINCr2< zg8XY5aaoaHJp-^zEL6lz_a--U&l4DA15|uH?Qi4FGD@5O84^}&b02RcP@{uw_$BV= zoS%W*%+JeTDvVZd!#qU@$q%ogrE%E#QMbdMG3oixOwz1d@0NqU`U3<34o;od^3{v# zRF@11XLP~1E#B4eK^!v0PYaC?dbZ%^?i5`{K9jB3_3t#R6<(#H(qgIp8nDcsE3rzW zEamU~;oeR2ic-hr%AbZXwx-dY130NV6W@k!BUs4cHm)1d zUe~)any4AxCCQ{+cfIp9fh+C~zET)#py;rObU8uk-mQ(_m)c3-4;$4u=z(XE4MX|e z$hqh3t?ARU_v~${9cM*F=3EN)C+wHD#29&(uOr^5%Z968!cdbp58MLJaEnW?EX04V*foz@RyaYxW56P7hDd3Z~ch0U6eE9?v>o-#A0T|0)_9 zKW)IG%r^XjbwNw&oHd=;so+`?8UK(Xs-enHFVNNSfR%UYP8V;Q3Zj&YE=_{rzIvG2 zmZwUPlkbx>cu7|TBrI%Qk4OGEZ&n#a-ziLOvFe|EmX=0aJ2rWXiPvoORCxHgqKW5n zyJX#O2CHvh36G^YP5pGIoedCOWKJ=o?w0!&cvEXHg8;TS3rB_Yl7FJ2qm%k%HZnLk z2(v8OA=VY`ik1RM5hk)4e|qo$WuA=o6=mCr33!?H$+$$nIrK@t#h0sqL4d2YPY%%G zEEyW!O=JEB&%@*|ugV!I1s}C5f<~yK3Q= zQl?L;%~KLhGc%|qH6%YP#JE+NVwbjCtvZ%Jz!y5*Dy?x={oplqp_$#g=UQo)CaC%}Av`3+@Rx9(_N{bnL!|_8Zj|BX~^$lJUlgZI2*9h`vh=8U4L+jSJLJXVT=Dr zl@mr?kCHDi4Qx%1wsb-=E_?cI3YL#A;#V3;CmF>!rd5wL`dxeV!}R#QRtRh3=(xw7 zb7UTK-f-nJ>oeQ&7eJ)QWkp3tJ0n$8W6z*232WL}oA%A(D;hD(bhnC6^>YHwjpCf7 zop}jJtjHcq(`Z#ZV>bg{3}dz3r(Rq4!%i{kYnG)P?%vCrsPT&AcPcQ~oRGV*K@K(O7|K%)- zrv!HIoSa2bQ7`ahE9MX{iWHL}0ht7Z4dph^P*YP@hG^8xKs?0R_osx#q;{kQufNG1 zI%R(cH8IS%Ep)o@yqE$I8S#oUi&0{Jku^-PbH5Y618RRbgYKG`IC_TbJM5IdY~BfR zpqkQUAKoVZ1?_uwwD__c6{*hNc3XL#4Cgub18GDY4(D?#4K3%9!z=wSb9k?Jw*@6k zP5J`_(XH{lTl?0ZiYK=)jDqc|Ns;-|fv-9=Mkha}zvMR2H#T-KK*Ytw=t`B_Cd+)N zskt2oy>U_`pOv92c%(+N_y-M91N%T-7_$A_OT3uZsPe|mn>QV?mz3>t`?JQ`K7RfB z^?;!b`1(CKs}OJhe3rSO$G|8NB_P2ti`DgBw#R(jwBhU2P*+8rT>jg))268cW#8!b zK3`rIdQ_?*hDFT*s*1?I%d0<#2#P5=Yb7y^}9ci4Bwr4Jk zMa`T!4HRpTxR9tkR&X-f%=n0i)E^lz@Lan07^X-cKa_4C3Ehd4$y5j~cfTjlNW~!m zw;N0tRrXd?#F8)^&YkLZuGf}+n?c^Q0QTXoocckW9jKU+BPR_YN>Fx{R2lPwCPlyIM`2m=Qk|{(6sjy44w3E!Ptp*R;^VRotF>yOleYNDHgi-}nBtcjk zO;pm-9TZ^FX^8#q)dE5+5$#&NSbkBCCcf0{Z+EPRbhd~WIRYM^S30p1&y=vnRByCp zDKQK$XvoB^D2tokWI($D;XJ6(yDmeJM@1crHOKbfzJfkJgR(lsQNdTXk-IS9y5;vg zQtxtiCuJxUe~%Ygz_8vgBO_Zq2~40+|L{SE!mKeba6m)60^p}N!^7&Ud5+6)+KGNb zo6!v>tjE`0586~7s6#kp78WQ1ob-e4p`iD@F?9(HdyUMks34~5mmPibI9`s9MO9Uv z=H}_nnAGNAg~~swyl5a%ZC1xRAnJ!)^JR>%xYqA9asJ)8EKU|4i}CUC0gtDw32-*( zvxQLMzlPwHM7yg<;nTjIr@4~+E^Sh2Pll6;n6VRz(j|<&XZ_>!-TlfThT5OVZCMdv z!>+rcIiJU(+_(BDW2}-)_w8-=_Kq zCoCI=LS)LSybc>4)nx>EqQ`fZzOYOBn}b`Mo6i#eCneBSJB+pC>k`8iH)Qai0!uHl zRLFPTh54}s130b_L!gl+nl>%VBR&Ay##pb~8*6^^6Y}u_hzGa9(FLEe8oy*= zX-W9S)z6QeKjdf-iuLo0_IbTIU29`4dc_79IUyL}1-TclXjaz}T#L)kTa2BeF;gFbrJl{(%0@fxV zVXeH9wL!N3{KX46Dp9@UE80w!O8x$q_T*|hfBkiTPDTE2R0b)zdwji9zAAKVgR9{x6 ziH!=?fzpU&Ekg^Yt$}jf5Q4)~V3sMz`ht)SmAMcwplE|-OJfRD=|rwo{S69U$$ucj zopz-T{0!02ctHu2RZdd^D;vc-{z2dl2@enFSoqF{Nlon!Io*EHT)q~@lLA^DFZ}(P zqnWPmkBtrZ6I3)bMKrQ5zd^@;TitglV_$t+D7>`)#g zE_~VHGM#F(hzLt<+i&4LUf;q2GRP!$JIXfv=h+Rh>CWTaR<0yKJN^9pv&oT?6Fq00 z|L$*aqpbe6I3UirVMU`w;!v^Mx(}K*JM~YHU;!bxu*v(|be=Mi*u9H)Ln=g*$0BcC z`MA5c7j_I6RaZwxBdBvLr70t!z@}RzPt_6~GqtbQy1PmV`TY!Gl5&PiSr!95T;3f# zP}+q%_g_nxN{eiBNuVN+zBbjVSdiPO`KzuBa9PeiI(A-VCWv~y$cB>mqF^uWf;N&T3b#eR4{!MENw3;^ zkrj#htkZ^kETy|CM$c$k)fH49hcIvQk5!kd1;I3=#t`0`5>$gR%rXOtJDoJbp}k++ikcf{Q{AhSHrSo*30EwzfVlNDahu40m1} zcC)e3p!BWQzVfH+6N$qd^y<_OrCIN@n8cf_W2U)YOH2VIDu~f7cBp zNWJYv4Nd>qw$i#I1N$OLWG@QI(Ova*O7si1mzo+r>=|b@P`77fWb~TfQRp-ObUI(7J!rL}d^z!!Z<1yEpt0UDo*0fK-W zxl|FtSoHR%D2z`|OdN$n5o8(?FL=|NFpdD*@sP!j)cp;6pM$=RhLTby%A@+J7$WR( zA>D?~a!p@YUUIfT-(_4q5ae*ipLy98M^uWK)!~q}XRMT?#ge2!3thPK2Gt`%N!dZE z=PO$-o{d9r>i8iFdUGdwydOV)z|=O71t4y|ZEl_&A1C{q2IUet`Oo?J3aBL@Vo4i+ zl2RJ+NL-*c=J0zU>(~l*sl=zeB zk_;sBSesBY(81P3=INigNhoz7v*)nCyL;Pq=`VcUznnQ5QW(m7ITdfnHE2iNokRI+ z+h29YiIQ_%@8-#o%6`svDbE5^?>SFglRgmoG4x9EK|kt12E%qaBf@fUcj{mH!*mX= z=0W-S)<$E|{4l|^|IIke&Cxo)KPV`4`W1jiJZAM?a3DZN&MnWMYC4JB8Jy*=Y#T5* z(^rso0%$1VB~#G(=I68KlK(7B%Oh~1K9$oI)Rc3pG3M^`a&v2q+7^>AWGDRscCSt_ z1}EKWbJTuaKuBt2Uo@#Lv5Vaux}7c+WL(E2v=2(DN#ah~m1N1mNzQ5PrR(l`Yv=J&7eq&`)>SwLzuej7y7}$!0-s_ii_v^3qqrVzg zPDF8cME7MD8!Ym9X9Z8brq*+`E28w-LM<;wap2XuH5cQdoi@t3d;5ue?WSei-0r|d zm6ax`>n1&q{f~;3`9F+9y#fr?D);cM#v#n&-tu|o9)Qqi9!GlLa5F@P#)pRBwD6~~d4ks|Hm+q8eYT!ahO;_t(D@F&qa|1)nHkvQf7{Y>FK1-Z zl{8%VWixzeT`RJ{Yc0z`n@DKKQ@?$N_7H|Ch-M`#e_Qr64{l&xc1uCNTlVbx-ElN%tURYl1Q@@Bh%|l+h2bM$UXw#x58MqNd#yf)f)SIN zHQRBS`lNm~=rLNT`C{&-e%j&zo|mEFWQw5eKM*nOPeC+ziCP{x`+nh;qF#5+FMsWR z1^>x~6R0Q2w1+|KUT{@MQ&;xx6818PE@U%vynim1D2J!YI&^ztD?#HrM*cc(w{PLA z<$WP}`ug}?GaBAZ{-&4dS3h6?U!{EekqrZpV;Y5OD^Cv-hCg7grbcPkzi4Bx(&pog zcZnIV>wn0QDKq)->HYskSl@-+g-u}dn_;+${H3l)aQB|J&)2!SoDn#& zgdxt_)SS~qAzaMWTtaGBk!||y{M~|m4^-;1ncCQ&DE86W{&4|vZSA4EJ3EZ>9t&t7(u`C5o94m?Ki*gyuhS>_{hnZaf95lEhz&Gkxh}q_#01b^#9e7^a+9RUp%n_M4n5IE^<(=CAI~3Il_U0
    !V+T1_nm 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�W=uB!Pd~kC_CadV*vuNC_%gGjiDUf8&By|- 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∾̳}(U{@Jt6E}GE&E$X(xVO9Az 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 diff --git a/core/attic/figures/gaia-putfile.png b/core/attic/figures/gaia-putfile.png deleted file mode 100644 index 6ad02a5b82ae01be1383e80319f2e7896417497a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80323 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%0DR2Wb-=Weg-SSy*x~NJsT@5~E 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 k`GPG;SucmuySp_Y@$KF1 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 lfe;Hq9eSCBgVnpEfB37jV#n|=(pUqr8J" "openbazaar" "" "" -``` - -The URL can be any valid URL; it won't be used by OpenBazaar. Here's an example, using the name `testregistration001.id` and the GUID `0123456789abcdef`: - -``` - $ blockstack put_account "testregistration001.id" "openbazaar" "0123456789abcdef" "https://bazaarbay.org/@testregistration001" -``` - -The update should be instantaneous. You can verify that your store is present with `list_accounts`: - -``` - $ blockstack list_accounts "testregistration001.id" - { - "accounts": [ - { - "contentUrl": "https://bazaarbay.org/@testregistration001.id", - "identifier": "0123456789abcdef", - "service": "openbazaar" - } - ] - } -```` - -# Troubleshooting - -Common problems you might encounter. - -## Profile is in legacy format - -If you registered your blockstack ID before spring 2016, there's a chance that your profile is still in a legacy format. It will get migrated to the new format automatically if you update your profile on the [Onename](https://onename.com) app. However, you have to do this manually with the CLI. - -To do so, the command is: -``` - $ blockstack migrate -``` - -It will take a little over an hour to complete, but once finished, you'll be able to manage your accounts with the above commands (and do so with no delays). - -## Failed to broadcast update transaction - -This can happen during a `migrate` for one of a few reasons: -* You do not have enough balance to pay the transaction fee (which is calculated dynamically). -* Your payment address has unconfirmed transactions. -* You can't connect to a Bitcoin node. - -To determine what's going on, you should try the command again by typing `BLOCKSTACK_DEBUG=1 blockstack ...` instead of `blockstack...`. diff --git a/core/attic/resolver.md b/core/attic/resolver.md deleted file mode 100644 index 50b00abb..00000000 --- a/core/attic/resolver.md +++ /dev/null @@ -1,33 +0,0 @@ -# Blockstack Resolver - -During 2014-2016, Bockstack resolver was a separate service (like DNS resolvers). -It was merged into the Blockstack API in early 2017. - -The following (legacy) API call is still being supported by the Blockstack API: - -``` -http://localhost:5000/v2/users/fredwilson -``` - -And you can see a legacy resolver in action at http://resolver.onename.com/v2/users/fredwilson - -## Cron Job for Namespaces - -**Note: the instructions below need updating.** - -Currently, the resolver indexes all valid names in a local file which can be -populated by running -> $ ./refresh_names.sh - -On a production deployment, you should add a crond job to periodically run this -script. You can edit your crontab file by: -> $ crontab -e - -Here is a sample crontab file that runs the refresh script every two hours: -``` -SHELL=/bin/bash -HOME=/home/ubuntu - -#This is a comment -0 */2 * * * /home/ubuntu/resolver/resolver/refresh_names.sh -``` diff --git a/core/attic/tutorial_creation.md b/core/attic/tutorial_creation.md deleted file mode 100644 index c27ebd9d..00000000 --- a/core/attic/tutorial_creation.md +++ /dev/null @@ -1,604 +0,0 @@ ---- - - ---- -# Create and Launch a Namespace -{:.no_toc} - -This tutorial teaches you how to create your namespace, it contains the -following sections: - -* TOC -{:toc} - - -Creating namespaces is expensive. -Be sure to test your namespace in our [integration test -framework](https://github.com/blockstack/blockstack-core/tree/master/integration_tests) -first! It will let you simulate any valid namespace configuration -you want at no risk to you. - - ->**WARNING**: If you intend to create a namespace, you must read this document -_in its entirety_. You should also _install the test framework_ and experiment -with your namespace's parameters. _FAILURE TO DO SO MAY RESULT IN IRRECOVERABLE -LOSS OF FUNDS._ - -## Before you begin - -Some basic familiarity with how Bitcoin works is required to -understand this tutorial. This includes: - -* knowing the difference between mainnet, testnet, and regtest -* knowing about compressed and uncompressed ECDSA public keys -* knowing about base58-check encoding -* knowing how Bitcoin transactions are structured -* knowing how UTXOs work - -Creating a namespace is a three-step process. The first step is to `preorder` -the namespace, which broadcasts a salted hash of the namespace ID. The second -step is to `reveal` the namespace, which exposes the namespace ID and price -function to the blockchain. The final step is to `ready` the namespace, which -allows anyone to register names within it. - -In between the `reveal` and `ready` steps, the namespace creator will have a -"lock" on the namespace that lasts for about 1 year. During this time period, -the namespace creator can `import` names. The `import` transaction lets the -namespace creator assign the name a zone file and an owner in one step. - -## Before Trying This in Production... - - - -### Setting up the Test Environment - -In this example, we will use the test framework to create a private Bitcoin -blockchain on your computer, and then create a Blockstack namespace on it. -This will let you experiment with different namespace parameters -without spending actual BTC. The test framework uses `bitcoind -regtest`, -so all of the commands you'll run here will work identically on -mainnet. - -To install the test framework, please follow these -[instructions](https://github.com/blockstack/blockstack-core/tree/master/integration_tests). -Once you have the test framework installed, you should run the `namespace_check` test in `--interactive-web` mode. -This will create an empty `.test` namespace and leave the test scenario running -once it finishes. You will be able to fund addresses and create new blocks via -your Web browser or via `curl`, as will be explained below. Also, you'll be able to use the -`blockstack` utility to interact with your private blockchain and namespaces. - -The test setup command is as follows. This will launch the `namespace_check` -test scenario, and open a web server on port 3001. -```bash - $ blockstack-test-scenario --interactive-web 3001 blockstack_integration_tests.scenarios.namespace_check -``` - -When the test is ready for us to experiment, you should see the following: - -```bash - An empty namespace called 'test' has been created - Feel free to experiment with other namespaces - - Available keys with a balance: - * 6e50431b955fe73f079469b24f06480aee44e4519282686433195b3c4b5336ef01 - * c244642ce0b4eb68da8e098facfcad889e3063c36a68b7951fb4c085de49df1b01 - * f4c3907cb5769c28ff603c145db7fc39d7d26f69f726f8a7f995a40d3897bb5201 - * 8f87d1ea26d03259371675ea3bd31231b67c5df0012c205c154764a124f5b8fe01 - * bb68eda988e768132bc6c7ca73a87fb9b0918e9a38d3618b74099be25f7cab7d01 - * 2,3,6f432642c087c2d12749284d841b02421259c4e8178f25b91542c026ae6ced6d01,65268e6267b14eb52dc1ccc500dc2624a6e37d0a98280f3275413eacb1d2915d01,cdabc10f1ff3410082448b708c0f860a948197d55fb612cb328d7a5cc07a6c8a01 - * 2,3,4c3ab2a0704dfd9fdc319cff2c3629b72ebda1580316c7fddf9fad1baa323e9601,75c9f091aa4f0b1544a59e0fce274fb1ac29d7f7e1cd020b66f941e5d260617b01,d62af1329e541871b244c4a3c69459e8666c40b683ffdcb504aa4adc6a559a7701 - * 2,3,4b396393ca030b21bc44a5eba1bb557d04be1bfe974cbebc7a2c82b4bdfba14101,d81d4ef8123852403123d416b0b4fb25bcf9fa80e12aadbc08ffde8c8084a88001,d0482fbe39abd9d9d5c7b21bb5baadb4d50188b684218429f3171da9de206bb201 - * 2,3,836dc3ac46fbe2bcd379d36b977969e5b6ef4127e111f2d3e2e7fb6f0ff1612e01,1528cb864588a6a5d77eda548fe81efc44180982e180ecf4c812c6be9788c76a01,9955cfdac199b8451ccd63ec5377a93df852dc97ea01afc47db7f870a402ff0501 -``` - -You can determine that the test framework is live by going to -`http://localhost:3001` in your Web browser. From there, you can generate -blocks in the test framework's `bitcoind` node and you can fund any address in -the test framework. - -Finally, you can use the `blockstack-test-env` command to set up your shell -environment variables so `blockstack` will interact with this test (instead of -mainnet). To do so, run the following in your shell: - -```bash - $ . $(which blockstack-test-env) namespace_check - |blockstack-test namespace_check| $ -``` - -You can verify that the environment variables by verifying that your `$PS1` -variable includes the name of your test (as shown above), and that some other -`BLOCKSTACK_`-prefixed variables are set: - -```bash - |blockstack-test namespace_check| $ env | grep BLOCKSTACK - BLOCKSTACK_OLD_PS1=\u@\h:\w$ - BLOCKSTACK_TESTNET=1 - BLOCKSTACK_EPOCH_1_END_BLOCK=1 - BLOCKSTACK_EPOCH_2_END_BLOCK=2 - BLOCKSTACK_TEST=1 - BLOCKSTACK_DEBUG=1 - BLOCKSTACK_CLIENT_CONFIG=/tmp/blockstack-run-scenario.blockstack_integration_tests.scenarios.namespace_check/client/client.ini -``` - -## Registering a Namespace - -Suppose we're going to create the `hello` namespace. The key -`6e50431b955fe73f079469b24f06480aee44e4519282686433195b3c4b5336ef01` will be the key that -*pays* for the namespace. The key -`c244642ce0b4eb68da8e098facfcad889e3063c36a68b7951fb4c085de49df1b01` will be the key that -*creates* the namespace. The creator key will be used to `import` names and -declare the namespace `ready`. The payment key will be used to both pay for the -namespace and receive name registration and renewal fees for the first year of -the namespace's lifetime. - -In this example, we will set these keys as environment variables: - -```bash - |blockstack-test namespace_check| $ export PAYMENT_PKEY="6e50431b955fe73f079469b24f06480aee44e4519282686433195b3c4b5336ef01" - |blockstack-test namespace_check| $ export CREATOR_PKEY="c244642ce0b4eb68da8e098facfcad889e3063c36a68b7951fb4c085de49df1b01" -``` - -#### Multisig Namespace Payment - -If you want to use a multisig address to pay for your namespace (and collect -name registration fees), then instead of using -`6e50431b955fe73f079469b24f06480aee44e4519282686433195b3c4b5336ef01`, you should -use a string formatted as `m,n,pk1,pk2,...,pk_n`. `m` is the number of -signatures required, `n` is the number of private keys, and `pk1,pk2,...,pk_n` -are the private keys. - -For example, you can use the following as your `PAYMENT_PKEY` to have a 2-of-3 -multisig script pay for your namespace and collect name registration fees: - -```bash - |blockstack-test namespace_check| $ export PAYMENT_PKEY="2,3,6f432642c087c2d12749284d841b02421259c4e8178f25b91542c026ae6ced6d01,65268e6267b14eb52dc1ccc500dc2624a6e37d0a98280f3275413eacb1d2915d01,cdabc10f1ff3410082448b708c0f860a948197d55fb612cb328d7a5cc07a6c8a01" -``` - -### Namespace preorder - -The command to preorder the namespace would be: - -```bash - |blockstack-test namespace_check| $ blockstack namespace_preorder hello "$PAYMENT_PKEY" "$CREATOR_PKEY" -``` - -You will be given a set of instructions on how to proceed to reveal and -launch the namespace. _READ THEM CAREFULLY_. You will be prompted to -explicitly acknowledge that you understand the main points of the instructions, -and that you understand the risks. - -The command outputs some necessary information at the very end of its execution. -In particular, you will need to remember the transaction ID of the namespace -preorder. The command will help you do so. - -Here is a sample output: - -```bash - |blockstack-test namespace_check| $ blockstack namespace_preorder hello "$PAYMENT_PKEY" "$CREATOR_PKEY" - - <...snip...> - - Remember this transaction ID: b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac - You will need it for `blockstack namespace_reveal` - - Wait until b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac has six (6) confirmations. Then, you can reveal `hello` with: - - $ blockstack namespace_reveal "hello" "6e50431b955fe73f079469b24f06480aee44e4519282686433195b3c4b5336ef01" "c244642ce0b4eb68da8e098facfcad889e3063c36a68b7951fb4c085de49df1b01" "b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac" - - { - "status": true, - "success": true, - "transaction_hash": "b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac" - } -``` - -If all goes well, you will get back a transaction hash (in this case, `b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac`). -To get Blockstack to process it, you will need to mine some blocks in the test framework (by default, -Blockstack will only accept a transaction that has 6 confirmations). To do -this, simply go to `http://localhost:3001` and generate at least 6 blocks. If you -observe the test log, you will see the Blockstack node process and accept it. - -Note that when you do this live, you should wait for -at least 10 confirmations before sending the `reveal` transaction, just to be -safe. - -### Namespace reveal - -The command to reveal a preordered namespace is more complicated, since it -describes the price curve. - -This command is **interactive**. The command to invoke it is as follows: - -```bash - |blockstack-test namespace_check| $ blockstack namespace_reveal hello "$PAYMENT_PKEY" "$CREATOR_PKEY" "b40dd1375ef63e5a40ee60d790ec6dccd06efcbac99d0cd5f3b07502a4ab05ac" -``` - -When running the command, you will see the namespace creation wizard prompt you -with the price curve and the current values: - -``` -Name lifetimes (blocks): infinite -Price coefficient: 4 -Price base: 4 -Price bucket exponents: [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] -Non-alpha discount: 2 -No-vowel discount: 5 -Burn or receive fees? Receive to mr6nrMvvh44sR5MiX929mMXP5hqgaTr6fx - -Name price formula: -(UNIT_COST = 10.0 satoshi): - buckets[min(len(name)-1, 15)] - UNIT_COST * coeff * base -cost(name) = ----------------------------------------------------- - max(nonalpha_discount, no_vowel_discount) - - -Name price table: -| length | price | price, nonalpha | price, no vowel | price, both | --------------------------------------------------------------------------- -| 1 | 42949672960 | 8589934592 | 8589934592 | 8589934592 | -| 2 | 10737418240 | 5368709120 | 2147483648 | 2147483648 | -| 3 | 2684354560 | 1342177280 | 536870912 | 536870912 | -| 4 | 671088640 | 335544320 | 134217728 | 134217728 | -| 5 | 167772160 | 83886080 | 33554432 | 33554432 | -| 6 | 41943040 | 20971520 | 8388608 | 8388608 | -| 7 | 10485760 | 5242880 | 2097152 | 2097152 | -| 8 | 2621440 | 1310720 | 524288 | 524288 | -| 9 | 655360 | 327680 | 131072 | 131072 | -| 10 | 163840 | 81920 | 32768 | 32768 | -| 11 | 40960 | 20480 | 8192 | 8192 | -| 12 | 10240 | 5120 | 2048 | 2048 | -| 13 | 2560 | 1280 | 512 | 512 | -| 14 | 640 | 320 | 128 | 128 | -| 15 | 160 | 80 | 32 | 32 | -| 16+ | 40 | 20 | 10 | 10 | - - -What would you like to do? -(0) Set name lifetime in blocks (positive integer between 1 and 4294967295, or "infinite") -(1) Set price coefficient (positive integer between 1 and 255) -(2) Set base price (positive integer between 1 and 255) -(3) Set price bucket exponents (16 comma-separated integers, each between 1 and 15) -(4) Set non-alphanumeric character discount (positive integer between 1 and 15) -(5) Set no-vowel discount (positive integer between 1 and 15) -(6) Toggle collecting name fees (True: receive fees; False: burn fees) -(7) Show name price formula -(8) Show price table -(9) Done - -(1-9) -``` - -All prices are in the "fundamental unit" of the underlying blockchain (i.e. -satoshis). - -As the formula describes, the name's price is a function of: - -* a fixed unit cost (`UNIT_COST`) -* a multiplicative constant coefficient (`coeff`) -* a fixed exponential base (`base`) -* a 16-element list of price buckets, indexed by the length of the name (`buckets`) -* a discount for having non-alphnumeric letters (`nonalpha_discount`) -* a discount for having no vowels in the name (`no_vowel_discount`) - -You can use options 1 through 8 to play with the pricing function and examine -the name costs in the price table. Enter 9 to send the transaction itself. - -Once you're happy, you can issue the namespace-reveal transaction. As with the -namespace-preorder transaction, you will get back a transaction hash, and your transaction will be -unconfirmed. Simply go to `http://localhost:3001` to generate some more blocks -to confirm your namespace-reveal. - -Once you have confirmed your namespace-reveal transaction, you can -begin to populate your namespace with some initial names. - -**Collecting Name Fees** - -Blockstack 0.17 introduced the ability to create a namespace such that for the -first year of its existence (54595 blocks), all name registration and renewal -fees will be sent to the address of the _payment key_. In this example, -this is the address `mr6nrMvvh44sR5MiX929mMXP5hqgaTr6fx`. - -The alternative is to -have all namespace fees sent to an unspendable burn address -(`1111111111111111111114oLvT2`). This is the case for the `.id` namespace, -for example. - -After the year has passed, all future name registrations and renewal fees -will be sent to the unspendable burn address. This is to disincentivize -namespace squatters. - -**Warnings** - -* You must issue this command **within 144 blocks** of the namespace-preorder transaction. Otherwise, the preorder will expire and you will need to start over from scratch. - -### Importing names - -After sending the `reveal` transaction, you can populate your namespace with -some initial names. You can do so with the `name_import` command. - -Suppose we want to import the name `example.hello` and assign it to an owner -whose public key address is `ms6Y32bcL5zhA57e8tf7awgVZuPxV8Xg8N`. Suppose also -that you wanted to give `example.hello` an initial zone file stored at -`/var/blockstack/zone_files/example.hello`. To do so, you would issue the -following command: - -```bash - |blockstack-test namespace_check| $ blockstack name_import example.hello ms6Y32bcL5zhA57e8tf7awgVZuPxV8Xg8N /var/blockstack/zone_files/example.hello "$CREATOR_PKEY" -``` - -By default, you **must** use the private key you used to reveal the namespace -to import names (this is `$CREATOR_PKEY` in this example). - -As with namespace-preorder and namespace-reveal, the transaction this command -generates will be unconfirmed. Simply go to `http://localhost:3001` to generate -some blocks to confirm it. - -You can check the progress of the transaction with `blockstack info`, as follows: - -```bash - |blockstack-test namespace_check| $ blockstack info - { - "cli_version": "0.17.0.8", - "consensus_hash": "b10fdd38a20a7e46555ce3a7f68cf95c", - "last_block_processed": 694, - "last_block_seen": 694, - "queues": { - "name_import": [ - { - "confirmations": 1, - "name": "example.hello", - "tx_hash": "10f7dcd9d6963ef5d20d010f731d5d2ddb76163a083b9d7a2b9fd4515c7fe58c" - } - ] - }, - "server_alive": true, - "server_host": "localhost", - "server_port": 16264, - "server_version": "0.17.0.8" - } -``` - -The `confirmation` field indicates how deep in the blockchain the transaction is -at the time. Generating more blocks will increase its number of confirmations. - -When you do this live, -**YOU SHOULD LEAVE YOUR COMPUTER RUNNING UNTIL THE `name_import` QUEUE IS EMPTY**. -Blockstack's background API daemon will monitor the transactions and upload the -name's zone file to the Blockstack Atlas network once it is confirmed. -But to do so, your computer must remain online. If you do not do this, then -the name will not have a zone file and will be unusable in the higher layers of -Blockstack-powered software (including Blockstack applications). However, -if your computer does go offline or reboots, you can recover by -restarting the Blockstack API daemon (with -`blockstack api start`). The daemon itself will pick up where it left off, and -replicate all zone files that have confirmed transactions. - -After the zone file is uploaded, the name will be public and resolvable. You can re-import the -same name over and over, and give it a different address and/or zone file. Like -all other names, the Blockstack Atlas network will accept and propagate zone -files for imported names. - -The owner of the address `ms6Y32bcL5zhA57e8tf7awgVZuPxV8Xg8N` will **not** be -able to issue any transactions for the name `example.hello` until the namespace -creator has sent the `ready` transaction. - -#### Using multiple private keys for NAME_IMPORT - -Bitcoin itself imposes limits on how fast you can send transactions from the -same key (limited by a maximum UTXO-chain length). To work around this, -Blockstack lets you import names by using up to 300 private keys. The private -keys you can use are BIP32 unhardened children of the namespace reveal key (i.e. -`$CREATOR_PKEY` in this example). - -The first name you import **must** use the namespace reveal private key -(`$CREATOR_PKEY` in this example). However, all future names you import in this -namespace can use one of the 300 BIP32 keys. - -To get the list of keys you can use, you can use the `make_import_keys` command: - -```bash - |blockstack-test namespace_check| $ blockstack make_import_keys example hello "$CREATOR_PKEY" - aeda50305ada40aaf53f2d8921aa717f1ec71a0a3b9b4c6397b3877f6d45c46501 (n4DVTuLLv5J1Yc17AoRYY1GtxDAuLGAESr) - 92ff179901819a1ec7d32997ce3bb0d9a913895d5850cc05146722847128549201 (mib2KNBGR4az8GiUmusBZexVBqb9YB2gm5) - cc5b6a454e2b614bfa18f4deb9a8e179ab985634d63b7fedfaa59573472d209b01 (mxE2iqV4jdpn4K349Gy424TvZp6MPqSXve) - 9b0265e0ac8c3c24fe1d79a734b3661ec2b5c0c2619bb6342356572b8235910101 (n4rGz8hkXTscUGWCwZvahrkEh6LHZVQUoa) - e2585af250404b7918cf6c91c6fa67f3401c0d1ae66df2fafa8fa132f4b9350f01 (moGNpEpighqc6FnkqyNVJA9xtfTiStr5YU) - { - "status": true - } -``` - -(NOTE: in the test environment, you get only 5 keys in order to save time). - -You can use any of these keys to import names. - -#### Trying it out - -Here's an example walkthrough of how to try this out in the test framework: - -1. Import the first name, creating a zone file in the process: - -```bash - |blockstack-test namespace_check| $ cat > /var/blockstack/zone_files/example.hello < $ORIGIN example.hello - > $TTL 3600 - > _file URI 10 1 "file:///home/blockstack-test/example.hello" - > EOF - |blockstack-test namespace_check| $ blockstack name_import example.hello ms6Y32bcL5zhA57e8tf7awgVZuPxV8Xg8N /var/blockstack/zone_files/example.hello "$CREATOR_PKEY" - Import cost breakdown: - { - "name_import_tx_fee": { - "btc": 0.0003342, - "satoshis": 33420 - }, - "total_estimated_cost": { - "btc": 0.0003342, - "satoshis": 33420 - }, - "total_tx_fees": 33420 - } - Importing name 'example.hello' to be owned by 'ms6Y32bcL5zhA57e8tf7awgVZuPxV8Xg8N' with zone file hash '05c302430f4ed0a24470abf9df7e264d517fd389' - Proceed? (y/N) y - { - "status": true, - "success": true, - "transaction_hash": "bd875f00f63bcb718bb22782c88c3edcbed79663f2f9152deab328c48746f103", - "value_hash": "05c302430f4ed0a24470abf9df7e264d517fd389" - } -``` - -2. Advance the test framework blockchain, so the indexer knows which import keys to expect: - -```bash - # NOTE: you can also do this by going to http://localhost:3001 in your Web browser - |blockstack-test namespace_check| $ curl -X POST http://localhost:3001/nextblock -``` - -3. Make import keys: - -```bash - |blockstack-test namespace_check| $ blocksatck make_import_keys hello "$CREATOR_PKEY" - aeda50305ada40aaf53f2d8921aa717f1ec71a0a3b9b4c6397b3877f6d45c46501 (n4DVTuLLv5J1Yc17AoRYY1GtxDAuLGAESr) - 92ff179901819a1ec7d32997ce3bb0d9a913895d5850cc05146722847128549201 (mib2KNBGR4az8GiUmusBZexVBqb9YB2gm5) - cc5b6a454e2b614bfa18f4deb9a8e179ab985634d63b7fedfaa59573472d209b01 (mxE2iqV4jdpn4K349Gy424TvZp6MPqSXve) - 9b0265e0ac8c3c24fe1d79a734b3661ec2b5c0c2619bb6342356572b8235910101 (n4rGz8hkXTscUGWCwZvahrkEh6LHZVQUoa) - e2585af250404b7918cf6c91c6fa67f3401c0d1ae66df2fafa8fa132f4b9350f01 (moGNpEpighqc6FnkqyNVJA9xtfTiStr5YU) - { - "status": true - } -``` - -4. Fill up one of the addresses in the test framework, so we can fund `NAME_IMPORT` transactions with it: - -```bash - # NOTE: you can also do this by going to http://localhost:3001 in your Web browser - |blockstack-test namespace_check| $ curl -X POST -F 'addr=n4DVTuLLv5J1Yc17AoRYY1GtxDAuLGAESr' -F 'value=100000000' 'http://localhost:3001/sendfunds' -``` - -5. Import another name, with the child private key we just funded: - -```bash - |blockstack-test namespace_check| $ cat > /tmp/example.hello.zonefile < $ORIGIN example2.hello - > $TTL 3600 - > _file URI 10 1 "file:///home/blockstack-test/example2.hello" - > EOF - |blockstack-test namespace_check| $ blockstack name_import example2.hello n3sFkNfBQPWS25G12DqDEqHRPiqHotAkEb /tmp/example.hello.zonefile aeda50305ada40aaf53f2d8921aa717f1ec71a0a3b9b4c6397b3877f6d45c46501 - Import cost breakdown: - { - "name_import_tx_fee": { - "btc": 0.0003342, - "satoshis": 33420 - }, - "total_estimated_cost": { - "btc": 0.0003342, - "satoshis": 33420 - }, - "total_tx_fees": 33420 - } - Importing name 'example2.hello' to be owned by 'n3sFkNfBQPWS25G12DqDEqHRPiqHotAkEb' with zone file hash '0649bc0b457f54c564d054ce20dc3745a0c4f0c0' - Proceed? (y/N) y - { - "status": true, - "success": true, - "transaction_hash": "496a6c2aaccedd98a8403c2e61ff3bdeff221a58bf0e9c362fcae981353f459f", - "value_hash": "0649bc0b457f54c564d054ce20dc3745a0c4f0c0" - } -``` - -6. Advance the blockchain again: - -```bash - # NOTE: you can also do this by going to http://localhost:3001 in your Web browser - |blockstack-test namespace_check| $ curl -X POST http://localhost:3001/nextblock -``` - -7. See that the names are processing: - -```bash - |blockstack-test namespace_check| $ blockstack info - { - "cli_version": "0.17.0.8", - "consensus_hash": "2a055beeaedcaa1365ab2671a0254a03", - "last_block_processed": 711, - "last_block_seen": 711, - "queues": { - "name_import": [ - { - "confirmations": 2, - "name": "example.hello", - "tx_hash": "bd875f00f63bcb718bb22782c88c3edcbed79663f2f9152deab328c48746f103", - }, - { - "confirmations": 1, - "name": "example2.hello", - "tx_hash": "496a6c2aaccedd98a8403c2e61ff3bdeff221a58bf0e9c362fcae981353f459f" - } - ] - }, - "server_alive": true, - "server_host": "localhost", - "server_port": 16264, - "server_version": "0.17.0.8" - } -``` - -8. Confirm all the transactions: - -```bash - # NOTE: you can also do this by going to http://localhost:3001 in your Web browser - |blockstack-test namespace_check| $ for i in $(seq 1 10); do curl -X POST http://localhost:3001/nextblock -``` - -9. Look up name zone files to confirm they were replicated to the test framework's Atlas network: - -```bash - |blockstack-test namespace_check| $ blockstack info - { - "cli_version": "0.17.0.8", - "consensus_hash": "ad247c1d5ff239a65db0736951078f17", - "last_block_processed": 721, - "last_block_seen": 721, - "queues": {}, - "server_alive": true, - "server_host": "localhost", - "server_port": 16264, - "server_version": "0.17.0.8" - } - |blockstack-test namespace_check| $ blockstack get_name_zonefile example.hello - $ORIGIN example.hello - $TTL 3600 - _file URI 10 1 "file:///home/blockstack-test/example.hello" - - |blockstack-test namespace_check| $ blockstack get_name_zonefile example2.hello - $ORIGIN example2.hello - $TTL 3600 - _file URI 10 1 "file:///home/blockstack-test/example2.hello" -``` - -Now, these names are imported and once the `NAMESPACE_READY` transaction is -sent, the name owners can proceed to issue name operations. - -**Warnings** - -* The first private key you use must be the same one you used to *create* the namespace (`$CREATOR_KEY`). -* You may only use the 300 private keys described above to import names. -* You must complete all `NAME_IMPORT` transactions within 52595 blocks of the `NAMESPACE_REVEAL` transaction (about 1 year). - -### Launching a Namespace - -Once you have pre-populated your namespace with all of the initial names, you -have to make it `ready` so anyone can register a name. If you do not do this -within 1 year of the `reveal` transaction, then your namespace and all of the -names will disappear, and someone else will be able to register it. - -To make a namespace `ready`, you use the creator private key as follows: - -```bash - |blockstack-test namespace_check| $ blockstack namespace_ready hello "$CREATOR_PKEY" -``` - -**Warnings** - -* You must send the `NAMESPACE_READY` transaction within 52595 blocks (about 1 year) of the `NAMESPACE_REVEAL` transaction. diff --git a/core/basic_usage.md b/core/basic_usage.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/basic_usage.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/blockstack-did-spec.md b/core/blockstack-did-spec.md deleted file mode 100644 index 4ae83ebc..00000000 --- a/core/blockstack-did-spec.md +++ /dev/null @@ -1,818 +0,0 @@ -# Blockstack DID Method Specification - -# Abstract - -Blockstack is a network for decentralized applications where users own their -identities and data. Blockstack utilizes a public blockchain to implement a -decentralized [naming layer](https://docs.blockstack.org/core/naming/introduction.html), -which binds a user's human-readable username to their current public key and a pointer to -their data storage buckets. The naming layer ensures that names are globally -unique, that names can be arbitrary human-meaningful strings, and that names -are owned and controlled by cryptographic key pairs such that only the owner of the private key -can update the name's associated state. - -The naming layer implements DIDs as a mapping -between the initial name operation for a user's name and the name's current -public key. The storage pointers in the naming layer are leveraged to point to -the authoritative replica of the user's DID document. - -# Status of This Document - -This document is not a W3C Standard nor is it on the W3C Standards Track. This is -a draft document and may be updated, replaced or obsoleted by other documents at -any time. It is inappropriate to cite this document as other than work in -progress. - -Comments regarding this document are welcome. Please file issues directly on -[Github](https://github.com/blockstack/blockstack-core/blob/master/docs/did-spec.md). - -# 1. System Overview - -Blockstack's DID method is specified as part of its decentralized naming system. -Each name in Blockstack has one or more corresponding DIDs, and each Blockstack -DID corresponds to exactly one name -- even if the name was revoked by its -owner, expired, or was re-registered to a different owner. - -Blockstack is unique among decentralized identity systems in that it is *not* -anchored to a specific blockchain or DLT implementation. The system is designed -from the ground up to be portable, and has already been live-migrated from the -Namecoin blockchain to the Bitcoin blockchain. The operational ethos of -Blockstack is to leverage the must secure blockchain at all times -- that is, -the one that is considered hardest to attack. - -Blockstack's naming system and its DIDs transcend the underlying blockchain, and -will continue to resolve to DID document objects (DDOs) even if the system -migrates to a new blockchain in the future. - -## 1.1 DID Lifecycle - -Understanding how Blockstack DIDs operate requires understanding how Blockstack -names operate. Fundamentally, a Blockstack DID is defined as a pointer to the -*nth name registered by an address.* How this information is determined depends -on the category of name being registered -- a DID can be derived from an -*on-chain* name or an *off-chain* name. We call these DIDs *on-chain DIDs* and -*off-chain DIDs*, respectively. - -### 1.1.1 On-Chain DIDs - -On-chain names are written directly to Blockstack's underlying blockchain. -Instantiating an on-chain name requires two transactions -- a `NAME_PREORDER` -transaction, and a `NAME_REGISTRATION` transaction. Upon successful -confirmation of the `NAME_REGISTRATION` transaction, the system assigns name to -an on-chain address indicated by the `NAME_REGISTRATION` transaction itself. -This address is the name's *owner*. - -Since these transactions are written to the blockchain, the blockchain provides -a total ordering of name-to-address assignments. Thus, a DID instantiated for an -on-chain name may be referenced by the name's owner address, and the number of -names ever assigned to the owner address *at the time of this DID's -instantiation*. For example, the DID -`did:stack:v0:15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr-3` was instantiated when the -fourth on-chain name was created and initially assigned to the address `15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr` -(note that the index parameter -- the `-3` -- starts counting from 0). - -### 1.1.2 Off-chain DIDs - -Off-chain names, sometimes called *subdomains* in the Blockstack literature, -refer to names whose transaction histories are instantiated and stored outside -of Blockstack's blockchain within Blockstack's Atlas peer network. Off-chain -name transactions are encoded in batches, where each batch is hashed and written -to the underlying blockchain through a transaction for an on-chain name. This -provides them with the same safety properties as on-chain names -- off-chain -names are globally unique, off-chain names can be arbitrary human-meaningful -strings, off-chain names are owned by cryptographic key pairs, and all -Blockstack nodes see the same linearized history of off-chain name operations. - -Off-chain names are instantiated by an on-chain name, indicated by the off-chain -name's suffix. For example, `cicero.res_publica.id` is an off-chain name -whose initial transaction history is processed by the owner of the on-chain -name `res_publica.id`. Note that the owner of `res_publica.id` does *not* own -`cicero.res_publica.id`, and cannot issue well-formed name updates to it. - -Off-chain names -- and by extension, their corresponding DIDs -- have -different liveness properties than on-chain names. The Blockstack -naming system protocol requires the owner of `res_publica.id` to not only -propagate the signed transactions that instantiate and transfer ownership of -`cicero.res_publica.id`. However, *any* on-chain name can process a name update -for an off-chain name -- that is, an update that changes where the name's -assocaited state resides. For details as to why this is the case, please refer -to the [Blockstack subdomain documentation](https://docs.blockstack.org/core/naming/subdomains.html). - -An off-chain DID is similarly structured to an on-chain DID. Like on-chain -names, each off-chain name is owned by an address (but not necessarily an -address on the blockchain), and each Blockstack node sees the same sequence of -off-chain name-to-address assignments. Thus, it has enough information to -assign each off-chain name user a DID. - -# 2. Blockstack DID Method - -The namestring that shall identify this DID method is: `stack` - -A DID that uses this method *MUST* begin with the following literal prefix: `did:stack`. -The remainder of the DID is its namespace-specific identifier. - -# 2.1 Namespace-Specific Identifier - -The namespace-specific identifier (NSI) of the Blockstack DID encodes two pieces -of information: an address, and an index. - -The **address** shall be a base58check encoding of a version byte concatenated with -the RIPEMD160 hash of a SHA256 hash of a DER-encoded secp256k1 public key. -For example, in this Python 2 snippit: - -```python -import hashlib -import base58 - -pubkey = '042bc8aa4eb54d779c1fb8a2d5022aec8ed7fc2cc34d57356d9e1c417ce416773f45b0299ea7be347d14c69c403d9a03c8ec0ccf47533b4bee8cd002e5de81f945' -sha256_pubkey = hashlib.sha256(pubkey.decode('hex')).hexdigest() -# '18328b13b4df87cbcd190c083ef1d74487fc1383792f208f52c596b4588fb665' -ripemd160_sha256_pubkey = hashlib.new('ripemd160', sha256_pubkey.decode('hex')).hexdigest() -# '1651c1a6001d4750e46be8a02cc19550d4309b71' -version_byte = '\x00' -address = base58.b58check_encode(version_byte + ripemd160_sha256_pubkey.decode('hex')) -# '1331okvQ3Jr2efzaJE42Supevzfzg8ahYW' -``` - -The **index** shall be a non-negative monotonically-increasing integer. - -The (address, index) pair uniquely identifies a DID. Blockstack's naming system -ensures that the index increments monotonically each time a DID is instantiated -(e.g. by incrementing it each time a name gets registered to the address). - -## 2.2 Address Encodings - -The address's version byte encodes whether or not a DID corresponds to an -on-chain name transaction or an off-chain name transaction, and whether or not -it corresponds to a mainnet or testnet address. The version bytes for each -configuration shall be as follows: - -* On-chain names on mainnet: `0x00` -* On-chain names on testnet: `0x6f` -* Off-chain names on mainnet: `0x3f` -* Off-chain names on testnet: `0x7f` - -For example, the RIPEMD160 hash `1651c1a6001d4750e46be8a02cc19550d4309b71` would -encode to the following base58check strings: - -* On-chain mainnet: `1331okvQ3Jr2efzaJE42Supevzfzg8ahYW` -* On-chain testnet: `mhYy6p1NrLHHRnUC1o2QGq2ynzGhduVoEX` -* Off-chain mainnet: `SPL1qbhYmg3EAyn2qf36zoyDamuRXm2Gjk` -* Off-chain testnet: `t8xcrYmzDDhJWihaQWMW2qPZs4Po1PfvCB` - -# 3. Blockstack DID Operations - -## 3.1 Creating a Blockstack DID - -Creating a Blockstack DID requires registering a name -- be it on-chain or -off-chain. To register an on-chain name, the user must send two transactions to -Blockstack's underlying blockchain (currently Bitcoin) that implement the -`NAME_PREORDER` and `NAME_REGISTRATION` commands. Details on the wire formats -for these transactions can be found in Appendix A. Blockstack supplies both a -[graphical tool](https://github.com/blockstack/blockstack-browser) and a -[command-line tool](https://github.com/blockstackl/cli-blockstack) for -generating and broadcasting these transactions, as well as a -[reference library](https://github.com/blockstack/blockstack.js). - -To register an off-chain name, the user must be able to submit a request to an -off-chain registrar. Anyone with an on-chain name can use it to operate a -registrar for off-chain names. A reference implementation can be found -[here](https://github.com/blockstack/subdomain-registrar). - -To register an off-chain DID, the user -must submit a JSON body as a HTTP POST request to the registrar's -registration endpoint with the following format: - -``` -{ - "zonefile": "", - "name": "", - "owner_address": "", -} -``` - -For example, to register the name `spqr` on a registrar for `res_publica.id`: - -```bash -$ curl -X POST -H 'Authorization: bearer API-KEY-IF-USED' -H 'Content-Type: application/json' \ -> --data '{"zonefile": "$ORIGIN spqr\n$TTL 3600\n_https._tcp URI 10 1 \"https://gaia.blockstack.org/hub/1HgW81v6MxGD76UwNbHXBi6Zre2fK8TwNi/profile.json\"\n", \ -> "name": "spqr", \ -> "owner_address": "1HgW81v6MxGD76UwNbHXBi6Zre2fK8TwNi"}' \ -> http://localhost:3000/register/ -``` - -The `zonefile` field must be a well-formed DNS zonefile, and must have the -following properties: - -* It must have its `$ORIGIN` field set to the off-chain name. -* It must have at least one `URI` resource record that encodes an HTTP or - HTTPS URL. Note that its name must be either `_http._tcp` or `_https._tcp`, per the -`URI` record specification. -* The HTTP or HTTPS URL must resolve to a JSON Web token signed by a secp256k1 public key - that hashes to the `owner_address` field, per section 2.1. - -Once the request is accepted, the registrar will issue a subsequent `NAME_UPDATE` -transaction for its on-chain name and broadcast the batch of off-chain zone -files it has accumulated to the Blockstack Atlas network (see Appendix A). The batch -of off-chain names' zone files will be hashed, and the hash will be written to -the blockchain as part of the `NAME_UPDATE`. This proves the existence of these -off-chain names, as well as their corresponding DIDs. - -Once the transaction confirms and the off-chain zone files are propagated to the -peer network, any Blockstack node will be able to resolve the off-chain name's associated DID. - -## 3.2 Storing a Blockstack DID's DDO - -Each name in Blockstack, and by extention, each DID, must have one or more -associated URLs. To resolve a DID (section 3.3), the DID's URLs must point to -a well-formed signed DDO. It is up to the DID owner to sign and upload the DDO -to the relevant location(s) so that DID resolution works as expected, and it is -up to the DID owner to ensure that the DDO is well-formed. Resolvers should -validate DDOs before returning them to clients. - -In order for a DID to resolve to a DDO, the DDO must be encoded as a JSON web -token, and must be signed by the secp256k1 private key whose public key hashes -to the DID's address. This is used by the DID resolver to authenticate the DDO, -thereby removing the need to trust the server(s) hosting the DDO with replying -authentic data. - -## 3.3 Resolving a Blockstack DID - -Any Blockstack node with an up-to-date view of the underlying blockchain and a -complete set of off-chain zone files can translate any name into its DID, and -translate any DID into its name. - -Since DID registration in Blockstack is achieved by first registering a name, -the user must first determine the DID's NSI. To do so, the user simply requests -it from a Blockstack node of their choice as a GET request to the node's -`/v1/dids/{:blockstack_did}` endpoint. The response must be a JSON object with -a `public_key` field containing the secp256k1 public key that hashes to the -DID's address, and a `document` field containing the DDO. The DDO's `publicKey` field -shall be an array of objects with one element, where the -only element describes the `public_key` given in the top-level object. - -For example: - -```bash -$ curl -s https://core.blockstack.org/v1/dids/did:stack:v0:15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr-0 | jq -{ - 'public_key': '022af593b4449b37899b34244448726aa30e9de13c518f6184a29df40823d82840', - 'document': { - ... - '@context': 'https://w3id.org/did/v1', - 'publicKey': [ - { - 'id': 'did:stack:v0:15gxXgJyT5tM5A4Cbx99nwccynHYsBouzr-0', - 'type': 'secp256k1', - 'publicKeyHex': '022af593b4449b37899b34244448726aa30e9de13c518f6184a29df40823d82840' - } - ], - ... - } -} -``` - -## 3.4 Updating a Blockstack DID - -The user can change their DDO at any time by uploading a new signed DDO to the -relevant locations, per section 3.2, *except for* the `publicKey` field. In -order to change the DID's public key, the user must transfer the underlying name -to a new address. - -If the DID corresponds to an on-chain name, then the user must send a -`NAME_TRANSFER` transaction to send the name to the new address. Once the -transaction is confirmed by the Blockstack network, the DID's public key will be -updated. See Appendix A for the `NAME_TRANSFER` wire format. Blockstack -provides a [reference library](https://github.com/blockstack/blockstack.js) for -generating this transaction. - -### 3.4.1 Off-Chain DID Updates - -If the DID corresponds to an off-chain name, then the user must request that the -registrar that instantiated the name to broadcast an off-chain name transfer -operation. To do so, the user must submit a string with the following format to -the registrar: - -``` -${name} TXT "owner=${new_address}" "seqn=${update_counter}" "parts=${length_of_zonefile_base64}" "zf0=${base64_part_0}" "zf1=${base64_part_1}" ... "sig=${base64_signature}" -``` - -The string is a well-formed DNS TXT record with the following fields: - -* The `${name}` field is the subdomain name without the on-chain suffix (e.g. - `spqr` in `spqr.res_publica.id`. -* The `${new_address}` field is the new owner address of the subdomain name. -* The `${update_counter}` field is a non-negative integer equal to the number of - subdomain name operations that have occurred so far. It starts with 0 when -the name is created, and must increment each time the name owner issues an -off-chain name operation. -* The `${length_of_zonefile_base64}` field is equal to the length of the - base64-encoded zone file for the off-chain name. -* The fields `zf0`, `zf1`, `zf2`, etc. and their corresponding variables - `${base64_part_0}`, `${base64_part_1}`, `${base64_part_2}`, etc. correspond to -256-byte segments of the base64-encoded zone file. They must occur in a -sequence of `zf${n}` where `${n}` starts at 0 and increments by 1 until all -segments of the zone file are represented. -* The `${base64_signature}` field is a secp256k1 signature over the resulting - string, up to the `sig=` field, and base64-encoded. The signature must come -from the secp256k1 private key that currently owns the name. - -Thus to generate this TXT record for their DID, the user would do the following: - -1. Base64-encode the off-chain DID's zone file. -2. Break the base64-encoded zone file into 256-byte segments. -3. Assemble the TXT record from the name, new address, update counter, and zone - file segments. -4. Sign the resulting string with the DID's current private key. -5. Generate and append the `sig=${base64_signature}` field to the TXT record. - -Sample code to generate these TXT records can be found in the [Stacks Node -reference implementation](https://github.com/blockstack/blockstack-core), under -the `blockstack.lib.subdomains` package. For example, the Python 2 program here -generates such a TXT record: - -```python -import blockstack - -offchain_name = 'bar' -onchain_name = 'foo.test' -new_address = '1Jq3x8BAYz9Xy9AMfur5PXkDsWtmBBsNnC' -seqn = 1 -privk = 'da1182302fee950e64241a4103646992b1bed7f6c4ced858282e493d57df33a501' -full_name = '{}.{}'.format(offchain_name, onchain_name) -zonefile = "$ORIGIN {}\n$TTL 3600\n_http._tcp\tIN\tURI\t10\t1\t\"https://gaia.blockstack.org/hub/{}/profile.json\"\n\n".format(offchain_name, new_address) - -print blockstack.lib.subdomains.make_subdomain_txt(full_name, onchain_name, new_address, seqn, zonefile, privk) -``` - -The program prints a string such as: -``` -bar TXT "owner=1Jq3x8BAYz9Xy9AMfur5PXkDsWtmBBsNnC" "seqn=1" "parts=1" "zf0=JE9SSUdJTiBiYXIKJFRUTCAzNjAwCl9odHRwLl90Y3AJSU4JVVJJCTEwCTEJImh0dHBzOi8vZ2FpYS5ibG9ja3N0YWNrLm9yZy9odWIvMUpxM3g4QkFZejlYeTlBTWZ1cjVQWGtEc1d0bUJCc05uQy9wcm9maWxlLmpzb24iCgo\=" "sig=QEA+88Nh6pqkXI9x3UhjIepiWEOsnO+u1bOBgqy+YyjrYIEfbYc2Q8YUY2n8sIQUPEO2wRC39bHQHAw+amxzJfkhAxcC/fZ0kYIoRlh2xPLnYkLsa5k2fCtXqkJAtsAttt/V" -``` - -(Note that the `sig=` field will differ between invocations, due to the way -ECDSA signatures work). - -Once this TXT record has been submitted to the name's original registrar, the -registrar will pack it along with other such records into a single zone file, -and issue a `NAME_UPDATE` transaction for the on-chain name to announce them to -the rest of the peer network. The registrar will then propagate these TXT -records to the peer network once the transaction confirms, thereby informing all -Blockstack nodes of the new state of the off-chain DID. - -### 3.4.2 Changing the Storage Locations of a DDO - -If the user wants to change where the resolver will look for a DDO, they must do -one of two things. If the DID corresponds to an on-chain name, then the user -must send a `NAME_UPDATE` transaction for the underlying name, whose 20-byte -hash field is the RIPEMD160 hash of the name's new zone file. See Appendix A -for the wire format of `NAME_UPDATE` transactions. - -If the DID corresponds to an off-chain name, then the user must submit a request -to an off-chain name registrar to propagate a new zone file for the name. -Unlike changing the public key, the user can ask *any* off-chain registrar to -broadcast a new zone file. The method for doing this is described in section -3.4.1 -- the user simply changes the zone file contents instead of the address. - -# 4. Deleting a Blockstack DID - -If the user wants to delete their DID, they can do so by revoking the underlying -name. To do this with an on-chain name, the user constructs and broadcasts a -`NAME_REVOKE` transaction. Once confirmed, the DID will stop resolving. - -To do this with an off-chain name, the user constructs and broadcasts a TXT -record for their DID's underlying name that (1) changes the owner address to a -"nothing-up-my-sleeve" address (such as `1111111111111111111114oLvT2` -- the -base58-check encoding of 20 bytes of 0's), and (2) changes the zone file to -include an unresolvable URL. This prevents the DID from resolving, and prevents -it from being updated. - -# 5. Security Considerations - -This section briefly outlines possible ways to attack Blockstack's DID method, -as well as countermeasures the Blockstack protocol and the user can take to -defend against them. - -## 5.1 Public Blockchain Attacks - -Blockstack operates on top of a public blockchain, which could be attacked by a -sufficiently pwowerful adversary -- such as rolling back and changing the chain's -transaction history, denying new transactions for Blockstack's name -operations, or eclipsing nodes. - -Blockstack makes the first two attacks difficult by operating on top of the most -secure blockchain -- currently Bitcoin. If the blockchain is attacked, or a -stronger blockchain comes into being, the Blockstack community would migrate the -Blockstack network to a new blockchain. - -The underlying blockchain provides some immunity towards eclipse attacks, since a -blockchain peer expects blocks to arrive at roughly fixed intervals and expects -blocks to have a proof of an expenditure of an expensive resource (like -electricity). In Bitcoin's case, the computational difficulty of finding new blocks puts a -high lower bound on the computational effort required to eclipse a Bitcoin node -- -in order to sustain 10-minute block times, the attacker must expend an equal -amount of energy as the rest of the network. Moreover, the required expenditure -rate (the "chain difficulty") decreases slowly enough that an attacker with less -energy would have to spend months of time on the attack, giving the victim -ample time to detect it. The countermeasures the blockchain employs to deter -eclipse attacks are beyond the scope of this document, but it is worth pointing -out that Blockstack's DID method benefits from them since they also help ensure -that DID creation, updates and deletions get processed in a timely manner. - -## 5.2 Blockstack Peer Network Attacks - -Because Blockstack stores each DID's DDO's URL in its own peer network outside -of its underlying blockchain, it is possible to eclipse Blockstack nodes and -prevent them from seeing both off-chain DID operations and updates to on-chain -DIDs. In an effort to make this as difficult as possible, the -Blockstack peer network implements an unstructured overlay network -- nodes select -a random sample of the peer graph as their neighbors. Moreover, Blockstack -nodes strive to fetch a full replica of all zone files, and pull zone files from -their neighbors in rarest-first order to prevent zone files from getting lost -while they are propagating. This makes eclipsing a node -maximally difficult -- an attacker would need to disrupt all of a the victim -node's neighbor links. - -In addition to this protocol-level countermeasure, a user has the option of -uploading zone files manually to their preferred Blockstack nodes. If -vigilent users have access to a replica of the zone files, they can re-seed -Blockstack nodes that do not have them. - -## 5.3 Stale Data and Replay Attacks - -A DID's DDO is stored on a 3rd party storage provider. The DDO's public key is -anchored to the blockchain, which means each time the DDO public key changes, -all previous DDOs are invalidated. Similarly, the DDO's storage provider URLs -are anchored to the blockchain, which means each time the DID's zone file -changes, any stale DDOs will no longer be fetched. However, if the user changes -other fields of their DDO, a malicious storage provider or a network adversary -can serve a stale but otherwise valid DDO and the resolver will accept it. - -The user has a choice of which storage providers host their DDO. If the storage -provider serves stale data, the user can and should change their storage -provider to one that will serve only fresh data. In addition, the user should -use secure transport protocols like HTTPS to make replay attacks on the network -difficult. For use cases where these are not sufficient to prevent replay -attacks, the user should change their zone file and/or public key each time they -change their DDO. - -# 6. Privacy Considerations - -Blockstack's DIDs are underpinned by Blockstack IDs (human readable -names), and every Blockstack node records where every DID's DDO is -hosted. However, users have the option of encrypting their DDOs so that only a -select set of other users can decrypt them. - -Blockstack's peer network and DID resolver use HTTP(S), meaning that -intermediate middleboxes like CDNs and firewalls can cache data and log -requests. - -# 7. Reference Implementations - -Blockstack implements a [RESTful API](https://core.blockstack.org) for querying -DIDs. It also implements a [reference -library](https://github.com/blockstack/blockstack.js) for generating well-formed -on-chain transactions, and it implements a [Python -library](https://github.com/blockstack/blockstack/core/blob/master/blockstack/lib/subdomains.py) -for generating off-chain DID operations. The Blockstack node [reference -implementation](https://github.com/blockstack/blockstack-core) is available -under the terms of the General Public Licence, version 3. - -# 8. Resources - -Many Blockstack developers communicate via the [Blockstack -Forum](https://forum.blockstack.org) and via the [Blockstack -Slack](https://blockstack.slack.com). Interested developers are encouraged to -join both. - -# Appendix A: On-chain Wire Formats - -This section is for organizations who want to be able to create and send name operation -transactions to the blockchain(s) Blockstack supports. -It describes the transaction formats for the Bitcoin blockchain. - -Only the transactions that affect DID creation, updates, resolution, and -deletions are documented here. A full listing of all Blockstack transaction -formats can be found -[here](https://github.com/blockstack/blockstack-core/blob/master/docs/wire-format.md). - -## Transaction format - -Each Bitcoin transaction for Blockstack contains signatures from two sets of keys: the name owner, and the payer. The owner `scriptSig` and `scriptPubKey` fields are generated from the key(s) that own the given name. The payer `scriptSig` and `scriptPubKey` fields are used to *subsidize* the operation. The owner keys do not pay for any operations; the owner keys only control the minimum amount of BTC required to make the transaction standard. The payer keys only pay for the transaction's fees, and (when required) they pay the name fee. - -This construction is meant to allow the payer to be wholly separate from the owner. The principal that owns the name can fund their own transactions, or they can create a signed transaction that carries out the desired operation and request some other principal (e.g. a parent organization) to actually pay for and broadcast the transaction. - -The general transaction layout is as follows: - -| **Inputs** | **Outputs** | -| ------------------------ | ----------------------- | -| Owner scriptSig (1) | `OP_RETURN ` (2) | -| Payment scriptSig | Owner scriptPubKey (3) | -| Payment scriptSig... (4) | -| ... (4) | ... (5) | - -(1) The owner `scriptSig` is *always* the first input. -(2) The `OP_RETURN` script that describes the name operation is *always* the first output. -(3) The owner `scriptPubKey` is *always* the second output. -(4) The payer can use as many payment inputs as (s)he likes. -(5) At most one output will be the "change" `scriptPubKey` for the payer. -Different operations require different outputs. - -## Payload Format - -Each Blockstack transaction in Bitcoin describes the name operation within an `OP_RETURN` output. It encodes name ownership, name fees, and payments as `scriptPubKey` outputs. The specific operations are described below. - -Each `OP_RETURN` payload *always* starts with the two-byte string `id` (called the "magic" bytes in this document), followed by a one-byte `op` that describes the operation. - -### NAME_PREORDER - -Op: `?` - -Description: This transaction commits to the *hash* of a name. It is the first -transaction of two transactions that must be sent to register a name in BNS. - -Example: [6730ae09574d5935ffabe3dd63a9341ea54fafae62fde36c27738e9ee9c4e889](https://www.blocktrail.com/BTC/tx/6730ae09574d5935ffabe3dd63a9341ea54fafae62fde36c27738e9ee9c4e889) - -`OP_RETURN` wire format: -``` - 0 2 3 23 39 - |-----|--|--------------------------------------------------|--------------| - magic op hash_name(name.ns_id,script_pubkey,register_addr) consensus hash -``` - -Inputs: -* Payment `scriptSig`'s - -Outputs: -* `OP_RETURN` payload -* Payment `scriptPubkey` script for change -* `p2pkh` `scriptPubkey` to the burn address (0x00000000000000000000000000000000000000) - -Notes: -* `register_addr` is a base58check-encoded `ripemd160(sha256(pubkey))` (i.e. an address). This address **must not** have been used before in the underlying blockchain. -* `script_pubkey` is either a `p2pkh` or `p2sh` compiled Bitcoin script for the payer's address. - -### NAME_REGISTRATION - -Op: `:` - -Description: This transaction reveals the name whose hash was announced by a -previous `NAME_PREORDER`. It is the second of two transactions that must be -sent to register a name in BNS. - -When this transaction confirms, the corresponding Blockstack DID will be -instantiated. It's address will be the owner address in this transaction, and -its index will be equal to the number of names registered to this address previously. - -Example: [55b8b42fc3e3d23cbc0f07d38edae6a451dfc512b770fd7903725f9e465b2925](https://www.blocktrail.com/BTC/tx/55b8b42fc3e3d23cbc0f07d38edae6a451dfc512b770fd7903725f9e465b2925) - -`OP_RETURN` wire format (2 variations allowed): - -Variation 1: -``` - 0 2 3 39 - |----|--|-----------------------------| - magic op name.ns_id (37 bytes) -``` - -Variation 2: -``` - 0 2 3 39 59 - |----|--|----------------------------------|-------------------| - magic op name.ns_id (37 bytes, 0-padded) value -``` - -Inputs: -* Payer `scriptSig`'s - -Outputs: -* `OP_RETURN` payload -* `scriptPubkey` for the owner's address -* `scriptPubkey` for the payer's change - -Notes: - -* Variation 1 simply registers the name. Variation 2 will register the name and -set a name value simultaneously. This is used in practice to set a zone file -hash for a name without the extra `NAME_UPDATE` transaction. -* Both variations are supported. Variation 1 was designed for the time when - Bitcoin only supported 40-byte `OP_RETURN` outputs. - -### NAME_RENEWAL - -Op: `:` - -Description: This transaction renews a name in BNS. The name must still be -registered and not expired, and owned by the transaction sender. - -Depending on which namespace the name was created in, you may never need to -renew a name. However, in namespaces where names expire (such as `.id`), you -will need to renew your name periodically to continue using its associated DID. -If this is a problem, we recommend creating a name in a namespace without name -expirations, so that `NAME_UPDATE`, `NAME_TRANSFER` and `NAME_REVOKE` -- the operations that -underpin the DID's operations -- will work indefinitely. - -Example: [e543211b18e5d29fd3de7c0242cb017115f6a22ad5c6d51cf39e2b87447b7e65](https://www.blocktrail.com/BTC/tx/e543211b18e5d29fd3de7c0242cb017115f6a22ad5c6d51cf39e2b87447b7e65) - -`OP_RETURN` wire format (2 variations allowed): - -Variation 1: -``` - 0 2 3 39 - |----|--|-----------------------------| - magic op name.ns_id (37 bytes) -``` - -Variation 2: -``` - 0 2 3 39 59 - |----|--|----------------------------------|-------------------| - magic op name.ns_id (37 bytes, 0-padded) value -``` - -Inputs: - -* Payer `scriptSig`'s - -Outputs: - -* `OP_RETURN` payload -* `scriptPubkey` for the owner's addess. This can be a different address than - the current name owner (in which case, the name is renewed and transferred). -* `scriptPubkey` for the payer's change -* `scriptPubkey` for the burn address (to pay the name cost) - -Notes: - -* This transaction is identical to a `NAME_REGISTRATION`, except for the presence of the fourth output that pays for the name cost (to the burn address). -* Variation 1 simply renews the name. Variation 2 will both renew the name and - set a new name value (in practice, the hash of a new zone file). -* Both variations are supported. Variation 1 was designed for the time when - Bitcoin only supported 40-byte `OP_RETURN` outputs. -* This operation can be used to transfer a name to a new address by setting the - second output (the first `scriptPubkey`) to be the `scriptPubkey` of the new - owner key. - -### NAME_UPDATE - -Op: `+` - -Description: This transaction sets the name state for a name to the given -`value`. In practice, this is used to announce new DNS zone file hashes to the [Atlas -network](https://docs.blockstack.org/core/atlas/overview.html), and in doing so, -change where the name's off-chain state resides. In DID terminology, this -operation changes where the authoritative replica of the DID's DDO will be -retrieved on the DID's lookup. - -Example: [e2029990fa75e9fc642f149dad196ac6b64b9c4a6db254f23a580b7508fc34d7](https://www.blocktrail.com/BTC/tx/e2029990fa75e9fc642f149dad196ac6b64b9c4a6db254f23a580b7508fc34d7) - -`OP_RETURN` wire format: -``` - 0 2 3 19 39 - |-----|--|-----------------------------------|-----------------------| - magic op hash128(name.ns_id,consensus hash) zone file hash -``` - -Note that `hash128(name.ns_id, consensus hash)` is the first 16 bytes of a SHA256 hash over the name concatenated to the hexadecimal string of the consensus hash (not the bytes corresponding to that hex string). -See the [Method Glossary](#method-glossary) below. - -Example: `hash128("jude.id" + "8d8762c37d82360b84cf4d87f32f7754") == "d1062edb9ec9c85ad1aca6d37f2f5793"`. - -The 20 byte zone file hash is computed from zone file data by using `ripemd160(sha56(zone file data))` - -Inputs: -* owner `scriptSig` -* payment `scriptSig`'s - -Outputs: -* `OP_RETURN` payload -* owner's `scriptPubkey` -* payment `scriptPubkey` change - -### NAME_TRANSFER - -Op: `>` - -Description: This transaction changes the public key hash that owns the name in -BNS. When the name or its DID is looked up after this transaction confirms, the -resolver will list the new public key as the owner. - -Example: [7a0a3bb7d39b89c3638abc369c85b5c028d0a55d7804ba1953ff19b0125f3c24](https://www.blocktrail.com/BTC/tx/7a0a3bb7d39b89c3638abc369c85b5c028d0a55d7804ba1953ff19b0125f3c24) - -`OP_RETURN` wire format: -``` - 0 2 3 4 20 36 - |-----|--|----|-------------------|---------------| - magic op keep hash128(name.ns_id) consensus hash - data? -``` - -Inputs: - -* Owner `scriptSig` -* Payment `scriptSig`'s - -Outputs: - -* `OP_RETURN` payload -* new name owner's `scriptPubkey` -* old name owner's `scriptPubkey` -* payment `scriptPubkey` change - -Notes: - -* The `keep data?` byte controls whether or not the name's 20-byte value is preserved (i.e. whether or not the name's associated zone file is preserved across the transfer). -This value is either `>` to preserve it, or `~` to delete it. If you're simply -re-keying, you should use `>`. You should only use `~` if you want to -simultaneously dissociate the name (and its DID) from its off-chain state, like -the DID's DDO. - -### NAME_REVOKE - -Op: `~` - -Description: This transaction destroys a registered name. Its name state value -in BNS will be cleared, and no further transactions will be able to affect the -name until it expires (if its namespace allows it to expire at all). Once -confirmed, this transaction ensures that neither the name nor the DID will -resolve to a DDO. - -Example: [eb2e84a45cf411e528185a98cd5fb45ed349843a83d39fd4dff2de47adad8c8f](https://www.blocktrail.com/BTC/tx/eb2e84a45cf411e528185a98cd5fb45ed349843a83d39fd4dff2de47adad8c8f) - -`OP_RETURN` wire format: -``` - 0 2 3 39 - |----|--|-----------------------------| - magic op name.ns_id (37 bytes) -``` - -Inputs: - -* owner `scriptSig` -* payment `scriptSig`'s - -Outputs: - -* `OP_RETURN` payload -* owner `scriptPubkey` -* payment `scriptPubkey` change - -## Method Glossary - -Some hashing primitives are used to construct the wire-format representation of each name operation. They are enumerated here: - -``` -B40_REGEX = '^[a-z0-9\-_.+]*$' - -def is_b40(s): - return isinstance(s, str) and re.match(B40_REGEX, s) is not None - -def b40_to_bin(s): - if not is_b40(s): - raise ValueError('{} must only contain characters in the b40 char set'.format(s)) - return unhexlify(charset_to_hex(s, B40_CHARS)) - -def hexpad(x): - return ('0' * (len(x) % 2)) + x - -def charset_to_hex(s, original_charset): - return hexpad(change_charset(s, original_charset, B16_CHARS)) - -def bin_hash160(s, hex_format=False): - """ s is in hex or binary format - """ - if hex_format and is_hex(s): - s = unhexlify(s) - return hashlib.new('ripemd160', bin_sha256(s)).digest() - -def hex_hash160(s, hex_format=False): - """ s is in hex or binary format - """ - if hex_format and is_hex(s): - s = unhexlify(s) - return hexlify(bin_hash160(s)) - -def hash_name(name, script_pubkey, register_addr=None): - """ - Generate the hash over a name and hex-string script pubkey. - Returns the hex-encoded string RIPEMD160(SHA256(x)), where - x is the byte string composed of the concatenation of the - binary - """ - bin_name = b40_to_bin(name) - name_and_pubkey = bin_name + unhexlify(script_pubkey) - - if register_addr is not None: - name_and_pubkey += str(register_addr) - - # make hex-encoded hash - return hex_hash160(name_and_pubkey) - -def hash128(data): - """ - Hash a string of data by taking its 256-bit sha256 and truncating it to the - first 16 bytes - """ - return hexlify(bin_sha256(data)[0:16]) -``` - diff --git a/core/blockstack_naming_service.md b/core/blockstack_naming_service.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/blockstack_naming_service.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/cli.md b/core/cli.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/cli.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/faq_evaluators.md b/core/faq_evaluators.md deleted file mode 100644 index 5e14be31..00000000 --- a/core/faq_evaluators.md +++ /dev/null @@ -1,148 +0,0 @@ -## What is the Blockstack ecosystem - -In the Blockstack ecosystem, users control their data and apps run on their devices. There -are no middlemen, no passwords, no massive data silos to breach, and no services -tracking us around the internet. - -The applications on blockstack are server-less and decentralized. Developers -start by building a single-page application in Javascript, Then, instead of -plugging the frontend into a centralized API, they plug into an API run by the -user. Developers install a library called `blockstack.js` and don't have to -worry about running servers, maintaining databases, or building out user -management systems. - -Personal user APIs ship with the Blockstack app and handle everything from -identity and authentication to data storage. Applications can request -permissions from users and then gain read and write access to user resources. - -Data storage is simple and reliable and uses existing cloud infrastructure. -Users connect with their Dropbox, Google Drive, S3, etc... and data is synced -from their local device up to their cloud. - -Identity is user-controlled and utilizes the blockchain for secure management of -keys, devices and usernames. When users login with apps, they are anonymous by -default and use an app-specific key, but their full identity can be revealed and -proven at any time. Keys are for signing and encryption and can be changed as -devices need to be added or removed. - -Under the hood, Blockstack provides a decentralized domain name system (DNS), -decentralized public key distribution system, and registry for apps and user -identities. - -## What problems does Blockstack solve? - -Developers can now build Web applications where: - -- you own your data, not the application -- you control where your data is stored -- you control who can access your data - -Developers can now build Web applications where: - -- you don't have to deal with passwords -- you don't have to host everyone's data -- you don't have to run app-specific servers - -Right now, Web application users are "digital serfs" and applications are the "digital landlords". Users don't own their data; the app owns it. Users don't control where data gets stored; they can only store it on the application. Users don't control access to it; they only advise the application on how to control access (which the application can ignore). - -Blockstack applications solve both sets of problems. Users pick and choose highly-available storage providers like Dropbox or BitTorrent to host their data, and applications read it with the user's consent. Blockstack ensures that all data is signed and verified and (optionally) encrypted end-to-end, so users can treat storage providers like dumb hard drives: if you don't like yours, you can swap it out with a better one. Users can take their data with them if they leave the application, since it was never the application's in the first place. - -At the same time, developers are no longer on the hook for hosting user data. Since users bring their own storage and use public-key cryptography for authentication, applications don't have to store anything--there's nothing to steal when they get hacked. Moreover, many Web applications today can be re-factored so that everything happens client-side, obviating the need for running dedicated application servers. - - -## What is a Blockstack ID? - -Blockstack IDs are usernames. Unlike normal Web app usernames, Blockstack IDs -are usable *across every Blockstack app.* They fill a similar role to -centralized single-signon services like Facebook or Google. However, you and -only you control your Blockstack ID, and no one can track your logins. - -## How do I get a Blockstack ID? - -If you use the [Blockstack Browser]({{ site.baseurl }}/browser/browser-introduction.html) to create a -new ID. - -## Why do I need a Blockstack ID? - -Blockstack IDs are used to discover where you are keeping your -(publicly-readable) application data. For example, if `alice.id` wants to share -a document with `bob.id`, then `bob.id`'s browser uses the Blockstack ID -`alice.id` to look up where `alice.id` stored it. - -The technical descriptions of how and why this works are quite long. -Please see the [Blockstack Naming Service]({{site.baseurl}}/core/naming/introduction.html) -documentation for a full description. - -= - -## What components make ups the Blockstack ecosystem? - -The components that make up Blockstack do not have any central points of -control. - -* The [Blockstack Naming Service]({{ site.baseurl }}/core/naming/introduction.html) runs on top of - the Bitcoin blockchain, which itself is decentralized. It binds Blockstack -IDs to a small amount of on-chain data (usually a hash of off-chain data). -* The [Atlas Peer Network]({{ site.baseurl }}/core/atlas/overview.html) stores chunks of data referenced by -names in BNS. It operates under similar design principles to BitTorrent, and -has no single points of failure. The network is self-healing---if a node -crashes, it quickly recovers all of its state from its peers. -* The [Gaia storage system](https://github.com/blockstack/gaia) lets users - choose where their application data gets hosted. Gaia reduces all storage -systems---from cloud storage to peer-to-peer networks---to dumb, interchangeable -hard drives. Users have maximum flexibility and control over their data in a -way that is transparent to app developers. - - -## Blockstack vs Ethereum - -Blockstack and Ethereum both strive to provide a decentralized application -platform. Blockstack's design philosophy differs from Ethereum's design -philosophy in that Blockstack emphasizes treating the blockchain as a "dumb -ledger" with no special functionality or properties beyond a few bare minimum -requirements. Instead, it strives to do everything off-chain---an application of the [end-to-end principle](https://en.wikipedia.org/wiki/End-to-end_principle). -Most Blockstack applications do *not* -interact with the blockchain, and instead interact with Blockstack -infrastructure through client libraries and RESTful endpoints. -This is evidenced by Blockstack's decision to implement its naming system (BNS), discovery and routing system -(Atlas), and storage system (Gaia) as blockchain-agnostic components that can be -ported from one blockchain to another. - -Ethereum takes the opposite approach. Ethereum dapps are expected to interface -directly with on-chain smart contract logic, and are expected to host a -non-trivial amount of state in the blockchain itself. This is necessary for -them, because many Ethereum dapps' business logic is centered around the -mechanics of an ERC20 token. - -Blockstack does not implement a smart contract system (yet), but it will soon -implement a [native token](https://blockstack.com/distribution.pdf) that will be -accessible to Blockstack applications. - - -## What's the difference between Onename and Blockstack? - -Onename is the free Blockstack ID registrar run by Blockstack. It makes it easy to register your name and setup your profile. Once the name has been registered in Onename you can transfer it to a wallet you control, or leave it there and use it as you like. - -## How is Blockstack different from Namecoin? - -Blockstack DNS differs from Namecoin DNS in a few fundamental ways: blockchain layering, storage models, name pricing models, and incentives for miners. We wrote a post where you can learn more here: https://blockstack.org/docs/blockstack-vs-namecoin - -## I heard you guys were on Namecoin, what blockchain do you use now? - -We use the Bitcoin blockchain for our source of truth. - -## How long has the project been around? - -Work on the project started in late 2013. First public commits on the code are -from Jan 2014. The first registrar for Blockstack was launched in March 2014 and -the project has been growing since then. - -## Who started the project? Who maintains it? - -The project was started by two engineers from Princeton University. Muneeb Ali -and Ryan Shea met at the Computer Science department at Princeton, where Muneeb -was finishing his PhD and Ryan was running the enterprenurship club. In 2014, -frustrated by the walled-gardens and security problems of the current internet -they started working on a decentralized internet secured by blockchains. A full -list of contributors can be found -[here](https://github.com/blockstack/blockstack-core/graphs/contributors). diff --git a/core/gaia.md b/core/gaia.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/gaia.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/glossary.md b/core/glossary.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/glossary.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/interactive_regtest_macros.md b/core/interactive_regtest_macros.md deleted file mode 100644 index cc4a5359..00000000 --- a/core/interactive_regtest_macros.md +++ /dev/null @@ -1,3 +0,0 @@ -Documentation for setting up the regtest mode for Blockstack Browser -using core's integration tests in macOS and Linux has -moved [here](../integration_tests). diff --git a/core/namespace_creation.md b/core/namespace_creation.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/namespace_creation.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/openbazaar.md b/core/openbazaar.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/openbazaar.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/resolver.md b/core/resolver.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/resolver.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/search.md b/core/search.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/search.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks. diff --git a/core/setup_core_portal.md b/core/setup_core_portal.md deleted file mode 100644 index 98b0d83a..00000000 --- a/core/setup_core_portal.md +++ /dev/null @@ -1,67 +0,0 @@ -# About - -This document is for **Linux users who do not want to use Docker** to run the -Blockstack Browser. Instructions are tailored for Ubuntu, but are similar on other distributions. - -# Setting up Blockstack Browser Node Application - -Install NodeJS through NodeSource PPA - -``` -curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - -sudo apt install -y nodejs -``` - -Download Blockstack Browser and install its dependencies - -``` -git clone https://github.com/blockstack/blockstack-browser.git -cd blockstack-browser -npm install node-sass -npm install -``` - -Note that `blockstack-browser` depends on `node-sass` which can sometimes install strangely on Linux, running `npm install node-sass` before trying to install the other dependencies solves that problem. - -# Running Blockstack Browser - -Start the CORS proxy. - -``` -npm run dev-proxy & -``` - -Start the Node Application - -``` -npm run dev -``` - -Then you can open `http://localhost:3000/` in your browser to get to the Blockstack Browser. - - -## Setting up a protocol handler - -If you'd like your browser to automatically handle links with the `blockstack:` protocol specifier, you will need to register a protocol handler with your desktop environment. In Ubuntu/Gnome, this can be done by creating a file - -`~/.local/share/applications/blockstack.desktop` - -With the following contents: - -``` -[Desktop Entry] -Type=Application -Terminal=false -Exec=bash -c 'xdg-open http://localhost:3000/auth?authRequest=$(echo "%u" | sed s,blockstack:////*,,)' -Name=Blockstack-Browser -MimeType=x-scheme-handler/blockstack; -``` - -Then you need to make this file executable, and register it as a protocol handler. - -``` -$ chmod +x ~/.local/share/applications/blockstack.desktop -$ xdg-mime default blockstack.desktop x-scheme-handler/blockstack -``` - -Now, `blockstack:` protocol URLs should get handled by your Blockstack Browser. If you're running Browser in your browser's private mode, you may have to copy and paste the link, as this protocol handler will try to open in a regular browser window. diff --git a/core/subdomain.md b/core/subdomain.md deleted file mode 100644 index ecdb12ac..00000000 --- a/core/subdomain.md +++ /dev/null @@ -1 +0,0 @@ -The documentation has been moved to [docs.blockstack.org](https://docs.blockstack.org/), please update your bookmarks.