From 65821241055195f598133726ab8ee5a1cb76c352 Mon Sep 17 00:00:00 2001
From: "github-classroom[bot]"
<66690702+github-classroom[bot]@users.noreply.github.com>
Date: Tue, 20 Feb 2024 16:47:22 +0000
Subject: [PATCH] Initial commit
---
.circleci/config.yml | 49 ++
.circleci/note.txt | 2 +
.github/ISSUE_TEMPLATE/spike-template.md | 9 +
.github/ISSUE_TEMPLATE/task-template.md | 11 +
.github/ISSUE_TEMPLATE/user-story-template.md | 18 +
.github/note.txt | 2 +
.github/workflows/event-logger.yml | 56 ++
.gitignore | 129 ++++
CONTRIBUTING.md | 2 +
LICENSE.md | 674 ++++++++++++++++++
README.md | 19 +
UX-DESIGN.md | 8 +
automations/.clasp.json | 4 +
automations/Charts.js | 85 +++
automations/Code.js | 56 ++
automations/README.md | 14 +
automations/appsscript.json | 10 +
back-end/readme.txt | 3 +
front-end/readme.txt | 4 +
github_username_settings.png | Bin 0 -> 371637 bytes
instructions-0a-app-map-wireframes.md | 117 +++
instructions-0b-prototyping.md | 22 +
instructions-0c-project-setup.md | 152 ++++
instructions-0d-sprint-planning.md | 62 ++
instructions-1-front-end.md | 42 ++
instructions-2-back-end.md | 23 +
instructions-3-database.md | 27 +
instructions-4-deployment.md | 26 +
ux-design/prototype/readme.txt | 1 +
ux-design/readme.txt | 3 +
ux-design/wireframes.drawio | 1 +
31 files changed, 1631 insertions(+)
create mode 100644 .circleci/config.yml
create mode 100644 .circleci/note.txt
create mode 100644 .github/ISSUE_TEMPLATE/spike-template.md
create mode 100644 .github/ISSUE_TEMPLATE/task-template.md
create mode 100644 .github/ISSUE_TEMPLATE/user-story-template.md
create mode 100644 .github/note.txt
create mode 100644 .github/workflows/event-logger.yml
create mode 100644 .gitignore
create mode 100644 CONTRIBUTING.md
create mode 100644 LICENSE.md
create mode 100644 README.md
create mode 100644 UX-DESIGN.md
create mode 100644 automations/.clasp.json
create mode 100644 automations/Charts.js
create mode 100644 automations/Code.js
create mode 100644 automations/README.md
create mode 100644 automations/appsscript.json
create mode 100644 back-end/readme.txt
create mode 100644 front-end/readme.txt
create mode 100644 github_username_settings.png
create mode 100644 instructions-0a-app-map-wireframes.md
create mode 100644 instructions-0b-prototyping.md
create mode 100644 instructions-0c-project-setup.md
create mode 100644 instructions-0d-sprint-planning.md
create mode 100644 instructions-1-front-end.md
create mode 100644 instructions-2-back-end.md
create mode 100644 instructions-3-database.md
create mode 100644 instructions-4-deployment.md
create mode 100644 ux-design/prototype/readme.txt
create mode 100644 ux-design/readme.txt
create mode 100644 ux-design/wireframes.drawio
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..bd66ea4
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,49 @@
+# Use the latest 2.1 version of CircleCI pipeline process engine.
+# See: https://circleci.com/docs/2.0/configuration-reference
+version: 2.1
+
+# Define the jobs we want to run for this project
+jobs:
+ build-and-test-express-js:
+ docker:
+ - image: cimg/node:16.13.0 # latest stable node at the time of writing
+ # auth:
+ # username: mydockerhub-user
+ # password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
+ steps:
+ - checkout
+ - run: echo "this is the build and test express.js job"
+ - run: |
+ cd back-end
+ pwd # for debugging: show current working directory
+ ls # for debugging: show sub-directories in here
+ - run: |
+ cd back-end
+ npm install # install all dependencies listed in package.json
+ npm test # run all unit tests
+ build-react-js:
+ docker:
+ - image: cimg/node:16.13.0 # latest stable node at the time of writing
+ # auth:
+ # username: mydockerhub-user
+ # password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
+ steps:
+ - checkout
+ - run: echo "this is the build react.js job"
+ - run: |
+ cd back-end
+ pwd # for debugging: show current working directory
+ ls # for debugging: show sub-directories in here
+ - run: |
+ cd front-end
+ npm install # install all dependencies listed in package.json
+ npm run build # have react build the stand-alone front-end code
+
+# Orchestrate our job run sequence
+workflows:
+ build-and-test-back-end:
+ jobs:
+ - build-and-test-express-js
+ build-front-end:
+ jobs:
+ - build-react-js
diff --git a/.circleci/note.txt b/.circleci/note.txt
new file mode 100644
index 0000000..c9363c5
--- /dev/null
+++ b/.circleci/note.txt
@@ -0,0 +1,2 @@
+The file in this directory named config.yml contains configuration settings for Circle-CI (https://circleci.com).
+There is no need to touch files in this directory.
diff --git a/.github/ISSUE_TEMPLATE/spike-template.md b/.github/ISSUE_TEMPLATE/spike-template.md
new file mode 100644
index 0000000..a5f0f04
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/spike-template.md
@@ -0,0 +1,9 @@
+---
+name: Spike Template
+about: A template to use for Spikes
+title: ""
+labels: spike
+assignees: ""
+---
+
+_By definition, this `spike` is not related to any specific User Story._
diff --git a/.github/ISSUE_TEMPLATE/task-template.md b/.github/ISSUE_TEMPLATE/task-template.md
new file mode 100644
index 0000000..04d87eb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/task-template.md
@@ -0,0 +1,11 @@
+---
+name: Task Template
+about: A template to use for Tasks
+title: ""
+labels: task
+assignees: ""
+---
+
+Related to User Story #?
+
+_By definition, this `task` represents one unit of work that is part of the implementation of a single user story._
diff --git a/.github/ISSUE_TEMPLATE/user-story-template.md b/.github/ISSUE_TEMPLATE/user-story-template.md
new file mode 100644
index 0000000..7d1e6e3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/user-story-template.md
@@ -0,0 +1,18 @@
+---
+name: User Story Template
+about: A template to use for User Stories
+title: ""
+labels: user story
+assignees: ""
+---
+
+## Estimation of effort (optional)
+
+- TBD
+
+## Acceptance criteria (optional)
+
+- [ ] foo
+- [ ] bar
+- [ ] baz
+- [ ] etc
diff --git a/.github/note.txt b/.github/note.txt
new file mode 100644
index 0000000..0dde06d
--- /dev/null
+++ b/.github/note.txt
@@ -0,0 +1,2 @@
+The files in this directory contain configuration settings for GitHub Actions (https://docs.github.com/en/actions).
+Do not modify the given files, although you are welcome to add additional files as needed.
diff --git a/.github/workflows/event-logger.yml b/.github/workflows/event-logger.yml
new file mode 100644
index 0000000..0fc53a0
--- /dev/null
+++ b/.github/workflows/event-logger.yml
@@ -0,0 +1,56 @@
+name: log github events
+on:
+ push:
+ branches: [main, master]
+ pull_request:
+ types: [opened, closed]
+ branches: [main, master]
+jobs:
+ log:
+ runs-on: ubuntu-latest
+ env:
+ COMMIT_LOG_API: ${{ secrets.COMMIT_LOG_API }}
+ GITHUB_LOGIN: ${{ github.actor }} # github login also available in github.triggering_actor, github.event.sender.login
+ COMMITS: ${{ toJSON(github.event.commits) }}
+ REPOSITORY_URL: ${{ github.repositoryUrl }}
+ EVENT_TYPE: ${{ github.event_name }}
+ EVENT_ACTION: ${{ github.event.action }}
+ PR_MERGED: ${{ github.event.pull_request.merged }}
+ PR_CREATED_AT: ${{ github.event.pull_request.created_at}}
+ PR_CLOSED_AT: ${{ github.event.pull_request.closed_at}}
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # this is important so git fetches all history.. the actions/checkout by default fetches all history as one commit which throws off stats
+ - uses: actions/setup-python@v3
+ with:
+ python-version: "^3.9"
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install --user pipenv
+ pipenv install pytz
+ pipenv install python-dateutil
+ pipenv install build
+ pipenv install requests
+ pipenv install gitcommitlogger
+ - name: Log pull request opened
+ if: github.event_name == 'pull_request' && github.event.action == 'opened'
+ run: |
+ pipenv run gitcommitlogger -r $(echo $REPOSITORY_URL) -t pull_request_opened -d $(echo $PR_CREATED_AT) -un $(echo $GITHUB_LOGIN) -o commit_stats.csv -u $(echo $COMMIT_LOG_API) -v
+ - name: Log pull request closed and merged
+ if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
+ run: |
+ echo $COMMITS > commits.json
+ cat commits.json # debugging
+ pipenv run gitcommitlogger -r $(echo $REPOSITORY_URL) -t pull_request_merged -d $(echo $PR_CLOSED_AT) -un $(echo $GITHUB_LOGIN) -i commits.json -o commit_stats.csv -u $(echo $COMMIT_LOG_API) -v
+ - name: Log pull request closed without merge
+ if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == false
+ run: |
+ pipenv run gitcommitlogger -r $(echo $REPOSITORY_URL) -t pull_request_closed -d $(echo $PR_CLOSED_AT) -un $(echo $GITHUB_LOGIN) -o commit_stats.csv -u $(echo $COMMIT_LOG_API) -v
+ - name: Log push
+ if: github.event_name == 'push'
+ run: |
+ echo $COMMITS > commits.json
+ cat commits.json # debugging
+ pipenv run gitcommitlogger -r $(echo $REPOSITORY_URL) -t $(echo $EVENT_TYPE) -i commits.json -o commit_stats.csv -u $(echo $COMMIT_LOG_API) -v
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8b9cb32
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,129 @@
+# Compiled source #
+###################
+*.com
+*.class
+*.dll
+*.exe
+*.o
+*.so
+
+# Packages #
+############
+# it's better to unpack these files and commit the raw source
+# git has its own built in compression methods
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+
+# Logs and databases #
+######################
+*.log
+*.sql
+*.sqlite
+
+# OS generated files #
+######################
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
+# Typical Node.js artifacts #
+#############################
+
+# Lock file so we don't bloat the git log stats
+package-lock.json
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+**/node_modules/
+jspm_packages/
+**/jspm_packages
+
+# Results of React build script
+build/
+**/build/
+
+# React dependencies
+.pnp
+.pnp.js
+
+# dotconfig artifacts
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# next.js build output
+.next
+
+
+## Emacs artefacts ##
+*~
+
+## Jekyll artifacts
+**/.jekyll-cache
+**/_site/
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..d5bee28
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,2 @@
+# Guide to Contributing
+Delete the contents of this file and replace with the contents of a proper guide to contributing to this project, as described in the [instructions](./instructions.md)
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..a5eae15
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc.
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+ Preamble
+
+The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+
+"This License" refers to version 3 of the GNU General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+
+The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+The Corresponding Source for a work in source code form is that
+same work.
+
+2. Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+4. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+7. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+8. Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dcc4059
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# Project Repository
+
+This repository will be used for team projects.
+
+Several sets of instructions are included in this repository. They should each be treated as separate assignments with their own due dates and sets of requirements.
+
+1. See the [App Map & Wireframes](instructions-0a-app-map-wireframes.md) and [Prototyping](./instructions-0b-prototyping.md) instructions for the requirements of the initial user experience design of the app.
+
+1. Delete the contents of this file and replace with the contents of a proper README.md, as described in the [project setup instructions](./instructions-0c-project-setup.md)
+
+1. See the [Sprint Planning instructions](instructions-0d-sprint-planning.md) for the requirements of Sprint Planning for each Sprint.
+
+1. See the [Front-End Development instructions](./instructions-1-front-end.md) for the requirements of the initial Front-End Development.
+
+1. See the [Back-End Development instructions](./instructions-2-back-end.md) for the requirements of the initial Back-End Development.
+
+1. See the [Database Integration instructions](./instructions-3-database.md) for the requirements of integrating a database into the back-end.
+
+1. See the [Deployment instructions](./instructions-4-deployment.md) for the requirements of deploying an app.
diff --git a/UX-DESIGN.md b/UX-DESIGN.md
new file mode 100644
index 0000000..783b085
--- /dev/null
+++ b/UX-DESIGN.md
@@ -0,0 +1,8 @@
+# User Experience Design
+
+This repository contains instructions and files for two assignments that together comprise the user experience design phase of a web app.
+
+Replace the contents of this file with the completed assignments, as described in:
+
+- [app map & wireframe instructions](instructions-0a-app-map-wireframes.md).
+- [prototype instructions](instructions-0b-prototyping.md)
diff --git a/automations/.clasp.json b/automations/.clasp.json
new file mode 100644
index 0000000..aa11a3a
--- /dev/null
+++ b/automations/.clasp.json
@@ -0,0 +1,4 @@
+{
+ "scriptId": "1d-At2A2QTQAobdXicLsAai-_P7OrYovTa4qYOWbtV-3CjJaE8XztRgQ6",
+ "rootDir": "/Users/foobarstein/Documents/courant/courses/agile-dev-devops/generic-mern-stack-project/automations"
+}
diff --git a/automations/Charts.js b/automations/Charts.js
new file mode 100644
index 0000000..ea37665
--- /dev/null
+++ b/automations/Charts.js
@@ -0,0 +1,85 @@
+function emailSprint1ChartsToMe() {
+ emailChartsToMe('Sprint 1 - Team Plots')
+}
+
+function emailSprint2ChartsToMe() {
+ emailChartsToMe('Sprint 2 - Team Plots')
+}
+
+function emailSprint3ChartsToMe() {
+ emailChartsToMe('Sprint 3 - Team Plots')
+}
+
+function emailSprint4ChartsToMe() {
+ emailChartsToMe('Sprint 4 - Team Plots')
+}
+
+function emailChartsToMe(sheetName) {
+ const charts = getCharts(sheetName)
+ const to = Session.getActiveUser().getEmail();
+ const replyTo = "no-reply@knowledge.kitchen"
+ const subject = "Agile Software Development & DevOps - Team Contribution Charts"
+ const message = generateEmail(charts)
+ const options = {
+ replyTo: replyTo
+ }
+
+ // prepare inline image object
+ const inlineImages = {}
+ charts.forEach( (chart, i) => {
+ inlineImages[`chart_${i}`] = chart
+ })
+
+ // GmailApp.sendEmail(to, subject, message, options);
+ // Send message with inlineImages object, matching embedded tags.
+ MailApp.sendEmail(to, subject, "", {
+ htmlBody: message,
+ inlineImages: inlineImages
+ });
+
+ Logger.log(message)
+}
+
+function generateEmail(charts) {
+ let imageTags = []
+ charts.forEach( (chart, i) => {
+ const tag = ``
+ imageTags.push(tag)
+ })
+ imageTags = imageTags.join('
') // convert to string with line break separator
+ const message = `Charts
${imageTags}`
+ return message
+}
+
+function generateHtml(sheetName, charts) {
+ // data:image/gif;base64,
+ let imageTags = []
+ charts.forEach( (chart, i) => {
+ const chartData = Utilities.base64Encode(chart.getBytes()) // get base64 encoded data for this chart
+ const tag = ``
+ imageTags.push(tag)
+ })
+ imageTags = imageTags.join('
') // convert to string with line break separator
+ const message = `${sheetName}
${imageTags}`
+ return message
+}
+
+function getCharts(sheetName) {
+ // get all charts
+ // const sheet = SpreadsheetApp.getActiveSheet();
+ const ss = SpreadsheetApp.getActiveSpreadsheet() // container spreadsheet
+ let sheet = ss.getSheetByName(sheetName) // specific worksheet
+ const range = sheet.getRange("A:Z")
+ const charts = sheet.getCharts()
+
+ // loop through charts
+ const images = []
+ charts.forEach( (chart, i) => {
+ Logger.log(`chart id: ${chart.getChartId()}`)
+ // Logger.log(JSON.stringify(chart.getOptions(), null, 2))
+ const image = chart.getAs('image/png')
+ image.setName(`chart_${i}`)
+ images.push(image) // add to array
+ })
+ return images
+}
diff --git a/automations/Code.js b/automations/Code.js
new file mode 100644
index 0000000..8572962
--- /dev/null
+++ b/automations/Code.js
@@ -0,0 +1,56 @@
+const getConfig = () => {
+ // global settings
+ return {
+ defaultChartSheetName: 'Sprint 1 - Team Plots',
+ logsSheetName: 'GitHub Logs',
+ logsSheetFields: ['repository', 'event', 'id', 'username', 'email', 'date', 'message', 'num_files', 'num_additions', 'num_deletions']
+ }
+}
+
+const getSheet = () => {
+ const config = getConfig()
+ const ss = SpreadsheetApp.getActiveSpreadsheet() // container spreadsheet
+ let sheet = ss.getSheetByName(config.logsSheetName) // specific worksheet
+ if (sheet == null) {
+ // create worksheet if none
+ sheet = ss.insertSheet(config.logsSheetName)
+ sheet.appendRow(config.logsSheetFields) // heading row
+ }
+ return sheet
+}
+
+function doGet(e) {
+ // get the sheet name with the charts from the query string
+ const config = getConfig()
+ // we expect a `sheet` query string in the request
+ const sheetName = (e.parameter["sheet"]) ? decodeURIComponent(e.parameter["sheet"]) : config.defaultChartSheetName
+ Logger.log(`Loading charts from sheet: ${sheetName}`)
+ charts = getCharts(sheetName)
+ const content = generateHtml(sheetName, charts)
+ return HtmlService.createHtmlOutput(content)
+}
+
+function doPost(e) {
+ console.log("Incoming post request")
+ console.log(JSON.stringify(e, null, 2))
+ const sheet = getSheet()
+ const res = {
+ type: 'post',
+ e: e
+ }
+ const commit_data = JSON.parse(e.postData.contents); // should be an array of objects
+ if (Array.isArray(commit_data)) {
+ for (let i=0; iJwH9YTGB!oViAK;zuWyJj3o%Ui(b;bBU7*hM$-PXMcB5KT)SOKt98Bzb@l4u$@JoCSiO$Pq4|vV0N8b|
zYmHT=AHNJuF|sgg@v0=J3FaT*JG^eIYoK=L6B|xkn34&NNZle(bQ;DmFBF6Nyl=nb
zP)e_}-mP%5&)!*8?FGWs^j)eBq03IsL_1^x^4hie=BDuLveK!orwbjNvSy-FOeLFm
zjx59#1dm(=9r|3lseKOgvgLRb{yc>gpKVCXL}DEV4r>zNG+XEgAMk_94y-OHyncwY
zcO-#6HY`rLF4g+_8+@t`GtiQ9W`21d+3(_s=YhM!Sawx3#KDF~?HmKFxuv$Yc4nrQ
zD0WdfDp@pvWCzWrdWi&4fwhN#|4x2-NGJR2WFv%;RiI)SKA-3
zdj5vz;1MFIfx*Vh<4cy}P7g*O!l62K@#jU-_hzN(2*DA1_DpZZ(o
zX6GvZfIgs|h360S$PqqZxP}%tV37@OG&FX@8V^{qCn12J3Xb0tvnSGlv-6|dz`Osr
z3a9T^-KT5M`3r$a7%b24BPxGCn&Afma*R-kI8>TC2paLxSiAxv3*qHhUP(@tK(E1#
zk8JPIjYAyw#WCs30x
zey}A!BWpsnLwgFzC&!F~ABn_}lBTF6RgF24N|uzD1YuxcTw`Wn?oo$eTw>B#m61Oxx>*n`!Z!Pg*vIhneQ`ric37lHpe#?
zXgOesWT|VZKbv|aaAa|mK9@e5ZE3(Z&c63$$MR&hrGU9WYQbr4#|q1eXvV7m+A7s5
z$ckZZx!hUQ>XWv_ioAASr|whUZ49#LkTR8OvFv`uWDcX;g06ajc9G}jI|}8*5wjvz
zx)hsnLw*K+U;fl}qE6&aMQ`+H>Su^&nCD^`a>yj%IN?;`@}8R9D#MyhmOh?73Gq*4
zNs3`VIr3fdqX#JmnFp;R(<5MIXJuO`-6@?ZF5xtz;8Alc|fTldJ=*R%YwXb<+PPcn{sQ=vf_!?soFC8N@s0z4fZmq!FNN*
z5za;9_{Y)t#Lp4MBMlJOfyqI_hRUf^wwQTP?Rh(P}J*7H7dwB1(*e5wodXlaCtPiXc3aDgLXG>?BcRhBEbUAnR`5^nqJWoCuKSMrq
zJ^}YF9UoS;&g}h^zhC+_2>}c~8JKQdkzA2jD9C&yAVBS)xR(l14B;xE!3YG1HU|nI
zvBGO(+>Q~fX4G)2I_d?k1TrDoMdygoM{r?We3+&K81HOT&roZsST!hJcN{DqL^H25
z7c#Ha)*B@c=|#_kpbxMQZExpq-wj2N-=wxX+XDH5-NmlXCOA{O-CpLP@err6Gc-#Y
zVw%t0AUHlyZYuPu>rq#K?eRD~BiPBC{UH
zm$DVBl*K~66+$a!r}V7sTIeH-D90Pakwg@~9wR&~Im|^-6gJaulgg7C&dN)H6-O#{
zN180Ajg2G&S@=|+Q}LiVvE-zJvlf#&IzQ|ISamD|2<(dQ6X{pfX>{BVqFqrOCtdG9
z>^(PN)F*T|IH#`Hsg8Lh)hB~A!7C+oezr{;m~M`Cd3FE#S}s{Wt@f;CpsS#D?&Cau
zlq7Q6`>S`I-N))E3?sZi>~5j0YV8Jc5B4Vt;ql45js9JyhJsgRe_KJv&aubKqm|(D
zFO7@s#cu^jg!qJTK39g)t{qkecn5Um95o>&i#V%W}2KJ#=q|2m=V4T|Le!fQ6mqCJV`Hd21-Q_oo&W
z%vChN@RjuXyMe9)?^D5ApR%>;+HRBAX2>nbHP}9sra7Lud7^2ahFavR_&Fq^EZ6(_
z_aL%~o1`00JRBqni5|tJpUHw$zq~*i8@2P>727vd5ua7E3o_|#1M!mCkU0z4oH>Ws
zU9%9l=9agX0hie2`p6mcyt>ZfH{*l#1@%GZLzBCi_}om~f=(YEMC^`x=ZCP3nbvL6
zXXYJf&ZiT{x{{fi>Q|<89ohkpWn**73mOY)RlIt39h>&sJJrbDSts@K~G>
zDw8IcGR^HgSG(+oo+fwOSKAlbMcQ~kVr!oEzU$9tumP};C^N)e?g>|4t{q;`PvWQ8C|=Uy9Gm*EgYp{I4C%1iY(v;*Vx0r;n~jAmol_Umy<}$K{FWVDQiA
zf$Uj9!e8T$t1lFLGOu6G)PF66*_i>gx?p{LS(2DJC^x0t(Uri22|r6iY@C9tQ1ycg
zwFeyqx5j&T^yZBC`oTlIhElQL1#&|uL?dt4g*X!V<(J^^=QsY`caXw3gg4;jZI!nG
z!ek0%(@Nmff7O8i0}HkQgZitE*4y)sPt4o>
zhW_gb8TSng_U#wi+Z~t#@$cHO(m9a-PD3`lm4OK>i%LnoJ(Z0Crlz)zU+kQaxZW|m
zWx(4@YC3{}VNv{XgG(uqpM!xxtXimOIBCeq@)+CMFdCZJ8JRM=+1UTl4j7*s&s);Q
z)X9*<&Bof+k;jdn^j|f2-qL?$Gm(<~tBR8qKdFYC0*R;{z?6i8@gw6$QUL@K5)wXu
zi5ZX5C-J}FZ@>6Szc@MB^Dr^Fy1FvDvNGBM%$bvM{l*Fuc`ZaCEnIGIV3G
zbtL<{QrrO2Uxt3(eRJq3H-Z{
z|IGWVJ|EK`@Bcse;ZJ7!SMD3P2_Wz>{mr=o2vDkc@nB#=U{ariRouW&GNCgt=dg!R
z*4A{Vsly;1vB~>IL=;q@zsuH3okpMcIai)?+&*ZcYJGU7`uC&DKYgP*wdtEE7Kc&c1F*42=Z*H!goDi2W%nFw#?#GSoH}1I;YWNti-?;oftZvqEVLtB`~CYoXC68Bql
zmIQ-B&BjnGR7nVc`OTL@BKkh(t&2=sm!#k8LI@{60UP``ru;TZA#qZ$=Jp81wAe|m
zC+XiKt-<@8V_igO_1|PIqfDWqKx8FFykqmUXR_aU-QZ}FB7R}haliiu+{FtSUAFt~ie-qFJ_q{Bk%GLYl
zrq6FM`Wtop7sFhx!e6qjCib4>~qG0m{
zs9FhwjvKGP`ATpD!5E}%sCaz4yry$rOqJ@*oJ%$H+jhp1^+%Iv7))ogb(`#fA6908
zv1Gxfb4ToTmUDQTbxx@S0)YOkh~wYv=Dj2sv-F45viS~b9|j2g)Ooo8k%l!nn*zhH
zk6PS#vfc`5jCyq{W|L|8m?b?410BEFu7zmM=Toh=jd#V=LA%rm`D<-XpN$ysXlHA9
zGWmABE7=MQElNu22!4y|a9Kj%loLdRmm6iMZWc6avWOrk4%?*-AI}m>ohH(WzH7q%
z|0t3`e<4cM;uY`Wg|3fmk*aT+(+#zxl3w}(e*zV&u!e;2+@#w{Ii}5B)R4zyF?_jq
z)|(!y$#G|#A_x&X*6RULvTD_x+-lxB4qhGmKUAVM6zb#VczsDK|_BZ2g@g)E))SON`0U+_CMW=SR)&pe;m8n+RaLqUU_@9cK;a2N%q
zqY3f7V&MZKu8Xk$CY1k2)WvSsXb;Y1=^zW7#d_&~7yKA+&n9C@qL(`pbkK-cNu&c|$IIvIHSRMWOYKkH
zY!#Ve@&8q~2@QS#Q|;1L-EL&sMs>JtaH&j_9!jL)V2}<*ao1aJwmLp>2(*z?tCa~x
zCdM_aysYLfluk}$*`+<`SBS9%Hi>=C47*}tRsKhH3PJdvEICT1*6lI`9o|-^o9;*1
z?1=sssZXw^=j)+Y`%kF@!@AD-`DEKlExc)-p
zS_$G`<7RaXSj{HYs@$@f(-mt2DJ%x0Rh_h(t=FmBU&E0&dlkX6Bgy}yx<3wuLWhY3
zjec(2*;-L#1AXMrnQ_~H#`z~bgvQ_d1vFTeo0IF8BF3MtY!Z&`0-3Ukd)YLl`EUrp
z7o&Rh*x1oz*Jo$3aosJ;aSCJT#ljMC3KonuxOwd=Svv%y>8@G
z8gQAV%2lf?*G`qB@Gy%b{vJ^YiT%mJdv3?u3Jhuu$!E-@=cn7zC06siyi;rP|HYd^
z;v_LDu__H(j-}p1R&o4x@TP)zpsm>j7SAp;rMmS>000ET-DQ`Ls4-oq3*RCI;e#q!
z8HXVT8@~`;B=#k4Yaq;Wp`AIOI*7u8jYew1S+NyBL8IK(F#fzLQBP--j7h7KwCa8t
z;?i8Mv#t2gs!XB+l|w%fOIGZ&Fr36*PQX>eq#{=T-}C}poS$;6N{gjq>9j{khG2EZ
z2`&GAYoMw0N>Bperhh#WVAQRvc|^}U{EdYd{tHBn3!`dtq>AlDj7s}0eCdypV2rj6
z-#7+yA8zkoei_{ETz&DhiXAOxsOVwS;PSWeQO(XF%kcy+Uj~;y$`G>c1$?bnFGSeuQHSCO5QkwlNV@vp=iS@rJ8v?gOt?{|cH3h>?
z%!9Efj?IrEq3}uFm(IMj1mP#HA+rmFLd^Wpd7O&vvNnR+7i#VV_IgP(Q?@iszz)p^
zXgcCv`UgWa*+^Las*hTaB^3!@`gFTJ{DaPe)A@bYw-1zuh;;~7F5abhecO-je^
z*PdEIB@P5^#=LY0t7+xpEz&|w>%Uc`5CT-4$q1=fI94p*DBY(j9d76q3kHd3qWE|!
z`Oz0h*xj8_bRYF#*LNLO7&K}+=V!H!Lmb^#EFb>YR+-tPHhzIv-~D$nomOier3I$xUbRh7DEanj6+N#m_a?~hzXrH0RINQu`S7(mcUTE2
zhPk59O2?B882|6(?@*3J!oM!A-i^@VK#EXWsexK=Byq8+V5LGmIl+!mEfNHns$voA>Xnw#Dx5>*HecA>7D76KrU76cY*1%e2v+<0~7_(Hpscewg;c{WUld^BF
zS_%<2K!sA?U4LEGH#nNWp#dpu25Tan`*w-*2ln;hq%HqRJDCw7<2lJt6j5ZzZO!|?
zCpCiZ7uR4kaLMzN*>v+ETS=pLl$C#Vzt5vl$p4p?qE_A~hsu(*-1U)P@2{#1*ZF^q
z^s)U7{wEQG1r5s+X2=_PkG_KQM@Pw-8L}&xlk?T`MD$
zt)CviX1Cs<^g8XKRP4e~s@7PhQmP{rS%{&k*MwjJ_jE@b!|!=F`V9%+^t8>nZYw*n
z?z$PcyI8x8EXj?Klqk*F5o2&@U8VJ!oT!DIWDKf`Z~3ZCxNDXWS)!WIWVfJ($I(JR
zaMfTkGEHug^PPaxFiy=(#BjMid8Xg{CXF3%fBs&xk;mtd@%!wGkY@3+>0Sjl%bOh_
zg;78`QKo7YrqW$Zy?=J)7dMX)zCai
z?KHEnUh!GC;JX7tJNGS#Ai`nLCjF!z7%F5-|+xKAI~V
zMOx4=pYguGU~|81#U^kcZFbYr2HIHbhwAKBe_Q8pF<=<+3Q4_j7-7@)@EG|e#A<~Ub3hMvNEQla5Z>MzS>aoN
z@gMd1H@8@bfiZrL1Ry%^&?|{fa?wlYCR_pmOh3_XI!x#ew1tz@o()?!N$m9|Dc-s0
zXcRX!SgnZLTCVVj*_C!_wOL%54dsdymPt(-HD)GFmdK-2kn3doSnty(U91XQ@q{U>
z&`KLZr^SuwIu`cRQB5S>p(W+t%S1xOFQ|JT;6K8Zt0VlQ*r23IssY}J{_Sh_;fe`+
zip(-Je~
z$ZO~n@Ko6>Ifuw7DW|BG)%~hxTWMUVmcO#=*T%?d8ZcmKKNfL>%yWcMcp=^YISTOu
z7H6Bw;STOT8`jgPz~5FxV3N?J4!5&^h!h??;AqxjB#S?NXFO5na~9WocsV2df7aB$
zcR=6cg+O}zmG<6mh8k*rC|lgqsvfsnmqvhy^yyrfQsWPVvhPjXw^bYi0Nk%o2B8tY
zrqantM6S+>jF})fDJD)^fL1~ltpcY22MxU>deu&~~fpyY+}2WW1)0nDLA7
zg9qXZ-seV2vFbOor&;mRr=KYvpH5d
zw;F~2ZNLtb8>q+S1?`R{IiAsPTq<*tS>$RsS`MOz#?h8r-pb@p6C&p?Z
znLSit7Z~)&dM=D@(Il-P?3-8G7oOGFWs(@wfA
z_IZ4aRv;vnKHi3__(QlaZ9%hajQGSZ_rqCY>ud~a$K4*ecQ@F~(8{fRJ3hZ&ay*(E
zV)5HHSK-E$v#-h6rb;8T@t6rwghfXa7%7r<0JSRR
z9{vPeZVE|EuM#hMT_T?;G)e+Di_hNlWWxaGPCr|$
zH+8ISK5KTElzKhPalW4!nKJtv58yZs7{h0GZZQc@`BwKqQ35RN
zQ_Fq**qhefS}R?0ebl%cMJfO4_>m0m>pRa)Zi}_DLe;A)(Qji<%7P6|#x|xGz1b>W
zHEy0ceG*Z_rbze$TG)N_#2v6uWnQ1FT^odQ&hg*_v1a0g9?@}_t!q?i5(+ZgZ)=(+
zMpNG;c&E#kTzgZ?Oua0r_^uKo0h7T9WBAn8l1%hlCl12|vJCGO%>X{1w=-y7YNqGw%Uko%#SZLs1xK+3hUToA|-2vgYRzoQ7(2wu>d^v9VWup^{IRx<9i8sFK~}ZnF7sgw=aL-HpZMl9^1cclsMdhBmYU_Uc-86tT!_Y1Lmq
z2<27`T5S1wvw1y#IyU^TNo#hJ-D%WaS@PkGfd>H-7$Z5&
zR9%panJ+zk_X8jbgHCJqNcz}?&}1U5ah^jxFB^<96q%Ss18=r_R*7ZNbMB%EnZ>eS
z!F{{Z)nt5Z`!u+>E-Ti@*AP6zpU%d;&-rqCcoP}It*V2|GQv2!I?@w##u$Blc*^x_
z6|v9c2$q=pws7GaJgmXdSVqn#wiTT?ziz0(2)qv|ABjRL^yf8baM@SjvNDSYTRb3qZAZb|*
zT6K7;j8h{LrBkigNGV7K?Px8fQ(Sm*r`Qq!uj|Qpi+ph#%eRFhto!Bd!s~Dfk&a-^
z2zl;;iA@K`m)<*$8sPFc-4FXMqkqYUq~!}hH!j+U>G@h<5noPknxpO*j=@MzCh;!z
zFIpxX7@B7|_c7jT$Z6U_?+Tc7*cZZ?(gBnfWCepBX)hYi(8hiP52Z-o-9sT%>_w;$s
zV~}*?2EV27SU7dGWv}_zrGCS3}4KgI#Y2;i_ctFIm1|RR36x;9~sv1A(g`
z-}B*972M3_i+TcmHjT-W`{qs;!HI6a@K(@WzBX6?rY`^Y&D?$@lNV
zm!Ld_S(;8?u)MDB%0q`~^CR6Bu3BGOdY;
z717hE$zv4Z=(Rdj%qAY_m(Hrxr{4d|%(|D!F^j}gn^rCF*kZ$@%2Z?F?z}SRe%kgJ
z(Yj+EQK~5_!PZW}@L-%GQec*P#iQ8gV~~nZ%G5wy$nytNS-UUywcu~ve6*Tr7=cq&
zfAcad)fnchPHpN3OHCG4BdRo}&g~XB6)a1$#GI0avznb~9wg;aid*E&7XZCq^POWq
zEst(d$Us`6J!ZvXh+)rH*<5hDoTP|KSrRJHg~&htq?%Dt*s1bx-KKj@uE=W;dikYP
zsijJzSr>S_`3!ozsk2(J^^6r**jz@ecVueG2|HQulu-M16`jF{yU)sBq3yUg{$YRC
zI!`nh<=82OB05zn1*yYn$u7&;xTXdnL(~KSZ!@96g?+=N;
zT>y^Foy67?l|lebm%rT`7<4;qQ!dpy7EcBI0Cu=J0KO&to?@HASL3aHIK
zYqwf9PW{>g)2Y~fTQ%*{0OQOx{ZB)o=u}==(L0w`R^t_#JF}%T0ai!>9DPBjKl6vK
z-Nj`g+H*SaMlW+kf-cj*bu9Y|1CrfzVTbiAkD!%GmBhH64q_@4_i^@V6@+J}1#AfGtD!s?Pu*MJtoj&c_>C?k|7oMw7f28O{1?}~aomT~J3)fA
z*UNG{lm6l4o#gE9g(-K(8qWn@1~Hl}O$Hlc8Q+(iW;cG={3B8eXobc8%D!h
z==Q*^(p&@!@bV6=M$0nCHhrJhZTW}Y1+hm0SZyD!E7+N4p{t?+ZU)`5gw>xHYNdJW
zyccI-u9drEud$`XJ{4vq*-}_GIj8bXHBLNm$tiA3wPOHw-0ddbHjVbJt*xDOyZs|j
zZYij1yQZuU>{B;Ywi*afTycGyXjR>+l~y8!7~>_h2*Xy<8oRHD;deYazeqNQmXN
zpgSW%o4{1PzHmES2lPpv>bjTiUU(eeaoCvlNR}+exBIbcq6*5=ZnjA#_I+Hcw(Ag@
zqFZO@U0t1264>tQG&yA1^(L=x=q|0)0gMbNwJ3a8YO#p-%01J4k@e}}Zp$--9C$%{
zCPLwKGPtO}yxg9;!=Q}a(AjRsGJS5gN^S$vtG(MB@rQ)v58-zG@S2$kiqT@XI{4*=
zT={gTf9gD#{fo;ta?T|CF?lXt1R8N2^iyQ@G2sGN
z)twMDkTSXaN?X0vo=&f$r9!*;GZuqpSvLHAk$rfz)jJ@m%}N87S8_I=yAlkthu$hs
z>8x&?W7$3xPlXMzbD%f{Je0H1k`mo5Yqw6VL&J7e;;>tyoe|8Wxu(wLZWL^wSBE2w*TzH()}NN>w^b~EYL$o1m&qT$d|XIH09
zpX`f*WtQ=R?urO%5dz?T`2B+pfAjgf7AP
zpVHqW1oNKnpYQ1uyt1?w)me5K8E&*zsoD#|PWY82wNpn8*_)n#OaR*jCcsOJoqE^H
z{D9MYS(2W#2F-fPfQze!B*vp>w;xxc6_!z_E7bc~D6!Vb{1oE&1`N5u>U|6IE+ULp
z+Ju6o^qH(>yk8g%$$!4p6by?!o<8ZNOL;iku#NiEnyb#5=O(Xw_5>JZ9fKJ
zl>h1rug>SK?DM@-*xY7L95=DT$48BY+XaJv$VE{O}0=*;H?i}Iejv)z+(XoEH^0OG7h
zsiBL{Hb9NO?YP#CY{PA6h36pJyq@?0g@~ubF0GVsaS+z{u1dE+$RDCe!^(Z<;C<@l
zx(ffW!Kti9Yw?h-)@H~=GgUX;4P%$a(R`-@(sIA&uk||T@+J)XeMdXsQfoe&-LeYk
zJ{DU@E~l$yhWM6
zkt=A+0sIZ}PzTb%5;Ud+I6vtTu}(`X)Tu~Wbvop~!iyl{_y=sBc@lq2pRWVvdtduC
zF4bzw6~XU%GGv)PKk=6(iWec%Yp>g9uCEpteFgq(O+Q&{p7Pg)ihdxmM-UQch?>_jA?u7(V|D;4eh0o>!uhhT^J9L
zu-6Nq?+OBo&teXz7VhuVPjm?{w$6IZZb*@h&X8ANP2(_aV{Y1haU=
zXw@nV>JBN4wp_Z)!`0l32B$d{O+wax3U#3Mi4za
z&3ZEkUY>ZeXQ!*B`RmXeXCQ)VtCM=Bu7qGBCxMwkd9OJpF&awpsmE($e~9_vEs8OM
zFeR_4P8OGhKF6<8p2e2OMRMtdHc#4(Ml&Zvtk_{n&2O&8B@d$Q$M!DOUw7yg^H${}
zqT=&aPwF?N#oMV7#tQRB5n#aVdcmh&@;gsl`0jFpEKVO+HVAamz(DT}kEf{2>574y
zs3d{u;^tLPS63_Igx&1PjLNfEhvj-<4;``+zLfpNlJ}yGoG=Mr9o|uY6?`!W+ZJdO
z=Epw?n>ILWED3%KE1=4Qh5Z2TxkbyzDW0HnRkwxQy$-7LtZfykPF4Q`?v9o<jZk;L9
zp`MS{5#AOBd~>f3Lqe(TxHS!_cYT~nRXUn?xgqPwMRq+qNSGMZbSKQQtGgop=MhR=
zYxZl6XQF8Er}ER(f-c|N3d>|d{THuCH19VT8xC0;64^VNHmY@&SfZ96`DSIh`*;%r
zqR2hK9yD*FUQWIjXTYL06@7N+4UL;6?{8i@jvp+>*+)&{)*nyZe8@B$osOrP+hC_}
zUqvgsO6wN#!F|2_k{riY%OSh&eS9Mo%8NE{Kf$1NuB=2+O1B#{3PE)DP6NFS8Z@O~
z)S6gu>vTV_eLkb(K*t)p$7q`93+&|g+8grZqQ42I9%$Ci@k)Q)cFo#NYxsh_zBv@-
z^YbKZxKI~9GBmkshq3SzyU~>K?NV||$H=tRhuhs6C$0RWT)qi
z)5(=9WW2s$=54O1RNI@k-m>=-N;#YcS~t(8sXRrgRN%4sWQB!5HD)|x3bZSQs3aoT@GJ&giJdL%z>tr
z#RKdCy`mQctdafRX#0GvPxc@0w3Jbj$zvSgg<=!5;3@4ak4?H7NDU?_*CQcsBJjSX
zpX)rj_b`pJj?-FrZ%0~Ia66pfn^x*^X-ZcRlebRUMn`9s8zmj#v=NQ9c)t!`fIycD
zae3tCt&8a45MDUCQXTf2CJ>aUlj(H9Zq_CTjS*^V&<>Uo$_@ONGYo-}Cj
z+X3nQ8~a&}Fw7fyUq+@2F9*}@#^kSjnsh47M&j6g23zsQYY_FYB8^b6f`N3VCn@TK
zBgb}K6zQCHO>v}Lj#!0Xt|&s9!-!YkRMt*;b$9F%?YF_L0U0NN7Y?#pUA8I;jPJ%R
zva^t(^=eNZlP-^I-D+9eahXPKUKdTT99jkAkbDL?qVL1pBiwK*YqHXp_2bE;6Al>b
zoKH=x-@!hbeSGEf^>1<#1OI}L(P?k7D^3ppSW&i
zchLbTX`&Y4CdAdtKEk?{)7_MxWCUk4WVz3`F0gfaQk~sxu(pO4nQ`w3*ffsx*B2i>
zPa~Tv=~Fsj=|r2qi!9U4f+u{oy?rM3RcR-2PWA_f@0bzIIr+GWyn0v@=_71mEdTW*
zMvceUF&j@esFwL>uiN6~xjGuUgndjs+jr&-Jyzd|->m`>_(AO}7q;PDL%}4Phc(Nh
z>4v$c9cd{7PM!72agP2hO*GAYaOsBF9iq|7N#!m*1z>ldKK&v(Z(po;t>!OnnslZ+
z^0?`kVh+W4&dROm-I#+-x^nSH++S^VTyYhfeVn>N_r*@xI5wpSz4MlJVrJ1t%A%mE
zxn^I0p5AnCbRWa=$1HqWa#qc!BV4F!*J*)oM)`qDaf+*I27uVpFR>zyM~J8Z)(G3S
zR>m*Q#={xFo4>9Pg7%4b1#tJ@FEqUOiYBdmADFxJ0Q8;bY+Q=|wHPhvhH^>avddqA
zFaZJzKp0aZUv;m?4+=xuevGA5n|z?-xbi;8!1tvXa1%I=lhZSiX@U8USK
zw1|tmiRft`+5*iWUc|;-q}9XqA*+Xa&6}(;{wb@SaevDy8R~1M-$lG#_p@5o0Z@NK
z6$4a#dzWZ%49xBL@ay^tf;)fR+~stgfl8hrnes??g5mh}LCnSXr|zg7At`o7CKEL4
zY24NR3vv6H#V*U^YAxZ}39gm)A&31fns@pqx4TU&$|Q2s@acxE
zAkf^@rcLpaNBONGgB
ztB~#^OZDb&vBiA;wI}2QpnPY@(CfQg4Da(zi3$y>y=|A(#h*!WE!#HDqy6gocV*&T
z&$d-(@!TP|Bzp*4LZiua=Ex6?C&jDqsZIV*qTa;ywkHa`c|haYljHlIWctx(1%3A%
zSN&{L+Z^nF0vZa>s}NUa#&}-e4%0n0pOaYkS*i-uu2Jz
z7GeX@XtgkV_lilUHs~TD`lCJTju(^7mO>q_Ow#$iJ*Oq{@QcN|S8MbBS2cGWgO|Or
zrTOpfGnDF@L!{mmDP7R0E{9iN1cT|8-j2FZ-_=bxqrG#BBI1@!W9$BG
z7u^1bFt_P-bzH4sd~JT|ZaS9iJ_EZV!Sbh=;qF08HFeI*)56gaY=wUn4Jh(23jO
z!g~GX?-qarTv=HA&IjkQN7|c^g;2c3#*Dp|^JlFk>QkPCKwQ@rdTh@-cNK3tujoAs
z|9!%iZ)^cp*SeT-kO9XSj9sSzptyO?wTj~*pZ-WMyUXeJnr>(g>DaN
zF@BOu!&+#rn-)^MDXd%N2xHV3?Nz--5uB{=?I7uw>mEYuR=()m+Y7Gigo4b_Re?*a
z)NVd>`OZK`se<35(JR{NL94!=KT&0py!lHP`l&;z$=Hx*@gZuZP1PfzGN;a2PgyLa7!5y$Lu|QRP^*gNgMD}BF}!@+h<0Q}jxoht-9#GrzV~^<
z)$H$G`l
zm-|!2qvLcAN3B6PS7)KRRu?@8^M1u7rEf?`783^sDkw!)ICQ*Zf
z^%J%720yn7k3^r@Z-lsy59n8a^ww3UKXSRtw1SDO#(E_8Yd>U#6%*l|GDFGm`(|%wnlJW)@H!vD->UcgeqbLZ6@p<$#7%0T31A)G~8pI{Cnr(i{*J6WlmiJ%Tr9A<+D($p(n^Q(EcTVm2jNZlQt#BVGLaPyQ#2cW)8FUh-Hx
z_A>3`GfWMi<-~%$`)Si|?u7JPVZ?aK6w{I^(~mZWdT);A12P3&BpqWC@76SbkZBNx
zH@|c`mhpFNM!r9sI}*@>zpmqrc{A`at&_yRz^;xhK_`83W~^eu)|(c3?J;7~BL7nl
zc%8N1*-9|ixH%53^nYrAghj*TQ_v&1MIv84b!8Lyj-XXXo>FD+M#Ga_D}GwgXh9M_}_-LJDrSBrYa
zc{@AfSlo!R+hFS&ZcNfA!2Mx%AG6lxf(U_v=8td}4_2+W3onfBxN{I2gLZR#c>>_Q
zFH*JjmO|XteR%$mfuU67k!t15yruoHEqDm1Dk?0$lo;Ny)U
zq&Y3e7CTVc<9Y7lR`)Uj4^qmaSG%M-R)KGbAX9Sjd!TdwybGO_s6+KlS@e@6Nk01h
z`LnC@eZU;uOO3+453ROTZ`<@+_#2!?>e;3u_2kgbqu{twBv}|fJxy>2DH#Wvq8BcU
z$63oDMp;5mR+O5oBRGo>mrA?IHkm>u$-+*T*YzcN3kPwO53my=-L2Hg`&x7ZS16r0
zyH0XF4Ax*{eqrj?m`#>XI?#Fz#>NGiU|2!1Nstzb(
z69qrhi8Q&l({($E{f@)}{ilqffL&=P?48Mv@~vq%X#GO$fb$0+0(M(
zt6tvldS@4#ejI%aae}N~r#36qFbSy1lQIhPwgW#j*f=Wmfyy5c5H}>TbRhN47MrY>
z%-Hd(20NhY`>T|`V#Zi6c>$F+m6npfv)qin>gJ-TmnclC*QuPM+_cK7lBI;cg~u%6
zXVq+tN$9NOMe>?hKUi|DGaFbKle<>wEF%W#wgwpE@ZmpC(@|tk~Hp=Ny}T?AhsSxBLhQP2;m*f~>DHRNYH5?S8IeK)mp=-U%DSw=C2p+b!*5
zJm07_>=S=t>=Za(>XFi!SVm8EHLgdA=kJ^>@9cCro>a(ExA*ZGwx7YUf=AR0{93A8
zUes9auuWGP>hH4KA>{{;MG=OboF^7uVn`J*RX`WE3db)Q}Yh*Fi9QXCUXLo`;l%*+r
zQ|~;4yPh6d>)(!ACpFJ2YyBx}a?;-6McX)5y#)YPzv$y}B09YITxJIv3ium#w6OgY
z^>lAJDENWS`Er3XGXF0W250bJx-aZw)4E8iQxn2i9J)iD{CCZt(wDVPkySmPTa(+4
zS=2&1iBAp%5>8xN5}ik>it6wLswo2!V_}KC6uRF2-TSN;blmE%!eDsyZvlmnq6z*)b4Za$_hCwt+=nLJKGl7(icVp{rWGPdszjD
zrHh7LGU(lAN{W&NW})BQiu_wE`~|0FbLNe9sGxz;kwyH{c3x#|!HCA(0
z9?RekH%6r_>@t99NXC%2ZwxZ#ZK9g|cqg4c-NmqihUszEKxG37mTJwqvvzp0GBCRl
z9Gls+1TxF^4i$!D#ZhU{FcR>@yO)hN2@U5>G`iYgnULAgS|YwEtdP(f4;+-k{mRt>
zBTADikeq9cKlXMOF2ow5hQ6$zqP)p=t%&mK)2%mOr_}P=dylzD4KtgBC!v0^2#h}h
zV@`Y=o-4W3B09pqHn{`MAE{;pRg=t>zn29Dj2zD;3Ej0)$-A7*DxN3D
zB`^_J_rtk9DO;KYhMKL{j<|G&i&~rr&K>)Rvfpc-Bo&;Ix|HCqx`@%}$cr*6qr;tS
z9X}(XBjn89hRKC2t=aA(uc|+gwScy|-j7~+d_u~&M{CY&5Pp_<3&>p>#8L3w8*J%1
zu=B20E#9b7-mY{H)O1=l-W8~N9lOhIH2{lay5BV2GBnP7JUaD5gsjK294<54&uLVf
z;C-xL{JA0#8v>D`5%GH7eVZQ!ccL38=;I6@?5gJ46Uq(psXJf0+AH^r095qfI=51^
zLebQY-U5HoH{OyTX%O~#8UujJByXNYQsA5S|G=U(*cG+i!0%@^5KTujSj0#9!oCw~
zAAF(eArsaEgs||hRSG-Y9waKOP0b&VuD@WOEs-5l*!^;1KM)15_wC+)(Hp_EAVmCA
ziso7ZF?GuEImk25zxL&}EVLbObHIP11LsTsh9Y;(6Y@j56q8zfWo=g6Tq1Qsn?CXF
zKu|$bi_-|~UCT?$aAW&QrP>(xCTju`l8PoC{3s8#)TRXj5Z3$gHj!4foW^v|fslx#
zT*(ECUPDMTMX#W%{r&QGj+)z6J2+N}`CR961Q4`TFX3)Yp9?IW%HS@?DAa^@05UHj
z#A7lyI=%Ws)~Rd8WvPJb;dU2tgdv~xAnc;$(m51C;g|*6r-UYJ-N&YfcHJXoiRFpx
z$7=lGU{la=ql$7D7`_h@5Ux|mP%SfF+vJa!2sM7!pNT^1KH_bq!sLzL+!&^=?~|GYTM$Wtltr_0b0Q#xJSoRv_h3a%$88BF2Tq?
zpVQba@@%yz$R%zGc+83)E>fIIb@wLH4kMPly$}=xO9eZkL8#
zb{n}TP5JyI@i`wp`S(~D_dp)+DIiRlQd`u~qYZ07MX=M*+y6ht-U2MjZG9h>l#q~?
zM#7;L326iY=^VNdq`Nx=l$7pnhLY|MX=xZrTDl~M_+C!z|M`ArpUu85E*RdKd1uX2
z>sf2v&;5XI0j%+A59i*gPt9HZ*o*a3=DB`o^$s6nCrpOh={Nmxt_>t3``Y%)V!M2#`@sTa%+v3AuBdW%~1
z-_}ogn#3rVg!X5oY?ui?6ETJg9aCDeaNsVX2pa?YM>E0dW@pK?#^<^V#f8#$E=7Fj
zyW_^r?^yTtZ8BeW*F7$EZ*XjH(r6NF6R^PI<(CcYAw;%wMTphUuG<_)@_(o66=HNJqT|a#8e(4mj;%ayxMN`~4^xNJ)
zhz=Gc!K?!>^^3Jd@;A1@n1%e(o=#lrMxE!gf3A|;Vddf9kacl_-Al?U>eCUk!rBh?
z{h6&FyY%|QgR0>JvR&mI81I?vQsKlpUX-$E))WJa8O4JY_w&7J$sxP#
z1&nCrpQng!aQpb!o7UOQszaZZycbV=grgEvZdDhxU&!uA~pE_lhBsiz|dZagLpW3E~$;|
zEe(pmt*1Ke&sAt$<*`wH5>%jTtX`TKVFRcRMM-&t+_f`NN?-oYuls4Y#G`$)J)HcN
zu(pmh7=_pI924wu_AAo{)uK8ylt*KdA`Oj{LZEVD8yUeEki*sf(5-gKV9F-
zPy69-RM0Xag2mu$8N@85d!4rE;cgeq?C;Fj^}I5qhDQnQ`8A8J*Q=jXzxo+>CB`hs
zmV_yq&cm+{iXbI@*#(0FRD^Rj;^+E)jrtaI-Cksr?9w2_Z{mbZ*BlZGCS^A*mP~`u
zG{0w_4ljX0X&sqBu-dKgQD8-j;e?}&3BKU-&F40%u
z!poCyvj*#A=tVZjxW*S33*#6>(b3TofL#y0FtHfb!6tR{+pwpG=odXclcp-wR&-e1
z5Mw2QzLpDdobwp>NISHberJ@x@r3VU#?Sa?Q$dj+00J7(Wh^S4+~BxX?2k)b^J`$0
zj>o{afdsXi)@#jp%8r{u6QLi}2w{$S4Xb3GSC3w(>3yNmY#f#k^YwV!lUQ9lx_3-7
z+mqW#orzTOZ!UoL=9-9sHRQw}F=Iew!gQNF54$SN=^Ttjju%O3v$QLvpdm`X5JvOy
zMsEzUBDBW-+54pgpe~$p4~5cLTlRG27FHHAUK#~ren!E{@6JzZv$OYYD6-x}!CG~P
zcJj%16~PmM&ar+JCatTpt-a4+lxZJYNj&E!rNrNnO;7TyeK#<=x%o5b&S&wh1R*nL
zOCG#j;Liw_-bD;MsodmWuDQtX(v4+Bqbd3baJpd{SD`gm}|YtxrcO)PCVt!PIs;@xFW$
z-~XjNCON+wlf)@U5!ilLv&!VlV$ZHUEC<6Qgv)A7xDmqfOg@iQbSs=}_y;vdjKQ#!
zO?tf|{c46w$D%0gA|2jj)~%B*h1&ei+hYs1VFtp&8uXG!
zH@81KBfigBHCiQ*TOYv
z8!JglmoS0R|8$w)UvnL#lVJ{NyqxM={Sr2Oj>
z6#o3~LmGoglVAHcpQdl%D7
zv?E9=dQ`f~8Hop@M1vvlmBzrjz7l2Ut${tfrDhI;2d+CFlw;7Qd$36g0ICcfnx|SU
zUkGtYD$>j+VMA~!LKB$b+GSAIFLBh~sWfK5LU3j9qY<&e
zpTV=T1GFCBR_T!Y@{MOMa6lu}Z+H8ho!zZ0T$`)SLn_`&mf%U+kbE4Wz}OsH)F}n<
z!tapbR-K%?1sSQc-@f`0++VaS3PE8#pFK-KsPgKj20G}lUHHw
zp!BalEcpY^PgEp*H{#CeTGtoXXLMTiv#Y~=vDIwc`c
znvGbVz3iV+IMWtb739Gw470f__48b;gW(R%)!peUW;}I4Qg7rO%_46tiPt4I#e``E
zUJ;{q+Yf#;|P_1+K;&EUx76{!)_^?S#J7(gkPX#6#
z4|QZgaVM|fhvbS2c01QjWW{C;a7l(%iNW`CMJt;n*G=ucuC?w@Rgs_U5ed^5q6vd>_M8pxUg9kqpY9{8n5n
zde%7khO8&jdV{GiB3h7T=A<=cc$GAWZzI3+=hnd7Nu_bb-(L^m=Q;Q`cy{&@%^!#*
zwXK&X%B)z=#m&U1+-`i?a5#JOw8W}O2Uy?j&5|`W2~4)8J2LGnr<^|O7zTEStjKmw
z)Uu!BS5+EtZ~opL9hW
zed(oe?3#R=nV@~6eAi2Boz}#&-{*a|CkfW}HSP#K(QaJb5uQWFbQyaEAzfb%gr!_j
z20SOW`}xzC2BG*$i1;Qb$k+CnkMB#^qtAsEoy>b=2>Qm}Z{kE_!2Z*e&*r&wHOkT^
zbM7~lG|oSE3z)2PP*LJ-;%r{sx*x=S+ctbk5o=XnsU*&?XQNunyAXu<%_|bivsROi
zM&dgeP$2eHBty9mM^UA@?B~MH_ekoeenOEw<@LR{1|W{tZ0f62!HC|AAXz?GDiqYd7vF4pqaUmZMG
ziNSq7VhxM45<1UbOEQWck+z7^H-{xJ=|Qdgu{Q0lLe<0D5v!1m5R6QT)YF`_-7VypO@-;P(5oc%HJoxfcx1
z!k#)umZ30={nzp=9iBVrlFL?v(rg?DQ{LC7wKrec&D~@{TKk>x`DOL+z8xUAbJf
z(X4Q$eN=*Q|C)aVf|&-KSCI1kZhnD!!LH?M^wQJKG{+uVuYwW7v7JnD(h);7D?=Y%
zZeX|1uffkVoOW90{2KsG-9N6AfggRJaU=8PK)1bN-tl~??k5Lq;egy&F#h)GX9A;C
z{um@TTsa1Qp*^VMhn~=_u`*r3bH-!Cn-CPQvbvemaJW
zBj||d+lFQ-pxk5!t5ZmPegP;{0(;
z&3xlwG-;zcJ$xk|L2-*4!Jj3N!HH_DV=+@FF+wMnk{q%#uPrvZ
z|FTCruR%h?!&bXSh74jldb3#1$QKoz-R2^v19L)t?%
zUwjU{+pouFkF2|Xw43FP+FdG5>TBH~yR&FkH|g|#6CtyVjpgzZp-W?Zqw6knonds6
zCv$rG%DbKQebHlxbn(*jqJz(bACTJ|;P08Mup<$Fb|6(4h&q7!p5tUii0OAk^ULxh
zUl1@~^oei(*e8eeBQnZjN(M&hPaZD;d35S_GbrTtu!7O_>GMaWo>_1IftP8go3TeD
zl#mn5E`AqVT@blb)+}}ygrx~O&rq%$s9o~3uFu1$xjD1ztoE8-I3M8B9d-gS6%{5<
ze^yUOX=5uN$^H^e7kL)h3mfQgwJ+&Yuggo9-}gA$q)lk@fwODmn>e?1U7b9dVv#1=
z@lqwc`M4*ozaDLxzAfSLCPFMD<&)jv%&SireW@Q5y9(lUI3;MAhZ&i8nu~d4aO2GF3=kp_~9nGZR|2(!RAAsl29JIsVnUO+D<707~L2xyP&Q)s}Y>*OLCE
zi~FY4@$8`KRQ;z|P|SJ)O@ex=YE>tTjkj6L`C{SKQXwa2&rE0Fo4DLyo
zQNPPx*jmXanTGdj9XPoCyp0|_hBcnAXHRDtm@rmypZOXb*LI_y@;}yU8jg@4*hZ9bAB^|}uwnnX`xSs#r#JS-Y#H$y=CZ@-~LX&tgqwDsZ9~@
zXf~`(Dc%#Fb!C{OGnBhulnZY~tf%!jiv4;Ce5Jt-n;($Zp$72+hvUv9(Q}v^I>}n~
zd}8pU!jJl;U#oxb!jq}2fox*YzJZsY5-t6Coi-gT<4ht|)b|SoX5-p)
z>9`9w0&=wDH)f7rw_cdI9
z-nvg(?8=(il(pp2h`NDvjfb2XTspj-@KI5+A@+}%$H(VD~7!!K(UXjCEHeT~KUvG*F@7JWtU!V(v$WY!C|21H7+o
zRBBHll7-a1dRESE6Mr2C}V#O8pSC*}x&+nmWTIE2UC`y@muSuf>L{ZX9EjrYD9h~nq3e1q0f%ELNl${EMWr|BOIl8;OmLyd
zuPi4?uH_1AGgnli8MD8LnpuHtG>K7JT=YG;^tG-ByeJ13thnI&NQO+0UY%svc^*fw
zv2q3Tl-&v?Ual0xe+Xw&J;y=h^#aN?Vq@o8-Oeg_F=8wzysp3Sop-$K&AfQF9l=Pk
zl8kF?K||g%z`jE7S>|U)(r%&Jh{#s(rA2tOP6^4y2|ea3EGD=8QSRZ5>n(imawRI7
z^lnw-u|16SCd-!S5cWKa03MQCdinkmOwYeP8{TMv(8!M1SiJ*ZW%Xb8aok
zq>96R+YwJQpXqhurCTPpbA#yKo9o(E5=so?9B6KDGk>)KO7vmV6`WKFYs<9;F;^qq
z7hYv|?qxN>14W`n^?w|@BfHCD45;dQD+NZ7?kQykIP184Hkn&2d?I`cr1{%e=Qx$g
z$<=i_8%5{l=Z==vBzPDHEnHx$mQ&1Ly&8TDgMA%)5%bHNb3y(xdo36djSv28ysoF=
zh*?R5t80@=+VV{|^Myd;eosxfOTqiq+Z%lfgu9D>
zo8w1_hQvcdrguyTW2{&slE1DI(Mh+wF_Xqo?Rx(i)u&|6(dO{fO_e;ag__*s;_1Q&
z4SoSxU8${r^})oXQvFSDy0^r+yW3TjRqyGeZn;jzWVGV-UHIBTRd%bq*va>s1W(A@
z1DNRoe%2C7tlVOxI95}fx6(>^S0-JL^n)=8C*Ig>R8@|gu^kSD_&D#
z9R~~vn=*EuG7*L!EeuI+r#_Cn{vGf(+yW4XNj+&V+;z=iaWy*KK&N(Hd=3ChcLVbH
z*`>Sr=?qmtzxrvn*j`T>Y#GFtUcww>1Ymt+
zjyiv&30Ci53D~43?fww@c=s#X)a}u&d>L4z
zZ%lwXf*0{4l3f5zg6~%xpJbQsOWtKD1zM|6O#j}NeJVKogs(*VI>#W!qSGBNjcCRw
z#uxJkWPR1l%Ds9|C)bL^c*LN(1FD~SWi<=7kHDD49cGionc6q2{-)m)vu0LxVEu#`
zuz$?NB95|0Ey4Ewo12*U#*YvZ=rMYdPjIARGS8NERt#IaCx?_#f{PT3lkbg+A0-7uYOGy@8NS2EQRB(K?+r5k^P?K%FyUb^K5nxu*`3s?C
zKtJH~OMDVei>h#=-}qXuCn2hnBUB#LFngI#AkqwrVGZ
zUwJmcUX9hK_Xl5l8b`Q2@{5+v4x{I~#j7_crI2MLlgndo(n}jY4xE2ZzlB@&RhtqA
z=7>#zJ0bP+&A3};oW9}*O7$F`3K5}pIo?xAKI76?bl?ym(+E*elV*XG3FkCt3CmKJ
zaxan*6eaB3^EWCnJkd-^iiwsB3tQ`pR;_^8&f_!QjqW?VN=sJqZ2aj-cJO_6lBYxF
zXY&)-AdX>6!nn^gZVre^Ue%8nlfl0@kh(bY>go@T93t;d=aCaED0
zDCcC;;Iy4TrzyhAH93s1Z=Kq2FDEYmIKyW36GYR={m`4t<7LNq@ognW1?rqESM8``
z$oI~QsHvZ*xt%7%I^^`O2UxcfvQ7E`jE(aAveB}2Ogi&nF6i_%Z}dI;k5Cb6j*3Fk
zHk#7+_oAj~J}wFOgtNl$D7i&VKNsn}qQQC^z>^@(=JY!qNvw_cRy7T1|{Giq}
znbR+4i_=EK*EYC4Pj;z!Q1lGlCVz(@;hV@)G%3D8ya2h6wN(HUmqwKd3&^mim|H;m
zQT+*0gSJ@rvU!<7q!ai^LCH|mY&)6Hs7QT13XzS}x3OW7-f>6g1HA;?qt^%j!6)?J
zq|aZ;5u;wu`^myn(ST?&P=%fr#^k1Z9_4D;x+1I(tv`3YSQdar4+c20#LP=dpykrx
z{LCVn3P2Dpn?m&4<&O|O8LtGJ3NBSLumxLMESgq0pzA*JVkP4
zyUpR;lb@~p-nVolOKCKMyZp~uBP10=!rYMtvt<>~j6h86C+h<{zeb9{5K_7&=29yb
zp#DuZ3Nu)0t(QUzdQYVq2STp~_q*Y~GEk(J4~?VO)?hSIVAVo=%y@W8#-iHZUXyw$
zL5YW$#AUt>GS0mUgY7sCM@IgG`}ZpxYFDcZBNx+l0F-Qp2_QW&8p(s42I~`spOwr0
z7m*Si&S6kn(Imvvt*+}88Y&Syw4_9_fy$#lh(azpKixw(@Cg~iYEM|S1n!IP7+mv|
zd(i4>Lk?PHlbZ3w;rE!iYlFo-R(gzRwGHKH0R_y>6NWrRKlx!;1@frLRqOOx=LFzy
zQuYOEc_t*>A@nqGku}I!bQv`VpmS^v@rV-naa_%KmTYu=k0Kh-P
zl~9q^-J_SHbedr%(+vP+;aeW(1(t(Wm=lgsVIN8W-E9N?fE!qP~J9z{>kEHD*mXle-Fo*VYsEw5fB^&;)*PfH{p1wl5=OZW{l%_xKJFLX#&j(9~J$Ir5f!ZAG{hk@YmojfHfP0H8D3aZd|t`yae%TzZ@B*d$j<)l
zZJh8Zr$H~>#q{q9avWV+yZe=B0}!KdYu4_49ZKdJ
zI3wfz(0jIbyyVTBYZLk0Zap^4!9(HAbikri<2<-tPZ|-)Olw}kNK`|)ai+SLQbwcp
zd+n0f3lXuF|>!wbfvY2^Q@oo^(YC$EayU-uJ1+b*>8OC;C?04B3B1y`jFiGiu
zK_2q7^GhbtIznbJ83>j!9#K%7k>#g?Ba@(qOHgBYCmpk#6T8wxCX@`7uEf^!*5%V4(_YZHs>i2tJZrW{1fz|K`<
zAACVoRHVw8A{h^F^y`yE8AE)-W)6TbkCN&Jm8et)D>r9UguixEc75c3{JYIp#0*vy
zE`^p$Mx$DqBKbB+)D>-jiW}TCW-+@WLY(_a|14$1r~^{A)v$_RR7EEf{>;Q*3E83w&3=Pf@*Fcjf2<`vlJY?nLdUE$ajwf^+*p4Ynm^FN6?
z0E5nF0B^gn2at)brN=@XEJhm$wF{E-@$LHqtXS|_=+lqWG_=CfW0YS>g%B`j6-$Ol
zE(-@Z?2hu)+wTzN^)#^Ow%i{z+_M1z8z3r1@n}ZOu{rdw0EUW$=eaStU~?V3>N8*Y
zsNuv{L*q!SO#I2Ub?y3zvn|@1_;Xbsqkay^%XS3gTDdDx+q5=X9QjRra9s1XtCfLa
z7Fq>mmt$KiLliWR2|=Kp>5@1E*m*#m1Hm8d0RRR|p!S1xy+0NloywLkdPE=Rs?t3^
zQ*9pK)-kC|uUz+8xlls{lY$3iu6nm>&6)S-obkS&pZmDvLaWWEipL69Eyn=LEIVK?
zo62&v!TT;YLLiX^;24VJwDb3y0GWwsC_EuRo^JdKP@QHW$a`T@9P_C}fB&&eZB&6)
zvr7O{8z^e+42sBs22W^jKx4h@ospVugbrGuV4JpQ<5VJrV@A2s^=K8=BUZC@`r14b
z-x=1SuS_*NNQj;Y_+u1xHg}
zNgz-YzYbP(aBqvg;WPZ?rXGtN*mpP4&LHVY?|5VV7MeF0`8r-ptv0Q6?LaV&{@l~n
zRFg{T4`R&kHi$o+&aW{P}~MoiQ(l_R4N3sJu3;s$7bEe|V{|7G;w4*@Xa)@`%<
zht8|&XK9b&{EKE3S7}Sq
zF`9q|Cm>sF0BB~mit*}4Da#p3>=pR&5!F5nY=l+7S|_?4!U9_=!v0Y2mQ;pI-H
zFfB*4+=uQZAoA#56^H#-)VrTGno;WT^L(eIkW4eWn#Ox$cC_6IJ=Noq*ll_n0si?)
zdJc1y>6Q%0WRdxv)Q}{AMjADcFxyn9a*-%hqZgQY8Jp|GruB!8-!sEy(}>>6kW3FO
zF5KnTfbPL{K=k;(KfVQ2*w)%fhl2BMMcy{!=&yEcN=R5|L{RbJ_S{tQ<2aOZ?G
z^wEt>04`)#PEaw(6u>;>IMOp=@@#|x0;@7eW~I#
z)^i;RxtSt^QUCH3%1&${=`l8=0jWrXZpZXm>ji0A(?D+6pLggGYFc@{e1{lNpiO3`
z`=W%MG9zaERXzwQkE&A#uZxcCM{7DjWXOf_9Z417ZyEU>npo-2NE2G`ygx$+V1Ogh
z@FBl^Wu92=&sAz-lFzgD##rx;=dV`HHNE7F1pi^{?xm2@x5_BFL2H-x%a-%-=7!$uVVhKs?QGaJ*QRx
zqy3PC$x^9h@Kmm8A&B2@t>DSCTLWdyNa8phDUdWeAiW
zus=c+8x5RVcpA68hAgQdoj4{%)D7%h;cXIC8KP6tpIM_1VuutZkOBD;f0Jl*+G1Lm
zNRQ`Ttda*h1@O4`!;VX@MCO(MgWL5_o%3H8gHoYukYu$#3b174aD+zMEMD&IK%Ub^}l>Zdg=a=_ovSZBs
z*g%_&Z)E^&?>&wC#_$c5Nr)Us4?vQ!KvYWNz>w*SqA1uO)YN~-=1(7Vynj^cO!Z7d
zfmrOe_UWHo{awQm7OGzikfGN;2n-Nlr2TucMtKa^
zu!!;4aSC7w{4)vt-;3BP@X*uJ3Wi+3Y~&Ca{|Ng3OPBw={@(hZ-HMtED+T_R2~hf$
zKNa#&REq_g_tYr01^-gx}8ae$fl
z?YpOpdg_jQ&1I0%h8o~+Z8agDyYpVdRbfbT23~iIL8jyZ_WSqL%e?2fi~3R0l%KxP
z9D0|UCnP#Aa<)p)Y1xl(W5J_P`aJsQFOGLU8C8Kz*eS^Waq<5>{U496U%@k~6u&t5o-4_^kQnoU6_xKoo-y%0m
zoJT0i?OBv?or+*pt|G4QR
z_{ryhSsEne$8bwR0^(DjKQsy%f{d&xx>lYPl820q1}rq0L#!M_7aN=U;Fq%m+OS}}
z=;MCq^B=+YVXJ*J5S_s&agNUH6L?4=87e3skc@;x=BZVQOZ6LxhwSKm5ulIg{=VS{
zZ%l_?kflthaWJ)}`o;bsMf>KUPZTNzWw37*?P5P@ZpA(uFLJZ0dRq8Wh#r!%ay~F%
z2mr95en@j+xPaz*nrTw7AHJs$ibP^|70;Jhu7_Sbp$rGeU_v$UMED`Q%t6n|$@%1o
z6GN98NA{4Sg=7dRK_y#d*qcEQnXm*th=qmIZ!9OO;`KxNE$F)s+vPlt+t@KvYlMG8
zb8BcX#ZB$_XCJip2^?Q}u!hud?D)F}BmsvQ^*kekz57l*GN$<(?n7f1%7{amD5Tx&
zGkr*CkKiSqW}I3n63wDMs5eeH21)Zd#-7WEZYmUu6dV%5OiSC1A_v}OH8_Ru;X(UMHG&NcsUPx=f-v|Z&}6_=
zWA)MGYRW^y&gh4C+@7EUl~j?B0QvM
zvoIi=sNTq3dH2v@DW3u7fJWhCALJ{r9u$Kmd|~z8C+?*&_C
zeqB^lWj8)+W##455=C1K8EJ@=Htm|@jz*F0c3z%FlJ3~}I5RWzkm3#J1B3U)01LS$
ziUkLm(9%N#ucW!kH*@9Lxwxi}kB^xI1qDB4o4W;%hG-|oYh;=>yPYyoQ+Kkxel6nC
zkau(P<^h#g%K*7IL6ZU6JNr21%9NB8d46K={-Q@RsO1~Gd%^65^{BaYiwRuA})JPA@v{L`4JAF8rc
z#!gN(%%>sHZ7~sMJMfYENZGimj`&-XDp_zD*f!~)m*G%PWg5+7fV@$mGjQq$E1JQx
z2TXo~6VAw>e;P&7e1<@42NKRixcA^=}h{E>@tZ-
zXlLQ{a2t<+0O}WjE`qK}rn6^`A7w^927P1KOlIxm@xi
zsQ*%`ZC5yyz^ZP2b12;!4VPmgt>)X~oUN@b??ZLvgJm={G>b2Sy(YupfVL8in&L(O
z3g-vBo`F8&Qi3Cwro@>MwT1=4e16HhIh;zuz&sgV^F??J!-HH7DOcS~Az2?h3@~{>
z6+OvS9$MM%DBaH%h`E#33~QU4L0_wEE{|V6zPFoVFXq$`2g|~^%lTY&b@e=M>2XCR
z5w&|l-0B64od>+_tAj6(#1b`cC@P3Dg~Ppup2qT*ePoTvqDMBWL_mg++K8*~NFM`&
z`u9)1e?0@YUE%44kC{#A)>tGCrM-SZ`qt7ZnZwe|k*i~>QYl}y@?=YVK^~u35?Kq{XwQ
zrgHdA$pqVeak9_G82@HE;mq;6Xs(k(w-KS{rVJN-btvy&xPG}ls!6zF*aXIo>161~
z?4mvp4H%*wkduV%WJuae=G`=u#xYj|Es`^7p8IAPq&Hq_Irk&Dt|l>*n7_yCdPy!<
z*1gdZ7TeIu;@lIFu9qHm(KNvl>=CXhW`_jW$X<4YAam__0Q#+%yoPK5(*GWcg&Mqq
zRjqBF^W=qwnd}(1{bnFFh{kfUcvkFLlx)JA(ZJo7Ael6P_+)(C;`-B)#jhW*y&D}qN&L!70f>7*^*q)P;qGFWGCuk)k)a}$_BQ$ZUK*3P6f@Z*Y
zD8)2e%u8Q4jEuzM0}W&1s|T`>i)=)8!9rwUAqFb_S!Q!-XFgNDEVf{!ngejMRuwAc
zt7&L7Fl)vca&r$bF`9pKG+CmW0fB~whcWd{VNQEd7YyZ$54jG3d}ek91A`@
zkJUryBd6J%(3s>L$%yx12KT
zyN|>~lQRf{+C&h@K
z-jP{#F2UO9WK%v=ZVrCg0#dxu2FE=E*o`a2oPERs^J{AAGc_YC8v7+xU3dTWc+}T&
z+*|MJ)>NM$~lw{2Slq`~wF^Fd}7M#9ihrgLewpbGMik4iOYFTo>6M+FG?9ydhh+LC1b|FJ0A4i6E
zXR;%z7Bwx^w{Dnqnq~wp9X^GnzZ~_tJXIy(+K)dxDJA>m!E4>{Wl!Kk`CfG|_MAl}
zIsU%$TEXbqhUP(xo7P;K*ET&Bk@s?LeCKNG?UkmQILvEh^l^!GdWn=}C)s~nJ7psL
z@(KSzU3_%qpdgI?iINStm+&Imb$AyYNGu8p;TeR-e}|urjbERvUQN|0P)nWj1w?B3
z{yM+|OsbAy9%w(5XykI3L!sQm;APR
zM?2sdO_ufR1o{ZGg*ftYY$aj7_D)XW3r@Y-XV)RDWx{H%=KV2CGVxdfS2K7Tn2iVf
zlY#o{PUT5RMGhXnB71jB-2+wXrm9TGWeAZR(S}*-5Badju^=`#zkIi6oS&yRpF_v<
zWK)gv(_Lj9e$7hZBwp@hL|2oX(5zcccxG)n>DPZR}qJ
zpW3N_>ED{-D})3GTL6q^`a5D6By6mvDXSMptIY;gpifyf9TvkWvvCLDoY`5a8%=Eb
zxHydwww>t+%S>)8C8MI3a!YXq%!UDieNtt0{fnn&!yFh$apL5#_#EZS!m*PM
zDV9p01jIomD2%`K=Wf4wX)RC$k*@8zZiIh3ud>-<_@eT-=gy1xBO1yyJKz$o_a)o3dJZx3sQr&Mwzim%UTK=B>JhE5UnnJ2G
z5XY<$qX`x~shxKV;y=F*Str+AfG-i$UwP-gyR47jB4AW2xY>l>ACO}-y)5wG0q?7{
zujnmz|1S55fs!D{@1p$QRSuAN1y+x|$fSPpk-p!?x+s+8M<^glu&uh6PK)yzQ@KUi
z)HI=DoD1EL8W~3OshqwZe}%9ScC+T>Yx0aqmoX00>5!(_JcfO|LyoMZstKu+l@L~F
zMar(cDdY}&eLZfFqn@32ZhK1N)cP&nY*x2=?#4k(CX*4v9F(2hZS6=hAZOHGQSI{l
z_1$v2t!!0+e=JTm9q-QQrWsB2G40unlPsvv#H1A9yAS&P;+p$
z*U6AGL_6s5f3FyQKcEes(^nY}rI83L%9Krh^K>^~RRVFCFAi?I`yx`AvQ^I#0!C*6
z?}jz$Ubv`qx(LnGZj_fOLVMqQzRjQTZ6E$vnXY@fE%iS$6Y!V@r{Z2(a%^O{K)!Dih+P!%Y8pssyT0jgvaI-0r
z9EZNd^XQ47@^`L0yG`$OJ=p*gWta&}J*M!QV0m*uag?lbb*5>3H@&&x!Mc2vBy#c-
z;jETGCs5FR%EEnXavDd4MBsP^SD$5M@5)-!Oc0os6dz04e2h22`k3zOX3-dI)zunTWHDu4IQ0Yfg^cXX
zhAK=!%21n~)r_5hMeBnIg$t-bb6bPi9cJAqlMwG{JB8!EI&>#BvvFSdF|Bg^)+x%!
z*f3q?4vvU(S3cI(-&sFYc{P>+lzEl?t*dYMGa!*qmty|AU7Va5KgNr@=K4AhI>OAQ^D&6jL$7MU#&d@1@$8=S
zqT!Y6X9_e+e1h|(8r|y^H0yzVT`pZ~&nt`O9#}d_nG7o)QV)l^wy?w7b3B
z!oXj4D5Pfn;b`?(iUln;>1e>gU1Q#!38pp+ySX~8hLqJ+DZejru)UFOS77ReBE
zm6~wG{mG(khvudAt)E(>wBC$n`|S*MH1=^3CvWWs`Fyi|(=2zgiZfpY5;!yQFb}
z>Wg-&BFnPCX3&(~4u<=wIEDAvG5>tZE5ks~(@7%tp`Ra~*dkF!l^NUfHsLV9*Tv&f`{0r@LgoSu&OB+4w2HfU6Y7|4xQoEcD{}=*lDu
z?BKAA+4DETal$u*0&p{8(e0fB77lVi?SFW
z+^$sB#DdUs^DrPaib9!T3PWzj#7R_vOUFr@7KIf@+p$2RPpK=qjT_6YSb1U%Ym!B
z-_g{=fOi`SD`T2;uUJfe1}6MU|8`5`qL9Z9SSV0sC`i0EjBWdbin}|hs`HJ)`+70(
z?%Wcx*)Eq^JL3sdi|)ni_9S-vkQ2C_(eXG!BH=KLxe+i5mbtlc9vIR#UhR$0t)_0J
z)jSP|b5xGhFbg1d`M8x)oRJ5{2(
zbnF_zkNjeOXpO%0g;q;mK)tK0K>D6XvSRmM^_``PVO`$ppY8t1Kl7!%RZkVm8;OnI
z@5cO;6RTi&pU6_y!@C`TZ=)g=6u%QTbGbIRp5^Ll#G+u8+%8+JN3g^~;z*p0B7tSGFuF>aOsePpPLpku-fAC52em`H&_44n_
zeGyAaXMQvKz?{c6S1NTNeFq9ngv&pW&^D~MnE9E(k~|{AzCRt{?%LS@eW<@>uyK8moxB@AZZxnAiS#xvS>xiNH2qQv(
z;X{T0INwzc7FRi+3x_!kY->3=oxWgTlw@H6$-21merG2_etAo6J`9{SJvL?=tJi%L
zm00soI8S-WbMmfG`4`HZqT_p!(fPyDTHkQA`b2_e#Ak&1{;7XGR9wpc&b?eUM>2LUW!j$l^Rv@idoAXvGX(W5!{Mjw&(p{piNrQ2
z$}55Yh4?9_Sz8OuUecn=zNh{GK93h?C6(kVDyVd?vIH8F2lc=+0m3l=9qMCHxzWLX
zzeL?HRHZMh*%H37IO!Wq*$i(3CLVqJMY@*!a`qZ$sTrSwXzDjnqXtclWnNBBOBUa2
zVb^&x(0$79k+ao7c}?QXi@#a#pniR|r?zACzk;cwLCFkJ
zl5h{Orbhwpg)7(;Hvdp);yGybI*C+nuhwOR
zep~A`FwNd#ob%a%HAkx(GrH3m923FBqWr;?d5s)&&~%sGSIG3cND~8x3jdt$G;Mfo
z5#F=!p|SFA(WnrXIWt(fqnf55v;5d+sU@=2+h1Ptp_QJFi
zRekTv1%jy(h|06PEg^~UM5&-J$b?o`YHq!XoN}L_=*p$poRSjExr1^~!qqEa{l@q>T3-A`2
ztySB!>uR!U#HO8qH#YLP4Qm4JJ-M$cu*w%G3JYP6Fos=Yr9|b-NEo$4u*;NQ2I2vW
z-QYzVwILOV_l@QEc^?rS`Vy&F{~L%Et0wt5M~sLZB!+i9+jmUSnc8wjfB%Ju&7OuO
zEajL^69v=oEm`=~^-Cd|yt~)gQq9e2;c$RbA-FF_iDYH%U6RK%s!mMq
z!_gJ5*tB`&_C->Bk0~7Pyc@aY9-X-IzftPvolk?3E=J-dXwq&unKo+BV(P+CLuvQO
ztxjiOASi=-^rK%uziPBN=jsesSeNbJ9YO0=7LK*jv#odey4SwKdF1TE@Pw^^GU^jD;h@>lJ3~~3
znU2)EWFb
z{UWjQe>3f%4R75BRD0_dRj60mqDX;wy5HzXvO*^=GjybzJr-yN|5Z{%(Dr#&Kr&&u
z^vR#qb{GqYb4nTx?1mUH^>nw^0!x=jxoClIC3AW53Gcz|9GfV`>bAIQpAV)|<#yGD
zPGAixlDFldIsPR|FL?G4_Bx0#kp}W<-8L*i4D~
zRf)~9Liob9^EIct{jKJT8dhv80=-
z*9%As!@&M3UHJId*iMZ2B5I9%d`ATWzTlY2F@3sMC1}FSBg5BF5?RdDdHS|w2iX*9
zG!6{dr4`zXPdcPU;1~OdK0aT6N_b>(%``VMZuk~S@k0z@C@r`42NIladhNwsyK)hQL9;qUT#f#pUY3RS~@-LRxD_#7h
zGUlnBPS|G&c@&kfh-(2KXDw5oj9d`2eq8%v-oc-yyU?1bQ#lei4e-LQ8vwN=qF5k(
z&%bEH+J4kXHp_hR9e_paqDbR>N`xKsY*k_3k7h0ZmM0zU)|7lJ*$>RbUCw3P12xdA
z@F^8?3Z(ttu*d%gcRZUD>19mI9rEt~Y;>j6;!G#rX}Px3be}%Pg5dFm=KaSkC%^I&
zP+enc`w90!N$$WqC(zTVlp-XqT0uv0+aNVQUYVMqxE{xP+jQ&lGOvNcNCtK8?0XQN?RGy}JpcIdI0gq2(W9@1P=eT0&@HHo~SUBVx`GuDaaK
zD5;3=IYXs3W)#GRw(s1MmHugatW!N+p6RC>Zrq>Z6#k>scHaBC397W_8R?1hDaI6|
z!TpC;VV}3fz#+4ni=WI1b*hZui7f^MkGW6|AwO>Lr0(|%qHBjfJwQJVsj()bRRMay
z{$b>aUuqbDBatb(NV9HZj3%VRJ`Y{LejnYP=c`mVvorI!0HYa73o4I{k*jsH{x@Q|
z>R)>hZ@HQL;@GC`G^*O#9{A=vL*Ex-h^|!4(0xxswD|rWYW`A?;_QmR&B`bSGJ5QH
zWk0^SacT8e1$lf6*D_PXxz;K<-<#Q@6>z&x9N^CQ4s8nsD%R#;|aEhc4ka>LNa!1NY#@Qk(nI$Q1I
zS-N3P{N{ocoKcR~d)c@_gkQn1G9A6*>Gj)a7n>i`^>oD{?*NIdZ2G3Y2e*cm#Egf}dv$;$`J34BCFvW+On2Hw;V9kYvL
z&l&Gx28l29<_)DK#c4NwGGG219rnvz#caJdfABOf;Mb23s*u`9UZS?&hVF89W^hj(
zj*Md0?mMjU4as5RbwOU!Wg`=xG%)q!*Nzl3_ZmFW?P!y~uak#m5@(YmsgDzNSMtry
z-OL-aO5Ntv3|G+!6~>u&@+$w&3)#Q7ZLS!Ykh>S%Aln(_PC~JOa<_exQzUnt&8EO8
zlCaRxVvEV;&b%)mg@+R1mmtK_pP+*!+2(X>PilRw4S0I1F{atp+B%u*h1D*Dp>$LO
zrw?JXBibyreFoX^L#HI=`q2=nG57u$Ospx`ERRM`oZjaBY_fYwNa(QVCjrJ>vRY
z*lD!o+QoQ%my+Jlo{YLP_W(EvXczjNiDcz{x6ZSo1=;IipM|A!W20VsY^{LJKv_caSK03_dZ^YR;g
z9W%`_QJyO+OsaKCtjcS`Hz&xfu&UaX$n)^Qqp>500WQSek3iMg-W=GBb;Fx!Po0P1
z;SY+d5)`fk>N7)kS#yFsnT=SVwNKcewMIj8jEvwI?z&P(^evTv<`?E69}$Y~OWxeq
zZ+^cC{;pugw1J>W403*S0E!oMPU&{Xrlx#8-g{Ll}B(`d7
z#bJ#+bcy{*K%Rysf1xbxsDwA4b&q=u{8&`1d>JMp67yDxV!wie_VusDAL5hV##tbpki)wVVb3(D
zHt4>ASey@~ur~H}cR7;VKVd3@(mN2ufWK7_`0eRUZ$cahvMNgegwpS6oF|}>)CpJj
zESsNl3nq43$17V(@2FrOwr&fR-I`chJ)1rq_+HVr;%b+ahWGS?&Sl?bUU*sXx@r|6
z+;`FHP2uoo6tW7wR42c-F8z73=WBueh99mi*?ud~dvYpwTG0SkLJUNYTkF1w7gwp`
zEH;o!Vd<304(a2N#kre81i}+zUBlWw&v9wr8ibHcxap0ti`#{-<@Rd^%^b-x4n}P^
zZn6Gg@denA%hNY?S^IP?
zWOTN)&}eilPMA%F!zfQWo=sE_0ELz#14J!v6jI}Ch>n@|mhC0bD}~}hiCwMTz0doh
zRqptCL%j0SY^cMOp_}Scdi@fqA
zeg`3~e4n{;xY|hm2mH2z^OM5Bd&)?zZ==ErSJ6IMVsrvMR~FBI11-8fqN^=g?qQM^
z!XCn@pSeVm%-M&Nak2MlszY20$Y0+G$qg?{;{U3yJ~9#Z$X#LO^@xV__~RHxo_Vkr
z+cJG(V)oC76Gqd(>&LPuPIgGbGrHG)yp>R0yKj$$P;rsF{`QxBw1wT%pI(4A*n?gnZjVsQ3^(!@FaHL9OwuFBQ$Lr_N-fr@j&m&e>I`nLsJY9Ev@wG^b
z&+(Q)Kvk5xf?TX)kWYT>+0ctJ5EQc``#HLyH1Bd825JR7ehx{MT)GSFeVeH!zrI_Q
zP)f82Hd4-I*-|xKh@Tg?Q|c
z3N*Gxq-%O)iE$pi7{}(eD`?bW&0KF>q+WIAA9qN~~j-AQ4Xp-^h6mP3h
zz%7^9Z4=t)?)0}RN$~cXIzix;96YO(;<09%8wh%03%ZrB_wEq!$g%i4l)Hrr_OpS5
z$y2HWssNX;!FYR2z~X0lMZhy;NT3$w#*NaWZv-|*iwD*b
zM@kUIRUjBIe4qVHBGORzi{8_E@`iymO
zCfa;Gra<>@2~zsFtZ9Wb?`~d5odQHvn3JXp%i{l1PPnk-p2g{i5hh~1ndAD0g};7>>u8g7BXn94q%=Q1Pu1{E)81GT^BF9*
zD6}T@AvqgM9&l!D3KPGiQ!s>`>1j)G5HGEd8|tf68GN@)2&KOgjh%lawUHAmQ|l_M
zbAlZnm!LA*&Ad=kXi5_3}S{!#p7+pB1lZl?J
z%I_O&ckp;(7#?2|vO(S0QuY;eD_z1-6hnR(h((Vp;jS*mynee#fEAnZZy1kR3YJ?d
z-P|1ucxJtGjU3biC@il4q>W6!=@n3dSgK`6hs+j;wLu!%bwA^HqwE*W8IN>#Hr--BZ&?66lLFc?mU}#J}Q7&Ukn+GDB
zK*sL=rBKy`;Cw<3$!QKgTgEgj0z`-1dLY&pKi^#L=+6tIg;jgFhqi^!+npBZJb0hH
ztT#jXOT14_;d&$5>Ui{gH>1)}rV;C@_!$Owhtx2rNxgVE3y?}CnXrk4gDM6y{JfC!2tA=|K
zDvd#1Fjb$bv0WBt-V^bFQc8_6HdHC3t@D^C$>FsE9X)>sBYiKZOykA
z;Y$||-KX1+sDc?4oVT~@1@hz=IRd4_wp&|I7kJ`+FNl>km>WLBt)gHK#Il)LO7=D{5&O8`JV$0H?^Q2p`|Wx$Yaf=^6_+m^*yt6KK4+PESNZas737GVMCp
zHRnDK{G{ZI`JOyXT-^M2W6BM!ARn=oAN!?!<`S`^rut}uS`Ob>bnUS+18F;y
z&2v^o@iZJc@B0yr$4@_%!uHj!SM98Y2XoVJ#QS1w%IAEudl{#}U=L+wrP67O?v)`z
zS_()%Fg5%XIz(n~_g-O-M4j!EsKCmrTI_YQn|=~-sbzA7G}@G9-OPj^tV@CpD|OZ*
z-+&_hy5;T!TOR|zcb{u!*$l$hHy{XXGMRc}uxI%8=@BbkfpsKY8F)be7-Iz{I
zi_v>^=j$DIzYnaNvtfG={TjPZSfjTH19f#qZY7oMHJyx+fE`Zyr(sFw<`{NH1`L&6
zBzbO7LnF&Zmqxv@tEcgZlGo%%GI)66;*eXlv?>q3l5;j>_4nnW0%OLomz=WYt>V6N
zZ!y5B*xkZ>gfbkSh3w?L1tmpB@>n{wqzVqi$F2%J-34l!11yw&_P%um+%?us_(XJy
zUNBlt16#+|Xjpf~e`Cw1RQKqpg*bz2H5aaa(OS;@jhGCjwfKWvCC>w_3X`l
zd$e(TbiVTE3~(Ds%AHS=_nh%KFJKg$CFbo~dC_3F@nY@%=*iXZYiBD}Em(J^uwYV?OJ|EyPR>|2m7eOvFACQ%Vm3l*^*2vl#=
z|KTb5tGNN#cD~wG@SV219Az8Lq?>Z!S27l8ys1q$z@o178xt=XV%9dR!3eQu?<;q<~=k!>_N1nw!@1t?LAg<~@dl>Eae`1x=0?zvC4AjUTS9=5d3et%r
zwA$~w!0GULsY$4k$T
zxqkV}d!R6$8pLXDsTXJnp(Ff1JND^P>x0*cw;HxRPzn!A*Ver{ep*jo;C$8?{>m@y
zf~SQT-drp~As#!{2OY+*6UCh0yrx>41EkT-L{EBBoweX^Lz%GeqgxJ1U@76TNLX1d
z+6i^Lfhq0{yeR7}g3}z2`3o#Nx%@ZNg^g>!1euqxcN5zG*+ZfHaAIx@m`&;hPmk5H
zj^R+{Ga1dh6C6()+%At3&FX#Lt+q4;WV#RCCe&Y0-B5hjcP}||gx%30iTKD3Yu=~t
zQpC_4h;*(Gnw31<@SPPqnW$896|6Z99At+(!B0jgt<%K?RV_ar?Jp4c22lB~-qQnn
zpfkgnY9rqkmqlyEi8>og0#TN=mQCx)_V*DZwO&8K~`ci0Q%N3SA@W8-wqO
ziiOn{$G$&)@xg&|-*h$DTwp@D?)v+P-ujT)W3(C4UVL5itKVT4&`y%IZRPVEuz&H-
z`zGOK8Rki;8X?6$*Z9^O?*|J;e(