From 5f8d1a72da83c8a9baf674ffb23fc36e17be6047 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Tue, 9 Feb 2016 10:10:48 +0530 Subject: [PATCH 01/34] Create openapphack_project_submission_template.md --- openapphack_project_submission_template.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 openapphack_project_submission_template.md diff --git a/openapphack_project_submission_template.md b/openapphack_project_submission_template.md new file mode 100644 index 0000000..ab62c6e --- /dev/null +++ b/openapphack_project_submission_template.md @@ -0,0 +1,11 @@ +Project name: Add your github repo name + +Description : Add a meaningful description + +Version : Add the github release tag + +Github url : Add your github url + +Ansible roles: List the ansible roles leveraged + +Yeoman generators: List the yeoman generators leveraged. From ea38c05ee93433f28d8423d616f2d82b82965b9f Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Tue, 9 Feb 2016 10:12:07 +0530 Subject: [PATCH 02/34] Update openapphack_project_submission_template.md --- openapphack_project_submission_template.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openapphack_project_submission_template.md b/openapphack_project_submission_template.md index ab62c6e..04b8453 100644 --- a/openapphack_project_submission_template.md +++ b/openapphack_project_submission_template.md @@ -1,11 +1,11 @@ -Project name: Add your github repo name +Name: {Add your github repo name} -Description : Add a meaningful description +- Description : {Add a meaningful description} -Version : Add the github release tag +- Version : {Add the github release tag} -Github url : Add your github url +- Github url : {Add your github url} -Ansible roles: List the ansible roles leveraged +- Ansible roles: {List the ansible roles leveraged} -Yeoman generators: List the yeoman generators leveraged. +- Yeoman generators: {List the yeoman generators leveraged.} From 5d1f80a14cccd97b7f2b44a0cc5f3ccab8cf57fc Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Tue, 9 Feb 2016 10:13:25 +0530 Subject: [PATCH 03/34] Update openapphack_project_submission_template.md --- openapphack_project_submission_template.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openapphack_project_submission_template.md b/openapphack_project_submission_template.md index 04b8453..f1e1a55 100644 --- a/openapphack_project_submission_template.md +++ b/openapphack_project_submission_template.md @@ -4,8 +4,8 @@ Name: {Add your github repo name} - Version : {Add the github release tag} -- Github url : {Add your github url} +- Github-URL : {Add your github url} -- Ansible roles: {List the ansible roles leveraged} +- Ansible-Roles: {List the ansible roles leveraged} -- Yeoman generators: {List the yeoman generators leveraged.} +- Yeoman-Generators: {List the yeoman generators leveraged.} From b99b491e7b19caaa5c63483ec2a19becb155f79a Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 11 Feb 2016 05:57:57 +0530 Subject: [PATCH 04/34] removed java dependency --- src/main/bash/app-init.sh | 80 ++++++++++++++++++------------------ src/main/bash/app-install.sh | 3 ++ 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/main/bash/app-init.sh b/src/main/bash/app-init.sh index 27b0b40..32d8d3c 100644 --- a/src/main/bash/app-init.sh +++ b/src/main/bash/app-init.sh @@ -102,26 +102,26 @@ done unset f # Attempt to set JAVA_HOME if it's not already set. -if [ -z "${JAVA_HOME}" ] ; then - if ${darwin} ; then - [ -z "${JAVA_HOME}" -a -f "/usr/libexec/java_home" ] && export JAVA_HOME=$(/usr/libexec/java_home) - [ -z "${JAVA_HOME}" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" - [ -z "${JAVA_HOME}" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" - else - javaExecutable="$(which javac 2> /dev/null)" - [[ -z "${javaExecutable}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." && return - - readLink="$(which readlink 2> /dev/null)" - [[ -z "${readLink}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and readlink not available, please set JAVA_HOME." && return - - javaExecutable="$(readlink -f "${javaExecutable}")" - javaHome="$(dirname "${javaExecutable}")" - javaHome=$(expr "${javaHome}" : '\(.*\)/bin') - JAVA_HOME="${javaHome}" - [[ -z "${JAVA_HOME}" ]] && echo "OPENAPPHACK: could not find java, please set JAVA_HOME" && return - export JAVA_HOME - fi -fi +# if [ -z "${JAVA_HOME}" ] ; then +# if ${darwin} ; then +# [ -z "${JAVA_HOME}" -a -f "/usr/libexec/java_home" ] && export JAVA_HOME=$(/usr/libexec/java_home) +# [ -z "${JAVA_HOME}" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" +# [ -z "${JAVA_HOME}" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" +# else +# javaExecutable="$(which javac 2> /dev/null)" +# [[ -z "${javaExecutable}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." && return +# +# readLink="$(which readlink 2> /dev/null)" +# [[ -z "${readLink}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and readlink not available, please set JAVA_HOME." && return +# +# javaExecutable="$(readlink -f "${javaExecutable}")" +# javaHome="$(dirname "${javaExecutable}")" +# javaHome=$(expr "${javaHome}" : '\(.*\)/bin') +# JAVA_HOME="${javaHome}" +# [[ -z "${JAVA_HOME}" ]] && echo "OPENAPPHACK: could not find java, please set JAVA_HOME" && return +# export JAVA_HOME +# fi +# fi # Load the openapphack config if it exists. if [ -f "${OPENAPPHACK_DIR}/etc/config" ]; then @@ -150,26 +150,26 @@ fi # initialise once only if [[ "${OPENAPPHACK_INIT}" != "true" ]]; then - # Build _HOME environment variables and prefix them all to PATH - - # The candidates are assigned to an array for zsh compliance, a list of words is not iterable - # Arrays are the only way, but unfortunately zsh arrays are not backward compatible with bash - # In bash arrays are zero index based, in zsh they are 1 based(!) - for (( i=0; i <= ${#OPENAPPHACK_CANDIDATES}; i++ )); do - # Eliminate empty entries due to incompatibility - if [[ -n ${OPENAPPHACK_CANDIDATES[${i}]} ]]; then - CANDIDATE_NAME="${OPENAPPHACK_CANDIDATES[${i}]}" - CANDIDATE_HOME_VAR="$(echo ${CANDIDATE_NAME} | tr '[:lower:]' '[:upper:]')_HOME" - CANDIDATE_DIR="${OPENAPPHACK_DIR}/${CANDIDATE_NAME}/current" - export $(echo ${CANDIDATE_HOME_VAR})="$CANDIDATE_DIR" - PATH="${CANDIDATE_DIR}/bin:${PATH}" - unset CANDIDATE_HOME_VAR - unset CANDIDATE_NAME - unset CANDIDATE_DIR - fi - done - unset i - export PATH + # # Build _HOME environment variables and prefix them all to PATH + # + # # The candidates are assigned to an array for zsh compliance, a list of words is not iterable + # # Arrays are the only way, but unfortunately zsh arrays are not backward compatible with bash + # # In bash arrays are zero index based, in zsh they are 1 based(!) + # for (( i=0; i <= ${#OPENAPPHACK_CANDIDATES}; i++ )); do + # # Eliminate empty entries due to incompatibility + # if [[ -n ${OPENAPPHACK_CANDIDATES[${i}]} ]]; then + # CANDIDATE_NAME="${OPENAPPHACK_CANDIDATES[${i}]}" + # CANDIDATE_HOME_VAR="$(echo ${CANDIDATE_NAME} | tr '[:lower:]' '[:upper:]')_HOME" + # CANDIDATE_DIR="${OPENAPPHACK_DIR}/.vms/${CANDIDATE_NAME}/current" + # export $(echo ${CANDIDATE_HOME_VAR})="$CANDIDATE_DIR" + # PATH="${CANDIDATE_DIR}/bin:${PATH}" + # unset CANDIDATE_HOME_VAR + # unset CANDIDATE_NAME + # unset CANDIDATE_DIR + # fi + # done + # unset i + # export PATH export OPENAPPHACK_INIT="true" fi diff --git a/src/main/bash/app-install.sh b/src/main/bash/app-install.sh index b3e5d88..940107e 100644 --- a/src/main/bash/app-install.sh +++ b/src/main/bash/app-install.sh @@ -100,11 +100,14 @@ function __apptool_install_candidate_version { pushd . cd "${CANDIDATE_VM_LOCATION}" + echo "git clone https://github.com/${CANDIDATE}/openapphack-vm.git" + git clone https://github.com/${CANDIDATE}/openapphack-vm.git #TODO check for valid tag before checkout of TAG if [[ -z "${VERSION}" || "${VERSION}" != "master" ]]; then + echo "git checkout "tags/${VERSION}"" git checkout "tags/${VERSION}" fi From 78b1c1d534f886e92d136d8cb5ea6a5ef31e4f43 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 11 Feb 2016 15:31:14 +0530 Subject: [PATCH 05/34] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 2211b46..7728df4 100644 --- a/README.md +++ b/README.md @@ -83,3 +83,15 @@ If you have any questions/suggestions please email to [openapphack-queries@googl If you want to contribute to the development of openapphack main project please do take a look at the [issues](https://github.com/WiproOpenSourcePractice/openapphack/issues) You can get details on the branching model that will be followed [here] (http://nvie.com/posts/a-successful-git-branching-model/) , + + +## License + +This project is licensed under the MIT open source license. + +## Credits + +Still compiling this.. Lot of Folks to thank, very are standing on the shoulder of a lot of excellant programmers and a lot of opensource projects. + +here is a [list]().. + From 2c3c2c585fe44fffb5d6e378861197fcde162c34 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 11 Feb 2016 16:28:04 +0530 Subject: [PATCH 06/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7728df4..6f73903 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ This project is licensed under the MIT open source license. ## Credits -Still compiling this.. Lot of Folks to thank, very are standing on the shoulder of a lot of excellant programmers and a lot of opensource projects. +Still compiling this.. Lot of Folks to thank, very are standing on the shoulders of a lot of excellant programmers and a lot of opensource projects. here is a [list]().. From 59705b445075ca0966f73e358d220bc7bd8c8c27 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Tue, 16 Feb 2016 01:31:43 +0530 Subject: [PATCH 07/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f73903..c8f75f9 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ This project is licensed under the MIT open source license. ## Credits -Still compiling this.. Lot of Folks to thank, very are standing on the shoulders of a lot of excellant programmers and a lot of opensource projects. +Still compiling this.. Lot of Folks to thank, we are standing on the shoulders of a lot of excellant programmers and a lot of opensource projects. here is a [list]().. From 86a019fa0af206fc2ec7fdc0f86ade1b4ab23223 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Tue, 16 Feb 2016 17:26:56 +0530 Subject: [PATCH 08/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c8f75f9..fe2b90e 100644 --- a/README.md +++ b/README.md @@ -93,5 +93,5 @@ This project is licensed under the MIT open source license. Still compiling this.. Lot of Folks to thank, we are standing on the shoulders of a lot of excellant programmers and a lot of opensource projects. -here is a [list]().. +here is a [list](https://github.com/WiproOpenSourcePractice/openapphack/wiki/Opensource-Projects-that-got-us-where-we-are-,-and-keeps-us-inspired-to-do-more..).. From adf4dde89d72635177955b198dd21852e59ff36d Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 24 Mar 2016 10:41:24 +0530 Subject: [PATCH 09/34] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fe2b90e..4ced49e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ Openapphack is an attempt to enable end to end automation of Application Development using opensource tools for provisioning , code authoring and scaffolding. -Openapphack leverages vagrant, ansible and yeoman to do this. +Openapphack is an opensource application vm repo aggregrator. + +Openapphack-vm leverages vagrant, ansible and yeoman to do this. The goal is to get a collection of fully functional , customizable apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) from a set of plain `yaml` files. @@ -12,7 +14,7 @@ The broader purpose is to provide a simplified path for full stack developers to ### Index -- [What is OpenAppHack Project?](https://github.com/WiproOpenSourcePractice/openapphack#what-is-openapphack-project) +- [What is OpenAppHack VM Project?](https://github.com/WiproOpenSourcePractice/openapphack#what-is-openapphack-vm-project) - [Openapphack repositories](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-repositories) - [Contributing to this project](https://github.com/WiproOpenSourcePractice/openapphack#contributing-to-this-project) - [How do you start your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-start-your-openapphack-project) @@ -43,9 +45,9 @@ The others repositories used by the openapphack project are: ### Contributing to this project -You can start contributing to this project by starting your own openapphack project as mentioned below. +You can start contributing to this project by starting your own openapphack-vm project as mentioned below. -#### How do you start your openapphack-project? +#### How do you start your openapphack-vm-project? You begin by forking an [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm/) and follow the instructions mentioned [here](https://github.com/WiproOpenSourcePractice/openapphack-vm/blob/master/README.md) From fc2b021bcad73559cf36a816571b556aa96ed984 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 24 Mar 2016 10:42:43 +0530 Subject: [PATCH 10/34] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ced49e..c64cdbd 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,9 @@ The broader purpose is to provide a simplified path for full stack developers to - [How do you submit your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-submit-your-openapphack-project) -### What is OpenAppHack Project? +### What is OpenAppHack VM Project? -An **OpenAppHack Project** is a repository forked from the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) to your github organization or individual namespace. +An **OpenAppHack VM Project** is a repository forked from the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) to your github organization or individual namespace. You need to make use of the openapphack [ansible](http://www.ansible.com/) roles and openapphack [yeoman](http://yeoman.io/) generators and build an impressive fully functional opensource application. From 32370226995bbcb895869b9acd49b3cb8e3af9d4 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 12 May 2016 14:49:44 +0530 Subject: [PATCH 11/34] Reorganizing openapphack project --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c64cdbd..617b4c2 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,14 @@ [![Join the chat at https://gitter.im/WiproOpenSourcePractice/openapphack](https://badges.gitter.im/WiproOpenSourcePractice/openapphack.svg)](https://gitter.im/WiproOpenSourcePractice/openapphack?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Openapphack is an attempt to enable end to end automation of Application Development using opensource tools for provisioning , code authoring and scaffolding. +Openapphack is an opensource application aggregrator. -Openapphack is an opensource application vm repo aggregrator. +Openapphack and its subprojects help aggregates ,validates and tests git repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories + +Openapphack is also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . + +Openapphack use opensource tools for provisioning , code authoring and scaffolding. + Openapphack-vm leverages vagrant, ansible and yeoman to do this. @@ -14,7 +19,7 @@ The broader purpose is to provide a simplified path for full stack developers to ### Index -- [What is OpenAppHack VM Project?](https://github.com/WiproOpenSourcePractice/openapphack#what-is-openapphack-vm-project) +- [What is OpenAppHack Project?](https://github.com/WiproOpenSourcePractice/openapphack#what-is-openapphack-vm-project) - [Openapphack repositories](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-repositories) - [Contributing to this project](https://github.com/WiproOpenSourcePractice/openapphack#contributing-to-this-project) - [How do you start your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-start-your-openapphack-project) From b309f0fad64dd2ddec75adf4a5676099fc94c39f Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 12 May 2016 15:01:48 +0530 Subject: [PATCH 12/34] Update README.md --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 617b4c2..5bc139c 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,17 @@ Openapphack is an opensource application aggregrator. -Openapphack and its subprojects help aggregates ,validates and tests git repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories +Openapphack and its subprojects help aggregates ,validate and tests github repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories -Openapphack is also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . +Openapphack also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . Openapphack use opensource tools for provisioning , code authoring and scaffolding. - -Openapphack-vm leverages vagrant, ansible and yeoman to do this. +Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker to do this. The goal is to get a collection of fully functional , customizable apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) from a set of plain `yaml` files. -The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource technologies and experiment freely. +The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource technologies and experiment freely on opensource applications ### Index @@ -50,9 +49,9 @@ The others repositories used by the openapphack project are: ### Contributing to this project -You can start contributing to this project by starting your own openapphack-vm project as mentioned below. +You can start contributing to this project by starting your own openapphack-vm or openapphack-cluster project as mentioned below. -#### How do you start your openapphack-vm-project? +#### How do you start your openapphack project? You begin by forking an [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm/) and follow the instructions mentioned [here](https://github.com/WiproOpenSourcePractice/openapphack-vm/blob/master/README.md) From 2351a43c732961332358b43394e37551b462903a Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 12 May 2016 15:03:41 +0530 Subject: [PATCH 13/34] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5bc139c..166c4f8 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Openapphack and its subprojects help aggregates ,validate and tests github repos Openapphack also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . -Openapphack use opensource tools for provisioning , code authoring and scaffolding. +Openapphack uses opensource tools for provisioning , code authoring and scaffolding. -Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker to do this. +Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker for automation. The goal is to get a collection of fully functional , customizable apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) from a set of plain `yaml` files. From 94565cb8e93c5f5565075e667b2f14c5b4193f0c Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 12 May 2016 16:02:36 +0530 Subject: [PATCH 14/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 166c4f8..c099058 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Openapphack is an opensource application aggregrator. -Openapphack and its subprojects help aggregates ,validate and tests github repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories +Openapphack and its subprojects help aggregate ,validate and test github repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories Openapphack also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . From 1115701215d8deb802ab38a0b69e2e7d9b673326 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Fri, 13 May 2016 12:16:52 +0530 Subject: [PATCH 15/34] Update README.md --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c099058..42a29e5 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,20 @@ The broader purpose is to provide a simplified path for full stack developers to - [How do you submit your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-submit-your-openapphack-project) -### What is OpenAppHack VM Project? +### What is OpenAppHack Project? + +An openapphack project is a git repository derived from the project templates + +The project templates are + +- openapphack-vm +- openapphack-pi-vm +- openapphack-cluster-vm +- openapphack-cluster-pi-vm + + + + An **OpenAppHack VM Project** is a repository forked from the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) to your github organization or individual namespace. From 47f3f7d8899f215d656292f8299b2313432fc7c2 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Fri, 13 May 2016 12:33:07 +0530 Subject: [PATCH 16/34] Update README.md --- README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 42a29e5..850b3b7 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,16 @@ The broader purpose is to provide a simplified path for full stack developers to ### What is OpenAppHack Project? -An openapphack project is a git repository derived from the project templates +An openapphack project is a git repository derived from one of the openapphack vm or cluster project templates The project templates are -- openapphack-vm -- openapphack-pi-vm -- openapphack-cluster-vm -- openapphack-cluster-pi-vm - - - +- openapphack-vm : Template used for setting up a single openapphack vm. +- openapphack-pi-vm :Template used for setting up a single openapphack vm on RPI's. +- openapphack-cluster : Template used for setting up multi or load balanced/ HA cluster for the application. +- openapphack-pi-cluster : Template used for setting up multi or load balanced /HA cluster on openapphack RPI cluster. +All openapphack projects github repositories must follows a naming convention and github repository names must end with either an xxx-vm, xxx-pi-vm ,xxx-pi-cluster or xxx-cluster to be picked up by the openapphack for analysis and testing. An **OpenAppHack VM Project** is a repository forked from the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) to your github organization or individual namespace. From 86c11237259c587479d50fec30d5ca8f2f572c72 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Wed, 18 May 2016 13:41:08 +0530 Subject: [PATCH 17/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 850b3b7..1160b28 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Openapphack uses opensource tools for provisioning , code authoring and scaffold Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker for automation. -The goal is to get a collection of fully functional , customizable apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) from a set of plain `yaml` files. +The goal is to get a collection of fully functional , opensource apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) or [openapphack-cluster](https://github.com/WiproOpenSourcePractice/openapphack-cluster) that can be customized using plain `yaml` files. The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource technologies and experiment freely on opensource applications From 5139288bc1f536f57c6294352e53048e5bbee8c3 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Wed, 18 May 2016 13:52:45 +0530 Subject: [PATCH 18/34] Update README.md --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1160b28..f031958 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,19 @@ You need to make use of the openapphack [ansible](http://www.ansible.com/) roles *** -### Openapphack repositories +### Openapphack subprojects and repositories -The others repositories used by the openapphack project are: +The others repositories used by the openapphack project are listed below: -[**Openapphack-vm**](https://github.com/WiproOpenSourcePractice/openapphack-vm) : Main repository which participants have to fork and will submit their pull requests. +[**Openapphack-vm**](https://github.com/WiproOpenSourcePractice/openapphack-vm) : The repository from which all openapphack-xxx-vm repos are derived. -[**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository for ansible roles that can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm +[**Openapphack-cluster**](https://github.com/WiproOpenSourcePractice/openapphack-cluster) : The repository from which all openapphack-xxx-cluster repos are derived.. -[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository for the generators. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) +[**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository used to organize all openapphack ansible roles . These can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm + +[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) + +[**Openapphack-stat**](https://github.com/WiproOpenSourcePractice/openapphack-stat) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. *** From 74cc667b290c0c5319b88037e258cbc5e4010d0e Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Wed, 18 May 2016 13:53:58 +0530 Subject: [PATCH 19/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f031958..7e81774 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ The others repositories used by the openapphack project are listed below: [**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) -[**Openapphack-stat**](https://github.com/WiproOpenSourcePractice/openapphack-stat) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. +[**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. *** From 2c51f355e75b3a99430d3411cf21cad6825f8e42 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Wed, 18 May 2016 14:04:52 +0530 Subject: [PATCH 20/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e81774..708d3ef 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ The others repositories used by the openapphack project are listed below: [**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository used to organize all openapphack ansible roles . These can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm -[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) +[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used to organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) [**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. From 47b576c16acee29ccc9e20f4d5e5461515f30b63 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Wed, 18 May 2016 14:19:47 +0530 Subject: [PATCH 21/34] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 708d3ef..e879d91 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,6 @@ The project templates are All openapphack projects github repositories must follows a naming convention and github repository names must end with either an xxx-vm, xxx-pi-vm ,xxx-pi-cluster or xxx-cluster to be picked up by the openapphack for analysis and testing. -An **OpenAppHack VM Project** is a repository forked from the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) to your github organization or individual namespace. - -You need to make use of the openapphack [ansible](http://www.ansible.com/) roles and openapphack [yeoman](http://yeoman.io/) generators and build an impressive fully functional opensource application. - *** ### Openapphack subprojects and repositories From 5a08e14993ae1d9e3029a8ec2ea08ad0adb88b50 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 19 May 2016 13:39:12 +0530 Subject: [PATCH 22/34] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e879d91..982ff97 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,10 @@ The others repositories used by the openapphack project are listed below: [**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. +[**Openapphack-shell**](https://github.com/WiproOpenSourcePractice/openapphack-shell) : Shell for openapphack.. + +[**generator-openapphack**](https://github.com/WiproOpenSourcePractice/generator-openapphack) : Yeoman generator to generate openapphack vms/clusters , would be reorganized under openapphack-tools.. + *** ### Contributing to this project From 8870c856df3fe93a817e70c7ef5a2b64f0420096 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 14:36:16 +0530 Subject: [PATCH 23/34] Update README.md --- README.md | 66 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 982ff97..ef2353d 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,7 @@ Openapphack is an opensource application aggregrator. -Openapphack and its subprojects help aggregate ,validate and test github repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories - -Openapphack also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . - -Openapphack uses opensource tools for provisioning , code authoring and scaffolding. - -Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker for automation. - -The goal is to get a collection of fully functional , opensource apps working on the [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm) or [openapphack-cluster](https://github.com/WiproOpenSourcePractice/openapphack-cluster) that can be customized using plain `yaml` files. +Simplifies experimenting with opensource application . OpenAppHack projects can be used for testing and rapid prototyping of opensource solutions . OpenAppHack projects can also be run on low cost RPI cluster The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource technologies and experiment freely on opensource applications @@ -31,6 +23,12 @@ The broader purpose is to provide a simplified path for full stack developers to An openapphack project is a git repository derived from one of the openapphack vm or cluster project templates +Openapphack and its subprojects help aggregate ,validate and test github repositories that derived from openapphack-vm, openapphack-cluster, openapphack-pi-vm, openapphack-pi-cluster repositories + +Openapphack also enables end to end automation of application deployment which can be leveraged for prototyping and distributed deployment of opensource applications . + +Openapphack uses opensource tools for provisioning , code authoring and scaffolding. + The project templates are - openapphack-vm : Template used for setting up a single openapphack vm. @@ -38,29 +36,53 @@ The project templates are - openapphack-cluster : Template used for setting up multi or load balanced/ HA cluster for the application. - openapphack-pi-cluster : Template used for setting up multi or load balanced /HA cluster on openapphack RPI cluster. -All openapphack projects github repositories must follows a naming convention and github repository names must end with either an xxx-vm, xxx-pi-vm ,xxx-pi-cluster or xxx-cluster to be picked up by the openapphack for analysis and testing. +All openapphack projects github repositories must follows a naming convention and github repository names must end with either an xxx-vm, xxx-pi-vm ,xxx-pi-cluster or xxx-cluster to be picked up by the openapphack for analysis and testing. + +Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docker for automation. *** ### Openapphack subprojects and repositories -The others repositories used by the openapphack project are listed below: +**Openapphack core projects** + +[**Openapphack-shell(oah)**](https://github.com/WiproOpenSourcePractice/openapphack-shell) : Shell for openapphack.. + +[**OpenAppHack-launcher(oah-app)**]: Openapphack Launcher + +[**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. + +**Openapphack Template Projects** [**Openapphack-vm**](https://github.com/WiproOpenSourcePractice/openapphack-vm) : The repository from which all openapphack-xxx-vm repos are derived. [**Openapphack-cluster**](https://github.com/WiproOpenSourcePractice/openapphack-cluster) : The repository from which all openapphack-xxx-cluster repos are derived.. -[**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository used to organize all openapphack ansible roles . These can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm +**Openapphack Extension Projects** -[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used to organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) +This includes the various +- oah-launcher-plugins, +- oah-ansible-roles, +- oah-vms, +- oah-clusters, +- oah-recipes, +- oah-pi-clusters, +- oah-pi-vms -[**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. +**Openapphack dev tools projects** -[**Openapphack-shell**](https://github.com/WiproOpenSourcePractice/openapphack-shell) : Shell for openapphack.. +[**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository used to organize all openapphack ansible roles . These can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm + +[**Openapphack-yeoman-generators**](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators) : Repository used to organize all yeoman generators used by openapphack vm/clusters. You can also add your own yeoman generators that work on openapphack-vm, [more info](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) [**generator-openapphack**](https://github.com/WiproOpenSourcePractice/generator-openapphack) : Yeoman generator to generate openapphack vms/clusters , would be reorganized under openapphack-tools.. *** +### Openapphack PI Cluster + +Use can use an openapphack-pi-cluster to test your openapphack pi-vm/cluster projects + + ### Contributing to this project @@ -80,20 +102,6 @@ Please take a look [here](https://github.com/WiproOpenSourcePractice/openapphack Please take a look [here](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) , on how to add your own openapphack yeoman generator -#### How do you test your openapphack-project? - -clone your `openapphack-vm` associated with your githubid or org and run vagrant up , vagrant provision. - -You should be able to validate and test your vm. - -#### How do you submit your openapphack-project? ### - -You will have to submit a pull request to [openapphack repository](https://github.com/WiproOpenSourcePractice/openapphack) to do so. - -If you are unsure on how to make a pull request. Please refer [github's guide on creating a pull request](https://help.github.com/articles/creating-a-pull-request/) - -Do mention your github repository url and details of any ansible or yeoman generators you have included to get your openapphack project working. - Please join the community @ https://groups.google.com/forum/#!forum/openapphack. From 542e182e1c61f7eff9041672e2c642a3e7276cb9 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 14:36:56 +0530 Subject: [PATCH 24/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef2353d..49d2f42 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docke [**Openapphack-shell(oah)**](https://github.com/WiproOpenSourcePractice/openapphack-shell) : Shell for openapphack.. -[**OpenAppHack-launcher(oah-app)**]: Openapphack Launcher +[**OpenAppHack-launcher(oah-app)**](): Openapphack Launcher [**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. From ea7328bc8e9c95fcca4f55873cb247c1d15fca56 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 14:43:03 +0530 Subject: [PATCH 25/34] Update README.md --- README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 49d2f42..4b7b785 100644 --- a/README.md +++ b/README.md @@ -58,16 +58,21 @@ Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docke [**Openapphack-cluster**](https://github.com/WiproOpenSourcePractice/openapphack-cluster) : The repository from which all openapphack-xxx-cluster repos are derived.. +[**Openapphack-pi-vm**](https://github.com/WiproOpenSourcePractice/openapphack-pi-vm) : The repository from which all openapphack-xxx-pi-vm repos are derived. + +[**Openapphack-pi-cluster**](https://github.com/WiproOpenSourcePractice/openapphack-pi-cluster) : The repository from which all openapphack-xxx-pi-cluster repos are derived.. + **Openapphack Extension Projects** -This includes the various -- oah-launcher-plugins, -- oah-ansible-roles, -- oah-vms, -- oah-clusters, -- oah-recipes, -- oah-pi-clusters, -- oah-pi-vms +This includes the various git repositories + +- openapphack-XXXX-launcher-plugins(oah-launcher-plugins), +- ansible-role-openapphack-XXXX (oah-ansible-roles), +- openapphack-XXXX-vm (oah-vms), +- openapphack-XXXX-cluster (oah-clusters), +- openapphack-XXXX-recipes (oah-recipes), +- openapphack-XXXX-pi-cluster (oah-pi-clusters), +- openapphack-XXXX-pi-vm (oah-pi-vms) **Openapphack dev tools projects** @@ -80,7 +85,7 @@ This includes the various *** ### Openapphack PI Cluster -Use can use an openapphack-pi-cluster to test your openapphack pi-vm/cluster projects +An openapphack-pi-cluster can be used to test your openapphack pi-vm/cluster projects From e1363578a27c233af48b39123351c39186b4a984 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 14:44:27 +0530 Subject: [PATCH 26/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b7b785..7f94f23 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Openapphack is an opensource application aggregrator. Simplifies experimenting with opensource application . OpenAppHack projects can be used for testing and rapid prototyping of opensource solutions . OpenAppHack projects can also be run on low cost RPI cluster -The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource technologies and experiment freely on opensource applications +The broader purpose is to provide a simplified path for full stack developers to quickly get started on opensource applications and experiment freely on deciding which opensource applications should be considered for building an opensource solution. ### Index From 56f613db7d72bd5b41065252956fecbe56f36bfc Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 14:54:53 +0530 Subject: [PATCH 27/34] Update README.md --- README.md | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 7f94f23..6e97d99 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,10 @@ The broader purpose is to provide a simplified path for full stack developers to ### Index - [What is OpenAppHack Project?](https://github.com/WiproOpenSourcePractice/openapphack#what-is-openapphack-vm-project) -- [Openapphack repositories](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-repositories) -- [Contributing to this project](https://github.com/WiproOpenSourcePractice/openapphack#contributing-to-this-project) -- [How do you start your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-start-your-openapphack-project) - - [How do you customize your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-customize-your-openapphack-project) - - [How do you test your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-test-your-openapphack-project) - - [How do you submit your openapphack-project?](https://github.com/WiproOpenSourcePractice/openapphack#how-do-you-submit-your-openapphack-project) - +- [Openapphack subprojects and repositories ](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-subprojects-and-repositories ) + - [Openapphack Template Projects](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-template-projects) + - [Openapphack Extension Projects](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-extension-projects) +- [Openapphack PI Cluster](https://github.com/WiproOpenSourcePractice/openapphack#openapphack-pi-cluster) ### What is OpenAppHack Project? @@ -42,6 +39,7 @@ Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docke *** + ### Openapphack subprojects and repositories **Openapphack core projects** @@ -52,7 +50,7 @@ Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docke [**Openapphack-stats**](https://github.com/WiproOpenSourcePractice/openapphack-stats) : The repository that will be updated periodically with test results and details from validated openapphack-vm/clusters.. -**Openapphack Template Projects** +#### **Openapphack Template Projects** [**Openapphack-vm**](https://github.com/WiproOpenSourcePractice/openapphack-vm) : The repository from which all openapphack-xxx-vm repos are derived. @@ -62,7 +60,7 @@ Openapphack-vms/clusters leverages vagrant, ansible ,yeoman,virtualbox and docke [**Openapphack-pi-cluster**](https://github.com/WiproOpenSourcePractice/openapphack-pi-cluster) : The repository from which all openapphack-xxx-pi-cluster repos are derived.. -**Openapphack Extension Projects** +##### **Openapphack Extension Projects** This includes the various git repositories @@ -74,7 +72,7 @@ This includes the various git repositories - openapphack-XXXX-pi-cluster (oah-pi-clusters), - openapphack-XXXX-pi-vm (oah-pi-vms) -**Openapphack dev tools projects** +#### **Openapphack dev tools projects** [**Openapphack-ansible-roles**](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles) : Repository used to organize all openapphack ansible roles . These can be used by openapphack projects, You can also add your own ansible roles that work on openapphack-vm @@ -87,8 +85,6 @@ This includes the various git repositories An openapphack-pi-cluster can be used to test your openapphack pi-vm/cluster projects - - ### Contributing to this project You can start contributing to this project by starting your own openapphack-vm or openapphack-cluster project as mentioned below. @@ -97,16 +93,6 @@ You can start contributing to this project by starting your own openapphack-vm o You begin by forking an [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm/) and follow the instructions mentioned [here](https://github.com/WiproOpenSourcePractice/openapphack-vm/blob/master/README.md) -#### How do you customize your openapphack-project? - -You are free to tweak the vm configurations as long as the base vagrant box and the openapphack vm folder structure is maintained. Any additional customization must be done only in the `yaml` files. - -You are also free to add (**only add**) and include your own yeoman generator and ansible roles as long as they work together on the openapphack-vm. - -Please take a look [here](https://github.com/WiproOpenSourcePractice/openapphack-ansible-roles/wiki/Openapphack-Ansible-Roles) , on how to add your own openapphack ansible role - -Please take a look [here](https://github.com/WiproOpenSourcePractice/openapphack-yeoman-generators/wiki/Openapphack-Yeoman-Generators) , on how to add your own openapphack yeoman generator - Please join the community @ https://groups.google.com/forum/#!forum/openapphack. From f11f0885e88a8eb97e46fb9eb9c1220b82e38b5a Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 15:04:59 +0530 Subject: [PATCH 28/34] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6e97d99..d5b45a7 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,8 @@ This includes the various git repositories An openapphack-pi-cluster can be used to test your openapphack pi-vm/cluster projects +![Image of a DIY openapphack pi cluster](https://cloud.githubusercontent.com/assets/8347838/15924963/ab4d9504-2e52-11e6-8e04-c58c2bcb0fb2.png) + ### Contributing to this project You can start contributing to this project by starting your own openapphack-vm or openapphack-cluster project as mentioned below. From 5f6e2cfb82006a377cb58ff3ed79803f2658e3bc Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 9 Jun 2016 15:11:07 +0530 Subject: [PATCH 29/34] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d5b45a7..f0ad691 100644 --- a/README.md +++ b/README.md @@ -89,14 +89,13 @@ An openapphack-pi-cluster can be used to test your openapphack pi-vm/cluster pro ### Contributing to this project -You can start contributing to this project by starting your own openapphack-vm or openapphack-cluster project as mentioned below. +You can start contributing to this project by joining in on any of the openapphack projects mentioned above. #### How do you start your openapphack project? -You begin by forking an [openapphack-vm](https://github.com/WiproOpenSourcePractice/openapphack-vm/) and follow the instructions mentioned [here](https://github.com/WiproOpenSourcePractice/openapphack-vm/blob/master/README.md) +This section is currently being revamped as openapphack project is being reorganized to enable greated community participation. - -Please join the community @ https://groups.google.com/forum/#!forum/openapphack. +Please join the community @ https://groups.google.com/forum/#!forum/openapphack , to know more about the project. If you have any questions/suggestions please email to [openapphack-queries@googlegroups.com](mailto:openapphack-queries@googlegroups.com) From b166e06fed7a07b08fec5100cd388e6dd1875c65 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 16 Jun 2016 01:27:51 +0530 Subject: [PATCH 30/34] reorganized for electronapp --- .gitmodules | 9 + Dockerfile | 10 +- TODO.md | 2 + bin/install.sh | 151 ++++++ {src/main/bash => bin}/selfupdate.sh | 41 +- build.gradle | 117 ----- config.groovy | 19 - data/inventory | 1 + data/requirements.yml | 4 + data/setup.yml | 7 + docs/design.md | 24 + gradle/wrapper/gradle-wrapper.jar | Bin 52141 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 6 - gradlew | 164 ------- launcher | 1 + lib/heroku-javaagent-1.4.jar | Bin 10925 -> 0 bytes .../lib/mongo-java-driver-2.9.0.jar | Bin 386082 -> 0 bytes mods/vertx.mongo-persistor-v1.2/mod.json | 4 - .../org/vertx/mods/MongoPersistor$1.class | Bin 1550 -> 0 bytes .../org/vertx/mods/MongoPersistor$2.class | Bin 1800 -> 0 bytes .../org/vertx/mods/MongoPersistor$3.class | Bin 1363 -> 0 bytes .../org/vertx/mods/MongoPersistor.class | Bin 14159 -> 0 bytes openapphackprojects.md | 2 - shell | 1 + src/main/bash/app-broadcast.sh | 68 --- src/main/bash/app-common.sh | 89 ---- src/main/bash/app-current.sh | 50 -- src/main/bash/app-default.sh | 20 - src/main/bash/app-destroy.sh | 5 - src/main/bash/app-flush.sh | 62 --- src/main/bash/app-halt.sh | 5 - src/main/bash/app-help.sh | 34 -- src/main/bash/app-init.sh | 175 ------- src/main/bash/app-install.sh | 133 ------ src/main/bash/app-list.sh | 57 --- src/main/bash/app-main.sh | 117 ----- src/main/bash/app-offline.sh | 38 -- src/main/bash/app-outdated.sh | 66 --- src/main/bash/app-provision.sh | 5 - src/main/bash/app-selfupdate.sh | 50 -- src/main/bash/app-uninstall.sh | 22 - src/main/bash/app-up.sh | 5 - src/main/bash/app-use.sh | 40 -- src/main/bash/app-version.sh | 6 - src/main/bash/install.sh | 284 ----------- src/main/templates/broadcast.gtpl | 11 - src/main/templates/legacy.gtpl | 13 - src/main/templates/list.gtpl | 29 -- src/main/templates/list_2.gtpl | 10 - src/main/templates/robots.txt | 2 - src/main/vertx/server.groovy | 269 ----------- .../cucumber/openapphack/broadcast.feature | 35 -- .../openapphack/command_line_interop.feature | 23 - .../openapphack/current_candidate.feature | 34 -- src/test/cucumber/openapphack/flush.feature | 54 --- .../openapphack/forced_offline_mode.feature | 120 ----- .../idempotent_self_update.feature | 14 - .../openapphack/initialisation.feature | 27 -- .../openapphack/install_candidate.feature | 64 --- .../openapphack/install_openapphack.feature | 82 ---- .../openapphack/list_candidates.feature | 39 -- .../local_developement_versions.feature | 46 -- .../cucumber/openapphack/mnemonics.feature | 91 ---- .../cucumber/openapphack/offline_mode.feature | 129 ----- .../openapphack/outdated_candidate.feature | 53 --- .../cucumber/openapphack/self_update.feature | 73 --- .../openapphack/uninstall_candidate.feature | 37 -- .../use_and_default_candidate.feature | 67 --- src/test/cucumber/openapphack/version.feature | 9 - .../openapphack/cucumber/RunCukeTests.groovy | 14 - .../groovy/openapphack/env/BashEnv.groovy | 165 ------- .../env/OpenAppHackEnvBuilder.groovy | 194 -------- .../openapphack/specs/BootstrapSpec.groovy | 144 ------ .../groovy/openapphack/stubs/CurlStub.groovy | 34 -- .../openapphack/stubs/WebServiceStub.groovy | 37 -- .../groovy/openapphack/utils/TestUtils.groovy | 14 - src/test/jmeter/OPENAPPHACK.jmx | 441 ------------------ src/test/jmeter/candidates.csv | 2 - src/test/resources/__files/selfupdate.sh | 51 -- src/test/resources/openapphack_application.js | 1 - src/test/resources/openapphack_broadcast.js | 1 - src/test/resources/openapphack_candidates.js | 30 -- .../steps/openapphack/broadcast_steps.groovy | 19 - .../command_line_interop_steps.groovy | 33 -- src/test/steps/openapphack/env.groovy | 70 --- src/test/steps/openapphack/flush_steps.groovy | 49 -- .../openapphack/initialisation_steps.groovy | 130 ------ .../openapphack/installation_steps.groovy | 104 ----- .../openapphack/remote_candidate_steps.groovy | 0 .../steps/openapphack/selfupdate_steps.groovy | 73 --- src/test/steps/openapphack/stub_steps.groovy | 32 -- src/test/steps/openapphack/use_steps.groovy | 45 -- test/testapp.sh | 1 + tools/generators | 1 + 94 files changed, 221 insertions(+), 4689 deletions(-) create mode 100644 .gitmodules create mode 100644 TODO.md create mode 100755 bin/install.sh rename {src/main/bash => bin}/selfupdate.sh (69%) mode change 100644 => 100755 delete mode 100644 build.gradle delete mode 100644 config.groovy create mode 100644 data/inventory create mode 100644 data/requirements.yml create mode 100644 data/setup.yml create mode 100644 docs/design.md delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100755 gradlew create mode 160000 launcher delete mode 100644 lib/heroku-javaagent-1.4.jar delete mode 100644 mods/vertx.mongo-persistor-v1.2/lib/mongo-java-driver-2.9.0.jar delete mode 100644 mods/vertx.mongo-persistor-v1.2/mod.json delete mode 100644 mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$1.class delete mode 100644 mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$2.class delete mode 100644 mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$3.class delete mode 100644 mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor.class delete mode 100644 openapphackprojects.md create mode 160000 shell delete mode 100644 src/main/bash/app-broadcast.sh delete mode 100644 src/main/bash/app-common.sh delete mode 100644 src/main/bash/app-current.sh delete mode 100644 src/main/bash/app-default.sh delete mode 100644 src/main/bash/app-destroy.sh delete mode 100644 src/main/bash/app-flush.sh delete mode 100644 src/main/bash/app-halt.sh delete mode 100644 src/main/bash/app-help.sh delete mode 100644 src/main/bash/app-init.sh delete mode 100644 src/main/bash/app-install.sh delete mode 100644 src/main/bash/app-list.sh delete mode 100644 src/main/bash/app-main.sh delete mode 100644 src/main/bash/app-offline.sh delete mode 100644 src/main/bash/app-outdated.sh delete mode 100644 src/main/bash/app-provision.sh delete mode 100644 src/main/bash/app-selfupdate.sh delete mode 100644 src/main/bash/app-uninstall.sh delete mode 100644 src/main/bash/app-up.sh delete mode 100644 src/main/bash/app-use.sh delete mode 100644 src/main/bash/app-version.sh delete mode 100644 src/main/bash/install.sh delete mode 100644 src/main/templates/broadcast.gtpl delete mode 100644 src/main/templates/legacy.gtpl delete mode 100644 src/main/templates/list.gtpl delete mode 100644 src/main/templates/list_2.gtpl delete mode 100644 src/main/templates/robots.txt delete mode 100644 src/main/vertx/server.groovy delete mode 100644 src/test/cucumber/openapphack/broadcast.feature delete mode 100644 src/test/cucumber/openapphack/command_line_interop.feature delete mode 100644 src/test/cucumber/openapphack/current_candidate.feature delete mode 100644 src/test/cucumber/openapphack/flush.feature delete mode 100644 src/test/cucumber/openapphack/forced_offline_mode.feature delete mode 100644 src/test/cucumber/openapphack/idempotent_self_update.feature delete mode 100644 src/test/cucumber/openapphack/initialisation.feature delete mode 100644 src/test/cucumber/openapphack/install_candidate.feature delete mode 100644 src/test/cucumber/openapphack/install_openapphack.feature delete mode 100644 src/test/cucumber/openapphack/list_candidates.feature delete mode 100644 src/test/cucumber/openapphack/local_developement_versions.feature delete mode 100644 src/test/cucumber/openapphack/mnemonics.feature delete mode 100644 src/test/cucumber/openapphack/offline_mode.feature delete mode 100644 src/test/cucumber/openapphack/outdated_candidate.feature delete mode 100644 src/test/cucumber/openapphack/self_update.feature delete mode 100644 src/test/cucumber/openapphack/uninstall_candidate.feature delete mode 100644 src/test/cucumber/openapphack/use_and_default_candidate.feature delete mode 100644 src/test/cucumber/openapphack/version.feature delete mode 100644 src/test/groovy/openapphack/cucumber/RunCukeTests.groovy delete mode 100644 src/test/groovy/openapphack/env/BashEnv.groovy delete mode 100644 src/test/groovy/openapphack/env/OpenAppHackEnvBuilder.groovy delete mode 100644 src/test/groovy/openapphack/specs/BootstrapSpec.groovy delete mode 100644 src/test/groovy/openapphack/stubs/CurlStub.groovy delete mode 100644 src/test/groovy/openapphack/stubs/WebServiceStub.groovy delete mode 100644 src/test/groovy/openapphack/utils/TestUtils.groovy delete mode 100644 src/test/jmeter/OPENAPPHACK.jmx delete mode 100644 src/test/jmeter/candidates.csv delete mode 100644 src/test/resources/__files/selfupdate.sh delete mode 100644 src/test/resources/openapphack_application.js delete mode 100644 src/test/resources/openapphack_broadcast.js delete mode 100644 src/test/resources/openapphack_candidates.js delete mode 100644 src/test/steps/openapphack/broadcast_steps.groovy delete mode 100644 src/test/steps/openapphack/command_line_interop_steps.groovy delete mode 100644 src/test/steps/openapphack/env.groovy delete mode 100644 src/test/steps/openapphack/flush_steps.groovy delete mode 100644 src/test/steps/openapphack/initialisation_steps.groovy delete mode 100644 src/test/steps/openapphack/installation_steps.groovy delete mode 100644 src/test/steps/openapphack/remote_candidate_steps.groovy delete mode 100644 src/test/steps/openapphack/selfupdate_steps.groovy delete mode 100644 src/test/steps/openapphack/stub_steps.groovy delete mode 100644 src/test/steps/openapphack/use_steps.groovy create mode 100755 test/testapp.sh create mode 160000 tools/generators diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8d85bcf --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "launcher"] + path = launcher + url = https://github.com/WiproOpenSourcePractice/openapphack-launcher.git +[submodule "shell"] + path = shell + url = https://github.com/WiproOpenSourcePractice/openapphack-shell.git +[submodule "tools/generators"] + path = tools/generators + url = https://github.com/WiproOpenSourcePractice/generator-openapphack.git diff --git a/Dockerfile b/Dockerfile index 694b9b8..23263bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ -FROM dockerfile/java +FROM dockerfile/ansible # Copy all here -RUN mkdir -p /usr/src/app -ADD . /usr/src/app -WORKDIR /usr/src/app +RUN mkdir -p /usr/src/oah +ADD . /usr/src/oah +WORKDIR /usr/src/oah -CMD ["./gradlew"] +CMD ["./bin/install.sh"] diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..2e0dd55 --- /dev/null +++ b/TODO.md @@ -0,0 +1,2 @@ +Refactoring TODOs +a) Refactor openapphack as a toplevel ansible project , that is also an ansible role to install openapphack depending on where openapphack is being installed diff --git a/bin/install.sh b/bin/install.sh new file mode 100755 index 0000000..d5c3ae0 --- /dev/null +++ b/bin/install.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +# Global variables +OPENAPPHACK_SERVICE="http://wiproopensourcepractice.github.io/openapphack/" +OPENAPPHACK_VERSION="0.0.1" +#OPENAPPHACK_DIR="${0%/*/*}" +OPENAPPHACK_DIR="${HOME}/.ove" + +# Local variables +openapphack_bin_folder="${OPENAPPHACK_DIR}/bin" +openapphack_tmp_folder="${OPENAPPHACK_DIR}/tmp" +openapphack_stage_folder="${openapphack_tmp_folder}/stage" +openapphack_etc_folder="${OPENAPPHACK_DIR}/etc" +openapphack_var_folder="${OPENAPPHACK_DIR}/var" +openapphack_config_file="${openapphack_etc_folder}/config" +openapphack_bash_profile="${HOME}/.bash_profile" +openapphack_profile="${HOME}/.profile" +openapphack_bashrc="${HOME}/.bashrc" +openapphack_zshrc="${HOME}/.zshrc" +openapphack_platform=$(uname) + +openapphack_init_snippet=$( cat << EOF +#THIS MUST BE AT THE END OF THE FILE FOR OPENAPPHACK CLI TO WORK!!! +[[ -s "${OPENAPPHACK_DIR}/bin/oah-init.sh" ]] && source "${OPENAPPHACK_DIR}/bin/oah-init.sh" +EOF +) + + +echo ' ' +echo 'Thanks for using OPENAPPHACK ' +echo ' ' +echo ' ' +echo ' Will now attempt installing...' +echo ' ' + + +# Sanity checks + +echo "Looking for a previous installation of OPENAPPHACK..." +if [ -d "${OPENAPPHACK_DIR}" ]; then + echo "OPENAPPHACK found." + echo "" + echo "======================================================================================================" + echo " You already have OPENAPPHACK installed." + echo " OPENAPPHACK was found at:" + echo "" + echo " ${OPENAPPHACK_DIR}" + echo "" + echo " Please consider running the following if you need to upgrade." + echo "" + echo " $ oah selfupdate" + echo "" + echo "======================================================================================================" + echo "" + exit 0 +fi + +echo "Looking for git..." +if [ -z $(which git) ]; then + echo "Not found." + echo "" + echo "======================================================================================================" + echo " Please install git on your system using your favourite package manager." + echo "" + echo " OPENAPPHACK uses git for crucial interactions with it's github repos." + echo "" + echo " Restart after installing git." + echo "======================================================================================================" + echo "" + exit 0 +fi + +echo "Looking for unzip..." +if [ -z $(which unzip) ]; then + echo "Not found." + echo "======================================================================================================" + echo " Please install unzip on your system using your favourite package manager." + echo "" + echo " Restart after installing unzip." + echo "======================================================================================================" + echo "" + exit 0 +fi + + +echo "Looking for curl..." +if [ -z $(which curl) ]; then + echo "Not found." + echo "" + echo "======================================================================================================" + echo " Please install curl on your system using your favourite package manager." + echo "" + echo " OPENAPPHACK uses curl for crucial interactions with it's github pages." + echo "" + echo " Restart after installing curl." + echo "======================================================================================================" + echo "" + exit 0 +fi + +echo "Looking for sed..." +if [ -z $(which sed) ]; then + echo "Not found." + echo "" + echo "======================================================================================================" + echo " Please install sed on your system using your favourite package manager." + echo "" + echo " OPENAPPHACK uses sed extensively." + echo "" + echo " Restart after installing sed." + echo "======================================================================================================" + echo "" + exit 0 +fi + + +echo "Looking for vagrant..." +if [ -z $(which vagrant) ]; then + echo "Not found." + echo "" + echo "======================================================================================================" + echo " Please install vagrant on your system using your favourite package manager." + echo "" + echo " OPENAPPHACK uses vagrant extensively." + echo "" + echo " Restart after installing vagrant." + echo "======================================================================================================" + echo "" + exit 0 +fi + +echo "Looking for ansible..." +if [ -z $(which ansible) ]; then + echo "Not found." + echo "" + echo "======================================================================================================" + echo " Please install ansible on your system using your favourite package manager." + echo "" + echo " OPENAPPHACK uses ansible extensively." + echo "" + echo " Restart after installing ansible." + echo "======================================================================================================" + echo "" + exit 0 +fi + +# if hostmachine then vagrant or Docker must be installed +# if client machine disable vagrant up commands +# TODO Set the Global var for OAH_HOST and OAH_CLIENT +ansible-galaxy install -r ../data/requirements.yml +ansible-playbook ../data/setup.yml diff --git a/src/main/bash/selfupdate.sh b/bin/selfupdate.sh old mode 100644 new mode 100755 similarity index 69% rename from src/main/bash/selfupdate.sh rename to bin/selfupdate.sh index cf235d6..87a01b2 --- a/src/main/bash/selfupdate.sh +++ b/bin/selfupdate.sh @@ -9,9 +9,10 @@ function openapphack_echo_debug { echo "" echo "Updating openapphack..." -OPENAPPHACK_VERSION="@OPENAPPHACK_VERSION@" +OPENAPPHACK_VERSION="0.0.1" if [ -z "${OPENAPPHACK_DIR}" ]; then - OPENAPPHACK_DIR="$HOME/.openapphack" +# OPENAPPHACK_DIR="${0%/*/*}" + OPENAPPHACK_DIR="~/.oah" fi # OS specific support (must be 'true' or 'false'). @@ -35,23 +36,10 @@ esac openapphack_platform=$(uname) openapphack_bin_folder="${OPENAPPHACK_DIR}/bin" -openapphack_tmp_zip="${OPENAPPHACK_DIR}/tmp/res-${OPENAPPHACK_VERSION}.zip" openapphack_stage_folder="${OPENAPPHACK_DIR}/tmp/stage" -openapphack_src_folder="${OPENAPPHACK_DIR}/src" - -openapphack_echo_debug "Purge existing scripts..." -rm -rf "${openapphack_bin_folder}" -rm -rf "${openapphack_src_folder}" - -openapphack_echo_debug "Refresh directory structure..." -mkdir -p "${OPENAPPHACK_DIR}/bin" -mkdir -p "${OPENAPPHACK_DIR}/ext" -mkdir -p "${OPENAPPHACK_DIR}/etc" -mkdir -p "${OPENAPPHACK_DIR}/src" -mkdir -p "${OPENAPPHACK_DIR}/var" -mkdir -p "${OPENAPPHACK_DIR}/tmp" -mkdir -p "${OPENAPPHACK_DIR}/vm" -mkdir -p "${OPENAPPHACK_DIR}/.vms" + +openapphack_echo_debug "git pull..." +git pull # prepare candidates OPENAPPHACK_CANDIDATES_CSV=$(curl -s "${OPENAPPHACK_SERVICE}/candidates") @@ -69,8 +57,8 @@ IFS="$OLD_IFS" for candidate in "${OPENAPPHACK_CANDIDATES[@]}"; do if [[ -n "$candidate" ]]; then - mkdir -p "${OPENAPPHACK_DIR}/.vms/${candidate}" - openapphack_echo_debug "Created for ${candidate}: ${OPENAPPHACK_DIR}/.vms/${candidate}" + mkdir -p "${OPENAPPHACK_DIR}/${candidate}" + openapphack_echo_debug "Created for ${candidate}: ${OPENAPPHACK_DIR}/${candidate}" fi done @@ -95,8 +83,7 @@ if [[ -z $(cat ${openapphack_config_file} | grep 'openapphack_insecure_ssl') ]]; fi openapphack_echo_debug "Download new scripts to: ${openapphack_tmp_zip}" -#https://github.com/WiproOpenSourcePractice/openapphack/raw/gh-pages/ -curl -s "${OPENAPPHACK_SERVICE}/res/platform/${openapphack_platform}/purpose/selfupdate/openapphack-cli-scripts.zip" > "${openapphack_tmp_zip}" +curl -s "${OPENAPPHACK_SERVICE}/platform/${openapphack_platform}/oah_scripts.zip" > "${openapphack_tmp_zip}" openapphack_echo_debug "Extract script archive..." openapphack_echo_debug "Unziping scripts to: ${openapphack_stage_folder}" @@ -107,21 +94,21 @@ else unzip -qo "${openapphack_tmp_zip}" -d "${openapphack_stage_folder}" fi -openapphack_echo_debug "Moving app-init file to bin folder..." -mv "${openapphack_stage_folder}/app-init.sh" "${openapphack_bin_folder}" +openapphack_echo_debug "Moving oah-init file to bin folder..." +mv "${openapphack_stage_folder}/oah-init.sh" "${openapphack_bin_folder}" openapphack_echo_debug "Move remaining module scripts to src folder: ${openapphack_src_folder}" -mv "${openapphack_stage_folder}"/app-* "${openapphack_src_folder}" +mv "${openapphack_stage_folder}"/oah-* "${openapphack_src_folder}" openapphack_echo_debug "Clean up staging folder..." rm -rf "${openapphack_stage_folder}" echo "" echo "" -echo "Successfully upgraded OpenAppHack CLI." +echo "Successfully upgraded OPENAPPHACK." echo "" echo "Please open a new terminal, or run the following in the existing one:" echo "" -echo " source \"${OPENAPPHACK_DIR}/bin/app-init.sh\"" +echo " source \"${OPENAPPHACK_DIR}/bin/oah-init.sh\"" echo "" echo "" diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 56ee3c2..0000000 --- a/build.gradle +++ /dev/null @@ -1,117 +0,0 @@ -import org.apache.tools.ant.filters.* - -buildscript { - repositories { - jcenter() - } -} - -apply plugin: 'groovy' -apply plugin: 'idea' -apply plugin: 'eclipse' - -defaultTasks 'clean', 'prepareTestScripts', 'prepareScripts', 'prepareServer', 'prepareTemplates', 'assembleArchive', 'test' - -def userHome = System.getProperty('user.home') -ext.installBinDir = "${userHome}/.openapphack/bin" -ext.installSrcDir = "${userHome}/.openapphack/src" - -ext.defaultopenapphackVersion = '1.0.0-SNAPSHOT' - -loadConfiguration() - -repositories { - jcenter() -} - -dependencies { - compile 'org.codehaus.groovy:groovy:2.3.7' - compile 'org.codehaus.groovy:groovy-templates:2.3.7' - testCompile 'junit:junit:4.11' - testCompile 'info.cukes:cucumber-groovy:1.1.8' - testCompile 'info.cukes:cucumber-junit:1.1.8' - testCompile 'org.spockframework:spock-core:0.7-groovy-2.0' - testCompile 'com.github.tomakehurst:wiremock:1.46' -} - -test.testLogging.exceptionFormat = 'full' - -def loadConfiguration() { - def environment = hasProperty('env') ? env : 'local' - ext.environment = environment - println "Environment is set to: $environment" - - def configFile = file('config.groovy') - def config = new ConfigSlurper(environment).parse(configFile.toURL()) - ext.config = config -} - -task prepareTemplates(type: Copy) { - from "src/main/templates" - into "build/templates" - include "*.gtpl" -} - -task prepareServer(type: Copy){ - from 'src/main/vertx' - into 'build/server' - include 'server.groovy' - filter(ReplaceTokens, tokens: [OPENAPPHACK_VERSION:config.openapphackVersion ?: defaultopenapphackVersion, VERTX_VERSION:config.vertxVersion]) -} - -task prepareTestScripts(type: Copy) { - from 'src/main/bash' - into 'build/testScripts' - include '**/*' - filter(ReplaceTokens, tokens: - [ - OPENAPPHACK_VERSION : "x.y.z", - OPENAPPHACK_SERVICE : config.openapphackService, - OPENAPPHACK_BROKER_SERVICE : config.openapphackBrokerService, - OPENAPPHACK_BROADCAST_SERVICE: config.openapphackBroadcastService - ] - ) -} - -task prepareScripts(type: Copy) { - from 'src/main/bash' - into 'build/scripts' - include '**/*' - filter(ReplaceTokens, tokens: - [ - OPENAPPHACK_VERSION : config.openapphackVersion ?: defaultopenapphackVersion, - OPENAPPHACK_SERVICE : config.openapphackService, - OPENAPPHACK_BROKER_SERVICE : config.openapphackBrokerService, - OPENAPPHACK_BROADCAST_SERVICE: config.openapphackBroadcastService - ] - ) -} - -task assembleArchive(type: Zip) { - classifier = 'scripts' - from "build/scripts" - include "app*" -} - -task cleanInstallInit(type: Delete) { - delete installBinDir -} - -task cleanInstallModules(type: Delete) { - delete installSrcDir -} - -task installInit(type: Copy, dependsOn: [cleanInstallInit, prepareScripts]) { - from "build/scripts" - into installBinDir - include "app-init.sh" -} - -task installModules(type: Copy, dependsOn: [cleanInstallModules, prepareScripts]) { - from "build/scripts" - into installSrcDir - include "app-*.sh" - exclude "app-init.sh" -} - -task install(dependsOn: [installInit, installModules]) diff --git a/config.groovy b/config.groovy deleted file mode 100644 index 86848b8..0000000 --- a/config.groovy +++ /dev/null @@ -1,19 +0,0 @@ -vertxVersion = '1.3.1.final' -openapphackVersion = '0.0.1' -environments { - local { - openapphackService = 'http://localhost:8080' - openapphackBroadcastService = 'http://localhost:8080' - openapphackBrokerService = 'http://localhost:8080' - } - master { - openapphackService = 'https://raw.githubusercontent.com/WiproOpenSourcePractice/openapphack/gh-pages' - openapphackBroadcastService = 'https://raw.githubusercontent.com/WiproOpenSourcePractice/openapphack/gh-pages/broadcast' - openapphackBrokerService = 'https://raw.githubusercontent.com/WiproOpenSourcePractice/openapphack/gh-pages/broker' - } - production { - openapphackService = 'https://raw.githubusercontent.com/openapphack/openapphack/gh-pages' - openapphackBroadcastService = 'https://raw.githubusercontent.com/openapphack/openapphack/gh-pages/broadcast' - openapphackBrokerService = 'https://raw.githubusercontent.com/openapphack/openapphack/gh-pages/broker' - } -} diff --git a/data/inventory b/data/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/data/inventory @@ -0,0 +1 @@ +localhost diff --git a/data/requirements.yml b/data/requirements.yml new file mode 100644 index 0000000..1c4071f --- /dev/null +++ b/data/requirements.yml @@ -0,0 +1,4 @@ + # from GitHub, overriding the name and specifying a specific tag + - src: https://github.com/openapphack/ansible-role-openapphack-setup + version: master + name: openapphack.setup diff --git a/data/setup.yml b/data/setup.yml new file mode 100644 index 0000000..1ad8168 --- /dev/null +++ b/data/setup.yml @@ -0,0 +1,7 @@ +--- + host: All + task: + - name: "Installing Openapphack shell" + shell: echo "Installing OAH shell" + roles: + openapphack.setup diff --git a/docs/design.md b/docs/design.md new file mode 100644 index 0000000..3c40eb5 --- /dev/null +++ b/docs/design.md @@ -0,0 +1,24 @@ +# Design principles + +- All design decisions will be favouring Circular Economy and open source +- All VM/Cluster will be optimized for RPIs and custer of small vms. +- Fine tune group of roles,vms for a specific operating system +- High availability configuration for clusters. +- Adherance to folder structure of oah-vms, oah-cluster and oah-roles + +# VM Specifications + + +Layout : + +Files : + +Default Configurations : + +# Cluster Specifications + +Layout : + +Files : + +Default Configurations : diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 085a1cdc27db1185342f15a00441734e74fe3735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52141 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
)Mf(9O=$zt#xQMm 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/launcher b/launcher new file mode 160000 index 0000000..622e85a --- /dev/null +++ b/launcher @@ -0,0 +1 @@ +Subproject commit 622e85af279fda381c12332a90ff71c98ac14d28 diff --git a/lib/heroku-javaagent-1.4.jar b/lib/heroku-javaagent-1.4.jar deleted file mode 100644 index fc7108e0d5bac20dc1f95b1d8e77808d400e3716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10925 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 M7)A>;QgY0)aS;@LF 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 z z#;olF7>4IH+9y2R)M@D?Y%%3(084L2UTNqqy zPo-pwJ>^$3c^KpflEY_mr?xm4VM>-GVBtpRbnk}rvr09>Ilh3eoApKQpZT2X^v(+| z-MpjD-%&NZ@=TM4(?{jAMaa3b&dmL_bO3c$d6RS0f|WbvTVRO)^+p;)oOW0TX(t&k ziF2|R^8VA^R_;Qf7pVn*l zZXvN)uC6xP&h#_u(Iv+r@JR^Q&F{G#g!0OO-8*3q3kMbx`wLEcy+3%h-tL(M$NH4= z8{xp)YZt8Rm!4M>Q8Fr##w2)a2%F?%*UFop!5kxJW<49wnP``#${tA_CzKN6 zRy5xA4{Cc*ZG-iTLwMu$XZx5FAV0w%B0C!W)rD8;?hu22rc$vRY16u$A02h74R}AT zml$pTT23qqv6!@)^=-1qiXrc0t!P0_pCvh$J>X z9<7I{y!8Ctg+`z-4il?^ty`UFLhs8YxOXu6GZT0qeZU}hjvzD~N-&JK{*GLgq86>J zj^;$Jq)kpmt{a*&Q_#4P{rFEJo_}aCm^{T^2(VwjD&YRNh>L%E@c;6@h}u~GAC5gq z1yTcZ1epucA6dT+d#MiJ8H0_u4h{f*#af=W`u7GJDmZ4SR_3r_97vtux{@-5Wu}S& zi&xLiDWO*iqu1IX3Q40FW{Y)3vDp^$=iA{(BUb~0FsI<@$jIbHmdEub+wpYP-1)cn zEAp@By&Ud~fzogh&(hvfSoUG_T2#9=BF|Moe365Cv1NUL;BYZq^V`x7(N|LGcisMS zA&{7{;c7k#iJIQ$XjNg@-Z;I_@# zAj+x?clknM!;$=unV}#|(8p^k)-ebIbJm5pYS&DQXVqc@jWT(mnCV)i3)Mfm)!A~g zI@}lKuH)nMz2muq-TkJDwM~I5+#;()iU3W-){tB9fCdQ!SA!3XQ3U4(O&};Z3rr7J zF(u)ryO{O%&YDU<=`W8vc7%={NTg^zba$FpJj>@-G&@%@c7&yHiOjy0|jGmx7 zOSM0N+S>u|N}e(Ube=kW%}vkLTHm|_u(yQJgsfHi!UK>mb>XN?A3!`yHw+(|Lo|$< z{YJ^cnLd8|EZ(qx z74AVpk++Hn$H7rm0D`AbQvH5mNNRgt-rwHHI*mN}n@^GuAsnAqD_E~Elp(qAjB{%n zymm8z@nu(}l z(k?8MMauT`O)Y=(mS=jAz9&5n+mS(Om4FW-ph7}cHgN!1rP_8hi3-jTL>1Z%@1m%)~RzO|1Dh*4u34K3NHI+qPlei+K5jMrc%4lWMoAwBKsH+R` zN~d#q$%CSFyc{kim!$+~61&Dq{6d>tCxBZ5B?EOE#%DzlkUsy+@QbGX%$1qjV;k-S zVW*R*XS;?o=EnNEYXRtl)+)kY`CNb3&i!|+Isv*d6FY^DOm$0ey_23=ng)<+lMqSK z$RS`uVo^5u77jwpAy9>#2-|D=;sw-G)rgf>+j?PcbKxkW_RlGrU$`IdF9Ur6RCma| zb11L;zW&b96tjIc-0-YV<063X`W45A(zZ6BCso-Al{n2(pde}SjH5`nl>No5UmB=!bP@@P}ek-Ws~#u z>G3TBDzZzQusXok>+7a3Am#ljg_cB5>*ZujoA#gc0Olg;Y)TBERA=RZ$8suR3VBCt zmgdiz14ke;oXv{6Y>TKo))l>!9}TV{J{CAF3TVmmR!OORm0JhWOEkHD@7)7EgfUsr z*_>AoJqZPzSNTIw&NhNohi_1xmr7JCnC05gIt2V9H%PZ@S5GvtCD^6|QqO<3Gpv0O zZQ8tkFDwYc44Na#-4)+&f5BQnB9fZL+#kkcIU=$J62WvN8C%(UCc10T-X5(v^ij-3?342CD2PU{qD#ni#<|X_J(3 zjt~%iql2lL1CQGN0bB;zbf(kXnnd?i$qE3wKq*E3f?(OE5Aj;qK2lwZs9`v((x{8$ zEf$x|rTEi81l#=Jr0F!_Uz?|pd(*v?o+RkHyCZnL>Cum>HveYKRi#F7iK2H1ar@#} z4LRe5{jU#dnPd3=gUDBK`-ehIpWNCfs;}UPkD!-lIKrCU)9+mZA5+Js-&VgpgvpO@ zu2N*FWLoyCYwG>Q+Qrtdf#>agU5%+MQUhXhA12!R7)Gks zG$Lj4Z1nYo8f$B7|E1n^2?-OXvUEPmn0%fhdVl+R0n&w~VAdxss!i;t7vP3lKk(K$ z=~cLETr$)hfm#cW_uHF)XyZW%I}S-1d)vwwirsuJG&zGBqB{21xhlPgKPZ=TD*P*(1zkQBP(5E#2|Pf1t-=G+Q8K)aETWB;{m$Ni>CPZJ zAe}c^`#M7#+;lzd97<&tn7ql;={$6}sQC7drK~rn^9#yoFb+?0-Vk31N)NpsUEgV* zvj6YXG|&b2o#9Cn;bSnfO&qaudOK|d8=gM!;l<}Z4AA$d8x3E;e1&-jhau1P|9oa{1R_xx(F#bIpY4t|9j+!jJGnRkR{O+( z($M@z(^FaMdSmZ`j%{0rId|mlD%JILMWDj!kbW_1)^AEViS0`A!_6rhyI z()co*oF6}fuyR^Yt{Pofc06X)SEa9;jQx(G85qWGY-cBtb|a9Cc}E;aGB3Ccr%u_@ zSMZ3wNEU`o`_w|J0GoCB4HW@~FS%AY%^OHQd!&$fpm>SE%s*Mhh}qwYnSfvr&Uc$G zY(p!h^brtDG;c6{!8)xMY@c5K%U%>;yqK*%virZm)*lKQlnL?cmkrAQ7M}O-Mf$%E zq$Cw^Pb?+$@17}=1k2(nzWG8b5mSLR%Xn*vxB@c@v6DJtF$%Ik6h=#zlCj2&ELsi; z%)d9k1WC6`sc@8{Nm0x!5*P(ZL*;pIc!l8QYB#ri!^0Q9Gtw@snKR@QcDfHduHUy^ ze0DgWrn{a2RY{HCYXMr2>|Q!yb$U?`YX$nG!Ml}Ubm9k6yhcY_q6U26M5x^L8^JuI}=%cF2dVH>pBwCiZZEJ&-OQ^DsIf>SU&O;%F{u24i6d zR%!6xBU&+T^@w3a_Y3S>Rr*qad{#o#H~-*2zuUsWilX2oZd{Aq!6N5D?WCx9=kDs^ z9vP$vvJRnH-K4@s*yi}-lDlg5Aqu^~dus;f?3M(%%5T4?8SWhiy#&F^?4`t? zVROrO31xqZS7#?z=uGUPvwaBnH9&Y*?79FXRS9!e3sG)`x&%2{WNnvJiKzpahw3&k zp-2-o2KF{eSJ7Cc#IT7xU`1%+cftW-p=8z4?0y zcaDTwLp4vhML8@J$!>NfU7y|JbmPe`G_!fSv8FaYsM6{W5{fM>?km$ivcunX49t<@ zrgHh2ml$hTr%iFrA;73by;Bct<_iH2g8VKLX;4N7A6MS1amWq}I^gP)p7?t%c-xF2 zCzV?$6=Q)t)*Y4JM%_s#Eb5j44?aQ-mC?T0!CSLbq0oE=u9>+}zf4=z6bx@+kCUk3 z$LXUL%Ko=|0YbyQf1XfKOO%;D&MI%=EKzZOMdL?g!WcssCHvto7`!f4wyfiF3nZ_m zqG@Q;GbJSilk9djXK|>e{*5oeFp#WwS1Fz&N{h5(*mx?RQiKkM&_6+3y~N&cC-8>2 z)T6FDEJ*yLQKGPyLkS|jCLg2cmai3zIbWvtYxoek4JgB|x#B+?up=TqEEUgLUMbVz zD=zqL6YNne#98B)c?e+^9e~KNkw zidcQW(sseA1yjPCTyuKEL~1a~;b7uLhF(t;e*(Ze33QNw`Q?Q0nJZewk;?iJd#q2!%tZ$XK8_#k(iqMj@YX)`$TP0S@gqnEha@x=aT(oGsjjW zpESy9aZu-#wa-)|j5S%u@=E0F3G0O#aOvaC5W-32gvv-21l!1?5s@1~6~dT!ITj1s zs_G&!ka0(%7z0WT*UHz>A{Wsz%o)?tk>~`FmGae*8S1ot5{{95E0i>2V#->7t1$E& zE&~ialG2gdj?)EY^p+`*vUOnV$*1ohxkkj}#;rF`Ff0sBlHI3FPA(Sf1sP1wJ6qfD z!v<|{ofBWqL-pW_s@5-%MV5>c?wIJ^I%Ce0iPP6RmyjrIH-i7tKeN_z78jfL*WyMW z=iI@Rb~N3{3>H+5Z|y3ZPJ2+1=q{0|#H+6tEKn%45~I~al^LSHuq4`j*2z3DhCzdL zZ|%uRN^qOwX=BUStZ54qP?nmo~hC7YbIvi8!Ll@T%gjCh_4SOit%o|xijp{v9? zcix!C<}^uCkeeaPMM4v3zr46_&3st~>Xpnki`7P1HbJhsiMq|4?MLLd#0E}UJnYTO z?y6SItpP&$N-R6uYq*4O$VV&{KW=9)KwfH!-VbJsM+O*gwddE zYU7mC;xB4Lu#~2foCnuQk<@6ygbn_Bt^tD~U_FEeTmg_*wc@neX7UVg55-beVd5V$ zpkZ05I^*OSjNywnJ*=6s4{vXC}T zr(y+n5n3Ctk}D}Q*W{|U4LCTQ^$TZld(gv<1RO?F3FU*EU2%Msl(~w)F8Wg&9Pu>Y z!#huqXB@GPlPgNhZ6k$@z0BfLx7fmAG`v@H!h@Ou*e>kuLfqFNQoX2KcLI z24%-Rky9hA&}yTWGxclHRp3Z2mO#;kapqMcDZnQP6R{&F9t1Xj3_in{?Oo1jFHx6 zb_Jq&_Zi9g)%83+16*gMUs$v10AIJaG&9X;p7tueSUombP#56Q`=tg{<+~T{#M{s4 zSqL@&g`zL8qe5h9Lr6ecZX81}RC^m2$l+>8eYR0B{?`e^9yy9Cj7jJMsAggu~fk6fmrK8o80i{*Mf zhy$$%mMF?ZP9wC3FR?h>i`ZI9u=F^74C&-qC|-Q14p_0fVE(f62VNL!g{Y3JnX~1n zv;M)h=Ei&h$#G*CKzc1Rxl{OUCotZUzNx6j987pg!Kf^ADtVI_ z$!Vm~bii~6qc7WBzMj9ZRIb437 zw14UaNbt06QJ9)L85a^a=!J+o2~h3tksj8oaYhKI=X&=ey618>Psmc{@ho?Q=@T4V z=FBVSv{mK?n~SY>K>vTHD*lmmX<7BFF8^#qfPWMisQ+U#B5!2;Zw0NQhQhim+!stP zIKDP-0_XAX4U?evpfK&l_-@uNgKx-(?fMY=&GJ6yOa9F6KgS-%h$;*M4l%E^KYP%jX5my4fE7J87%wU|LU zzm?iSFO2DeiR4=kKzB4{=Jjk%&5EcmOKO#r8e>3-sVH5lr96k3E)(~CN_4tmLjbDG zMcVhtT77-L5BjHQqAx5erR@Tdmph?3SD4}^JeYvZUk5p=IS@~XIHL_TM$euCy6+Zw zF`~!>uDZB#vIelg->n^~JY@bj8)7y>Gy*<@n+9v|Rwszgpy_I~*k!X?6!qARZTbWsGo1!uQ}V6pre>NEWH4Mc7ruYQuU5 zY;3TPC~lSqPkX#NL=GaD?E3WgpdyG0??UZ^bC{W(wpgg+f11fRtj{wDL%|U4ZMf@d zFr*ScanJ9P9>DW8mYK{iL%j%i?aY1y1C~5tQKoBiFiKlY7DxYgh2v~4Lb=9|XCFBD z|0YKI84CP*4*xEIP|{GqG(z)c9wWi0#s`4_8wyrsvIMwY%=cCDlb@3%$Aef7mU2#@ zB9gos*|yCq2t?;7&|X6KNj$i}EC#3S8@qV!-tq9<9QNpfY}cYhf%b@9CCem;?krbvW$vV~$S3|ev{U+V8uLB1Uk zbrf7G-e%)gK2apCeUA5pQ9)a^$5Pj@oYZXf)){?8*DqOBbXX1bq$W+VM>CufB0E+< z_dEq|JEcb9A*)gzriN)Sr-He1X0tH~!wu`Dh~acHcJxbUE9pSx8;Ed-cvmq#fCc;$ z2&hR4SNIhq&7nm9bJsMhv%OVwHK_(;M~wk}N{&2K!BTlJBVgoId@S-82+Nz)7KsU} z|A(=64({yx(ngbXY}>Zcv2EKO=M$S9+qP}nww-ir+v%I{otc{X&CGr8TXm{V)v5E} zI%n-?ul=B*9LE`IoFnYuv0YJ$935E_jEyldep12wOc#shkpg9#x|K=+Z3moTtrxuBjrl$BE`2%Ws`rNk@RY%f=9WNH=jqqLzOqE@J)V4 zd4b}lB8?q{B6evF1=QER)67kdaMUp!pB)^NV|=tAl6!2FnynlM#^M)HNJdf9ft{ns zp<^qp{Tr2cl|E&y%5HxrrFwg=J|Q2ga}5~r`~Z^_wJfGQ;v%A0>2{G8u)-N)8%`_+)Gjyxw9|ozv)l;=tUz_(^p8lIUYe$nPxc7Tj zsQJw#_@9De6=8*cAK}_MkTU)I3|Hyg@*n0vf~?C_`#LM2YjHh7mMmUG-nX!7tqhG82BcgF{b z{_5?f_SA49Bmj^z8Xe+^?*g`Iohz0U0)kUD3OkTD=e=+qEH1w>l~6p#70sN$M^uy7 zI1UfiTpkhH6fMwg;ZfJCBz^jF=(ZZQ(0oBIGERpwR!E|3a?HYL3kNAc=q8xdm^L~` zNnYP(kTniW2euqn??09*balIdl3)trxwM`?PZjl8aga5}!7NjF6;jh~Hi<%?UEZC% z_Or;;IC>VpuJ4His!Tk$48pB7cEho7*3O-4wqJlx4cj?8x(07D0|xhK8iDwp1VZIn^DC z|C|;7qs~Lj(F;I;00L@600N@;AMos7>M!g5&kXY4K7uUuPe&b9EFZas4vw}qKtiKz zhlMabYhwmOyb!RgIh|}k6?sPLq7(_Dt&4mDfa5v1qXP~JO|TE4kveyt*r*R3Y{-dL zdj!6pp)i{NG*X`>Yc6gMEA#CU<0s$opN*|w4RB>+7uk;6_uVt@)A!xSnH@cE*E7Dr z1`yM#yX3GZtKqF@aA%nP;!d!}A|rxcDkDT*G9z6-E5XH*F89xF`Ib8L2Yw`BF4SS? zl==tR<3W)+OW@8i<{9JdC8eqWq_ASjHKWVKeYV0H(`}{t)}iMVLl;ypcuNOF#duBG z4p?z97>9LU4dhJgg`+djG`4f>in&T~J^Ll2U9UDODtSTPG{*6tK0yad1xUHm##vpV ztf`=Wu5vG)uQtp4!b|as>rir`?$FMqYR)vCAo5eFNk{~-dRK0aJT4wC@|?w%Ur<`P zCaruRnvg9!?!{CB4drJ%N8x}+oVb+LPKzw`K4)%VduRHk&P0TT9TP==ho7wGFq$M@ zNOKu@p~=clytO~y#hvD4LcXw|q({dj>%*>IuuJr`_op451$wj)*OS!B#4*kEaBy~( zi3&^i6dYFyjDB}`QidzdT4%ga2HILLn5HfvT9z0`nq{|64GU6w#aYMisUH7RylP*~ zY`va>>m6Te)I#(ROhx_S&ip0auV$YLPM!vOd;SLS zV`h(&S|!n*^t|{YtgB6ht4!r8oV%E&WT7ljbheU{Y{`Y_#-1ig?Jiv$ccoD8s**Ed zTrM5FJKz}33xfgk1z!%w4G95fHTV)-PYKzZzzjBXXad~l_ZGH~`3_pA<&OAEU2oKN zTLP$MxC+EbjDyU86}9+eG*>R5urTfa#WJ3nQ&!KqKW*3 zxugq5O-zs}8FHY-)!CjV#@hAE+qKpgBTa*6FfPT`MM#3}emy)$%SiS8tm52Y6$5|2 z-zr-)brePJ^}NC|8BjO%06f_M-rtoo&+0f}n@49-ri+yO(8;$$B7PJejhv!g; zR+F}$e(Ovv1|8JyQ#Z)U$Mp*wDd4g4BhFyvFHlKzT43vcjK^RIJ*1#rZ-;g$*spX2 z9YL(Z?Z2u!IGXp|)g~!h`-qnx8XMiQoD-#|k(KR=%djW7-k;u7iE1q**}xzBJDAR2 z^1QUe=)ela;a2nb@^B2pUh(iO-7~RcGu5^RBa&vHP@>*YPxVo|c1DGk>CU$~ z^mG8@@665naw7m{V>>%LN*I=>S?_&DdU7#B`wQIFbm<(r45Q&3EnhL)cMa)HD7Sz7u03>Ks-WkNnNmx4(-XLaQTJxIl@6ovZfZc{=6YfR+XV6F zSTR8yfbYDuYyN_quG%YF$?XMve$IZNxSc&R%)?%nBHkE^5*B=KelzA0V!q)O|0|zp zJ~a3U8X3-*m&^^C=$18q4{MV!TQtNCo||d{_!eYu5B3V>o4}!NC({|8=>``Q%9)AC zKV(sTN=v1;=ae!e+DY=Kw_}e^{_0a^Awg#EQpOOnWG;&P#wRdoG6+>C&$%NdndYQV zR}Z_!0KnD2Cw-?tT@i@RTS01n~~KkO^~Y-~wJ$ z_?|J5XuJ<6V$ep2EbKE~>MywJUP~!TPr-Q42>va^Lm0o(=>+~-R$*Pp#7U8!W0kHpRLM2@b zfEwNK8?}b{#$NK*34Xx9?QNSQ|J7uS!J2Guz-M8xPX8N|Bq|xzb&RsTK^blFYzCn z#&e`~(!xS9R{j7Vm4bve@`nr@GC&6<1)cjTgKzkY8O4lTU~##qs%crxiX)&YqA9-$ z5Z4b{gmwwC_5A&;!ex8$s;cSjbH>wF&y+ktVx#8EXR_;>-b~;2#jj^e=4XmsKrC#Sei#;jeJ5Ezx?@-leSa^5MqBtIg|abOsF@f`>KA)dKfn)~Q>;$79QSv{hT~Va&Q?*pr7<{py?Y zHmu(6UK2vid2#eb9Brqv56q!|m}dz;;VQG=8iK-8ddr8vcH{HPNw^dI%cbeYA!>M~ z{nZ&?Yupf_C%fkU=Fux4g#9)OyQfch>O-vUhMZ%YbU%aFi={`@W}6sdo0`96ysKsG zYQtoo9btR=IyS@A{6kLDJ>{ZHTdqrd|GC|LRru0NVZY=?Oh87=!@7j+dU(x-V_E#(X_OPC-yz>_vo3CQVd%D-x=HczQtm~sW zYX2#fvAyTb4{xG7DB$}aQNEP3IkX2QFXA>nS{H{SM&Bvu_bfI(YTY@G_wqyVxz{;u zug6B}J&1T;O4FZG`}#0-J;+giixFvh==Qd6uVG%@eFSZKPLB9TU&J~7O78PpePBfW z9aovXc3+@x4+$6Nhlh7B=Xj_?7 z*+hxN@(Y|ZC7{1NMHoa8lQFOf7aNdSSofd%3jQ)LWLWR0FuY7(gr~=NNS%;LV3}^5 z2))eD2F~na#Qx5m0xKKKv>{=_ZTa4EF!p zc#EfhPJ9UX6?a#WGH%0`V@y>wxONVWS@REeiCDjHIF;po%6NLN`*SS;NB> zY5+KYK%#6^|DK7V0LlO8q<;0kzGCwCyd;sCs36~S76L!77`9{Cef64yP_UWoe#YjJ zfmDgXQisF79Yl{9BYt-Tuz~=~HT5iu?%91f$b+X}tEGP&;phHD@A0f(d&gcp*rL6&1{NRi0c05I#dh`D$N?+GmD7 zfEx*CdG4Nale$Mbvg%_7njK>?nfImy2(irW7IK@SBms^!2m6EHBLfpSO;u%a(~u?$ zQE8L8cWWJ|BCL$d8-kf4YE%=FepnBe>wwJHa-wR0QBf1)Zdk(x3itJ*lf+T~`A}U$ zp5`HXR4*Twn!%RHLv*JySg**)&kF^;Kz%K~xAij=eVbHTsdWgep>F65ze)k!?i9|= zbC4g(t^|~BOiEp{GrX#DyQtVMyj&YJ4A7=AlSsHcYEp#^BD;ti3ue-<;XwvzySj=f z1HtTz5wp#dt2qqBgXHT_chwb{>G^ibQ#a!pNgUJj5+`$>;O(dK8nS^{SRfhqEE%Cb zVt0VQ(~=7GSlP8`xU;{p1rT-ck8+&bNf_GYVsuTI*Dy0p1CqgFTySNiXF7k4Uw8@K zP6Lw|t=YV%J2oIaX}8~5yWe`JCJvZ8bNYp<;tHsrQ*+@ zQj$4yiOMso=Gfx|!+aoQ@d?KeGt1?Mh>^!PFq}SczIDoppD1JhML}{9QndQ0pZ>e2 zesEO5_4(VUbb;a&rJeZ6BHX!1C40I_r(^*VZzWM${k2>m^(8vf2bm|vp`HsJ238Vs zuzNn%e#9PBw@sC3FQmt(NdE{wD?&q@l=H{w`Ga@d_J!gsUchcG7D$|oQZ$?|f=2fa z0yr@Y%9n01zrUl920mm1M^q(17VT8(_)z9vY`2B@_6e-N!q_|DQ$Yzk+8s$n=}Tmh zfPm3IZ%g<~pdTS=2<1zxCrVI#s2r5ZP)C1Br7V-mIQ>0cu6SYLAyAHg7-8m!lj{?d zMRig+?I`Cax#4#)`RRBCxmCH2I+|s8b#ZuPNwji9 zIAY1^1GfjT5&O!gi}DTxxb)=AEK2&_sbzaQ(Z$r_5-l5!>msi1t9!ZJ%)DcJdc~2& z8Lh4=w06njM65r|sWht@``SE{7OXGNx~%|w z9G{?iR#8eMyr?=`WrTWWlmY5iMVXfFQkjP?oe~`5mQ+J7)s;p|Q-$Nb=$CT_hpSC+ zo8ciBW7(-k;VU4(iAU2;@HAbS`!E zi8d{Bs3+l|UkpR!AK{di~_~ML96={5>`55TIZBTWcKE6c|xOOi6 zs>MaHb}h2K>Sz&^FA>5{_2|C!s`_CB#n;QXC4NYnI|TR>OSZt_1WfiWF}CyaAR4D8 zwW@_v`?tzzm?6Ct;ZMte51mpiyvqxCV4dFJs(UZJ+yzOynd3W$y4)z!^FIXsY&wPO z^{g%AhzMXS)pd86{Ve0;Fz_nN^yOCu>8wXo(&|~33BBEz9Tr~!67v+U956?8mK9L7 zuIl=HtU z$=M$kQ5IibzI-7*&~mtpXE?=p;zZ^ZwCnrz!^%S zIHtUGLPK=EP!g2&tNYE&+N7=Sjr{o>O4N!@=C5EOp$i2?Tdz;h5XqAOJIfYMSrk>4 zcAPbkzMg^h;IQnOTVNTYBH&0aw{;hs#JwcgVf=xN`zWGZgOCPS*tTtP$tE4b^i@sh zOp#yqX1ne-v$R8mx&~K>rfO`Z46Kx#BqFFH*n35Oq^`T3Ot*A|dl|v-DN0kNi~0iQ z2aM|7RWM`1X>drZaqfu3)At%LQ{U^hNll}u@SWkfWPEGPd)#5`BE65B!~O>)atU|c z-pkrC6^XpC3)_m}HzH2tPsHKGh_$JDlK!yl_J_b19kW57MeXdZ!@`{G9TO|<z8ZBS`(G{?FE)2SUr%PE>=XoYqj`J5GbCA*29pp5;<{g=}$I>T)%%6 zz=`F<)y<$MRIGULO$D18;qG4*+{DrxnyORQjc96qZg&@qqcm@cuN;z6nt4*Kbk+$_ z+N=(Rj$vnZkcVg=dcCn|_qer#Gdm=0kqA7$gX{_xpj;lKicDns`idG8tePOWGJ5i&$p`TH3tHK# zbxMdwkno-`M@Dugg&%`~2(1z@t3eiLzQpwC&YyP(GO^J^b-$C}kR7JHcd4%fqsO7UQQ#4w5I~UNk7#Gny@4kO4+>KWamzkj=doLp{DFR5d&8Gzg)y)9? ztg?DMie8R}n{HTG72bQ(U`$wZ6DLQ#I5Ezhtv}iJGYWP=N?i*t?5bT;if1oki*I58 z9VybG48{7K^A7Gb9A~l7`QqUY@8D%5{EH(nER-xo9&U=owws<8*x8TK=xnoEYtv9v z1JA-3+O90RnSZ;K_5N2el{0R8R;N7&pRhPa38}5fp0NK#(ou&5K@79&E;>MQY$NWK zS7^lk*wFD3>4RG^hkb=#I41phmNkt8oBn?C_~d^2m0=cSQhv_j!v~3mfCA&tu(Q-O zP=}3zvWMF?5IQ<8xUB;xB4}h(S=lo(yf)W$1;1zyiJDW)-Fc*}@f=eW@*ZE~#BI>~;^Fh0C zR{f+xc5JuEu=Hry62x9s7rLpPrgr2yg_z?9W z-J;vW7D(f+jL--A3f=B}PXv%AmKe*$&ce8SqaYw$f(squ=HLgc3*0o44Oa225cj07 zqSh4VHm-mvMQVaP_mR+`fKJx6D!GI$?9pnlc`cZ=s*!1MXayQwu+u09Ovj&*oVdfi zyY_ZZy7AxWHXJkB1bKU4{rMD1yS##FJWUC4sHB%Xm^6!xdL0=>k=tU?@0A>-4Xk-l z>?%%N1ZNXFGr6lieL=;`pSq*#UfjHIEPX)prnwis#mGkzyOUY@6upxIu!LK?yTo~e zo_>R0OkEsMud;O+6l^KKe84N?3|+0@yNYy%N|{`W)9M1WQpB3%B2=1Ev|CwFLP#rx zl3dB-KZm>=Q~T6NQi;}FD@8~qACJx}1}CYN2?+jFk%?o)C2P*q_;X9{znBVV0U298 z4RuNZU-;M@IBs>PBdHY+e|=$1_eTKCiA1)Tqp*+GRptZ>;s_ka6fD<5lFLj3w5xHW z!#Z%9Hx2HA9P!=scN-_1dC-psO^<1{L&8PEvs6WO?VQ3xNv@i)!yjX^6s2t&$K?ch zXlrT?Gv zyFPek3`77=1l1w-72<>Yeo>x*pd9Fuk7J+52Gq|AYC`&Y{t?kMFF?Iv(AZg$`_0h* zhvu;afTL@%ZXQoRs-~>m&9Lp9sTM}5#)0+%ZJE$Gtp59D4ut7DMHGvzsT)LQh0UVd zOJ6X4+1NHfo}1Pop$e&;(R1SMNzfI?%1cWxp8gCZu-TBBSMYM{4}1>0P!@&!Y_Uz7 z^DQL6#^HVQ51spng;hNLX}?!Si?nI6!)AVFalaF8kiRf@TChYn>Mg&|fHB+fh0 zM;0ox_^VHNbH+CF_%n;0;%l;EcTUK`f%focaVC_RKC8I2I7eR;RM}#Xik5%jktlRl zFsN1->U!v)J3U^(eH`BkvAYZ5o34Lq4~h+5zZcN`r$n}}L=FeB`yc+`!pyaMgSx7$13_zJht{;(*QHj6)X~`ZqU!w?}*l z_=>c8VYA;-ys?QXanu+wGGQms<{fORmUN0u(=cBEye3lEHik#>3atHHr1NDl1(@+yr8xPW0B0$o* zglhajc1*^jT8MKvA^u=|ad%FJ9;54->`rmxxJ?KQ0=oSd4uZEsCk$F+#?K6cQs5`{ z%e(-LpB(}&ryUXxDEUtvv>o2Pu&~Qnm z41{^`5#o1sZFmkrg2}x>djr*fA#Sa!&^qcf@#GQz{cOy=qP)BVPgwMfEq)Itpx7sz z@2P3+hcm;Kn=4X3fhg1Sny1I<>`-Ke9OaAr!~0U!6b_+Z=T;eDqlV3;e>+x;>^Y+D zP%lJKtVvbX>OptCIj5q-z^Cc8s-9SgXoHcHPu}Kp$SATKpQ;k)+cLGTX9%DTMMe>U z68O1LtmLTVfoxa{VdKuNqcg0&JC50gY1x_eWfWcGP{xVOaVPttI}PR78C=6MlJR1S z1^Cep5k%StbeHFW&|%JXynwrGj)XCf{4{I1T!wek-j?X%fc03L0-G)KLq~4K0nAQ) ze#4D#Yg+jfK3mMSE=G>29%2TRH|c@-Nza6zWySs1#mQsIj;IUm8bpFE@@NO{^Qo)vNlcJAT(OiyNNckL^w>m z3>eu8Rm7c!c~=KCQN9`&8fuWlaMfsf+p+xW=|8X!cOEFFBJe^dna%g#MV8o>x`uNR zO<-68sNwE3Su_cD!wu8c=Kf6X!Cw=&8l+^(oh}!PsI+YSTZ=j;WEHfyPJ(JtQ{kPO zAKrcje{bH#fzVHWMHt0hmdK&ZX`5%^1@-EVGd@ILzH3wB@-$G|X_`e#mLsajDJLKN zbBzk3N?GpGT1gvzzg}d`sDVdvln2fNulWRTwA}cGIo632?GDYtDD}YH4Vrcl1hWa4 zzG*eb+OOj*5sw~!(Dj0KJ)U&P#3MZ1L_(>5(>XTXgy9+Z6hD33(}F$30$+R~mO&OR zo(Ik*4uIKQJH$wS$Q=1oLpIVFGx3 zHyRcDXNom#TgdUX$^uTIDM6*&oqUElt%Chi4l--X(V7^3zp*e;HTf4t#I0~8OYjs` z?bW$J8N0<1qx%$O>vrVtPyhsc8r$2fp!7w-&^0mD&C7M}CBeaA3S!O|lwc36;9u!C zL`#+MX~oyYO6U`iLznTfQ-!f#*=9;T<9R-4IYaabZ>pifLS6b_#Fokgy)BR)$;vSu z_~m{s)$AE|GS!@7!U!hevS@MQrz(X~r8-ITGOEeNb(-*dn&eFRbwOo!Ii9;sN|ppj zR9Wacm)QF9 zAvJOlfcwbFT0Ob?*}$=o?VixjEAfpN7st+&!XRAs5zkXT$Hrfc`0x^z)E1W5ZAl2c z&#>jH4Y~Deje@Ubx>=&ys$`E9)YvLZP6AUUL`}bgZ$F8=wj*wdRQFlQo6Nn7Kvc}F zyd{X16mAeBA66hAh;K=n2Pa|~Nx>Lli;~Z+!M2V0CmIEN-FFVNE|GzkyqjBkRWMA# z4|MP94J^rM5#X-z=}_YzveVm*3v~)?ShcC;mjr?=nPiosST(a`7nV31<>-o{EH%@) zn>bzOOxgD%3zz&0A7eXH389LOhO(OFYcM=IukrG@H)uzwYaZdX3zGsetA$zR^Cdm2 zUU3}|xt&94URtI1!ZU%EzUE$-b?1{U{SVm#=FwQ?s|th8K(wlsf2z<2R>-pJhloU! zQG}vN%tTBjE}k^ji33_RscZtEkG+X?X)1{~H|c8B-E#}*NY;G>lGpUaBp(HLyHKMJ zt%X#@r4hNebMQeHJyvJHsa303MFE9aXT<3R>lS`zg&s{|$)yn%Y3pLg74#tioHtA~ z8g!1PN@OKQcgTDj7K3!~2hQZzl-`h<*Z9A>DqTU)a*>;8rn;o@*pk;Rf2q()19Fcy z1Ynehlas2Jk}PuPJ-1OyP2~D5>rvFw@KTlfKKf`w<08$nQFFfcwK#Gfw~UG2?!M7` zelI*W^$ZM63>Z;r4{Nx(8Q}S&Ac{vvrh0KdeDz#VSh(@{b8PkX!aM*MCeEfQ>bGaO zDX*~f2^lLt!T$itA+ehV`jOu3;;)jXcS&CS%x;ry4?K76Isto~Ah!Ysst;@p-q5-YMtYMbLV@9|_Ci~ja? z4v?H8d#sS+NU|Sjv-8CX<>{)42A3-@N9!*MwQ@Z0DJ9*$Slf>5R(v??-EDhqrJ`9i z_!PXW4nus5rky!F=7aP-znEXMdvduS7{M1w$57kxUO!P6Ynt%b7$L^b%c=pxJEjAB zO6!~MT&YDXV~P7P__JVUNt%`eN=ncac1h|r(=A4vdpOgm!wPTO{;@5V2i*CG!TYGb zniY?)EHgsl>3N-Yp@@wmc6T|FSZc!F$__PVe^$L6*nFoFxr!1ocqJj;XHQB_p-wkY z8b`TIu(;Atv4$4sFfZsVaT*y!hlFVtva^6FkEr5#D~AqXNJ-izA&{R(j7jy6L8;>e z>_Ni8`jvst7v&8|`fZ8D=W@fv)}ZJ4|C4v}Pr)p=^OPCB9VvE^{uf7z|6Z{F;G9@^ z;;5tfh%52jxuySP8&Jv6MV}>4UhNm|^S;K} zCvU@91eFhkf#}ULAJoAZu!YF*Z$(jgYoUR2iu>Sb@g_dWF4w6An8#-Gl#|)`=Z zkfxF@M>hjIk-p^aKo+bFr;9=sKJ@dm6IP`%CKCIek+t$%k3=1t9wrNF$VXYsktmJv z+JrhH4#1iu@?s=;rpmZXYqBv-Ynh6HVNBuI+$|GW6B+4d=^4(+XDLcFR z;x?_O-M(zL0Gh*Ay)zts@X$nZELifz@Se4tD1S3B3=0SmL_BigK@hUXvoCbdq!#D zfdtR*XfL6S=8wsDP`QxGLO|;ptLAz#mP&G2eB7D&*W~WaT>zcvpL_(mul>Onji*pZ zqq6Sk$|UR*#wX20FDoR$&FR+QORZoayXUb$&ZHTP2}&}u=>)NI-Z(~pifIg4zD5sio>m|p zmq+Z9J;l1J&N5R3Cm!C33RBI#J8W5N{yrG($qUrg(yel*L@s^PKK@9(E{m*nN`w5U zujB~d#R^m8^QjxZ#^Z8Q7c>NPw@a~KzE*7 z%fP5cST#J6*%j_d z`1AAG3(ePXbX`8{Q-6MvxKQ=5&dAL!Mc<4Y@tcmf)+?Yw1xV^K~vTb zZ||+Ffm^??xxTCHIX8?xr96~c>WqMoQZD!II`joWz9Xe=W$)?8P#eQ zT&l~)KXO=pWF;R28#{1NBQ9|M`((%CEzJY<#3|I&>VrWN-mEKczo>q(n^h_o z(<)cas}3(FS}4mqa`Muk+V*@i^LO1eUBPrIMika9VOol`?v4}2St@VoWJXi&*vOXj#S>Fr@^<~#CswlszqfYeZYcwR)dcQk0;5^&ej zf7+m`CKZUi;XmBDV{BiMbj278|H79d<$}>Cb-?OY&!s-j3p>UAXn@p-joiF44AQ-E)gerT+`z+|$Jd0zCHhQMu97cnmSO+mnJnNxX z#;JG^Oc#>5IZCBIrVF%mGW=*IxGrdIOZH z&bI9y8U>6|B%YAr_TGlsbm5HSn`Ysux%OT(>)YF}MZ!M>2$aWvKZ_CPctW&~?9Tm) zt=w8I;9HQ=SUxf4+>mUa2ZL=WAX@qhNgtcRM8xj2=klxES-T$oI@0F`o!4Qt69p)L z&~H~JO~7UXn-CX0y}D8E=19eeS@x*RD2MC`bEuyn(_sRFY#v?)ha$HLYnRI zjIF85{p;fs@D3;(gs8Pg*b!JX`EQ4c#HUt?Bp*{seX_8{tC<*E zF^8DT4Z}8r33;9bd&NZ>RJ-v+ltySvta?%Y-=-I@wmY{}uQN33sZE zeis4rTMza>2e|3aCC;m`*fcXqdLlih`Rk1)XCNos=7cv9z>E{zP7u z6VB)z=o`}~J@KgmiGwd|1SUK!IAnXxnEZ`h&zp|f$C>w;8#z7Q-Vlr-`H^}Dq?4ne z0!ecLYc|X?5lj9WbW(1_?9#}|CZnT677fIPs{P7PR7Ut$%SU(Kd3(eGh`YjuDt zblR!=))7L0E!xvW4LsIW5^PDi8eYd9?zttC{z0(g>LOl z%O-Ui`*xM8^VOAAyJ&KEys`PR-%+~JHlx^QOYt*?ByUS>goFom<`dXdz0;K2NNs9+ zoLXNUt<6iZaZQmeK3hJd7`qTh@Z2(@%94FAU262*-)Yrl`IErCv}r`naba{HJv!wWa)CO!oI6*4y&}~ZCj;ty$I~;$$1Nh z_|H_zOoA(?3gmfjr+C=0;da;(Md$sR>AH%-l1u0VbI|YzC;89*R|LHFb5w7JPV?yp z1vP#ViAzRCv-k!y{P$ak%n4S&J>XbiQO`#>p-gl;yXA!A_t6~e$g{T z66%PFa6sVaa&SO(QhR#6ywUG)rO%*fMYhZ=-q9yES2SE$%xjyR?RpDhMlatCS}*;b zO5`cpLk{twDF~G`E(wXGLUtZlB}wo?q;SlBQ1URjS$<+^&o?)#H!=`y@;9`6eSjdp zsI0YI4zX3@^n9q|W)eAyV9oC<>Cq63lP{1%+LJeDWr{H}oI>U(Za+OId&!H9&`vVGiDl-`p)KY6><$~L9{$VHYWHZ3}d&~WcAgGYoL!m*;qps=N(D?$6s z1?P0fZNn}3SWnFzSKnKkVeL|xOD?HG{6p(IwH=@T;=A%sC2n%0->SZ4c}m~1y#LRR z^e?e=QQzu3T+wgie%)0VI#Nt}B3eb^N#5^4<#~0hNU&-1FkYJ|$lm zNw9px`6bu&KwPytrQ2($QDv8=LY*$ zSiBy6hKb+kVpZ7C+N+7*AB%xC3EQ7f<;t{$4QY}acHzZ1n9-AG<<6?bI7>`0> zG=PQZyp&|86{ULvri&`gLy|$u+r`&7jZy_oq!YfhnBR7w>oG+`T>u|ajFP_oVharq z$sH*N58dtg1+pzYSq8UilbUFJjkSnVd|6$;Y2mgEN7{{hybyr*K+H8Hw!1BrJV4yg zUFtw71gX`XE2AsP!|Ts+>(8>3 zxryRy!UO7pfwa{HgQBD=h@(tlbXntMfcrkHB=x{asv&+9P&>pPkZ>w`h6sLE)H;ZwZ@S2B5<%Y5VeSt0kH>AUjj ze)n`}CsG!17)hd*@=vlZ6(*~QUmh}JR8w|;Y;T7<&B|Gj;i9J|7qH!vSvlU|Tm<(j{4 zs{mDrODH|e^8BLkWdWWBhU}u3*6EszxPVq9BdL5BqsUBKM*e*Whm`UL$)&ZzQcfXM zvaQ_ay}k{Sok#81j>_eOh5T#k_2DJ{!q&zviTvYo^ObcjN@wb_=9QwauwFvN%Ds<$ z;k8cDX{<&A5WLi1V={4D08@&QByI=|v-8RZ=VeVTv(V-KB&ffGLG4)}%V!5kY6VZI zTkkgeKB*0$S@*jpvQ)og;(PIX$@EdozfdrebMlW}Nl_zj4AZ?DI#k?OLb|8iP+JYU zp6bE!|0@pur`e$}nsEwzH@m6t*&EG&$HDG4h5!rW|1@n={!V0bcKi?FUzQp`8Alb> z2OUIuzDjU?{cc_gVEH2tj&g|@kW}1QBr8M)sU)i7QZqI`WwUv4x3_Tu;T!k`%(sx& zyNc!en_tTNDi}VnCCrrkd9&-7^Elh_%5mmO-}mn=#cv`n3{ecRgBwNIElgE=?r;Qq zad=nb(4BouzP{AVtq6zF!P3?mBb{*wMV>(tG!&*mruEmwredur192x{`@%Wv8hjCqcJ~ejFBAd6kL+Xsyq9RoQR5 zO)ZFyo}&|!iP6?*64-5rEdQE!L36te2im{Y{xbDM5hyO#8H$Kwt;Gt6Gg{H35Qn0> zvgZ-(>Rk2Jc^fS4W@E=&L!pssz^LXZnuVtR|#$VC4K z-$>yB7O%Wr=}Bn_{W6W&8#X7n2u9Xa!W|q`v`o%?A8e^w6bEqv!rX6PU%kk2QQu7z|?C^4M0>5w*I2s8njiGdZX^I>OtSv+` z)W&PhbRC`i$1qp=$5DBbG90kMiI}**Jk#C@w({d9h?U*C=3+NXLvDkpz`9LJ04*A% z+w+=IyHVZ6MqP5WF!3r`cp2mJ2L#k7JmY?#V^1aO)cuB<)f5d7n!M|-<`yX@tk#;d z?jjHumR{U*)l;rk($Lf72tUGF?R46CVCe(1-dY3U-zS!D`*h3#Z zG5&~ld)?W{)i|WnFh19&)C-amJWu7OTo2kb-{7-0wM>A6Db#D^4;VO|!t3@Ba0Yy6BBFQXGNQ_lFtl(N*y+&`P@qD5>VO7wT4)I(dm7+c=aUk$bXvDmx z3PV60n~WgDE9Pze59(`UJtI6m1`D5YPy7o5^0hb8ske;x*m;jY)eGl5IW~k-X`)*| z-~&eVm&*k(@~?__d^Gbi+?qWZFTa`lYofFz9G3f<=oft)9(fx-Vg42Wf|n3;^nULH zOTd7D*#0jYk;uO_D7o(>=zrT9CaFk&XSSk#+32(2fm4a9aLO*Qvh|$C}BKD^ww@Pi;HSzR$YmarFKCx<%>5 zy&{bh5%dqt4@4fYyQ*prpb_G$Y#_lyx*Ck~bMWp7;nq`=4y87m@VR>>@zRoC_ zP|Yd3r1Nc6yDe-o>1(OL=l!g=T5iIc@ zvyDC&`rGl4e_$0UiD~f1kAYcWQ6+RWbqm;nkd&!d>rn0h%kprve^j+*5pAjc`gP8q}i$ej5UBRkRM;N7+a-ZD%HPQHpY=>Rg-glSxWTdmttBY%6aoaKHBPP`IGGqS| zhqG}mYt9vXfHCQ>t5#3|c4b&({ukZY zKWnp{zyjp?w-(#~I|cJQ1oK~gJOB5!`9Ds^Ue$3{(7u92Nd`3xE)b3PMc7xt{WSMj z?Mcpt`*vc(i-x7`wYdXWgX@N1@uFZ0rQ1nm<(kQ56H;lnwA)+hNZF;$Q7CM-9N&z6 zF9;T%JXr!TC9S7-Z~kPwU%hpCUVFZ+`0{^13UGfZ29p;G;SLL#2NQuS&kj%A!f6l{ z8b-`S8njWXq4=BB<0`vJ&304mYcqG#g>J{)IzevS>fYY+ej9XCz6x??_ca*3RWJhED6OD4)fR%2CK)6cky_K16{|Pm# z6dh92oRtC#{be+E|2fMLSTvl;1^BM-bQuXn!H8RPSEi{}V~q=R$C*lUdP*COBh9F? zym`B{`<;c4<|6=(ix%Eo(o$Ln%B3ak<%QukDf&h!cYqVIR7b=DZc-{QJ*r2|9=tto z*u$;a!h)VW-Mv7na^A(r(sMLj#Jv}viygEy`{Y*wK1m7l(AP+jAM_I*4j_4Pk1(gQ zi>)^6sL^=2_2LuqaGOgHH1_4~K@FZ!9Qh+*G5Yg~GL+I$^MAiVR1` zc0JUAYap#a4sGDCtD6&6$PkYCCVz{i&>B_fziigUteunM3K7S$mL%=nL(6VuQ4_XO z8`D&$KWY~L8r<=Ri!eO(|7JrtgM;x4q zoE|f+?s8+qH%{=6g>vwIB)B}PyI{Je7f&m|QRlmg3(c~KL*85w^^x!os1KQo!4m{E zzk8GQfEV9W z=eUN2!KqX4tqnEe@V#`IW9i^)>XC71Ybsi#A-Q7uJ}%*Ph9+hntIW`NL2V4RfJ+SU z{A4uz-kc*6LOni2BOiNBBKZ5OA%Umn)w1Q4Ks@2>HnAnhA|mZ3rsFI4o;7%m0|`If z^l|unuqtU8a`TnATt%&iguwSwb_PV*Odn7~omt^<+k&FGKA5W0qF@JHFF!P}?$Vz7 zUq_9w6NFfeE?A8d>*jVus1eOURqA5KR8T%JYD9tjh|hiN2RP13-LpI=AWQ(@N0tk~ z2X92kSBGUd3%5(J&mY0+7w$3h23j!%shp1x#1t9V@{2y~L}sFTNl^Z3T%qOLIOP(@ zg2a^6mUxepXty=YGHRL1=x`6JgRy44bdC8EyhILGgD;G4w3EYe;AfVIjNi<>XBdq7 zh4)v5xIXjCVT^@u2QzH+BPRq2MGtOFNSE}^)Fu#|s4*lqUYWip+Et>fDziJJw+r{( z?_BQD*i7OPK0@wDtaE<8b=D}p<=R%0708y}-+c3b?}%GLE|&oOm!KDOqh|9yKgqq1T_#Qd|9i zw1`MJd(yPNxMMP&Ompr$OnZuReaIDhA3f)o_yku9;t$e)g6Pp(Qs-tMh*klDXu`iC z1}PUucPBANdwXLCvwxvweWgVs^nmSJ+b-=FY-Vh*R3zhzps1oEVrsD)lYVUIk)fQr z>gKiYW^R-|7qhpJXi!m<20nWUtoe(GFS+v+d?((sZ%_Qdkg^Z_^ZH8AhtG+6Iw%j? zOg%IolVf+hwrS#;GtHmF2YXG4JQ^GAdx@pCsd+0rTofG}ZHys@A5dYW-5)JH_u`{hxXR4uyXdrQwLz(#maf0X_ILSjPX}cu8g@HR zdLY9dFgWo+dTq1_i>S(m8+ChYM9>p*-97X-EWV7|^RD<4l02A9$BT}?>OK!ES*kf+^>#Wgh)*FK- zp!2UZL>B?jUpe53YmE~X0Mp2$fO)1w2RU+N=ieMPdr`uvjF3?Ww~L2V@lb@-tX%iC zU)8TVDdyZ+Qx7)h>1WLg^d}=rZC-LDCd!HrhF($*peG@q%wwyVMVZAa@*}`7$43cE zB62ayJj80bkPFlE;u5DbKtzU*f(|X1`&dLb0S1sx;e}q#@%EV#5~+_;G#{8E2}OOA zlnf}S!y7`4=)>~B(~vz-QgMrC!TCa?YniXu8HhIiF3cRtUfiem5=KsWnAMCCRMNt z-Ds23Qe!ExoVnKl0pT9kL-@>>#V{N~uP~ed^hN#g4xA)Gv+tI(0lsffUUz>D>S1;j zv}kAcTccUi7r8@WV`yXe=ry!zn%Z+laBZyh`k`p8-B)mF-PpA^O`X4q`Hx{$``J0q zxsN!IH)ahB)vS@56`At;bXRvE+GKw`iS_-Mh*R1-8y{UnnFI6?m0%-IiK+g5Bgf>ns4$NLk?F zr|FY!%B5pgk<`E8qOd++Nh@pm_5tK!`!7CGE9`fg>uxIqj}Ih;Et?~@tL5yVD-VE< zUZmTf2mG+_ylC2j%RZROS@{0U&rZ9YE)i^*5T@JA1!*x{h=@>Ux1P%BUSJ0$VOh-j zRdCQ#ze+Wuwb{Y>ii*6DD2GAGhrJuhjG71=+=6uf5XoCvzSh>~6@+hnzz`tE13 zdAgp#ka+a_uLv`zkXH~Q({OK-Lvozz2x$^qhL$=a6N_A1KGFD}E`F=bn)LY>W<&5y zuD7_1`zhpt%QrZ{nO6)PuE9tN0Kbe~zL|5BG$D(;ckTw+&?fP68BkaVmVKm&TeokI z@M~8eA?DO(ZT|qFyM9jq^Mpl=?*&vALXk+mc|Aa!3-s%#qLR_8*FuQ(JgUW?3reSG zNspo51JJrja?BX$XTBQsX53Fsld|0=cn_FX)elYEc3YL~k2Wzx`;FJ#j9^Ng2JJ;O zv({QYgg?HNDw}4jTmG;ly$$q;D$0%P-OJ$l`IY-;DY0&Q%g`&%t2Suz81qYsdFJOX zp8!8vM1KY+`ST3I)k|M~(T^A}1kidg6Ihs`@jIY}Ph`0MP#q1=k>g>^89^+@Fd{mp zGbRk?`2HHAs?trvGu{Fl&k>HAD;CvS7Sc~fMOKT7ZziY8M4xbIzUPdJLcyp*W{cpX z1l#7+eo3(2)==w)l?~Xi!uWx$@9_;2Yz-q^?czZt*($OP`{ftq*{=shX)c5C#=pm9OMm8x4| zfJh-(hBcc4BX&r8o3x^ZaSK#T&aNwq+sK_TrQO>fJ}vz}UEfz--<1h>>_oGP4xKXd z{O`AWJb!g(y}#`k27+mYmy-l$c$OXXN2gcDIwA*&G&C0$| z+j604PTR7puVo8E0^X0+Qi|4V*s7`#*cZB+igH}XfmLHD&mLd=>XpjcZOoG%7-77P zEuTa#Fj1z934h={i4vZoBjbhSHC`so|0{blU`#-+w=E<(&}tdyxRd$*{p9PwQLFy` zF-sEN9U6|?BHAWaS1H-Psn_({>~XTfJSSD-G(?u+v7jaNm8DF(Zsih0X*2#uR}Usf z$Imp97}j#$*s+&^gI+p@NY1mirr#3bdv){udJh6FwgSI=mgOt2d2v1;qAJ?Jk0vfM zs^EFt&t!?B)l@7paUw^M*O{+Y0>Ti^IyKys_`lleE-Z~ZfN7G4#zWMcWsbx~JG%MB z2oN-TT0F3P3$EloWt?AQ#YeK(JiIj^0U}mZj<*4~82U5SxPtbb z;XJNA=~4)O)lByYiWO2p(2rg*rm2!L)=a8dIr58S7if#N1~5U{Y5GVx4!;${pOe&M z4JidQj32+DRMCiS8 ziep>@KLvy@;PLeCR5Wb#7EF$hUfr@ev|1{O3K z7K~ei?VTtG6z3xEg<_-Qo>=SkLGS5NE(1Y|}^4=~khqv8$#9V2<`ePTJ z%*erCG0dWzIFW1xy@H|uHYQ^4K*``OnGfZQucJ8&z8O;z5ZN1D!Z&7M?~tj;zT!7p zo>|(fM1ApqQNdXDB;@POY{VA$&%AEkLY2=ddWuXSz8t~qW`zZ!WKolaQxUO!=PtX361Nn4mVU!hDpZAckU!K1=(u2z zNQ55SGgH27j?Lc;9f^P%0QW?x;el2#vS9+aF3cxvSS%5A@(lP6ot{afRy8Ho)NbNr zuHr(bM}gmBRjI&RUu#Fa()Tr1lnEkJ%D2z=?f%Q@Aw!*m5=9T0g_s%@f#qsdxS z`O0FR6-B-0FV`W5Uh6@wtW+(BFbq{I=Wyplj7hnC91EfzAz9NeGSeV|`x06W)bxv&>B{)Hwv{f zF@HD8Hgc08r$bxwakAawG%n_UARZWpY)&$L?B#CHJU~t?wuifmM)**g+cx|F`Ol|7 z5i?sF1U>^gkl{u2e|w654ln;j@8UcK+K}3HE2Uy>LF$Saq+yxoU?+!Dh%$#M*;`vQ z+BV`zzN@36MJ8hly%oovY{!wdqaH-Go^1Qh+~>OHyT0A8w*C5Ip`1D&UK5rZi>!u| zmw8=qMYWlIw2~X<-K&+@KrJT8DH%fnqeQ`<(lCY0Wc^Js`lZOa9jdIY5XXI$&sdq0 zVDtgDRiiqK1Jc^Gr{QZrQ6vv&3G=e!udg*6=^QH|cBkF*{+08X?$lgKo4EQ5K; zN13{#>RS&U>|14d*U7e4Pj$!Iep{QdOFKH^TyAlPI)I@$ZI+8+Kapm8eYS0usZxhS zH7ENG_Ve@$`f?z@s~E`d^5X*Z8$r{a2|EG(O5cCDrag-B7J8Mjg+1Lbp^BCJy@k5^ zq|p-C5V0@2EGwLxw)g7)mapx6C(0#>sgi9GFJ3SVV4osGR8DCaK-OouEVH?5^}WP7 z1}x8=&aRwrXNGX2F4g~l=%f$zt)aypXb9tgm`ze<4#9$55n+gIo5N@&Yg zh1fbZ#)gh9(&#dfShlSrL%iEKV)&$(ZSl64u3>|} zpTBM1%X)4q=dxy{-K5Ev6Toz z_A6^|4i6L`1zDJ&&;1TGb38QVoKpIN)4&(Vv&r@fg&_5?aK}r~!k%&0Frhc%D^hB* zFF;kh!WRb$XG5oiT@kc%0TGGQoGJM{lBTqeXimVC*%SPgqZJ9uyYK^SuP*mVq-5!P zS!FwpNSbxfvzm;}V1+aVjkFm0d<07sBmF6r)rkl2%)keKFaz=j={ys}oY26*msj*F z$y53`>S28wR!ScTH$CBPKB-YG>hhusO$7pq44I?}^lO-&(~;ygPn3^;Gh6+uOG!7t zIC2EWzb0_a{y)e6e~^jXzs@S5iJ<=}W3Xe8D9|bm>LeDWX^FuQh-5*LSTrk*K!qQ@ zV$}!Od1hbLNq?e$f(Ursf<}=SX?{{4Y}i|`YBAm)f4px0-tK<+IC(?*l5oQw?o3bX zRbWID6+tu9m@5iT2YUyrkwRUPIHY5wqp7T>tXjYlD~J_;W57IgU;PFjrFoagCVx7x z*A>t_vn5dMkU~)`x7hF-K@;3(HuEN4JjYm(%lxaY>}Ya?y8;()d3~EFeoEpd1E3L2 z)2mxY=(ucDdFEo_dy9`QZ+4>2@^78qwks}NbiNzA)vB(o*xF@SuwotUkF{qbaGtdD z8L5;ueiDL^gw+qo!OO>rRL0N;<6U@bz7k&vM-OSbk2N)g*ShhY$ZO#u|8!6nYk8w& z<6~ZEz;FZ9h7*0Q$;Kw@Wk%f*SI5Dlu8G$hQj-mCJT1YS+EJkh!JKCJ;uHMnp}jh% z+OL-3Wvh;$8Odyo;wfeUGp{B4)Uz&O$y~XQuAj#bm#wGJqpESAHvEdFXiC^Fs}3N8 zhXuFQ+GfRjNpp4vMBuCZ8PN{m)$6DX*}jZBhGExiU!l3O_wvyJC6e^MQg!?=oLobA z&FxrIO_aR+dY`bEiDgPdPALIuvE%|&d0$Jc$#KS$26)!m=JE<%+1Y1IvuE76zO*G$ zj630Z`ivVU67wk=e1@-4#TpU^B+BHP9=d!`nRE?*XN&FqjIFecf+I&_<#IWc)5n}; ze&QI)8uh2{iH>=Q3N~NRgzggFCVkSePKmQK-UhVGG4qFaIfE&~K0FO0vpo zzD==NFd!frnWB#1tNZ+KTiCxKbg}m43n?&G^MJAX_W{yB3Z;^Xjk)PRul|Os>N}#U zAPWrMHR>0BZ~ZA-Df(R+>k2SL#X{*2Cxc)e$Kl_=a(vyi#6V=5K3wvL(omjV!S4p@ zxj5F939d+W4A9|va*)e2`0;W9j8u+HIO&7|h zV-SP4ku^F=?S!s=;Ey2YvCYOo>zJQpCT_xI6B<|U{q7DGS-l-t9XNA3)FE?{IME90 z?H=tnd)WSkc89=qs^4!A34zC}M94VX>HMN$=}i~f_H#atwK_$i7&7%)-@H#LDiB6yq@HQ|4~E(L@$*yS0eP{-9o{LNFYp)- z$1}JCX*hrS+9YDN6UL<9-Qa+1tkErvE6qLK={+`aZAcEeevcj3)F%O73x7cdu#?>D=kKh;9)w^iac zCZmCqyjU0)(-3@4Wo6%S8d?Pv`w=y!cBP^-3w2Y5@jy>&RylXk5J8JMXSgjq661<~P$$$;oAK-ZM?+eYpqD#}o+Rfb9#LoQh zom!mQnJStH@*heVJ1xvXe`;#zF_$o}0#ag|c5zeX5aL~xlxbwl^evZWt^J%E=s%$g zplP(g3*$|f+5;HEAC1id0{(su_?&39f-rc2G+e4g$>-vs!M6lMawC6s3*h96#}y5J2r! zYD@?Ri^UNm!h& zHe|C71JP)AjAL0LU>s0`mR9~9eu8zDVpwYS*9<6&`CE?7$CNe=(-MmOZ9twbdpF0c zH4;wal#^XTj)%i0x<*+a<57p(55KP6F8OR$^eJ|VWw`pEyC|;7-$V6=v=6E8B8OeW zWXEBd##hCSWnPBhA5XSC0H}8YiN3R<{(t0xF@4mlPJtBZ#Cu`YM6+y5oeOI&`2^LV zKg0T4T}B(^5Oc!S=eA6R&~b+_cQ>`ti_p)iXpCRs0d!U~qp$KS5)a?j#Eg2o8f~%q z&D@|0e^HxYLvti5Pc^{k%fcdvdO=a-SVd}7@lkJyzYw;()YVhRT<;HPxLqL2*Alhj zlv5PY2WVe|SM`M=R11uH0zYr-U^>Wm8t8;Bjc#=+K?wsnB`NlDhqazZlt1` zIndKWc8yQ2rn;0#u3%RC))G!zd}L8h7S^oSG?t5QL8zztcxV!hhw(gb>)riFH7p{j(K77SC`708sh`}^Ik`d?Lvsu~#0N(Nm+?&+Y_PG5^Q z)b&HucU*pZdgz9^h@H>aNI^-xHuUgnwJVM}cm-p9ke6U(WQWC0T8kF$L7e}#F0UQ% zpMQF>=q@b1$sv81;^~+Y59CkR^&&CBCk!(vfiJ5cQzet4t+MYL_`M;TkKD_InCbfc z7afi_ua+UMJcYWv>7-yR^G6`8sDs$6jOSCnAVO)C?}*2ldko#^zC1T}KXu`&q*Q_d zyj%Xw!N)O{!5atEpcC}{uMD&@NRe3=Hb((dGz`LT_z74fj^I49u2TwkI=hQp+fly@ zj|fkrL(v6qY$TDX@4hIS#FCwWggN`gj#J*ykgS=BhEDGgFTeg2du>umj*FpX5xE6P zMb4}kTY8sy-u$f^$I^F$z*Hd$O`BkUxJz%18Ef#lJS#O z2Efcb4)pX`%jtQCd4uvg3)Qa?_xxt+jK+$`QL#4&Cm>0%_k%ljN?rln`T z7#6qe$tWq+(YlVwq)~OB2Fn+=Fiw7pgqrVD*E|M-rWe{@O224;wr_1(*P%OmJR;DJ zuocsNf%b%1%T`ryBS^A2Jz_EM2;8^la`}BN}762ALLETgkaL05P38 z`;Ns!TS-lKgzP6D>!6bFGFLolHyB4d_LkDStfC0}~wmVsr)R^rnvv zw*>Y5Q6dxu3!t~?RgpW-2A5?FMT+_c3O?^!?ug;T?NCt#e8=vQ4PHSM=C%CbNM9lI zrF4O=K08dTe^3PyCL&#LOcAImY{E43)94>aVWsH++{Yn1Zh$)AL$V zJDA%%Uyk{uYt_iLQp~}{SttEy0_XQSAgzLfmW+A)fy!9BcqT9Y}^b6d-V0%u=C$VDxJFq4lpK#v2|R zRu-YSoJTkztR4kGb0wy-Lpm+iy)Kl^6KzO__Hl}WqTSlF!*&m7v!VwJIh(Qm#JboR zQ9T3y??9Z(g8pXD8?lp zRlu+RwgNqEq9)p+0h;H6fIVWb9lx#T(IJICIQ@P7NKt<1QztB zxDLz}$r?s%2lCZ2vq>QI2CpTlK&jL;wk>LLgZrT0j=nS8W5dkC0A`(BqGZtx6WB65 zWV2M2p|=)>T9t$S$=nqz#P|_Fo3E6YvB0kVu;+A0T;jArOW^h{zP~e|ZF02{G}|@V zUKA)NN}Gm`r)nfAIsJFagEGUP9}qy469g=#d0$WSIJ#Va{JFot3BtAUMsG|NL!9K9aFElRcaj>Yg7-An zT69th?Qbx3Gkk00v*INi#1J#39_YRCfpm`Wjha+o!RIXm3Uj?uhaw!Ma!K4bjm8As z!Gsco_Z_h{F40bwDj^lu z>RZLRoT1#mLFHpekopWH{)#4d@!raSfcp`+&{{(wMCS&^@-!HbG77e5?Nwl`FNK3a zpjmLS)>jtKz;CAYrzY4mn1sW9z(T}^ZgI8I zgLXag5Ru_-Os#L@;(YuPQ;^RqLQ2p!k!Jcvh3cDZ8}!_;(+bBjL}SV#qVWHPecx%-y* zO8xD@l3MnSAT<=GDl7}fChQ!(IqWC6kTA)Q94&Ex!-IcKN_s=+Xi3-FprAD@#NAh_ zIw7aLeMof-nG@$w6YK0NMK;^)(n`LHQBa2@+C%WWq%Im4N?NnZRZ`j6jDUX|QvWri zq*DN&QwVfd;0%NT2k}n|8cG4~IYu3;(@Qc=f z4Jaw58vjsHY)h;ZEue8|$`pc(mgieTq&b8PfDTp_{u^zk(X;%BD~QYYca0tDG>D1~ z<8llS55ZPD5S`)QS03XWNQjqUAlh57-Q8Hv(*-KCj@h+UThI($=wA6}To#`enBYTP zlgnIcN>%BGS4{(|=5qCR^F-brj$%6uc%Ux7e5k1jvK_|M=*^mX4x>s7M2g|h;vF5s z4YnM9Wx8iqC-ZdpJlXr4ySqo&^7c z2Q2M1WQZxHPOF4027lB$_7?i5=OIgH{-3|imjf#8Aa8&x?+CR2U9bB04EWC#i-xTe z@N&|hI(l2pyVp|k_`HZMWihkyA^QsJ5VXag4ybL4xog%7Qhhb0-2H{5x3Uqf`gNm-rivuQr<84ObNGl z-UhvWlUUv_$swbrR)e9m`MW397!hjnmF*PK0e(CH5I>1wP19%G-nxA}+I+R!)M#Jz z&6)va=ZI);3^=>%;s93@!X?pJLJ-=DJH4#usJ3Z zk9dET-neXAR_IV;cfCw&T(nqOh@pu1L!kHPS6$lguf@0BNGS;J7X3~ZSD;y1UtLXx zT3rDSgP=%Me&ew}JMh=p>}{>o+a5VGe2e?r);z;(glsGiDS$Sb z1*zXSatB}SW{k?#tOY#9J>|E3C!B8EwUJK^mRTrvXwNjJm5jtbHX(4yKS|{tY+bFt z!XaT%MBobO48cm?jxBt6l7qtbbIgGB2f2hDjUkWRk1I>BBH4RlWsjXV^KNjoH0Y-}OF1 zrv^WYCfLRLrT&U9{XTxqrlU56!c0+g#Jc|WjPopEu2?$Q8)wYpsh z1ao?ub`W3m+{GKxcXx05nsBd2S$vG^R^Hez-@}V9^xSpy6xchaoJluQVb^+1wr`!xj^$@=-@6&S zNIh2Y)~~F8kzar2`l*4BH)Ivi5eQxyz1B$Ca~@k z%h=0{y>yTGB2G|cLfmx>E}{t?rBKs8cJ;UpZs)hteiPSx&Bvpl31iWTdRG0RnSW98 z`DC2Cf@l33Hcw?u^A2BJH5Ek`U??tzvu9?55@#-+{9#T#&XrL}*)?D;o}yn8N6|%U z&Mv^@zbS5u%A(^*O7B5NJ2I!(=%G@wb$Blu-I7p*UjPk7GXlfgG5Z+(!M%IL8x@L< zCKo|npO{)EZIigbE@MnXKsgzw+L>i11?>th)nf;M86A^mmB3Lej*+>F3+s~c`Q@af z-Yw+>w}s;WxTmpsypEgbTfp)HIxwp)FHz#6lRdu)mX8y>;Y|Mp|28xMB4h^zTH}4U zL->XdtiOuL4l2YFv|mN&*^KyEe-5mVMd-O#_{OflavCXs7&%vxvf?uP$7KTY@jS0N zSER%zT@6zr zTyU_~5Mm%P-lWwn)E%uc;|h#ferFEB4ot+Kd#Hu;A4%UJ!1v>8LC>P8y(JM>w&m%d zmXy)vm|)(jc|jP)RJ=5Y;cQ1}2X7sc6(O6c50&1y4v*U0yL0cf+-6ZxhGuC*arI0l zAzHS45Ug|1MsWBF!>cZ)UHiNaUo|gxMFxu^)&n6gI?^!bJFcwn*eE8!c_6tK z6Aa1t&f409wk6nn!Nk6aHwpD7b**mMpC>q0UF*D-3Uw4)o|4*fHXlmPZTLL&!4C8lE@f+L1T@IAt3sQibC|X>Rc1x5-WBv+Zqh$IcY@3mRw)%Xy zX9|%>Z(xM43~bW7!QFZCup1nFZ}B!!F~u21ZLGmc$*bW&4z5$nL=pF@LQMoIFACMc zmWkLhgAc9UdH)+lj#eiUQKEwoHn)+F{}nkW)YD_c%^q=x<0Fb5`5g7@Ir2N%1I0kR zP;>$Wc+)b`n0j#VrXkMLhCoBMp128$f55vDg2Cer2`y(ml2K0gH1g|NF_=AVc=C|? zs{04le~+U6g1U&&kB$pKn2QSc;{F3J#Hs&7=*Rmg9PkC5juSfb;YnkQ%TG?qXTD)jqc7P(sQX$-`Ohf*Zo*F)<-#^=ZsuuzZnJi z@uq?)r{CMIv#tjDt~1l$0zX^9cF_YO_ju^P7ZI(RcaTiFpr4p}A^n;(mPl9U2|(_T zaCxSV&Oxb>xN%08gm*3}=H7^gZ(_;R%AmkHxJ{=|r^i$ABOU9;hc%f@AC59&3sK@2 zT4hx%G+JAiXx5tW#f_g*Vb*cF%uP{9P+T@tw6ZGo5p=|Z_$qd?31~ErJx1W;>OAa7 z&np%+W5}t~8(q;0*I~8(-lgcd!lqA_$2Gi}oYss`f2bNrEqtUW#=Mw;xqxRelG841 z)f_E8X#8ygy>zJ&UsocGBsN zw%?b$(8&k>BeN{O(OmPK`%=-LZuN5e19d4Zcas3y@eW!$XW4CwC_m1mjS<)-69n@` zT-078a;abG67qqA)9R+K^Hb@p$04lrHWzhY3&13#Q*1XWW70%XH`$o6^~RF=V!$S_ zW;$mm3E-h&^m!Jm!5iet0fImI3tAb#frpJg1O)<}O&5>LY%Snt%_PSqoZ8uxL!j;IjHrL8rSE$ojDxataNIXX@}LD5Z+S*YpG8OYHy53W z49}lo4KJP{cg~*?cNTTclif?4R7Z1?`_!i{wEDVoufcpeNqPfKrLT4Q(#a3j@{QMr zaVDpl$s-`27WmsIwx`D@JxEVEtr&Gn7u0?Jz^Tz${0aaQ{%y;8dMgQmV81^?+oa~g zOL%HEyD?YS>Aw0j_8G(hU)=IGVBsFmz0{13aUs4Jto``2R=5A2S=}Wjp0B_6;v|6- zSwvJPr7P@#^zc{aD`m-xFl-0Xo_YRygY3+RvY`jtkJ=@ie(F`tFIR}!bE0R8=bBbD z_IQO$H=Nn3VjIv%o}3x;cV9k86UI;#XtXcThFa&JkbeXC+zCeq$8U(N0)yh!Sl_{~ z)chigo8l6<%9E$_2+YaBr?1#-@OWRa^SXUw=e`c5*nE}DSU48ck!)-C(|ch$P~NY9 zGk++dEw?<&O?s%3-rtb^Q{*Bz?2aLz_l7J9wktI71U&bIj-$= z0LkGlGy|-UExLYEJ&$f;lYSd9(mbJKxle1mU+)X|CDaZ)_&rE%h>~W%%B|iAijbgw zM8e9ApKs_bFiZLn|H)p^dH>sNp1IlsY7V%MAq0+)fHsZ)p|e$Rbg*>%*WAb-$ah#| zMi)?Aw3r6H=!HV3t_f|C4!eb3OvENuKj$ndlI5qY%6cKh#N-oSYc2HL#O0XREqfOue^OVwzPVUe!u0o`K(o{5p2CR~V%k*rFxYL{ zG(wG|7Ft6MDWK27Hf&mM7|{SRf;lR_Bo#j+j6=LQ>0r~u_+;}BTy>fSBl0HeiSH{j z%jaF>hw*A@qwjHZZ7y*;qp$ovQNX0DPGZ(HJ88<{+;C)!sDQ*s$lOw&yuyJbP-7Cu z>oOk7Z1+CPHnQ-@!_yN0OV=aWfY}KB*x>axrK_5Exo5&yHqD{%z zzi?@QBO6Z*oNmxPdKJ2umEH)3d7f1Ry7~KU*4o#JsNfEwiXNfxkC)tqC2DU=4olfu z%^|~Yw_rMt20fn$kN1a{L@xdogCl^-&fpx2p72%?$Hi`|Ynh$(wPB+Fu8V)|OcTSs zW`}_xumMa&MUB{6qVvvM&v{-=^EPF>#>O&vR6hVzPZ!=A?a zRRp32+b$avq<)TAcG#Y zM?T-JUTiJq3(1YWC>FK3{B;A`!dTAYXI$KcZr*cEvlu}zc33AteYTG@XIMh}_Djzc z6Dk?Gn=WrJ7*|^k$xh8D);R04v`5|An!LGM{C*g~)!ywtCac5Q&r*ofU_k&j`01zQ zI`UAZId325Jes@*rswV}(F*%c#mdfh-sDFl@>T1!HB8n75Q)y-HFJ-m?~tUanb zB(yp+zT5dOA5T!j%%{SQx1h;3sFGHnrD&XnFv08#HriyvTAEROyGf75BUc&0o9!p- zzSFkJob&dk#cWINbos+E3A$(bC`gfi>?`<~cf45D^sTH%3fs7cZT4X(>!SYzYM$zG z{<2hMUDEQd0Czo6qqcV+T9=h0*=Sex5O zSi6*28zFsIJ(0UQW46T&!EDNc|3K~|SRue~#>&e(E8L&}?iltbJh4@KrF1$H%Bfea zvmu?~M@volL(kHi9V0LI48}G?+97&^`|&bALB+lWMuG7~;wZfI3y_09F_RiiU6ar_ zffe(|!fp;~?SaF@|GM1SS^r^rdHHL*WL|`vCEoZtMr%Mk#t0G@=1-8wkra8_H`JmqC39y)Sbi=2kJoaq1nO=EnK zSVgG|oRW6iB?6!k;4agDW`k12L})!AN*)Ai%l^)U`$smAcC<4ycljqo{^u>E>*-_# zPP$TSI~WLi2$rxC6ow1;_m7;2&j4qlKDaeCCrmU}M!MZhXwqnz@OU~ByC17rhn9Tr40d4(tVclrj$aWBoj zl)>NFpmY%a>ecCbke{jQw5Ob*y!P3h0@@4sQl8j8tlrhRw7M4aw1=wA`=7!J9Mi=0 zURWiZiQ20Uwv|=3sjA+SQ=0a=Tw6m)-3pd=?CY?BG6vX%U2WE|IGF~KxKtc3);ZYLQM{f`s%zpDF_dLgOZF^^ zM64xW>rje0)+pd00!W$DnU;MEr*zf%>J8b%lQ5Kih1?XHe3@m17c}`&#%>u007|2B zHJxFYCZC0eVFk^&*HMG|$anGYXkkG=rdZa;=G1G7s7)2ZgWYlPXl1FZnT=W8IC3g0 zcFC%YMZ*!Koa&-!9je>O;tlwx=lt~q;&-QyR(j6P@5Rfm%P^-97CTK9wc|Ie*az8w zOonr96{?DUtuma?G3X_UrOkum@N^2b%Fe}VG@ghC9Lb-;f@LZ3e&a3`%Sj$}R;<)! zNwl>(+?;M!=xhM8DZT{RvA&8~YWr1`P_bq_hqMLCdTT|E9k-s7T}=CwGnOQ+jfM}M z(xMy)fLV>ZuMXC^5god$Rb6Y|XpO`N=T_KOS>*H@$$){A+s4v_kLzLFFk-t#+=#c& z((D3MxEKnVjG9&rf>k!ZwGeM)+4o}CMDl|h6bQFr&;I?l-N~*Sf5fx8@(=vHeP8fi zgs9Ir>{}ZJA~8bV9${=sgkXvEFhu#G2+uhdyia&l6QqFndSc6zono?%??~R>URc33 zo>`k>b5sser4WNbskjs+7y0JC^ybR7u*D39T)7PaU ztBPh+{})~F7$r)WWQ&$vr)=A{b;`DF+dO64wr$(CPT98ks;B3^?wQ*+e`T)xml0oN ztk^sDR*}8POCXT^lcVKuBJF8I=y{VgphxV`neOFh z4#|e{kUR?)#|!fPznWD%&E3AwpGp52JpcgOe`;3$S&)j>#d}7(@_= zFc6*;3jr+@LAoDx%s+6*FI|Q)=0=Z^Y1)6V+$@PUze%|we@TO_atJj=ivLWZ%FMc{ zxp}F*>B_RA*`~^;>3HM$XlgQp4e;~s{jmG}isyNwVbk&JdCKs+>zEh7Y;cC8(jM5L z3hTT!+Y=UX+BpCTtBu27^vM2N3^K+cAS0y3upm&hLm!*TkGlZ${(PI z0>WJ|NbpU1Jhr=z@hMVBwvIduENyhVeR!}}l7oKwYo~Us=)O>_0(3|H%p6T(?f^D| zyDBM;No3RZn{(<-^^MG_DUJ=R{Ufa-B9CMHdsxUB(=OT_la9dcgHzkO-R`L=*VeY! z3>>SN2)8E#mwwkaSIFn?k*;f|8p*b{$zNmucGnJQ$#r6UcKYssI)4aIFD1})4*Rn< zy4IsscHp$#s-SBO+wtrjy8`)Kc42KoEwlM%g4pgRq_F|n9IsJrT)&c*nDf1=V977CQ--L zR}4vHu~52%Bd6)pBR`5LYlO*bG)%CKs3F*a{>56jj6I>*0WxQ+CN? z9^q+#z``yDO$K9j)(CDWVH80(yB4r>asT>B?CULj*JcS`i|vcrW4jU8;KY- zKh7;6EEu)&GHhs(nAKAyD#Zs69aoBikr<(&+EisGIgMCVFtaWDLAmfdZwUBS>^I~v=6a+}37yp9#IHY< z9Dh?u5uA)u{~$u9C#hq}8%kubj)0x-n`t1(v!*($m&H&u-uej^f_e*(EN3ytRX)ZO zu<;mLpW8`=sT3=k5t`GAre;}hOGMzKWju|r#llbt<^fb7hQqKvhzbcziSeAtvFF}k z$FUw}TFFe6=7Hg!MvwI0s#WOGTqrY_#yYbF{fGsNB^HX*s?OvY?wdisQY43SF6Pdo z;GL1pc{#B^fLhR7|0xUs?a#DGkc`)79l4<7#m)oN)r+FbXVlGV6XF6-aH!2=nymy| zS`{QX#LSPeRvIH4S~EFx)9!TUpW7ha#eqPoXb=*kUqcU%zkx+vXo~@+ON?|>w5V&= zzWEhGIOwVIh;ABtdK4o}-;50X%ia8`IohxO&!D5oVqet5#cO!wFlueKfN$Wg*zi18$sfbRF;`FL`#s-=COG5R~CNje=ogw-} zb>@zDHU!o5S~!^3sl&P@G-YtqreZU~Nw$Py8fNAL=r>i$IX8YQ_?=YM*H%@NHr|O; zY7gb)Ob!TRUt(k#N{Y%YlFBR6%_t@H_=DsyNT?49UoSb&CB{k}N!7qb{4vTBk=7@f z3f7J_CGUtZA7jdLh^fIb<{uyQN#qfW{0My5vT`$v%g>04Qo zAm?W-;XXC#8xnXAKSvzF&7I%ka zyti@mP6-v-(Yh+|aziNS9!1y?H_{F~-WWn&C)-o!`34d7zH z?GPzJOkI&KDS%mr{q`Ejd`(?o$G{uXm3&E!?CBe0{6fV`xrHR&l4WezCPFr`5dC8- zIHlh-z*dQI2gk@8NS!^j&oGx~z&l`Na)D+U{HQ90}Q z(iuoM`a-D5xt*ic-~X8uI6)1N7=#`;`oiWV9_;EKb|3l%`sirvmNW1GY{MHEWAuW~ z8@H>-h~+grbu6XvqwjC*mA3f=H6x3~^*KS_z>%|aq->+Jp9HQJ22`0Ftb0$v%m7D% zfpe0GFh{!oo76qalq?Qh*&f40%K4<5V0(lV8Su7o+)wmyF z1pee?WfN+P18rymH9&`prDbC}$Efl+M%3#|xhf|<;xHo13ACJh1obb6#SoI3NeViILI)?pd^6E)A8)ZY>AJ^0AD&p)-mJu$u12CEZfK# zX^P${7aE8W!%HlUw*n~Or&m->ynK3h%@;0`SA9Vf1uWz-ekm7Qy$VxykrKUuIDAsT z_&dCGfIv^sUxMuO9~`13=6G0aNr#!l5UBefn>bq7VRp<)>N@%~fqMsWm8syGMp_kj zOGXU2W`BRHQUq&s^!vB)Jj>>l+~rgU&MVa=nuo3w9KRkQ1qR5Q-C(Dq-Dj z0B%?v&=|^-a6Xhe@GtPdO8_|tV>^Ni04}Y;9`fFy8||GQ$rHX9vu@ED#up#Vp(0dd z#T~}h%r{J7@YYsbMPKd$^;=?o$$Qm^SId*E+A4Ii4a)4m`lwf|lN`V16Qp6(`@rm> zgxd1etlWBmZ>G`^uNRJsyg05vW^yyD>CHvLjWS6ndVVKY45vfREN`#wG&?4QEm$H> zeI$yRg8gUUClArSBWXV#z-S(W_r-E{V!yu5+#vZ?s@D0Tz|#5G(XG#&3!ETs1Lu&w z0clx3YdL`9;@dcVz7PNG=lPxhkt-zZ>lF^#Vg?-+8M{gh&@unRph2S$J@s;gbLzHd zzZ*@`d)>21)mij!d?hpb8XVA+w0D%jLy11`b`fhky2T$SIf1*Dsm2+hVczKnZ%Pq@ zZNUgEvm7kA_L&+n#d}`3a~mm)3KPE8u`f{6vkOwg&FlfSf= z{y;%hmi=a^S~>5+Dvs>eC!){tSU|FKyWFHVB%@h{W8wg#64gVUnv~#QqP1fPQKwK& z?gg=+5VXe19c6_mYL22`D(=VD1UO2-9FaF`j>nXwU`|Q!KNlbJsZW;pgF*`XhN*^bd#;+_P12O)3#R$shKe`nPY_su`-MHxbex73E#UsGnppPJwxx|!lKBFV9F%hVW!`zxI1 z5QDnz2?o*|J6VuQ#=nRiBiRt6a)e?w1|@e-DRiHCHF#kcC^K$9*9=SoCo!?C*);V` zT)%w#yx1d9>aeinVaZVf$ifLrzQqM^5y7St_sIM;N#x=^cT42B^N&M&oUfF*DOzSd z-q8~#j7VOcq9+GXUWE#e3-5GY+Wcir<#Ki>mpd%i(aX?c?x0}wrMpa)o>ww}z z=?miYS;&}CvO7nnGjgV%=m23R9N8|AgB%jbtr|NVT7Qun_eCGl4uRDl(K-~|5mqN&50rM588v9Jnf!EbJ7%uE)aiBLoyyGyyrX9i%T?}z+FV7s*uIPl zsd;5lVrNea#Zp5sK$>0_xlqf#05T!S>Hv&ZT+CZ!b|~2(!<)v&%(~vtNzfZKd3xwP zuN{!pON2u$3*7X=ss?cj-pOl0rfSY*;6Cg&Y;l&k1FYG8Y;VT;1Pf;jJRUiXb8AC_96xW5si^UI)dhL1^&{r-x+Q zR)(DM{=(gPP>Gd7_6R+Dj*w^cCH#<}KsOZ~T=v z+WR*w>XmP#uc8{;*%dDLF85n&^N6hBJ-A(>^Qn%h^XtZq55t#1k58!kH&5yn-*gx| zh|?jb^5(C?=ycKEefUy;AWxEja2}Sj(1)9_LGZCAI6z-5x)ES=+H8y8>%U)IMdFr3 z6q5G&7T+h~`wM@^sE3i!B#Pa>X7=WqL`t5FIZV#KRIYXrri+y>^)#WPu1h4xeh?$6Js*Yw%53WsN5a|+q>RFC1C5bs*0pWl?z$o6wKX%bRf*&?N zn)6mL&M!0jPjL+rr2p<+V;uOEez|FSTEm!`UlVhxOVkNNz>S5$6Y0OM-iH`7}Rq(c%ai#u%YmP#wo zlf7TTNQ_U;WVF>qYWOU;HPjs7(i2MUQWrD?1-W+TgMGMgYv50 zCge~)Qh{gSL2jq*wzaIg9P}ZUSSXfwXa+>uwiIhOD5h0QG2pC-5Pl88tdw@H0y!D^ zBPOuim$V$(B}y&y2}>>BURO3vft?6=R$UcLvhk&g150GZEezR?RJrg-`W5Lyf-90~ zLP2q4?b1q^4fm-tD&QcR#i+O`*9RoKDa~VZkwpW!X7l%a+XqniXe^3LAY})R#>KCb zI<8&j4kIljja)IWU-s}fnh(sueyaY~(p z)T0&Ijy%VgKXMmA_t*Z=ZeR<%Ih7?9PZW9s92Wo&{VjouzbLyPwhO;nPG4~(GD)0X z+mag7h~4`C-3#|0e4o%Tin#TkNukgW#Qh&}&3_p@$l2OjNvr)!E6+LRzfI1}Gm2FT zaJipJ8_`m-yC}qhM1b2K+M^^_<1hH@QEunBUjV#I_bO=$aW@7g*)Fa#_&PpU*!(!E z4Suk5NPF{-h-%nf6HZN=hYpn_m!ffRLv43ibm-W#m<=DOg`DYZxNOjtuUtl(-z51C zHC@(SG#dR{?I>Cm>DptqmQ9b%3NaU%6rIK?45~O^dX3Np4qL22?)6EL>4kl-D{<98 z?r6=#8`;g@Xrx-MqFvQ&cYMU~9uRbxqtfUA@kB7bj$W0bBX2N<1dzvwo~WI{zOb%_yZYo1gV`@5{|; zVg?t~QGaQ~(bX`+{$B!OgYaWp&!Jw9!Zi} zBZeuuayV`_=iG3{D5ip4qiilTlW5SX{PJ!chHo>6oah*eonr$BaAXOV6Hm|7Z#01H zUb0zgyYDUii!82e6wruSnEC|X7yCSze?~;2yPEvKYNQ#p6_#_wZXl?t2(I7nhbkw8vrXThm6|tbh=6G={h1tUcc5=Nqf7 z8}O+?_C+xI@IwK=pw!8sA@Z_aaCR?!S0;Wjy}!H%p7=Vb9S{Wzt47JMrAN@2ACy)zDZBQWl8aQzl|W4P~?eOol&QKfA3kxaPNWZz6WZc+3}B- zZnx<$o|C|J@g;s7r5*qrd3X4!-<_%Ei?9W}{2Nu_ANhI`0d6M$bDSZ5a`yk)R`~~G z_+)&@iSkl=2zp+ZWK3ZUTWFFUb3ymrj$vGPcNEC*;>eWVKp|!*--4eR} zvB?Y*6Uq+&U!pn-wV&$+29NLx2AU8t!*izVI@42T>->Em$q$G5PE4O6qKNt|(19G7 zWTP8K@bH|eLMT^Au(mzNw-y{0X87w!)KuHs}=UGPR3b zZrz;aJ<#bdo`hgoMI$$cCoo24_@9XkiItW$@mjnY-3ceBYC*v~Cfv4h)Hv?=6>bfU ziQLO@`oxd*i}h|(k8YQb-CpkK_pc-xQ3O$)_iC$K0j@f-h}b(pvgS{egxKrX{oZ77 z%4xYzcYCfQv{<3++Amo{!B1OK6}_7r;7LJDj4MTMj8Vq?)zEWhTWXV`&I=PmOQ3dH zG0yyiu#1R~K;vQA@em{jy#J=!|Bu*!)zmA^ z{lv!Lhf4Clx4ZufIQ~~`WQ?6$Z5=HC8I~Z037Z9eWS)dVd&4$qvvr03iWq=sZT&i0 z10;T^z_y_G&(A)5WN&;(vtro03DV-8@?q1t&B#)Z1YPxiE%qMU6X z>1W~OD2fNB;NBUoc(v$!qAVy5&eRC= zM{_gHtl3!$RWToS3^=#-2yjT_<#r3PJ%f0$TWaxZ6mw#EvNa3o7ksCf_KxUDA#aWK7#x=iCDx#K8ol)&b}46S@Gd2 z%sg&t_jdk-gt!?o@(x^mH!(1yvM~hun9iA77rUmHLpxGbH1e8)1{+s7;19HKr@Q(O zeP3fjx}2CNotB}@`UM!%D_I@no6zcci=3;TY8I4+Ach;M2CN&m@_|A>_2k~HJ#GHX zU{IJ(BWI7*3e31fbEBnuJ=p4m?;~9!+8u(2BX?Px(MDAQZm7a{k&Ey%h2r98BfYFC zSRF@EgqMDqBz9TbyVeRU7e%VO;w1I_i%;;6w21B(IgI*A3G@FTPWeC6;-Bf@opfn~ zB>JlDtYx5(_{>T*z)Ya5sl4L7vDCnTp;44{@N{=ptg$w-sixB1aqK$xoid zFRobzjL#I&Dec*4oY&4qW&eVyiLGK}~AxladRYR?3Wv|SQ642NMsTe>?0 z<1<)mC zV%5A6jC5oC71>vMw^J4ygWb|#1Gh(?;^~b5}XybxXD8JCU0cB->Nv31^ zP`hL+KW#4DEVfi=p7|FUQlHR@DZ7GsX!9njj-u7#rRG`3i)DZ<81go@Q0FBZ%8su; z%>L`0AA384CW8Lc)P^_tkRnR>lRn@jl|xbSQMwP2nYiQKi+8>DPyR3}{tV^>I zBP{FIY%)p0P6*>$sx;mu)9w2E#3 z#hV|=<}H)w@jq1H_{#UI^&xs<7p==rvv|`WVZp1S<;RK}VK#5%iVH2_E?Tw-?=vO7 zz|vIFx9Xd_#g@F$-T33G%^TO8=f?mZXZExp8in-cJ%UyvaE-)dyRRH&g8#*xI|XfGJ5gP7rZU_9g@wMl&{NhHX;YvA8lpB*!2ms-hO zq5hp{6#;UkRd^fCV%?lA&WUF{NI{bcd6`ye@@fs$J&{H2yo)#S6Rzt~Wu% zU>eb}{pOX#uQIdt$Vm0}AwmDc)@%Q=n|VkGDiujjXIUyuUFLI9QoK^RH;GnHR~mPm z`W9)yd1x!42hmiyu)2kSOr5v4Wib(43Zw73mcWfLn|GSFYjn>;H>z_JmKeZ;`_zHX zGN{0!?`?kaPmHs+3$Ewi@DLeEmKC>GhVs;eLwqQDK1Q*J8zb64pI)Oc2kfJxtk00s zX%bDq9-$_|>_>!7VI0W}lS_lo$RhMmzn9R5(+2EN+O<&QKW=S`G(3Oj2OQXTQ=YF7 zb_ZRL;dN`J%qR_sMbTqe%X~F3o65s(8$3o>^M4z1Er2TwJr67Fm2Du-J$~{3IA6VNCLUeM~Ad&8ZJ`LqPZ( zY6unq1-S@09!Pl*7EoATUO>wZT(JUGA2z@1-S_!70RXwt z_>nzQoF3%Q+-Tj?mnLT4f_(xUxbv5)Xi=vR8LOU^TW}oT#G?YvufhV+bl>G$G#uZh zTQ(fum0LKRn6OuSzU)~!79%4h3`b_uVns|s?T$UqJ(@8$3sFg5TEk+O$~=ZRnWD(R z$Wa?cMy&a@Ot31&f%uK-NCdp`X3~VyuHjjJ4{gS*)y=r+#zQiv7!t=Lvw3F54GZFK zTgi<{*i@q6U<*^_SBV(=Aq;gHR;X>3r)Q2}hV^vjXS?ubZ6S8vWJ#{`XN$WrIveJB}7JSDq^|$&QS30n7TN{PIRKX4Jije89hgliA^>dti-N}h@mZz?+ z_D$+xbyBQZr}T=qh3<86=CVVl1aFmhFigfr(~EMr+MQ_~&2j$Ei^j!~*>!OOL`?X= zB;oU6ZVryzhT|=U4~H)450{w~rl+WzmY}-HT&hNql>!dBggg?XZF55lQOhE&ufK>| zNDPl)bbR_p3&Y9UJUPT?iY|MX=@W=hc6E5!S-DT~U02!}n8a%&(d`x5Qw`!g5#nxFz3go`zp{$A6-K43=(5%aAs9Y)xowSc;y zNg*(u)1YIXvA3;`$2LA-zaN}&4s5EM9~qTk>_yl#($X=R$KNlDnf@VXgAVccY zWVh0DesTlez{y58vpp}T?@dLNM|HKi8q6JKyVtvu*iM%#`LvN&943GyLz$G_@!S$; z5jT5bRE)Rxe3&{}d{$}E^xI52h0=~xtSCEtZg%k)=F=n%}`AsvZGMyKqHg+9Cc zARM`Ws6J%ibL?a>^KousuURywSyRa;VUd(cJb=D07^Vfz=}UlCJFmE%)=PM6#B3KhHN0^CLN>qS%5x|I@b7R!252C(qg#Y6E z!s$<7XA6{OUy1o174?PiK6&0Rga3*+7hDa#B&ZxpBgl;Tm0hpY^z77T*`B$33jbq` zMZg_m`if01-^voGWt-JRz#W6eoJgbI8%pc5tM*A}q4p-S#ctUaavnD@lU`Pn*`&a* zxnxx}xVac^eEES`Gx0vZyShe_&AFVJLPB;i68-oIRguCC!(L-WC#-j8-s@8I$Qqli zjSPFH>s4*w9}{BNSI`yE(Mq?wu~KK_JH3N4Wp#deYHo{la&dXuW2fl39fala4xaj3 zaonE)yQJf;C=7CQZk=`ZZ%fr8e@P_!bGewXNZX^QRn+lVepZ%B-}7UOOQROt zv8=7Gt0fxN?VLQ(P^5bK+hO(*4SfpV_=1aVPPga2)25=H)ru@|K+p%)9?X|M6H+=c zie`FYLy;y<*Yuoqw9d7eNlVd;3$x?Kyp&_&F7{{-?U$~&X3NsRMhkPp-+3u3NjP?@ z%;U<=wK+}fcNI~lXBzMB$IVI92!un;m!@Eif?tEt{1MW*7bZT5yMp5uiHf+uc;DRf z40vd_R7P+j*a6G&VIP9Bc8w2F!@ml=u)9-vqr=q-9k9RDF7t2LAJC@&5d;vF>w4J* z=hG1uhUIChFcI_-ng|IA&sw)8?H3iNFhzwfSSN8s3#8JJ?xPCIdOI*46G!@E_D9{h z3E2Uo*yA1|%);(^hSb8*Rc1j;3?b?4DCo|KIg5g9bVZ(NOU_kpn8^luDOQ6N3~+5Y zQv|a;f!+yzGEjlux%kXVzQQP-&wq`0nKf@bNPa@`P;*(oarhc(&%~lt zhEs}pm^D(ppWd~RDt9|FhPRatf~1-5JX zr}DnWCG%fo7yV3|3=8ezq-Kh}^wx3Kr8cPwYegh!O}9OkAjwn1D3I)8groqiOzH2r%ho4$%xtnYzOH`th)?(D?_-85E3sufgoUh5{6JnPwy zpxOC$G9gLJ5gTInB4`Fi_a-UJj%MXiW7OEfTEPmJA>p8gNx{O@+ouC24vqX4#^uQa z3Z=B%CI&-kOS>Vrq6Ys)5f0U#XsptL-EN)$rj>w<5vqdpUp%@C$Pka_BjOuM=>V=3 zfRx?%HU|u z;$O=Joan?>fvl+j9c29)C6S2rLpvZO87;E-xiKOWm|OvLN873bfbnVUM=dV>Ivt5gJK;X}<1$4k9^X8)hsc;VJt^|3;O`~i&4NHT8Uf;71~SSrz2qeisc;OqYlSk}WD&~=Czci+Ue6C1 z3kZH7*(w7#e=?R{UyFD!@e)pHiP?qU06DM5XxXfZ<(qVUXAo;aHwpwA8jST4sp_ZX zDUc7Mt_Ae_D>^Bvr@Awp^m>U})qkV3JDrqnl+wSF7SN&FnFaGg<7?{s-@NMo(aCy( zdai%L0sxF+0RUkBr@^(dg7`nX*eF#`KP_YD?=1JNw62UzDMkV$2pEExsf!3=BZ3V0 zQJbv`su*c8L2X+X8&)9`Q&v}#_{yck=0-7^X1OX*g~BppjR;o14skUkVFXahs&z_X z;ot5r%jJtu{yo=Q9Wj%Wl)jUn-Phbc+duC0)34Lqk4FW^fYb@z`l;+_gRk`5>}Z0B zISM(lmTuIMGdm3e+||2|`etr|ReUwPy0bThm_IK|SUx&1d(a1&^ncsQ4EUP8$b#OH z2!Ge7dkYWvmJRu;?pC~LpwI02BENFL>Zt`@kQe8gkbsBp_CyeZ|FZ!wrHrRmCjF}oI40Q zb{Hk)lM+Xp$}OTxV5)&(IGYWJ(Y7&HnS|{2)C3LW4c^e^B_nsvk8)S$ zYJqQf0F8=*mR!4%c-^T|_CONVS+_kZUsPVhmm!n!`KrW9H2YRBWHDTI*Rce%0|ytu%NvwRxP!Bu&3e678&cLLbNUyIUCGg}=wjjB-gG6>Bweb|<)pt2 zPH1!M4dUqv3vuJA+ChDv#Z3#VIjl*?^`9ahDf&f=>m`aiGqsgL{_5|Pn_+a;CZi99FSnSd%oMKy6c$qy&%)PFG>bRu zHmQzzX#+z0#b-ZSwoDx(+L)tQz+97F6kBi2SD$S6V8~kpj%qu6dxL>F_PH=IYQ=FE zb(6rw#wKrlR6jUkOr-aKIN4WxQreN4mt`$_!!QmO}fDC#v_#~9t^G;98KUDM7 z0T-BObczTv{2*{wnX^)+)psk=M&kzag;6Oa2+y*OlyUO!dqv>{4>Cprm(6(zwBkSy zQiUPa7A2Ahkv$VKZNhyEMI;k@4EuCu`IB=p#G>>c+^!7q$Yalhu1xc-W1eI+XUeFw zR7OW27I7DLM4p>6 zl`HGoS#5_5ZZBB-&+^exF7>=IgA4?!)Yb=TI+I@EiaKzR08>IvD?Aj##6HG?)Y0Cn zRi^Ua@sXI~JMjI4(D7KqcIr4z?PLjmAKT?39n8h@xQcTp^LQ|@yT#E7Y{mr2uhE|D z9u*u4n3MU)1Wub_g7{M3B5LSy2W^#6WdZdv$q20~B3PXY=2P^1pkEa;y8bA(%fug? z6O6$)PS<;`6=JO_DVBD8`yR9Gtb>i&59P4vKP@Z7LY7_oZ>;c(kdY zjubfTlM*eZKu<2`pKJ+CMkKu~v!^g;PoWeC@#_w=xieuKz?9krJ%5{^S zES38@nX^UO%S?cd=KG;(JcScrO%I2Wz})LKOIp!qZbE=&qS|6Ow&hLV{5I?hHH!WU zOiGZr>EwMj(%HndTXV5dt-2%IdqVyZ5>yhJ1W7XK)Uhd#Cclj9MVah9D%keh=cR_T zLZj&Bj1#PmiY1*g`#uHM@+VZ<1X6yTE*43ip$jF2*U@gy4|qQ-(=I_7W#F?Wt(hDs zeC{K94g8HX(#oRbb+2sYRJGJfxvURhrBS5IFUlspu1#x@6cgWKfHNwIj@i?7K26dV zSgR@^XFGdgm*GfeYrB))538KOUDI?Zx5uq*usr%A#~Z;YF;9V4DH+ypOn?+#@yv5_=>)U(iP zqRg@8GgEVMU>tN1Iz^UkEJV~BLNy)^qDwhbj2}ac*q~B{vv5-Is^2K*t&hc+Bvk~z z2p$5|kXxs#tiExX|A@YjU$AJ&8T4~+)hkrSmMY6n>*UDY(`v}^qD`Z+(OCaXGcP+g zn98m;EbNHJR2lA$3H}g3iEDE{Wp0tanrtpg`@m{Yc?U5lQIu7XkXLTrtR&-7EH_Wx zwdq(8x9rA|IZRdiOEMt5UM&G8?a{l<9fYU~{sxbXftBh5VXw~ z-M3#IolcM83%Mo!2@&{vhP-4~Sxcg4qaUO-inlF_;OcnHrcNHH(XlLIB$njcWxc?} zSHDCe=C^jmQ|Oh3Gj>gDb7xFGXA$-WH3N6KvkPM1-w9_HBtlAvnm%%(%fifv*Mh#oDh;U!Y6XP;+;&x&VP;$A!Cdqq1F&RNSdKUy6ll@p z$owmt--tPWbSlnZlA^KXj4H_t8sRS}7^;6G)x+aL8FFec`pOBj$x50s8`?uh#?%$3+nPgT;v1T+GS0(W z6C%$i(9gr!MMN|?R6G%`@lCs?Acx91BTn`_0=jgJB(1rlq^mskkH?nPIm!*YQ?Ckb z5ui^78LW=Fti!BuhG6UH`Qm>0h|Gy^Z(%0xWmvXAH}mPcVt=URen3Tx@tV1^xW zP2l%)SaC&M;(B3nP3w^flOjFSQXf25z+}}h6lNQba))?$;i&Fn!93X-5M__BdPT6j zfi7>_GO6hr#rlBzhFtFv1ivb}rB$fjV0BWW?RwV3Y^PMc{CU_9xx@VsyXuWO6nY8E z9F#o-{E)&OoH0i3No;VF&K`2Soul!l&^~o1Kr98y!Bi{Ai;ymkInNAT{H}DW9PHna% zxS@4!qWsEKnQzH%+=poClji8PZ@xqvo+Y1vfS@v#UZV)AOCc&l94lVqZ^>WtODL_W z4n-2mzI<0US=?Uii>9ulA?}O%t|PzJBF1ABF{_rD4uOovViU9+~>Y9BH>mZBi4^fp9yp& zDx+#^pAEnqdJ_`MTE^iRs#lLvD&%hb=Z;}!$Abm{K1coO!XBV-a%e05O$0kY(C^-n z5-oR|GKc*9JH9=lL`vms-SW;(|N4d74Z3}3v{rdxk3>gW>d!{j@K z-1U*Yi_G3ja!*m_WZFvFlRYRkgdP|8i>ymIqGx|c2B{t3HsjnuaK%8$-O6`1AeYm_ zE<$L+f}b@)H%$kX%g`G~n(su*{;A0JtH`dskQ(xQPU+uJ-#uf_94e^3J7f)U5qZiH z_$D%Q8}0rp?#K0l(;&e2s`)ZdXk zxKBSHrKL6L#b5`71wDl#?8MSdUkJ=s4z`(CVNiYnBgCpaEgM- zf+)8S{>SqhCAo@P5>q>x7~U3&6{6~-cRu4ysK}nKE!nupo#^LTzUn;jdy9+%!$cW@d5bHWFW6DEIv^?u?5;-&YlI%6TsC z$a9S@?ODInJu4x8RCKnIUL_t9VCh?(ILQ`wbk09RVz&Fb)q_PVY}14cgiB}3SauP* z^_;o6MWd7^%@Ld@o@xVws~RJZ8U-_41{{2HA0BHw)(pawt7Y~S4-s`%orCORb;2H& z>1EY_vEGi~e*GIC{Lf%3+x-Bt|3}s!N#$JihlKDA z3zAG6A^00%h?UaJZNEZA7@6FR84?P@!1^@aYCvLDnhgu&@A|sMZp*110$2?FB4ThBNW?8G5p87eY;)=Y3(Oios@&JZ- zHy{zUut&<`;cfH005&vosX6QjQDjLLP@|se3KLB!abl%(9k+?_%Ai8i>a@kO$2!Wk zU1Iw-h1l3CmBWHmbP;9_jUayUokYfRW?~weLG)d;8dl@-@V;R7$LF)`%W1$9U=M<$O+S zlX#PkqgfhlHr19m<^hY4VNz66!t*qRVN$E&)v3(YEEHr$FLs&&6l=s`qsaZpKs4jd zz!Z|qq+6)zQ8$!h;!e_9dq|BjH=JW*tzIlf+C6EEAMJ@hDEA){T+;31MfgZ z`a~EJCmA%hgEyqshn@CN1du7lKW4~`yo1V+IioMg(u~#ijyO4x+|6#Yqpf`p#+Qca zMW^!Dxrn&Y=^_d-ZdC+|%7l|&uaV(T2#u-5jMK;X`_LB&wijbKDHjlAp zJdAtlRdx|z7qHL92?PSw;H;vksyARJ+T?L80-BGFhbS}ry*qnZZDi6`_4{~-f-wfQ zMrV{qNnVkl7o~|Z_A)aLK{&>#?8hgY!vQ=}pAxUI#}i)$)sX|zC802&UI;Se)QS=l ztIV&3Rv|ql(e`2-W0+=AE&DJr6(MT=3l{L~(m<1QCX=&#c$CkZMw`I*1ORl=3k1gC zntD)LB!NG7s%7V_?GOAY6wp4i>JW88Gb^jaOIS3uGunmb1t~N&X7#CNz83?0S~jQt zg3P)+2`Zz%gnzJ?+YsDT9ra8%jTqlH!8_?=2q!0n{Z|a!g%P@#Hoa}sgFJ2{q+;owt(L6kS)s+t@`OC4i-&fLa(*m$f6IKsMqXROn zx5O40;#6%_LPYoT_coT{k}v}TVmlI##Mpl*4zx#FA(o|xbn%tgV8!J~wnYMf{_yQ? zT#`F({Hds!w8y%#B(M5}7UoX2JoSA9yPLr73wwVqw-s8H$+H6z?xUdY2_lrWzr=A< z;|)Ub9dL&xK^pA|O7fhblhR)r{ER?S%kHm!O5E&A&oGM4$o3i;%jM1-a8Hcax6*^4 zDzzpwXCinifTuagR9P&Dn)HDJpN+=~*O+t7^;Fee zRoA_Tc-9oN*};4Dl2{ld!tNENI1%!~d2ddd`%JU^)Szoq;DvbsOme5D_mm-nua?0R z)V}^m&V^gv24(824S6K(d_h{LkBQ|t%WD6fldgN2t8eRmsU4jl{ka;AWb`h+v2PJ? zJHm0V%89>{aAZZVIiJy77}z+~Ohl|N$#H4N$@d-bG#UeX&I)e|;@+4&{GqiYqf=E_ z@R_1_=wBRK#fw}ylq_Ucrs$TT+;r~RG`^N^Tyl!K~4 zFX?LADR+LcljL%C+QT7Hr^BKKuWD2|p~MBb7&#QPbhOEpk(tok{vaS%qoTE?y}d9P zk_?ax;fRSpgh0({V#*Rpxe{r`7SbP+^V8@+lkZCl@{+c8YJ9EQd-po_`1ZW5MMUEj zGNQmqx`(htR~CxAI-?7ycIyjv2zBw@eg3|T3S$9QL$38{{BO&5V%pQ%@?93aw)35uB?Ykr#0|AK!7hzmiA$oi;NT4~7?VL-Tb>sWB%t#FeIZO>*`d-g+@-^N^@Ui|x4! z0Jnz@5rg%i^nJZKXIn_(;xN*yg~lSbu1^zD9?!CG7W0a92#pETNX1>4+IM#NQu4|c zH4X4DlI&wnhWJ%{FP+o!f(})d4YFp*NB$`f*7p@C`K%Qj*W{q?ei9QlPliHup9sM) z@|d?wD9jAcbt8vMhp{C`G}U?!@xuU>@Z_m@2U~`;M7lex_yW&j-IjRdiBXcL(BA9y z_&yxf>#}R|JkLDPn64!jhGc4B)i`be6^V6<4R!Bvcx$g*OnbFj1$%5#rN`aWaQe>T zd^i%@J4XZ9;qcjJrNrG*yEuhAj_La^YY|SHjrDRfOcZ0Hpf_m~mPOqDa%XD!Tkt!~`+v~iWPWO(h>1zfn zAv~uQ3+il92A|62NW4`tBn=mGTTNp|)mJF-Wt(0c)XU-G%lvHZbSkyz)->ug9LCmy z^sho?vX|Je!HGn*2=#)}nL_uf61F`?Ole}LWpw@@gj#+x!=Bpl(JNMEsdh0j}>RA$rB+iyzf{13#leNri$=+KOrtw8i&UX)&McJZY2*U9h# z+&f?g0l%=ohw$?CX}bMxe~n%suN355@W>K})8%PEpg#M!o1pjp-n|N@gC5%;jwSj4 zf3^^I2#-(U5}Wb1$_ zr2oPqDBN+Y0m{9FNe?t@{Aq~+x}%)y2{AsWrx?Dirt4HbdKF54xJS!ZLl#&~-@J(%w~>iw$XBEAW@K+(PWXa^2Iv=W%y zPN+SbxbtdxZ$>0<+ z_pbg6U*Yo-H`^haK!VMO1+!r{>N#<$ht>r@%MlE|Vl1Ir<_`7F-o|+g!ff-f@dT^A zQzds~~YT(x!cSbTjkPjPUwju5SYV&y@eD>1KY8Y{LIa^?!iA(#DRC z`liN2vUY<1r=kl|{O6fXvvz3H4=E0um;#`%NJQaB(TozFS1VzJpBgl2^wvkCA7vje zO-lO}@s;31CU04S!{K$^!r}eOiZj!uj-pX~8S=2{IP(K7>v-Sb<^6`#1Ju+vd*Sk@ zwUadvF<|%C_Zl+@qJDOc6asIktUO0I{E!%7J4la)7nCrTxO~sMY=34f*LJV<> zbw-djVAgcZ^Q3_IZ-J4J<7<^}y(h0_>4`(B0H^Iq_2q=7F8?grRiHjJnJU3DVHv(@ zRMjf(1e=l`9#&^D5QQYhvBlSIjha6Giu1OOthersP3I>|CqfkIud?2&!oQpDKfv*5 z)v?tplcfr(qG{r2&8T`sN{%Uthu6aNlSS?3&yd)2oobJzr|{k)#``0OGJ>F%9ObgQ zTJ0(~nT`dc;llb;lostv7^+yQxzWcXhpCeSsCzXwehZJRw|jP+N;z?ajydz>EimP3 z@7sbIY(J!lgz`9V_#$Y$kpjo$+4Jp`{XrHlI0)L}AyTyZ%{LV*`Zhd>6*wQZ z5*vcY2098Ufu5iEIXI|AXk<9dz677sS_HsAVUf*1y{p*M3yp6ITdd3P^IbE4ER%@( zc;>V@jKlj9YV-Pjjb>KViW@q%v-A4{5uxbWlKxfYEO?$4*zg{%2#(B~4mrV>g1h`N zHFB&c5m)t1n49EVXnUmJS0NDfWDgQz2PgSaaK|DAYnFC<7x zAU;zhQH5Q)BBMmu#5{>p>4TLi;TcJNP&+7RkD(?xpP6b;;pv|9e>9YT&_W#+q_i91 z006Fu0RVo+NdE&G`#=A+eFCWq?SoDd`+8twd&nn1xMfq}z(^Ra>b6 zL8uz*ppe$)lA5{SZ8uXH!h}P!US4lbH*Ggtp3}b5+#4BaKKFa3VP=%3OmB?5Q46L( zgOBPMUs}nukbl`Rz66qU(9WR%-w3?LOM4y{bmvki&nO?2)qSLcYbI`2>R)XG--4lc z5|4Hu|GF}GNe0`3o!*?`0X^cpiK>4kSiPPA;N+!zsQIV{-;CYT`n>Uc{^t9Z_%5F7 znMl9`HADIg!G4of|5E)UawaP9*#iAdNc*K)iZ^kK1o*xHfW)X{2U1usN!9|LE%8*Z zGRE^X0bhD3vCLe3ABT{e;g-}{z3kR>sg0CtU+ri0G$BVhps~BpF}ml0v8;UW0SkKi z-ihA}vw51&Ed*$@ZxY37v5A-)@E9Lc(>s}A)H*++I`$-@u7#6JXS@7@Nj6x8X*oW>Bq2U0lKeW;A>;J|;$h%1C%-Mlju& zXC`aw8uI|F*)&!*IT@K|WN|G^WXf5h5awpeG{>GPHW<*jfgm||UXlW+Pbn_dP@{(n)z-vk zT}*H?El2y+aAbT(@U?^z9r$-8)~=yccAFFx&XAQZ%YbT^xFd}{Bw5t=35qss`Y0qr z|K2TSVMFq0TNBW$Q5q_p9{g$_HPu&k(*p$D5efzY1v zv4oztxF@CJfdp0R_4kmT_HnhUTwjo5?OSCUt{9R2))gfHH@eOks#tBA5Cav&)o;Y( zFf*#<0^GgwYU*PPJh1j(sWy~G*eduS`NwYQUlk?NV%N+mI?NfwqDGiq+bj@TlX6#Ev+ z{0{wG3GpTbJ3J_VS^o|#y-a#l6NHRs|G2G0Vce}v&p9z*=3K4A(6q;Q@}{_ORf*BS zck6KTB+lTtSF~y_MgLj1U#0MeDMHKY0BLfrTDRCS$(}1-o(Q$H<}v>W)Rq9%c-xHhig8Cyy`^hSS@zDuc*B3byFJs0xXJhhx+MSF_me2K|)Jh|A30C>=} z+ID#VN6iJLDcr}*k{;pdwYtUA$&BvATCS=35^I$-kF28e-9^N}B^@r3gkdbSjh13t zIZO3I0}#YBMOEX(C4Kp<>d_?&Hy6zLx;FX5$s=^T;GwDBD;0OHRq^D)twQE`7K?ei z_~EZtz%c81XO?Yzh;6*$&ElE;n_!l0bLwWz!u#nbN6)y%SF{XX?nt0V$S|kV^?nxS z&AdBnj|OhHo=z&hwyBi*6Xi_(dQ+gq%(>5HB z*Pj6n=~?Hr*5a+(Z4h!08Zop%U4- z2h5mru3=Fo+!b?#%onnq{JX$t6C^v86rIlLmV0aezb;-vY-$VO-%2IU347*Qx&sLu zJNTQytFve1pt0b;HnV`n4l$zo&e%kqyAx#1uov8;Y0R)!=4SHeHX4aICrC9IYz8yY z{a+NUw$jX`oWCs{rZ?kL&Ev={=U$0OjsIj+TZR>D#Gb`d{~A6+weQ=^W}*_bJwhm^ zPWhZ8TX{pj7uYU|Qeq;|dUwDhl%@R7CEXu&BU+U)TAW=$-$TPJDCp3~)iH3#81$j6*7y&4`(m z5tDWgo4HK;42uH5Cb3YNfWj@#NL-_BVP!%6MxS>Y0!+>ypZGjnGGM=|UeB;eoQ@fV zQ8Jl_RKAE!S*NS7>L(C>pjKFL7s-x%BT0fZ=52O-r3>KYk^xkYi1lo2Ku?a;MzL)u zoQLjc-X#~*s@3Huo4bIHa@omBp@HuH7aH{0E>l%d<*DDBCz{FKfC0*IL84 z4@s-Jh&H(9)$jUd_%)Q(t0wEcfrOPcL|HyK+T(M%fTDL0NUhxQPP!Tc2Qi2>Yis8~ zr3LR+Ih93PzjC?7i=XdEQfyD(&P_z^vuy;~iAYMVwfL0R5HxJ`8%C+!paO-hB>_`Q_*FRuxO@m;>F|entvB#Zc{3CAtG%5T@5?93 zXA6|_#ORx2LvWc&VG7oDwhMvIGT>Svbp#%$r60tG)-K)|cGCF~3mjA>5u_S&k49h% z{>{WAg4zkla!-xG^wKdIa zP{hwS3jW*rP~m)?n;t00r{L{vKpIwLC<(#pj1rSD%O;{yNrc4`Yh?oR1hYkC2&XDQ zGiyKv&AsbDQ~oxp>~$q^0n^B#RnCLU90ry+R~FV+f%W-(gWU_Lo{$Dz6y%44Jkl^% zIL;KLv~gavOZcwGNQzyAZQF5LHHXSpSWM5-K`daLsb-VmH}R1l zz0y@e-2B!BszEGxWi#%;D>!akbmcs=mw!mw&Y6V1S+X6r9kfa(1J#|?0kz2Zx*dM& zF;?}EdF`m?j~05iKe}e_o{do`?vEJ-@D)J63owE!G{+WTgw(;fZ2y;QUxp5pQ`u1Sl5?Bxa>JqqlSdaQ%{0{6??Q(KG;VtVHFzskTm$KqsnCL1A z2>a2HyxO9{2nq6hw=%@sb(;CVQlF_de5xPtSD?;>3&QKukJwvEj*iJX&al&=Swpro z^U;uR=+0RMrBu+e_ zimDz!6Gxus@%TbS>*nb-Wv449Jn$}4CYWfBHdZ*Ts;(DR z3itpwq;SPAhmGED6FVl8YS292HZ8+g`k;pd&9~+xwGw{$#Hj! zt<3%40>@Oqrd5{2Yx5m&MpQ&^NO#jw2gNmSI@>gjRiOCRl#Re9Hg$(zP=NPU5khqX z+In>KVgwu|+zP%UaKueL^l21L1&%DmFlI z;aT|FPt3?uZ1H(|wEs}=+ClVs<^Z06%-T$?~wB)-$2uF zXyEqRC|fu*^->@#TiBMVb_D{zYO`HGL$)46t%M*bqORa-?pW9t1viLgUOybVB>BJd z`}GHT58Cx02AdXj!5x9SyBhok-mUezr zR1k@8zuVBS9qYkOY0;ioxj`nQHTk6g@63AXSF))tNcBf10ORX?%#iXxB!Vl(a{CPz-gPE6|SJFz#AMZHoX^6ITUTQ z!!v$Mxr$h5qLJ{HA6qa6L+ImM4^dh=WE6d%X%GX$=LgV_TQ`+jDkJSzhg<49_((_+ zWA%UN3U)qv!R?&A2gw40ZvTSrivA4x3Ta1<;rSmq;~zJefjWN6_A?T~@w3zX-yR#yMvP%k$j@w3#-%_^ONSy8;StN{XoQVwO9qF}Gj4=*8{cujgHr&tU@6m^RB z!d(rF=JN-Scw3yZy>=gZ(mT`9WIF3PW`z}i+G>3?&tgDmslPplBhL;qus8>dF!rg(G83sQzd)^LnS$!J*c+0-83VNOraXZ- zk>R^GFJ{L98Mer;nJyXQ54UVki{A%bw#pm*pn!o_$6g*4KhA`3BY{;tYL_P@5{9}u z!0U#uq+U#j&-sB|kf@k}TfT0DY#N6Y2(ViCeUV|M!0V`)~1I>*Yyu(vkyw@ZLxph07M!O~PF6 zx4U3W9@UR}^6>t-N!u-Fh^p~h_2NP|Zvk8oxF3LDWcG+4Q0IL?TdWTz$6fk6+qyb{ z*!h|xKpMEqT$MeShGr6jx)~WTt5h>9cGL8teL0^GXgI{P5|6vXRk~ zPWv-6R^Jq}q;6qSiU>(xyidf7q9iSOT*^ZXRqk;*b6b2M%5XRWH@?$>Q?@M=TBa0n zjzdvBi?tvjJsoU=DO(uY(V&x@k=NT_jHh9QV7NVh{foeq&JdWVJ94zugbI}G>mpH> z?PjS=RqB*vP^2>Ip8jnQ{2wp9AX2UD0>lrK1O5No-u(9m{ZAFINZs5CX$9pgyBTAG z0o|{U1vwCbKiLXt25ygPXlp?@y-9J4{RZGCAhZxbFzWa}$E6y9@Wjn)mPVQ5aMtkO_Oq z52X!zsSm9QWuxA&Am}F9H%FKWeQEz=3;t4!7ja8%a~K)gK+sLS&q*+yL>T_?;lSTp z8fyBf7EO;Z6NdidGzvKLjxaz^V<$gIZ1d*8UcDRS@No$>x2VT4xRXsD;3&sJUx zw6emDo+yjVw}kHY2784He$}@3E;SchiTB9wDJ$SESsj<_rp;!CR-f1;Pf)A9_~RsI zp+HQ%wwOVWOf62(oq-}fW~FB*dhW{L#&QOcrtgxHKen}&=d;$Td9G?)T{%MhgN7&j zSWAC20!6uRc8UKKupRruniU6aP)DY~o3J`Q>U3kGWVbWJ-lnMD?;@$;ze)n5J{~&~ z5YGZK8$KHOhi5C?)vldjAQR|z3alYsqElE|ro?gC=cW95Xae!P4mNq777r1OD?GV)1QI{*%DFVm zI4E~wSz*3WJ=dC$^0?Z7UY>8Wl})`isjk50L0VONaK;&fKuUP#K8rSv_`Sb5S)>^n zy9xomLVNxlN?B(4u%wLwdt~7~ah+HA<&-C6eVO1)yxavS5ZQ%te0t)TgTJ-nr-Mp* zT9XWAJxBdW8_HzoFb8#+5xRabi14F0UlKE-UKUq^`R+1I_zzx1a!6FrRiSvjEL-6S z1pEO~%w_&w0wYWFSu#vWHXPR-qQ>qN2-a9CN@Dhb1Bw*GDrH`xv$tGQR$d$@evt~K zolBbKXmENnp+|KF)BcqusAeOxKezIb(Sr_J9Itp`)&dAs;*ydil=1{h@s!Za*-F+6ab_^3$4l!d%N zEx zqX51}xqE_nrNc#Nh|L|z+vA0w&OsFEsSxffHR06TurX(&;H@pG0Y5N&A$DtCu#%z_ z+2^t~7Xy@`S=nrgVLR62#pZ_Lb&QwSq*qkqWOn`4owbk7!%MRS#NWly^+~*ljacV%%=J; zn2sIrlW$SOnNCW_?i>qax4joCNgQvL)eS00je{y6GkWlhkqBzGt4V-u204kj%;}!< z9*1f`Z=o%)$7`T!x6CSXZZZK;6cp&q*|)xl?D4?Os4EsER5yqLsR6V z!d?rZZB5jo{IGmN8(;A3v330KvjBNp9I$iB91F;|48>~*&3UkD3k%SGXVy`lFfF60 zLF;9V`Q2rk>tp{e-ZWvtRtHg668pW{s>%ql^lp zGAKe{(aYWQYQPG7N&bhjVQ;+l7pHWqwv1f^&K@E#Y096D5s2z}1Q|lME?})3q)lwm zR(*dga=@02;0?3BF!|%qCvf2pZxFNmD3WzE&&*6Hj(%>5X&mak%`O=`N1Q!e!qx-g z-6xK|DaSz1_}y#@K-U~3tt7(D1>k2Xh*obIy9b=TX@t#JM7#H_T~xMyZK765;$0%r zRtwSA6!7aKM7z&WUDNe05%Xt{xW|)?K}-XLqVg#|3Bk z9M7Q!H&NT1lI)#RovWh&c`BFschII4%i^ulwbgX%jwvyNSu3e2IkQ6+Q82T^qP6!t zjqXj!Y_~HVEEt+Jo1L*^Uim2BG!{V;iz@4e+w>wH+w4=P zh;I_fZ*o0#Q_ac->g6@63p%5^#Z0x}>Ih=Tf^_$Y+C}SR@`$42L59a+n#MTYkmJJDcQ!>FUMp7#;WRiq_+j#xI0td6ac$27QYnSTK=yPBZ zCeUT_{Xrk`FF1q3?Wt~{w&}uAQtqh;>VR4{kwhVzaiP?plIv9}4O)<${Fjt6ZSjqbTs-xs$RMzPQ9o-U*bsAY;o;q2-}~S`1k>{M#y# zpw@6gYiX?XG|wKIp)}Q7#0{a^>im-Lxt%QT_B};a^{3K=Br|S6^>4SD*^{}w&HC1p7j@K51X_^uIV$#W5 z1_*ZdzrFO>J);WQ+dk_mQZsn@HT8Kjd|9|JZ94sz6Vwd6nH$~iZ7sRj?-oka3+*tf zQDvh@MTl&+neT!SiZnnu!QmLq?B`QQU=c#}7aI`v?a?#V0#=7``+1&f$4q}wOEVtt z8@{xzML%s!)Z*pP&8&Dmimx|o4|@LM5hlD3PG&CI>o1Ys$my#x*>E{Poo-bC{6`9fV-?h)#^Uph?=>&*E%d$qqd_G~g&kjLfIugSkVL4U05+@XmJ+;l)&lJ* zVRCj3M&7{WOeo>-kbhBzJIHvWzZ`iDngn}?RD;>+8lmt(rT>#c-)L%k(+*Rml{o(d zETe6*EBWmRSTS;`=VfKy?|6oX;k|LIbuyWA^9gvst4JH^Ghs!q4wfnO> z+B<=I0}ZM_=0T5EPo;`iW}6+Ge%~VCNcx=;V7$Yl0sho?BB_~f}+pw{O33Kq-zc2zQx$pdnagqu3&_-jE>a>DY4jmiDw7Ts=sygA{F7Mjs(d({!5=MGgZ$3{(`r%=ZyElNFD2*=FIk7^oR=Is)h}0SA!IGpqL?w4A?t9xF_$4M3*bN9BnCk74b%$s zmJY~C{>G=NPbv<;UM|)`b)ea*qzi)>7+?o_(q_Or*2uzRz^MPseJ#-iV26b+T`Lf& zR9ZHIBAxiN)%5jO`fndA4m?pG{Yg-CB(~mQaFWrz^|w)uwBKH~p$~!K9Nl!NF{!l; zf;?i0@!Xq3sfljPWTlY~ZM%x>xJarukD47Cdg1`1RUGTI8lB_%!_)26z?GM2GHDy;3s1K#@ev}xa1;!evDhdD^@Qe!!O&~CYn{$ zFI%qOMbKJ#f9@6FOZDTcKkg=|W&j()wOi7CnUl>P0ZmMQaDK1$k?3J**UBGvBU}B| z4lmL}0?x1kA^{ct!+isTY5~A0UCSul%hIYx>z1;%4!|NCZWQP4Wzqf>YN`=dC(BxuOMNGK)Knjc zDzXBkn_Muov3X;Mzcf#~+%E6l*dt(UL6n6@f`@kqsyxLXz`A>iS_7sp5W2gjUgQuL zgeVzd4~XW7i(7VOP`jd5DT}Xz0hdpE>7FBsGSz^8i*rrpZh8I1wtV3zQ8oo*{P8wX zoB_H0qd>+)%wY9HkgMNpRW3FL%l}kZt*qB+WEjnvJtK6=QY^%zLK)x*fEEKcwnCtw##Z1d$v6xTJW+v7E8VvBV2Q}#`j=@c&?IWybs$}Ycjyy+S@ ziZfx?U4vdQXHlXxV66YJ^_;LO3Yt(uQhWU-2a51rS;4|C)9=ITFdU{RV2DkOo#acQ zUly5fU=kN486(=G*yQ>WkQ`9X+3(zab$&j`8&5PhCuXe7>-PnpEQq48$PG~954cqG zirj2`VQVw4OXJnQ19G3+PdFrwNEs`k;*sVtyi>ntkJ$K7q2iI%X?g*A%^ylpgJ`fF zrc~;T_gg<^4Xr6UqA=`2-mt^aWc*dV$I;LmHQ)4w^`BDKF5sXQ#~XSwlcOhwsHDrC=F7!w8BzG{gPpLVoNaBSv+fI(gcHa##U&lO{Afw zKIFHDFgMSg1+^P~B1+qzG`g~v?1;GspSh>FfeZw|2MG)DUnEkF0J!@FxDWR21~CX1 zxC;gjtl>huy5(q69F|qQF7%x3Im2D^zI7AH`!aLK3RpQ5hgsRLjJbcBu+)rcHL`^1 zlB?UiV#cM7)h846!+1aTNOKA6vzdb_ZRH<|!aSct>ysu}V1OAnGAk7n!LDaG8k|_9 z3)F`ptW~<4vm>#I{!N=FqP%LbXQt*?2mXb~&o78z16&0DRK8lWk1D{X?G)uNnTw2{ z=<*zs)_I-SWF2|mUgjE8w<2~7l$MDwO}VDgK3m4Y=VghWch zLFV7CWb3CS5k`|eOu~fcbLV;ypAz|6BRn!eL6yAGqTmRV<+?Tj;qbk9&->$2^M|nP zdh3SSB-U`@1UL=Z6mR3*zNTQH!*b~`HRfIb3LZpe!Q`}=zwR&8(Jj=0dQE3+Tq7GU zo{aCy&>7V^hTRKP92z}}KRvYx>NZ6|b>)g7wGoh)glMQbT~RDV3fR*Z%CF-68;&o( z0FHJ0?C6QQAOM_}eHI)XwJO4}z~~M8kZAi&el?a9H_I*@%>Z2TdmS80qC1Vungbqe1^b?8u-n}5 z5Fwt)w#&N;s^+Cl;FqH828LLE#;ytFO#YOd>yTh>dmC=+*Yk#HA4z2>*-ZIP+ zCokD!pn*9pb?sah*M`s%7+;Qh84g-8;8DxQk=GPq;ebb`8qC5d?y;$hF{51F1MycBj+_>ld*)s3(2*cDuzq2_r3yJV z)YDI)cVsg9fbzk6awXFB7y)r?;lE4*ir|#CX5L|gOpAn}Ou{5`D>SC#dLv90#ku4- zOBKR#SXw1SMhMEFC2|uLw-ea!6w~ORwBL1JIA1wpUzfXVF%-DE52eRcg{YD_HDg2Uuw6=UO1;0ic1uQnXlLd^X>PJE6_7_A(e2FLslun!zJ?0{kV&6 zotgHirm$c@J%nhI85!o2wTk;tV>aJbHB#vgb3kzMusIV%?*f}4W`rrcHzk5{@$5%C z*r`W0Uf`cQ`hiCX!CP{TTMUgmc9wl8EkD}1m>M#F+fvjW1)S~z5ii+@yI<6OF^$l? z@=!j-=sx;l-{L3xsv0rAbD$r?Gq0T1r1|{i`BdbMF#=A1lrT%caf&fL(wRJxojkHp z=OUD3Z{!HOM5SLCRU07mF;89%icLac8JSscDX4%C+gYF(-JHoU%4a2L_ZXZQsH<}~ zW`{WNMOZz&&Kai03gkldXGu(Ja8QYbyPVo>?HC$AmO-Xd>YFl|p@KzoBh1)du$4qK z%Y2M=8jFnQ(oGAT=_5;$=ec&;jQbQ6R?j&Xo~5knI0vUCw}piUjb=IhN1_Ded%Vqh zZ*XNLI!!;G@b5Q5s-HGS66SeueBRxjEciTa@Y+Xh@iY!wVqAUdy@j4Dc35;a-}Gp$ zAJTV7n0o)tQKfv_K}(WSGQH7LWpMd1x++^txSZ=9b>kC+V^HNFC$l!WMIIaOJj7IL z%VSWn1gPvhQPurbG0k~QZ-V5;;yRybYFZRPyZ!cP52PukZj6Iomts|fi@IMiemXmoyM0t{ozL)OZ~i0u zA-oeU`RDt;QXHnJy*~Y)^hWx}GUC4*X8%i=6aPOuwNVPzw)1kxJ~Y(GYAyJlhV6CI zz5H{|58A9H`W8g^n)^^D@4r!7YiWv@8(*FjKTgqlUigt#5vBjpusLW8qKb&Kvi7)c zd(M2|n&IZ|`TlqT(Sv~_kh3Qbm#2cF#o~uezrFA8z#c-WB%3V&H&jk#)~}{$E#Bn_ z&~iU$g{~ZhuUy2*Naz`XzkiZu?HZ@kEN7?gI$D)3(OJsDyun3vDF^F3u2P&2HqY25 z8PIYuQ>m81)|APz8<8xYYT>M+u;pbfN6i|Pl$oj>7ui65@5`eq#Sp<&?;NtOIlW^E z&}g*Y-mZsUIYOR&Y)?M6HH>|^OA`i1Rcf+i_mr~8ZDf@E01Xx#$y3LD5y<{gyfAaL_!Y| zY<}-zhL`KCGV$EoNC?bS1|~k?iceYN3GP#(2f%1_5DWMOgs|L;PD$9OL%@GR!H)pY z<;b(e760p&REgX`yb9_J39%9Q%uqWJHqR@Vz}Jt;o7)6D%&OTHh}k`|{ZA2~MS>If z*aR=aHi{k46L?&FGOv(Q=uXkEd(ptJj}~8=TS$5p{5w#F%5z2O=RHs*`thz%hN` zw0m|T=-1GDG+xYsTdkadjJ2Yd-qM#_gs0uO{S1%et*n6xmk6BCN&7xt1;}u_{PbRo zf$nZ%*pEpDw7AK4V(>A+a(>bVewnhrg;2&NLJP7XWrbI~5(0N-u>?j}v91s}hG zD#Q!j6Q=*53r!h(`mqUBo8*PqFX8`?8lEx!5E!N@FC`RnI?W=X))y>4$PQQZ7KU3Y_rUIEoK>&HZ4Ql78;l_H9eguB2Xp{Zz&QI zxO@Dv?o=VDzwoVJ!Hj=oZfrSX&HXiHWrZXj)v+p-*3 z7<8pC4z)C#N!l(cB2r`=n7Dekm^-E6T>Z6Nj7Vl}ZqBJ0T1cF<9Me|MG)&OLKu6x% zARcCiH5XuRKPT_8aiUI7X-N|7=G(wO#1xSxlxsdCgkYYar#SmCcWhcG%%eKD8!h}R z#N7fcVnNnAp?Z$`gdtKbSvtCbLZiG;Y!}@^D%d4MnZIK9lAkWIVMgpvB~3(ik~UWT z_LOM8$Xab}jnOG4DN!66Yfz#@tns_PRW5z8ead=WLR*qfN8+G3PQ{tfIhoF?H5HFV z0-SoqBVI#G+Okujjl{6E2bq+Q>u0?H~dEbS%L39ODl}Fhqa`x7y`bO-kib2Q+h*`2Fyu zz^h1m1AAE+&O|HWV_T?NQE@ZF5OQH$++Djr>n#|D zuhK2)X5sFPn{=PTNE(GQak&PGHaWae;V=eAP@eG7n77hviu6KAGh47N2Z@R&|ZICty3f&Rk z@|CR?lhUF>o5JYV2n~#gEf^4dadJ=~N1m1B2qZ)O;79}pb!-&3+p2cZHFkP4LmuJ= zsM!rR#+OXl; z?BnJmck~TKVl73<5M7!r4Z-G|?07>qP(PUHvpA`SaI*3y4SRhN>DvW7>v~USO{WAs zx&9zZ<3_U;OvXYX1~BIm;(Am#@?7_-daoB6JXXymrHE$jPJd|2_?EJ;$mMnQTQ#zI zfh{096R`)%)8XkMd6$FysJP~`=;#+{#1Y1Vf---dDI+A>Iu3&fW%w=&QBlAJ{>3O4 z2vk|lrjn8J_qv15Y)H>w-uALNRG+nP!U~$@E{Bmi`8Iq}+Jp)mIsW1jo0K@nln|7b z0ND+S441%=8=-7eS5dwO1GI(LLEc}8JV1EE5$V&s#0SD4EypC5*;Ep^Cy-z1b?J-L zTHeq)Zfqfz7G0mQ7Pvtnytb&_pSL$heqdGDBk|B`{s0)tu}f3X_EgP6Sra&LqDGE^{iMO_sYE&c06htq= zRzxW~N))yi3S_wm`ztAc5owooZ6KbIpThV3D z*VUx0c*pC>c>f@EuFiU1F0E&>DdIbFVevE2kX}%nvj!w{rLAX4Oa+=T8!-paaKmL# z9Bmf$ImesHI$r9o#_c?VZ(-bOUE9w@Ej5bdpRN}7cUKnJqK zHwRYc8=M;igS3m}%KQ_7WM?OJQ8AL&9os;J%N(5;1$(bXDGv#MqAk+}03il^ zP_>fpQ6ut%?(ZLK=<=(`Pn^`ih_t{IJye<@t?q1@VN#6Plny}lpfcL~e7fH)djybb zBAqS-?xDaxu2Y%XlS{vV}rLGJY_|SC}966~mMYQ`2!iG)A3~hQ_wKy8*?QrtK!$!hwMIlx6`%ym})pCgu zS?Q{uwV*eAO?A>oAhBLTi*=3YOqy!QqAII^z+nlq*X}xqT)@T=(++QoWpL1 z$z`=rTyD&tgG&^>*-Kp7?eyzi+8N)%U!nARvPnSU9BJN`S}rlG2)2fos4i&aj0kB3 zkW~v)cmGkm6;5uuNGo8ao3<&8=oWh48O)+}bY^_AyW!akPqD|+8M$&pa)p1TnGmcv zO~^_Omes6?KxfLSldw*2`&Q3>8N0IfiuUB$E8v%PIC6`xptLJGI;q&)bqiYroUZEk zVv?O*sVjWD(~Gd)RJ2A@9dkPQfHA;$7=|^e(+jvVsiV9^qU5c@D|x1V)Wmx<$J>)N z?NGNV@}vQKs@>lSus=11-Hb?6YQ}v|xaU{k89ZJvEnDY{Q;GkwNSAG_QDLRh#4(l- z_l;W0AFdPCo!~hj-UmuwRmd^vo|dP(Mm`@eCl)xipj47{@j%D5eJ!uxXg)j-*y?_I zxBwX5rO*81*NLff1}T3AzL)p^F!l{FvUhKqZR56W+qP}nwr$(CZQHi(?%TF;Z*PB@ znVtR5Y<8!TN-C99QYU%O?>z5$AK2B^2m8NCozizNR$w|oSB?}9STe*6w3?%RHT3Qp z*@=f-U;KLZ4TL?HSoJR(|DfMmTCx_HYhNLdJ^-s4(pD?)fWcAdmkc*j1CJnZNg`6t zQP~`~Q0MTT9aOne0+%sl-@V%A4)G>#d!nON{LmX0g6M$w+B?A?#@^k1APH$XE$Ob( zZJWP#%#dr7^-pBP!-eM!#PFiAM&pbK~bt_+JsQiGi`aqlu}BqlvAN$$zpp8K4IF|6y-Bvw*>@M}&m5NX_Cy zp%$J&vSu-m5_iSN;LZ*LyOTSNOb)(Je|x8U%&q+a#1|mO2N4u>Z(I|7EGDKEYRKphr(bGKZDHw{QGEYw6^FnV)-r0>P?_X#4SoYo zN@48SE+e^2rT;S*ewsT!;MS>oN5em7=HL5Tus6RqUp5lN_MagCpCzJ6Z{Ga*X-4^f z!lhXM-%FHtw6HO7^icelh5sA+Pf^j5LlQveS=vf9p-`sE8MqP?+=_)Fk(FQALRFf4}mr7&vODrM2eub;Hj;d46u-pjG{_s{Din?FOh z>O!~!O6C`{q2P!Rx8gmzobr>A;(#*x5+yS6P`bjM@&Hrle6;Se&BdFMkQPjUhmjaP zbJcr;P!C__l&TTXzFQOd&N`(7e>9COH_f+&NB4&S0lmOY$pXTgc5R7b2SZG z)L{0U(-a~yYwjdwi0}aU@8}%qLRR;E=}2OsAls71FaByDXX0KXh%M1g)@Q@m0vguj z%_DH`gwql2LT;(__&4Q44+?74mhRLIBn>VKigW^`N-e@09oy?vDgG=PCUOpgx<&N? z>Yz@7mq*XkvXGj6P@!Yz?hF0hQErM{>M|SKwCaGRh~s$^A`&KwN3B8AcIL=ml{VDV zDNIIZ(JO*-s)@Fd-TV}@4E_asS;8|MF(f52-g#meo^-K9pcX~OrXz{8J&T%H^n_J) z1&|1^LuZQgbq0V@P^rvMhpC}y?j!RmJww=SPgfR_0YECEjN?X|bX#EtPnEbvXS{fY z`XL5)i7aN}dI!=Np0t#BLQ!jZ#&VpLr<@8LR@JxCq*nA~Zp8ugcI_t6NdyR8mDgZK z&uCZCTrDbTGBgYyXW$Y+-kAGIWwN4Hr3)Y}$DANxaR*$*vG6ocDixrK5c*(iB zzeKo-#klNuNZM}^-@f*!&f=Mvv_hU#;&aX%6Cx&8#qPfE{L$vNTd~-*?-)g-BChZG z!Vv}VWpCBU1MDD{DKs3$IVS5uvuV)*_jyjlL=8%o*0%*@32|F)lUR5!f-;RnblaawSeG$%I- zRe&}&gH)0u@=ux;?U-8?vhi0_XDLL)BChv@~W!e7dyUSli|!C77#-Kd=h`M z0SFw2IoQ}71zk{GH2B*E9Gl*q^GAXyM)_+9kac5B?;a{${EnXbh@1-h$RK!)b9M+4 zSN7qqFggueJz5Dadlcj4jVHH%Ru?t@HJj0z8>(*L>2W;$XLa$k zQ)gsLppAI6{Y2?ontUOP;y`2my9|Po4AJOai@TjV4yumO@!e79lc36g@NhszNL%Io!M?gIoa3D&U|UOs zg}M=zO{bbpTX_>^p*DA_q?hOzIRT{ILucH%KX0X|3gU)O46=luQ)%1I76uU5r}^ z^}L!HN=i_VRrnZ+;y$@&TxihNuB;#r;sRfv|S!BO*|| zqsZtgDBb}$(7Z#;XF=bo#=SXY?Xgp+)~3xRbG7-98K};Nq{x&CA1mt8SbN|*MZNL% zf_+lghdCNhy~EbPy1SM@yE_^Y#b%Ulc=26CROGgJ2eH9PiyITjT=0FUsE%+lDyQ)@ zxaf9QZjSRb`Z10a;Pvu@?=F9HIybF^xnDuqM^9!am`v4QtXVh#EMGM>&V+9po!DYP2k+!0HO*8X?Fw3&9y2uaVf! z9o*@c`N@jwc}rJGUp8zp#Z;DA=kH{EtSso$RnN!NcsBRL`i;IVvVDE{8Ca{U2T1yM zfOw$B&hMRiRfZTk*lLS^nm|~j`JPmUxbk*S;?q;iO;P^*k$x4x>dAA66MFap9AOGT zgjAFFfNu@RTy&UzoAH4+0nT+8cQbJN2KbC4zs1im%Aa5jh(!E?8`)uwophM)j;g$! z$b!|yOye(gfGB||!bG4B7Dz8-b_4MpZpbvfOsZPqd1vVV(2N>`EJ$n4>*o}FCziN8 z%gNTt%Y96+4njE)r7DzRb`&nE2;WphP*D`HOsl|`chONY{L4UR2^T$U8x zf_-8TBP@5x$u(WI$nD=oRLnFRs@?kjdyUbec+>(l2PZcm`|8IwJ8x)4Q*N8sWzmYF z1@WY9nN+iGO47*!x+kljbVpM97kL=<5>NG}a+LmC*0Y3B%6Immme^%6B43Hfq%Wb_ zBgL`xHQHdnJU0kBHRxwRxdb=45Fl%HUhCZY6U8w7>f8W;91&MD_!9MSO@~(Rb|;a$ z$zxPJHgVk>HUfMjofl&y(bdJjqOGBF1jN>rWP&xc=&&rOuK|g6OIPLIT79T9V$GSO zWgo+6&!f|gIxUA{M{zETTDL`sF>XloQGQhHJVrvo`yqLgb$V9dB|w?FbewRlW!}g9 zOK8`B=LI@hLC!+*S9U)UtMuRbWe`k{ChEET91E9knaKqjxLHrFcrl_ zftDEv5CQqz>o3zjgOS0P8L7w}4oP!vl_0n3o5s*aF! z1luI-I5%00yng;E*Tj3SGoOONFd6-*Ve-Ap+WYzqp5x&B&r5X7iS5=zsGP}^^mW_o zrsLF2*X!obL*5)Ocs+RDcss^+R8BgQka8et5m?y>At?c^&?GesBqWBTsez>UWI1@6 z0RaipX?1!|(p`GAs69L?h>tdm9K-+_2{%a*Xc-ANkr7oc%8(OcZdwB@9YhKp)JZD= z9i%jE_5LA5+FfI?8gcg|0GNsLS_cQVQj$cjv3aI)kpeEHBMYO!1Bb06&oo9RnKVsp zCbVoXGXgdbBXYK>ITke5{cd}KSj@P!UBxy)5cePwDSQ=b9DOsGQfJA?dvfZssgbw% z8mv^yk98+7Yg~@vTxAb~O56+TY&@9VI3G7Idcy!WlZUoPY51P9dVKJAJ|Fs196j^z z;i!z<41YiJGk6)s<(oC<8BF8yn{Ad6c_wS&@itha%vs=yH)=LA6~?5eXbb}u){@Lj zb+ZhX)oxK&uNGtS(%h4yG8-1MamFch4tid%$S|7F)L9)8z{%@)BgJGbKo;4`O!1$G z@i-$3PbLz65^=YzW)L^R(x7Fy7UHhHx}G|?byJ)hCu71EoI0+S`qmr^*20mLlcdcUT zv$<$8V`~Wv{R!j5P$+H#kInR4ly-u1Z6>#b|Dpy<>fwSS*+=!osM#x`Z=zNjcF_Mn%x zIuVyjiKH!)C%t6lyOKU>2UYgp8+frMUSZgbil*s!%fUrik|cI0U=;00ZWQe}JWwx% zVuM*QLMcwoMuYbx9A5UH7eGKSG@w3b2J3BL?eev|IqX`KSLA1ConduiZW?CZDZ;ljwaSxXb6#A1U17Z>iexop&PO(Qh<^h61GX)E#nC4_;I0T5)XAn(B{* z7`%o5n58t;wzaXpHU#bz;=YEb+tSnpV44#+c5v0$pbYaM(lTy0j(&y|d~(_nPWqnA zZ^6EIew-*rBxOA0e~vJYMms$TDklBduH;EnFj#udj9hb+1)iNImXZ0iA{8gq55EA(3)bQ-MqBt1(j4Xo@%Z^eanRN*K!S!75k=;o35;tL&FF=r^>- zJ(bFV9dg{>J^f$*NInNJKZ20HD9R7+(mVWxwei;@jlFMzoE2fZ_IKSYvmWx`o1Ma6 z*t@Gy#t}K3WpmGk#v`+wWv9(chPTbN6W?1C!1SI!iOl5IIIN72IMYG4q(=TL19KM+ z(KTZ*R{jI5h5;-azMqV}CVxqcsORmGkguqc)Hm}TSP3Z~@7 zfyTO`YnGO6ZGTl(Mk&K0lZ-|sxrd((kz|X7n{w_&+l&^G;K=(|6f-QXNe*mgyT-Bi z19_~BQ1YbDv`vC?Irg71w#qayZ=yBm9CN_#5pqIJQ!1cZY`2GRezmF<^TcGKD$o#S zjK+$Pr#Kae)89=yGV7Cm@QjYEjK?9)Ew?N z4uxm}f1xykJds$l8e#8D_nSV`y&p#9|0FmT!T+K0<@fV{nzgPM*15lNp85&TAV=Z+lKf99%n}ajOo@Rt$Hl9C#IoWiuM}1Sk-}v3UI2cIdu>l@cx`n46L$E|#Edyc)F1 z*e&^nYE5ZhmL`g%?|17Gcd6rV4=Rkd#UKL$A<-Oq<0@!yn0Fo*%rI{u^N|MMNRvM} zw2|pf4B^>P+`H}e49A831mKS_E8i>w@*i%L6z10R6Vg4i0Z=;)LVf-riLC-E5?lek zKBpZvse=%unGJD~{C z7!QP_kY=Txa)X+tKzN>vR>>@^hdKkDA_0s2G}xEesxOBcQ>;vWFnw9GuWwB0%=bjQ z3bRP2N6?}SZ)pG7!~di19B*kG2LDla79s)w(EtC-LDIn0K+Vy>-u^$#&vVqgoRQUj zhT%6?v!+bH5E1n$=0Sn1bwS7#G3k@dl2U^ch0Vhul6E8*>oX#ny0|T=BFmdmsg^ed zZLX0tMM_xV1vSezQzh|UDr#CcRWBd?;>Mhs|K41YZpfti=Vnj$yngn6_TahEeVtBg z06^cn@kKgF!ByH<;pq+YHhd-q(tRFC1inJwseQ5g`|vuyIgs>T1d*)PMf_YhvWIUu zI&k$8nBV-$6Y6*)y-~iS;e&Ee$BsR=cT0Qo)*9FWdcffWY8Tt?VnY*ikoLY&y3=tu z@fEo9$J-kU5)2AM=B8ffE!uu`=#-x;vE|8;A!65Gr5+(U$H zxqLJ{JsWJCKz!qshECHP*lEK`IE6@~$1z>Fa?`2?X8{}7o* zUwJ+Foi5;_npujn7Az4vIiwwWE1%h=bJj)c3~5I_RVac-r_arnWj%{ zkBr=%jGf4kw#`tmBJ&-lT9h(bS>~07I#d0JU>U@-c-8nNUDMg6(QkSJHJF-5Fd>%B>flJ4BdpeF!*-SK&~{XBDUo_dI4E8B zw0}4kLnwWT;`>IZpmvq+d40S>B3*HHNgU ziWGWuqH3GBka9XP=oN}uA;Z!WXXj$t z2z_$U;KFd%x@~rih)9ruzh9L|&ruyVcluq8w5xAEtc}BC)-$o0XfK26)}me7*Ik$? zZR#{aqUk59b|9j+Z7F@?b-un}b5UQjGe|#npmEB55NRO##Dld-E2uzqsFc-HTgq@; z(JH^isx2O5(o8tTb?4`SWI&3yIr3FPU=*0Hwk`9kXi|eC1K)t;mA3jI!^h{$8>d^_ zN?vOG8N?bt44Yq5YZJVpxf;B7u~E0(3qK96e`y=s4jx(1+vUWpYDemr(BoqWot!Qa zO~nH!SN9nC%`3qR1}O=Ag~MHLKiui%#ZWtit>5HJ;fgD!+rJGDN&8Di5Yg)GuflPp z&|k>65zT#F<&tDqA%tTj9e30am0tf_Zc~{2dX9Zqav$=_2NDXPUSDZPBPY%_2SC04 zrJ#wxyrwKi{#04-Mpu9UQ->-%C6cFu$j%2}=_Gl*g}8IX7R~V)n23kk>O`EIhx{*H zkT?RnU#v?ZGi1CT9nRrv7Sk64S7hg!Y_|JtF@1ymc*2afMP7Ddyf^*K*n=uxpsHb9 z4n%N8pknhOUF@bezt3^GgS{NGCAmY4yhXO-)b0Ux2ZFHs!tNMw2l(#FljFvUIoN4w zMvoRTxdWb)9hsCLIQe^5U~UYSAMH4hAF4*dBp(zmB&>yj{XA!nyNVHHq=OA7-(Xl3 z_B_0MtbfarzUB{!jP^OO7_cEsE%P(I4{i9QW|LSp0%~O_(|X71yFfVN5G1;X{T!18 ziDVH~VZNC@lM{Rg*mc0%=j3&ykcxzf9F+*Gk@O+Zq*M?N4l^jyli5!k9DyorLzaq( z*7906gv}y>H`$wt%h!XydIzG70qwV^km0S78>sPM+4b^cG9(f`+|-1q&rng z;`Vp{1`Jk5AptGvA*VX^3wXP$rG7#AdNTCozY#j&fFdszGBdROahH<4&KY&@rG~Z- zT`!B^iP}&WM6XYeoF4VQ>X)SyNePwS2q)*nQDWl+bW9ktOoyq>l8>@TX8x_0jBk83 zM_(!lH-4(X;SVabNrx@;$xF?N7T?8CB3*hia}y~#<|)_ttQKR^LuT@)MRw6d^Beo& zj+@3WU>z-@r{CCnqCuC~PHEB;A^wlh>MdU5kH@=b!zZ`(&w%*>!S~nSLob?>Fh9g1 z`yEA9vXwLx>YI@=;mc0=5R)6ii_YTOYVp*zCax7T&qy8`jJL;eNcT>MXNprVOeqm8 zCwV}+>uyu_tf~s&J50Gcr6{)a1-r)WJwsr3tS0q-=zH4KyOtj0+XnaDF-p`YPjCJ` z?{USi@rEAKil6Kxt$2IIwGqVa6Lsn)emAF6(r?czgcHeG64?N+aU<@RhuXAcHm*#c zfOkOCjHq5-@eJPCsG#GlN4x<(9ZdqKy82STRgj(JwGHYF$p6Ak9?D)uZ7T2Vy zvlhs7lG=2ZPKEhizW#-`x%I(}5he1V>ceBQ+wHpj@ty9uCx26kj&-GU!3YQyY zSe6^7cp)tCY%J{EA(M}9u*mG~-Wp==;QbeGWL(IdgLfcap7LGAuZug2-M>I_yhB;M zSc9kbnggfre+ZBK1P0K8%xAjTX#|k7Aq#WNHt$OSdjB!JI09|;Na*oV8CU~)^Zb?b zCJL};oNw1qX4f?0hV0E2o_5D5=NC8ASGNy7{S+q99f(Kq=I|@Xozp+BzOM;tmV&)* zKal@Ay@2eu(eFT#{84EoIaso0XH7Zi;G30Lt0oE?7Zo{3kk}k@n9tE8RY!b_jHuPG z?f&H6`1vD@Ax1Gc=~S9?Q8%cpg9YiDoc&gDPNv&Ws1X4|x7 zOcX=f$?Pm%uuJ1tMf5~GOh76_tKGBap%rq*Nlu;@0yeY-PG73pQq$%XL4DT~mD7m= z1z~jpxgy%jOh8&hC&ZqVke7N3aw(R!T1W<(nWpuj;&K|(THQ`+;he~A)6u5s=b!6x zQY4yUpdcft*b8b(p4wAq${<;#ji#gG7fhm?_<*6(OOxi<6d0|Y^pRfdN}zg;$`q|D z)D3$&17;nFC?g1C5}-gBlEmUg;bk}MQ7fGp5(@e&MelA>6*6tvq{Mj(H1k)Q(I!vH zsSWK{B8vN^gf3_%(&Lh5~Xp|;rTttgFxLe`-T?G@&Cod~f3GMb2B)5yODY_2Y%?E@lxtriK`vsO;-M8n;y1~Q2DVl9z$^C>}vD=s^IY7n3 zn`w1KUBi?e0)(nW8%m3yj;TZ+si3?b0iuZg=vFLzwS{E|NKn%5{R3H0>I`%SBalFurL5UJ7e`c*W#KpH<+r^SiV|oY`wLwipjMc)By`eyJX{E$2Qw zzEeWd6;~UpL#N%UIiS6izv1kf0?I*I_j($leCdwh-HD-m*5?6#C-FahSOrY{(HPKE z?hfiptsv1V;4?+6>N~h4kwmj>*to9R7r=Lfg{sYRp?0i+^Xu{9nQ?~y#}8lTh-wp(ZUdZ5L>WN#N!F47x1Glmub(fPw`Z~`fZkHdm{~d$gjv-039rbxe)84WP@VTGX zI$#d>*W3T`S_jR49nCx=pM8K2e)$iV3*0e8Tk)(iUvboS4MuEm|T+1g(>{pk4A6 z-{fVF=r^8NR_=qtO#`pW5yCy`FFiilYMzf4E+@??mY{~f7s5Q4!=lYm zVAcpSv?Z+@Hy3A(?$NYJ4GjM9Ke}43oA_k^%E$QQ5UE?*$&Vx1PKq`3lXXXE1|6QVA%y(dO7hAIYYKL(MKili-K81e!iYP zna`hDJ)G%NHcP$;3hGw3`O%eV}^%JskG^$Mm~)` zpoTF*J*7Cp#yfr&q7p?>w&? zj#r+S4W3t^^x{fwb$^)=^8tA5w*qKZYu5v@b|q0?>Je15sIKB?B#RxInwrH;QjtDq z@ZuI7O|D{>xMo+$%QD3;=}0df^q@~`c3kp-KkodI;5zOQd}*sga9@I|JcJ`firl0l zbS3WF0c6_cBcx=$B+qpwcM==V%88z zpX;3WlC$q7-;kdF?Etwwpo9Bb3FxC(_b!MR6uFe#-)gdIIxLW$%G+A+}M zMp!|aM7{JW$lqJ57~3KOgfpi(sK?DgdKfYEls;(BzGl+=ldxO5E8fn9cxEYScN49o zZ>`Yczom{v|YPfa* z%KfLHlm*LqR?v&PTztEZg)tP;OBzT5*U&PlJ+i3jl-^R>qJtytQ^ChDZaS*V<-NvX zuXm3(bnpqnv@3 zPJ&D^9ZF}#+@4T2ire9^%30i3mq&YeNv}0Ty`LmX4j>QsbR}iaM@>uK*alW)O#? za7*s3Crvh{5=$?nM;a%WX~tts8!4#lWp@1ZX5n;Z-H9nuZcteXkxqps;LlNj*%#YyNgDhxl}(aeSzJ2#RFYQP^l zsX&x{& zq1Dk}X5~UU%35(+lbS4|WmPFW?G(B=3_$!&k^mM)xuTpwX$Ch5Es@Od2)4VLb*UVuZb2aB;Mn*#n7Y zs?Q2~cu<2!kB?Sr= z@2roHk0*QoJc8%`z zr-iPpf}ZVMyF)+L2IeeVgF3u~fej*NNYWP>_^#-|V~f>6vOU0&Pb!dlCe z0oWG`7GfZ8u2b=Ye?|vdtBF5NV(KL>nGrLsGMr(s4COP7^^bcZujK|XZSY0)sOg`= zpIM^&Ti)3U2@J`ur+R?t@5K(8d+$} zns+d05_pB$1bxz4HVlk40@9|wD%=8-j|QQ~gwdnI8*#f9AjIjz;S&8G>v(~5#<+wH zz7qnEUWE#3XdWg76_r}wn4f7iovq1dQFJ{whyq+T=856aP?EMD0=-8yO7M5WILs}c zEQ39fFc>L)D6Vhf82##JR8qGP;-hpMFxZ3WvS}izA5ZtD6;iLDkd`Q&Ku8oko)vil zLg-k=zDNL~ zQr&=~f7lHdY!UJNLL(NdLjF+b0R~6e_l=eaa>FuvWu0<6i@0t4)(xF3g-Ky}v}RQ* z;kQOj!BxsjQXaLnxO+O2 zUm;=H)Ln()Fw`YlgbLXT1(SzqfgLzq)B2l}J=Hm!1zW32tVqQeqh^pmLr&#(*~08r)WYl(1LmF} zY0#q#*h&S}`9`eJR=4gb;tMtmqeXBieAR-mx=b**34UekFO{rt$@fn~xI#-L1xMN# zbDS~SZ9n0Yj&RHH^3?E)mx!~%9{f&n@P!f8^-MF))pBG)rghW)2?&hJTzgDLY%^uu zUq@DU@b_iJYU{#KT!!;+P876EAH2vZJmXf2t1+5-WPy@RpWDP}5WtVBO z_;sqrcxv&Ee<^GM5#s zxe!j$43w~>C@oi_Ia*_6@JX>l8&I=2u&Te4X}POu)4nzOP%cQfB#SM5#a^;JXx<*p za>eqTQJ8t5{G?S@-H<7#l}qWtn{h5IJ7Ze9cFT7rGo@~-0>thT(PUj>*kL+X({{wB z;!Km)a@eQGM80tTSj#}Kn++6mDbRRlkUCGV>RhPwtXHmKE|(?HhrjKUZ+X0D8hv7C zBh|u9tLLso(;HfoV14eFi1i*azaLti1fDRmbj9OqBgpdgLH(nFCEx7usuiQf&~@`+ zH$V~7f#t@h6T?ok6JutFcrM z$Yz2sH|wGv5Wab$wQYQd={7G?ubx`~E1HVgpZ!9N!NHU?o3JSPU_o0=c{QdTv|yzY zV$Arv5yfR~52mJ}(jNRbihtOLxsh!s7oN!lkf=Z1;`^#WW@k8=GXv*x30PBx@WF|Y zKsw4pawe>);noN#lLbkJgj8-GX!n{^%xMP=Q7awm2I(m$d)l!Nw8x(3ezzHH$}7sT z4~d7K$gWz_E6cGDjYr)#w#Q!Rmdx&4eQH#fygR(UuU4XiSJ8xvCZWE}Fs1(@y_*1PjYzq}uk<}%IdbJdYt_$G!!qAWf{law6o>@=$x8?=*&~1+EP3C|n2b}`+ zCBWxtJuh0(H}t8Gqzza7dO#YvmaI7^7RnBZ@^y)hdDEb`CtO6 zIUP>7Jg2)%ZoYp%{sQ+SZCe$^_Mlp#cb=FcwPm3**gxh59+;56E-TnM07OQX+L+MwBq;qmA6d8AtszA#?F~0NCYjPt!IY}Ks8DC^`!=9)>eFl z4|^OzPHcr&(GR`2H_94$*+x<))}>h4pE{<9!41%}(>AMAXqRgzB&KO%K~WV|%z!f` zjR>S;;UKG$1gL`s4KdSHFZJFQ#c=Urnt!bGS4DKe$bIYK37M4~kaMRc(3C8ahkhFl z8D;wB3&u%){ARe?x%`8>SQm>c10 zmh~_UjnCih57Lbfg$N2LD5)SpOu4{Dd2jRv*`M)@NC#5+G?4q8!L(-+ciP71`xmrd zLYrA(ID*@CVAcqV?9m-t?rbv&ESK@l8E!6}{;oRU)X{x6IKrZb%jgiHJAQ})xD2*? zT))|)YanR8pE}4Rr0yg4a=F8hoEl;vh+_{@2$xZMRePg#OR?Fw$-oWka#BITy;v*V z^epQ>xJ;J8crr-}W`kqn7)FRi?oKM9RLdEYS4EQLobzuYlKY37;&dfS+?%Tl!kkp! z1TdIa86qdRxOizvj`9>dQEmcQmFrB$&3Z49=1ZVFH$ z-r=A5;(=_E$wL5I;`vqZJKD5`>d^5B)6IfD_U2ch!Cnxj1?pkVR727owVo@Xo`Oep zE6sLs7?{b^_X|3h;Cb)t3gJv>ba>7})bz!^1%=)`lO}~-UXOAJsc`MNpC$MF(Dy?1 zrHAB(maoz3tHA<}N-OxfZb2`?)6(rwLudpIY}}!E;Q@=WA#BmgCwe>d zqh*C3QixZ|h1^+%wSNAkMKCu2UgGaK`tZ1O%D=&ZZ_ZH>^oZVniiZlTAmVI9RwTD$ z%WM{VG8;X(Qa9x8e7^DjL|f{~KRdx3kgoJ?6XHm2V9A}qCoJ?yn3ap&W}vjr%;Rf- z_Y#I`jUQbuPcb49mwu~5E>bmHzKi^!wOr9lsIt|!?_qB41yv^u>u&>j!vXY_1K}%P zq#(`j5oW|FOA;XA)f#CqHjQ24#3p){?^Rll!G_&Oej$4OKlnudTwK9oP_mZ)@QG4T z000>N=T8RN|DCm(^W(08e1h`r<27T8(j)<)Dj=mu4hTFzOr8~*s5(T9 zF*s;Sb~Q_=U(@pPU}>dgRa7HJ6Brl{0UeO4Xtk6|$%AZHMb5)r>As2^c{?*r+O;7Q z{>P~Aw&%6y$6>>_NsO1<9-?1k@LTNP9c-A1=|&{s|ePFXch4cJ!z!F=Nlso?@F4*g&`1tzRzApw3BiuMU`H|W5r&B4eVL@NK{dyGRDk*&5^hnS; z?SUF2?Y$u?ZsNVw@2lrSwzrz#Jr4(vzSlzo?m=YD(Ypuw*oOhUbk}4HF_JHd{v|{O zu9o!v^3IkEuognw;6W6DnR4WD$WTtgN`yE|Af+X_Dr)9xQBKN0QD)@x@@z4-ZJN+c zfyV3@%P@aMtO)ak5Cay}Bk);V@a%4c98WK+5yu)TY)hpGT;{Whb>>9<$Y~46 zk&Bh|0ufMQCP)(Q@|N=iSC&o*e%lBOQD6=H{i)@M=_)7@!BOsjs6Q6Bpe<)$G@bc9 zJe4DcDZtWm$jVFG+u4K4Xpz-Rn`z|@EYFr|CN>gD{#FIMwGC)O2sH$|81q^)ZEpV(J%8Dcd5VETQPg zEI@ERI13+tva^00rlBkq3S6U&Un;Yyjy;VxuC{1qA;8#}4zvIrE!ylYr!@Qh)gNpm zR((_? zKU-u@lCF-OXAWqf2x~#+S(z`&enn<}bN~}?)@EVgW)UUt985mVX zYmw&E>hj1k9e47z45Ar>9a~WDw(|v{B|3a#=9nd!P*smOsRGZvob$*)Qq)d9PHd|= z^A}stSHS43af0#agZnUk7)yvD!38EXAwo{9kY})Rrf!)S7o}#!sd{PopD>h`oE(Rs zPwA3CPj1Qg1v^GEnw}x>I0^RBeFyG>eJ1t%eV}Cu^*~KfDUXGE%>hE*^06euT*W(P z7|1ztchotFx2V9=2HgQ@cG?4x00xapsX-~AkuvD2KqPkA1#EOCP`?oe-#>Oxe`D(? z-oUG#8OQHIgND-(uNw_lECZd)$lXEfDBWRYVE!Zp(ic^ytNQF{lXlDE1Us<711CLz zsi-?bO_wNSF@iy)T;B`i(-rM4{YjG77|(**9b~b9)A$urnZ>?=+#Taa+%450^DNnd z3Ee`X6i4G5=XmJ|`aM{JxT|(&_a&D9WF##L`K@xt=Z$|L1gdAUrxRm^oL#7hDyZ*R zSsudaQ_}44d%dt);;ONA;%_FwZ)qDQwy(nFOwIDJq11Ls-l;j)K|QT|@v>c9O&d7T zCO))J@TdCeTv3tbWEfvlqEZNpY?snz1PeEh&aI|^P)AL8sSJ!>X-bZ0%XWb+b9;p> zEzh_ss&@p7cRG55a(e}`{80A*)3$q37Hl%TxjT5XNUN)yMF?@al>f3F zysRzXag$>@ny4z3DhOs)Y-%9K==^e=9`x zW;j^BgnV)6Vspa;Xg*!6!-XAgiq20Wo{;+V2mn&E@RjZL!V})d$EKQk8R)>P?Xd@+ zd>up@f4vGp9#4A_ghQVAOfbUrye;dJ)fT_ZhzD?Ba~$De7qT8BZU9~y=^;nqa;R;G zM?;viyriKPBhnYl6G1wko`+i8H4w}r;>jUxMx3$Fm_MBWYlHL&z>kB}k&ZVOOv?vt zgscgS#BN69o=t5H^ggQZ*bJX~kmIrtM4EpY6e7;r)0j-X6|&XA2P^?60=by-q*u(x zYJxx~u}3e$l7uI;Gx31;j*cbJuZFx5@`WGes5iW<5R-I!ejgc29I+ig1bi67rAB~U zLIW(6D|2_n7tZF5ywt2_V$q4D-vCxxlVvKkmSb?x_(E9XnqFBQYiXx@;1tkNm!r~R zjdOjuUGK+5b~YlmQDh@tQ*F=YlJ;F)7~($kuShez-(o-vha-`~m0m5VZZxE~j#FE2 z+$J9GvFbkoSEB8@o=SCaD75J>X%(yxZFsT?3Jv>7$gU?$(@ z;2&S8#`I>W=xvWJ&t4*fFAQ(IiSAU~djlbjFOPuCKF<=qi&WHW5TO*;Z?uaP$+S#> zLP}31mT41Lgjyq`PRtg}G)UlXCXw)sQcmRWCv4#IL^!Sqi$rTPycbAL@I84(jj1dw z*shI?IB``uo^eS*=|D{12!d(?(aopKXjybaeNK=|WO-WL_#Fh9y`+crNFVuiXI2>_ z#-Pg`nsJDZ8a}o_p35KRj+ix~)UL}Nvo*rBPMRxH=MFbE{K!tAJ6v@be7@&29@cYw zGIdWBG5s?DFxL+88{CNI)tYhcp zV3?6<|8&Rt$aZiC(wj2E3-YyeKbMgy&`D-{MbF)dK2X^&gBMUwpuim#Y2*?joUQyl zcbM>=loruW0L9Lz#~oZP(#;{r9o{YcRfY^z>-P)GZ?1b6@1Sgkgcm!+m>r?Kbl25B z;q9wcs~Y8+YD^xBFU(fT*HPQ(`su2}+ImV4!58mN`1?{q&?kPN3f8qytT08 z>PpPL+faZx^n1XQ<*;-@SqIL-Ndb;ad;OH5i1MKjDr{Tr>$~()EvLiHUYL$Z{S+9N zL(c!j*gHjM+O=uBRk3Y9v29eGRBSs>Y&#X(c2coz+qNsV?bOQK-@iup*Xv)Sd-vYE z$C%fg=cVIRI(&Fe)|uTZ>J0v+L^*w11Adero7n{}*v6Kw-87UST>ldD+v^kR-xETX z;0MOJuZ;raFETv&|0Mgqmcjp(0|qJTe6bY1iUaEmOLMASVBZD7a@YGnh)a-^iO5M+ zP$kp1BV@;mXl+~@+og8(Zgkvt1oH**!fwJKeG+e`E^o6&`X@I2qe76~>ht;e#rT6k zR4!>*_vaKlU?;DBA%&q1$4XfjL1_y|BTq;*l>dW6h_xoUZYX}7Tyy5JYMJihoek(B zq21E|Nt@bqLdP5#t%J~hKB|UgI6g&gY$8=;-EobplHW>SmJIOAOs}ENGavKZk95~6 zl2Tq0%>r~Z+k^ zyQA$-S+veSoIKKFVm$JSnMF15Kw)Vl+o+7KV@}p9^q1*>po>8{$@7>RQ%voh;Y;Qp zK7J0eC^a6oU5Ydn7+g~q#;3~cLA1>u3-c>*;dYa1*Sl;) z2Brc>bkJyHL%KLrI6AgNu+}7E=4*N+6z@M`##;M!X0*AqhJ7@8N#PqMze;HdII&3y z%rn^eNrD*4ITi5X^2ZYvA^MsIgxWNh!Y?=ly2YI`L|hB$zZ!i38Ban%}`=yLDQkbk1*mRW{{!iX5K>Dt2FOo@2!vc?@;)+lylqyyCik( z@)3SHdB>vAplG*Lrl5&LL`|+j@8l>(vVhUz*-6uxY17(~qw92j-g#e6bAjI>4p^_X z{<^oL5N6-ZuH3x_n}Rf07c- zpkqWrHK0Dz!6D&AQQC;t#QgLwHNT`##6?j8!OJ@smpBOYI-(IAl>e)(tk5fuGSVVQC(gv0r=|T7kn`Vx&NoAP_Z*Ia56BoGXBqY{(ojggKE%T z2?yAJyKNJGnZKg1eH#?$g`u=gZ}Rn3r(Q`eZ$c~Z&4(c))mxuo)tmGKM?dO3agyC6 z&vwjMa#t*%LU(q9t#9Z3D0Lo0CX?ybIhBA9;bn7;9e?s&eU z$cA84V_lgIoIaYh%fZLB>-PV}L+jQP&9E&9j<}k;{r$(U)DUqux5SX)bF-m8UU2$^ z41`Ap{D=WwNJ@+Y5uh&8J&e=Y+dIGU<#wrfvWGA)I0H@5cr!wdt~>l0R+-=tSL{-| z8CI^14{yXZK3M ztiHMag0tN+5!xQ^c|QL@qIqV3)??SQS7TS#}eF?+YtwI{fbe(&FrGyWUTH>>A*cprmopM!+%TEWk% zZ5_Xj$KS=`u&|M~e=b*dN~6Wz{Z3Ws>ePv<7q_tQMe+bL`X;aD)?V1xU_9koBmkcp z#~YM31M3(!?ywY=pte=Q^Chox-kqw&Y~4H!?lldJ>{Y!{%cl@E&pu>2Qld35WzA*_ zUB2VHKo^*mwSLWlphOhANF$=(4UqR!vR&F~#4tKfV!{AAtkOr3dxGxfwyEced2ZIV z2MeeA8%uq*PeX)BN&_FE{eDTf^-W4C_&gT<;<5$?4A$Vrv!W}rEg6tgq<5W z0H;9HsJ^9G^5!MNd+}r_xa2}6^F<+^2KlUM%(<_uIjt@`R&VaP>d-d1lC2ZDn*c5c z>*zMhXbPfVXb-wfQ>wu<14DDVjJe6FnxbYF_4aOUqd}zY-KZxB$bz-`6e|i=M9{Aa z!WA6gh)UUn;{<|Qhvl!mo{-nolQ{c@T1*6wA3U+RJZDoupO@{)1wza~V%YsMu7IqwSld|vzp%`WWYy9~TtnVt{P1z!eD4zV}&bH?qo%Sr_udX2`%l>Uu zbpIY2rv=UXM8jsX=_38B2|A^JA6!T~LqrN;l)c?=LlGv<7#f_}+$??619N=8wPq z?h_uGo!|MSlbby|bS0JR4=2-vN9b^I+ixSUNhzKtxyIg{4!sZ6-5p`f7xMwtO?}ga z#)^lF)W5U`ZM2IFNv4#Ld%7t@2+_mdsPhg3#?juj20g(9qzMW?6u%bTRjh_E&@XtM z@}$s(ev0mw^buE3H}#eaq-}>;S)O!ac^?@ylsT=OI=YR*Xu2wNq*M&CigE;3cxrjLdtXubyl5@) zVR;LBPQjB$Df->jb^#BQmWS#fNNw!GG;1XF6jH>`Y$HfGj1y^etsMoCC~AxdO_fYC zQb4Zc;G|(#_ZHd^0OYyz)MG{vnnDR&QQg@T!sdK3&RRHu(f0ApgR&$sNKt?0Ix5xelh zBnE5B3&)&a@a@88AIq&~``z3Q)n(A(+Sta<6sXo^EcdL8G?#ilI-K61zC?@q6TPha zR9)5VUL)`RwS6w84CYs=Ahit`=-RYRrbOde8rk1?aiTn{Bqz~Q>{1E!MoiWrVv6cG zTB;Qie~8c(IRkQ6A%YJSMid!^)e)zpdECMTQ4O@oJP-C+ z%&0XC4hNLgx%!W7FiC4pt;u3yC(J#8z zOECiP(&stepY^T=enMO1YC-e64G4f?XQX5q;Ti&gOCr)rG|g3rxT7)bz^o9j6i=iw zOMW9!IPiWf3j6GG2c$h6*)~N^fpdr7^T+;Ke|Rz7Z;{ByO&NuMgsk4Ww;XU!Bvq!}2?omF#-PDVSu4@=KXIB4;QXPCaL;c+q*F3RgSBR;nhn}F!fj4^3+F6XYF6y(KnaHq zAYwKpEOq^8_GD9<2eRl{)!+`wH$z4%-*(#YlfS2|E5xA&Wbj?MC=V6CIB6ccC=bfx ze=)p(HgI>3`h`qfA4rFYKtBPg1ICh@jR1@EOn^MlUei!r8R*Pa$&{&)a5ljg*%#g~ zPm|edKXKpfI&e`U!C3zCEtQTvwUU{9pd$GtlZ-Kv%$|UJd6k!>DWoP*{Zc%8Uh|{@ zVb2QMgDjYP_pxqW!Pc&vLU@4($55R;^q{C%*EhqosQAf16pm(fxP14AF2U2~ch>mM z=-_??X_7tH9%>#1%656ub_HTkG!(v62IovN&sq&#s2n%|QGe(dl*>3JeTsLB?Bzg! z117}&AXak9wuU>EZhX7Fh_0X7L6V!4E*b5ug#vLkYVp|FptgH}I;}0*5BG%c5x7jz zJ^bKm3R5+T?>u&Fy~HUFV^l2=%P2(YwciMP#U+;fNH^``FMCNhv%#`z^iirSCCv3F5o=J)n@+lbVf(AWNE;LG{f zEbyFdWF@oJi`15FL21uOqGH~bEMX8AjU$u9Ne!H7r-JPl)KP^?w=W&!Y{LmrI)@6J zf%9(UUV45efIkoexWyOA7RlJ6HAl>bd~7+oiGKd+n4oa+M{1f!KExRNyBDsXGa}wC z0&Svep6nlC=xch~6xV$5Kb9rC#P%uqa5;J34vh*alIGy6<@u%dip}Nbd|sn45H0M} z(njAl#h?m%yiHIpW!O}UlkOfFmn67Hoi(2xyPq`spx7|xYKJsmezBr?PP$g$aSidP z@Um>>LKSKcE38YN-ue?B2sj_kC5VIJnh{vkCc>d1#spCkfo_VgUi=!f`ADT86sq)! zEF0)IDiNOn5Q?VY^{_b*+Qh}|5wsFMje-Wxa+l0Wi^qLerNLe^?yE(phZoj_?jR#i z^pyGL*m*36)4at>KW)QdDbuZCX+f3mKvsuUL&yI0~(Up#Z}FV9}; z|5f7g|F&fd|ACtuf3;ugGo+c*4z1=%Wzri8F32;=i)VtHBqYt(WWpt=WYCvRE@Kfk z&nxQNbHAf02o&b!xuGE=$GAyJWfX`YBg*#%NL_yu+($zK149FJad;ZlbN$?od71iZ zzC2A`P2$`B@q+bDGSp#j+S}7;5$Z+2i@$*em(?DP$Vt2@#q+{Zql&%3)_tLstDfpT zx^}neBHD{!u2QhW(iZ@ZnbiZ#%Tmi{Xv z<7(uY{%H$Xc12UtgXnfI49>9&B^N{80zK^Jq}_`Y?9Q6E4Q68^me2gFV0*YlbV#nw zp5|A2P!3f||MW}Q7f37WWn&8SU2&)yt)e#x?tB^U1|eJ5SZXkzN26?O&yQ9oIB!|8~ z^?A9WmvVfW_>FR38}(2DlR_hP{cQwB)1)M5g+IGxV6S3!Zln!bT({qO$n|a!S`J=m zvy67R)+0I=R9LvS@eA1foNcdg{3`V0y=^>_S6G`H7=xhb5|E~|#1&XC(L6{mv#sPz zXM&HR(vM&#?!YG)artemkkgJ$+8?zJUub{SDz#0P9LzW4;EBM_eP_J}ptsv63rM^k zzPkCAtptQnE*4TS>vAZc_oW4Tc-0TqHGEIj8PZeXjTBG4w58@fmcOC=q~BvgkJ*Dp z|H_X2=FIyQhvq>n|3v4iyn{}ce6>nSpDD7{Zb0Oow)MUi#HE;ZRc~xN@^)1Mm7Q|6 zhAgQ+11OB%)dtTx%xaBNe1$9rY2ix@zhRa<6XyI0;85<6aF>Bn`Pr8XQ#_IwRPi;F zqGdEMBcvc2Ew92Pw?9TKhyIfH6a5ZZ^4P(!FLn?_1+BhIa)=F|(bE$??^eEAt4_Tn z97RDAF?Tu=;=LC=j=Ea|-Lbd~snffR5;a0ufu8#KAdPFd#E{8yTX9LCw}6s@GEWg* z#W0LId6!HjbHM46tEG*)%s!erIqaZJ9iUxSg4|eU7s0Kv;5gqSlW(RtD5;fem_)4_ z!G@Zc;N<9cy2{H60$*xmO^y!!1A|?5sq6*eUekp2SdM@))zI3HhHRmY1Vf|e*AE8@ zu^)q0D=h-eglLkdvT8i2#@IIvQgWMLbc5Sy3|U<=wYBOXp3;Symy3fyeYr!5)D<(A zOP&}~VvGZplYn^t!#f3E6%IB9__-U5BvER~9PEO3%ah)pB)z9BUQu)|%Y`}R^JOtC zvPH`#gSPV2TL_otp1M|^#TO=lg;vZeUbg+5Gf8mwEtbI)ydQkvN0C2nHO#T zFy*YxVYuP&X*s*npgWMke zAn)&aZNTOc)yL3nKoX@8_as7;y!u2tDc;QM0|wy{STqYFGK4p1MdH4Esk=-=;E5>iq1-V{K{5w_DKCtozI!_!I|6H__5t@G5&MUrBTWOK5Gq+5Sk zb-kl>XPs1s=mB-MCndCZF}I`d)X$U@0~Lcm5-zLn*M*PwFpkjbIN|q_mvpR6NuOHF zNMFIahgMecyEuZ^mmjv)4rNkHQ|Q zlsrtN!L>1pH?r*(XcYxTSU7V{G(B=wd}Qo*|mv(`9b{avvlyKtAe)fALqShpnQQ!BJ@mVN$6XX_~;(X@5T!#;+5 z^u0XV%@>BffjzmHM`#M3)R*SjeB|+bq|Jd8Q>hye)^~}#2MX}JHwBS9sD2v0Q zbC=2yM{fc`exrbCwFwrWm?Z7Mt<z-8a7{OzYlh?#sZSA`Cc(vCKwM~x z5njNM?6+Hp?ptMvjNBV3$lXwK1%Da$tlc_~RGO9^nV&lxDmYQcNTv2@Fjni3bRgZz@?++R##iSB4g z{UxWrb2)>_oQ2gTwsR=%FoR7iMj)#b2Kg59_VU6 zt5>OYgun3Y9GM}$7np;`!ZTua-^hguiXuYG5U-k5+$pOL$=>f!l>i^P5=}6j`Rc-5 z^-Fu4jhUN0E?KzpLwmQV>J)L+`>i3@RZ?V3oR5rAvRw$yOk+wV0~HZGs-^8yj}?H5 zZj*B^93@7?Xg>B!x<)XBxi35CKRrSxGA$*xc2E`0oVBBIe%8^_nJ2OK(ZUiQQT`Tz z5_r%V@?lW!Q3J7iyG9CbBC~QJwaaJ}rBlTUR#!w967NqKh}k@&&6x{lcw`dhRPwyF z60+d}mCiRmN6(yM@>+{Ov1BU=d&N#UW}DNxFkUrJEc0z)y^G<2mc%Avn;hh#4Es{} zckNfDtA$W5z$y~L;X$gq@{UOiJNVLhRh+L;r$gn3u-1uE4P z-P`9iK_D(HqUX+Ld1jBr$QfNf{}0+;_h z?6wnH{zxqndNhiaU1Hv(LUtk$bo0$1zF)#mHyiGn&YmlCB{D|d1?Z@qF5-#(U=^KC zN)*F`P%@D9Z9&k!Icm4k(eC_)#Ob&HMhnh`y&2P@DoO#F`mQ=mNw9T3W3KEt)XgJR$6NFEeB=H1`O}tx?{yy(5yT8hlgeh$a{s7N&}!gJx#LHuVP-6a zt^AD`v>Zh4uFS2Y&|pRYWxx0BGabrJrJz;+x^f3!C`{&zU3cKs%(X1^R^iSj${nAB zqh!D5!J#+KABG)B*39JV0GuDBJ0WCq*zl%gyqNo=FGQ#If>rdA^q>yTRH5T7#Lb9_ zw~uAo-UV=kg8|0RSOoDoG3C#JUM~_A4w}( zkXcwRTvAGRaY4rD^R)&!z>5y(n>nK|2AIW)IOrHluV5JXVfbh&!=qkR`4sB%Q@O+Qs}v@uzBz;>8SR_ zsV&6&OjR?6X>E#kJEMU`%*Z4_ib}VFQE;Bg0CKrKa=qlCic7Rn?jnIRkv~)su)^@Efu)HknmXH1{XSe8}y^752W4 zmT$Wa)J5vaeOfeYaGGrUkR?F~^iUDtBHx7tGm`X0u2PeILkdK5=y3@|^hDNAqd%7Y zLG#yfa=bdOuqeb8Z#-@m7k*|ubqouaQPb@tyvFNAl^O{+Z)PbO1iEDGD8G`Rq#W5D-B2XGo5qXNE#O+Hd(vQcymDYJcE$VNrDq6pSZo1!^s zEjd>7EpmWdKQ1h*Rg(tt9`?BG3(l(tc!Il0nq+P;6t%D)GXL@RyB!>sh=gZRruw^# zbC$i8(weOG6|Z!z;gU{KIjs_h8Dr`E3E9KL1BkT>@MyjcdZ{%J_`rn#A0N;}pM6aO z`odBXz|_7RmO+<1QDGj0cSgz|d^`0=c}Ozdv!Y=T%}TP+N_W1gVR)|O!bzOFG?OAF zu08Ucdp}i7ZGzK`{d6TNi#wZ`AMzSM_&#u~)5}SF*yS7vO0EZrdu@iE&__*wG!^ed zm)gF&c<=2wE}C%99-rTD(1u%*x?brIotDN#IefG7sT&BtvHG$yxr~PJ{GZurv-R{b z-562J@SGncvls~}{KG%OZeTI|4X`enFpmii8EWP9ZDbD2It6ymlQ@+us9|yZJJuMg zO%{~NdEeFJH(%u=kWCFo&-8Yd6{ELmwm0(k7-{ic{STk%6uEyO9AGlW-0cYGy8YKYywZh>^4lv z1D5RCep3&AfD`A?f(&hLO>B1p$L+E=w8p zLQQ5l1Hb`#VqOn)bY%+%Ry-JZeaUDd4$uDF($#wN4Vj}$JQFy5a*q0qNh@2H;mwH$ z_PdQqFWdT_O=Sdq07ry&8K`}WGm(VADeRmq!rNV!a@qqB6)AV>vITpfD0bkKidGI$ zbMBP9K+0hV7k^p+Y`-<4ofcEz@|ZoU<4kYtA=m<$ufJ76T-yQZ3v%HU;zKP+7%)1` z*kjr}QW)w6cHzI;r%dnJ2vO+>CyP&_FTjZOtI1Q?q13m8Lh%N^Hl=@O%@q0ld|zrQ zM_CNJVp@|*t*jIVHHt_+X2>nZOqa)l5xdHw^9Zlec-8CZC1|C$3ZC6gC`RNplwj`u zCv3#LGt?fmFqynsxD-V&tqu=hOlCq^&M2-CF7_oq&PK$`2>_8{xB!~VZMNbiuyf2tm`d5($&P03O?+|L>7R;lbN=^vv($go0%s^S08F(#W*XsUSIw7 zL$k0%jnG0gfq2$mXKn(#(&E~Y56f;DE+p6c(H<2kAibHklN)Feoj>nfCtpXi8g5;= zc3|it>$+q;KAR8{9$FrQxLa+O0cVhBnyQQFLoKtP#FIhhy~$RhIOKdPEo$7hF(VDZ z)ySGPeaEUwnptSxR->jmlFn_wtf@HKfR7keq}-q=;hJegp8~{^{6OT7zFaSGGX7Jg zBK4{hkYM>YgRc)=Wi~7{oW4M%Azyg#+b%WAm(0xFCAYchClbzy-CC$vJlCFdhzkFc z8VyjKs{n8Sp2;`Z)^~iHjc4Qo{vM9norgACNB=N8U9=Z4QgvKzd4ESPNGvv~_*4)9 z0bnnklBQI@Q4+9f;(jRfgh1u!x)nfP2x{tt`kTcz|Fq}7$V&5mX6|plHidBM{So1B zQ>OqnViV^b&X|q7;5a}Te?9i)!XV)0?KB*?EEnaqpRn6-#}0JbbO=sVWm@NI(qFyCz?R8m7fRSes( zK_0`K?7$aafEOC=5Z^*@EOw@#B2-+j27vTwD(?ja=pS-rCQzMxdS&s}gO1hy}FJJ8qY{-$b&Q^@DP zI6VCmH-9|(b|Ai>WOH9`Eja%_ar1v7MeWV=YX#$1_qlZ)9Fh>qPXTo>V^n%U1!`y& zR2z7i9uzQ;%JtPv0QSm6V44Q$5;e8DrEQa@mKAK$+8nHEMZ9nA?@o<3#C!hZyZhzO zwIlPl?A2A$cAFAJ#H|OftEX(oKUWinwtwBP$bCJp?NJc7o%ntP+>mDXs1>*?7U@MT z%o6z(qquQH!xyt<#(iR&XD1!Dk~U9=UvQacryN?&br2EhrOZamc?qZ6l3!PnCU37p zdr^cf%_T9AU2l>m?|IhUIe=7~J$D7GC8&qh-(7>g+YwCdvBC4tT?4T{N&R4P=*i=f zKklB*L8_&Es3dA~$ZDZ&Nv|DGd~$c{g7sh~^~|3egSSZS$ox3a4-q4uR)L~EGp;f~ zWx=a@>-kMxM&9XrG{ZFH;XCx?hc9dSsehd2Z&#-T=lP7=_+C0JJ#?FeSd|#9!552> zM%CSe+_5hsxtdG~?9k$|O(&e-w;asSrtxU7`U7Q+97LBLwX@fS39zR*w72R)TwA9~ z1lB}dG>1kBI2?am;J(J-7DrCy*`jm5(M=z9J_Ib)SU-y{EB{opwk_B1$amHAo&O+; zA%pZlFnx8s-1Odd>~P~Te+|AMWQ7sk9cb2QI^ZvfmD?IRqQ1V6%@uIsUeU=j;L57+ z)3omDpWt$zzp&x|Dc)T8Bv(_@V610yI4@1gEjmtF;!G_Em*fL?;WX;$Z9HjTeGCd{+d`< z$fc|b(r0lvfn7GQuRR>PXkayTYnSoqL53G|e?#udO%R>O-%@*|(p}=}%$s9F**s~h ztEniG>n(B#7C5xCy}XUUA7ngN;YO{m5SOyg#PMD_&*Z}GquC4 zP)u|zfZ(_H7I(RsR1Z5x-OMe0D{|_H*-Cjj06)(-II^%Epu)HB z8N>KU1Y!;;Rk)R&x7d1=`nylaZ5KsrJrnsMI=_GSQ8wcr%G-@feL*Wd#4cwR`?eFO z0O+|Qp36fTbp_c|vBYktb@1wE`M#ys;BC2(IaoL8C?#d3A-(#3K#q&ty^cJCm9Bhv$yJ z!*GGXqDhoGz{jZC?Pv(g4{o?)xrq}m5!4y^p zuH-tl40dZp^^8x}L8T7MDvd;U=TaM*^D6I$4Z=V!*kk`O2HN>S1{oDRAs|)2WYSJX za9I5}1h+_8*ES#S`Obj1$6$;ca*0jBpO&|Y>hy9~X*`ZUZ;oa`-`O}2;T6AgS;V$s z-XjKm^c!rUK6VNsQc3rEnYMJ%oNMU+o*A~sfBX%fbJQl}!x)pF{qgP5p(EyNw3VFZ zRC<_HdAQB8#8UmPYYBaQ2B$sxr;$`gKHCyrcl0saz|>Ga{uS{OmJeuoQ7l%vKRavK z>(D;f;ph<9J@iD*fWHMdY3eE?rO%xX5BElsyCduhPAVus$}0!>x+ zEk2K-7b44Cdr)F~HmljqM8mRyt@aZ_Roo8L^3?9QqKN+QQ&!Kb7ulFjy~1UcfH`sj zu6ns0@?CK(frV9$$Z%zIz&UTB)G+)bJ+n*<1NO+4Pfzxsqx0OY?pAM zue&73XAij%CBTB^v8}TCz0a*vBIBH z|5-u2JO*a&NPvj{EHbf3t$Y^gP)bQ_p#@kBGMOxWb8K(Q3uJ`gZ%QWBTmEilt5SK7 zGB8Xg=s!s(jDrD#!yuX-qeP_rIpd6$cvbD1&YW6zjNSY@JGz?VdYZ7L#uKY;++My9 ziV>XenU)mtP-*z4nfqPn zA{J#n2W$hxYNWiFND;ak7@pMXp;KU%;Q6pC6WRTejwn%fvm%WRxg*^-veUQvgAI^0 zj5r?pcgkFu&htA~9`)hx32gmbLuZm9a`G?^gBAujouR31YshImL!Zv4+}!-}FKF!W zl^FwkEcWIkoOWWLZN?(mKxdxelxyB)z0^SuXEz;CjCmFY{YgESok4O248_fZBX`?U zeYUZ)4Q(6_neDEjH>o`njV(o-=EQJK=R9(gmoOnFCyld`DaU*?=GZX$d^`Ku7v7}_L&TZ(nkycr^aDz ztP~OwoKY3b^-qb%sCFxDK8>d}AUoeR379E=orz|+$Y6QZ_qHHB4ah3(SxEb%%RN6% zIO|g|e|1g|2%a%`)^VABnR1uxkou;iWi(@Bhv~_AL=&i$4-HW0G4V2z|orV?z z8rlG#mXfQ-yf%5oMC4_po9&5;>kK2jsk-3r`m+xIZ3CKe8Z#UY=?@Wm7scjjiv)Ka zAx&&LAKiNR);Gj}sfJ!8tzniWtE&p*!-{jGt3aFSvq#Oqk=dZgA4gcp8c@BeGi$Bc zow#e`m6c;>4R3#>81#)W(HdO4QkN_^m*pKO6gPu(dT(30z9s%$w z*(KSCA0MXH?L|PZ-ep6-GRWj!Z7~G-`lava)xhF#xxiX`9c7pzE~o^_G4FRcawY@vsRl$DszBw7Kj$7!evWz`QwbJsMD#!*Plg z-7rq?S@^khw4r!}cOTZLzTalY0pOVua{3YKz;;lqAY|A<%9^kjzB8Af8 zjt5dvL{Fo8@Q=*Q*Aey7ZF-0p2u6jT(ZCr9)et& zscXIb8?IA^A>whfXRbx$jxI1~@F?L@fngN(Fk9vaIGNFB7Lf!gv#uI3m&72DN0$9> z(1^@Wpk_tk96%`hj>$X%;#TB%{K7?pPyAl{jsTX0Cvb#U^r=?TwELea@g1iWRKY!ySQQ+Ad6}+0M|82{BX@42Xh+*R%B<5k5lcWNbDvn*oMgj*VYPC2LV5JLe}&V|8wb|2!Qq9ZTqk8skLs3t3Wktv&20 z6HQgcuy{1=F&S=TP-aacBEkHM(BGB_8^>6%Z|sd>S-h;N68({JBtVz^;8ZhUI&)&UjZpYY^bPb}^27geZ?k|Tksv>5nB1T-kd91|HHy!d znv7(%Qf_IsW3tATa=N|Xk*oLsHhEvS)R;PgQ#xI-Cl_T00P`HHCGacG+u>~k10;$d zpvA7O3!`Gn`^9+G_4jOulJ`Y z)<))A4wbB7$%Z%YqnhH0Xvx1ql9`PYNCP+t?d&sgPr4bOkDdp zfyJ1ew`$LjW8hN@`e)MXJf^QH-18@%F3m4J&K|W#e1unTywh(?Z_E7M9|-z5Nmybv zNd2O;kMp--fn?Y@Lr6n1_U=;J7)BdEf_T)EYl-(*kZY-dGDAApIZ~8EjK0p;xJ*{N z*?|m(KcPp^x)K#o9=p_4$-Kx6A^;uZbP)gzuL^v#mo}4yTe9J~s5KB_qh>=@E>JCC zDE(>hB`uTo2pWwE$rfW&x(40R6&m|^jQgO*2u#g-)!(!{o9if({E5mp&DJUK4vpDU zt@Of(dLL|;N2iQ$p4XBa+}lfa#%UN-`sDrcjD!+p_NJRvOtePfMJnSd*7GBnk{P&N z!|PPW0d>;g5G;XZ@1BZ1o)PoEl0!G8p1c^nlgoyv;h4GFUKrs_K+pr3`#5sfaf|A! zR-<#e->!YX;mtc5hbB!FsqE0SmFVS_t15x0_EI*XmyA%g1dhW2@#`8rvX&cO>B^U^ z?D{o+Dek;Q+u*=~LL4nN0E?a)K(h&o?U6Y3Xj-Dp!LI-^St!jYE@-?x9His;X_S@l z?M3P<`9SiKGhZQdM)_v0nm5WJ^as^^ni{U-xk-EpC;c z1kDMFTk}UTcEzpXfq@Wf52(P*)ZkF#RJSUmd9WL!FbOjWPuhFt6N|Jywz;v57OH({ z8I1a?^4G8_p|{9%-U|mz$EsMC%@C0{B$;>b)HhU6I#NVA%5l_wXGM0IF_WLGkb(T- zV>Yo(FICi&&ttC=H*lh}0|{3Z)x$iX$g@eZw+c_UMX>p92)}Bvn_a!%7V7K&t`Y{q6T)1K*3-ecux7fnJH#li zi1~f8;L{B@CBL|!6TE6F=N@p0>5()#Mgr_DcC>H3U@^fU(=dW#JfseoF6NH;i7_f8 zz9x{o_dR^x8UAzl^q)c#f2M%1+t=N&`*k<`_-}W^KR&?!+Hw0gOL19agD>sq^nbHe z%u*S5Kov*hv*r^^h6GN``+*HZk!UoL`2z-+A%MCd8otH^;1SB68=<)cah4{DFzxSR z7!oRV1}Rt|SnBc>>idw-xZC$Xo8pl5Ns?Y4H@KeeJDcU2KYiYI$$a};u*Ers?(JBE zfmtj5gza{C{DZSG_I%^c1|SsojON<~5ZQBAMR1wyjC4p@HTdf}Xi#KI%iw+Ujo@T8 zjru%g>eW*;uCh~V$0u|Pv>L7SI$Hc3Sq6WrE}+k8sZXe$I0>D+R-vl)3z@>d0OvPR8$^5)Y1SnqAK{+b&nC zjvTY%Z^2y}Az|)Y%BWYtiZ^_j=Qnfo(HY0a7{;h0*5jnnFGux^iioouiuT({)xXz- zKup05m@XO)Hj!$;XQCeKdeTF9cdcqJuARj*e6*#gJMJsuidvXtg))qTuLBSGqIl1` zbVkh(^@6kXU*cpOTr{0s3v=*Y{AHefxvyx{UfEJwVvCV+r#OpUi$!&xFmX{>?6R%2 z74@xj&{1cc9JXZr~rr_4)c2EgHPMlxDLrO07Y znG^<$LDi(S7qc}IR{~u$nV3Q>xdVlGKO5UHv7Q}D{BS`+*jFt4?#Y|9fB%(|!3ceq zF1(p>YQ98lH}fhP`Gn`?~Sp{#z*Z@h%Pkw4rRaHnZsty`JD{eV2O?hIOP`V4%@mju*A z)sr;%voklq-NYs!+&e_hgZLo5Q#3i6unVmCZ8mh92XR2(Lfyb(37_m3J5>}v!z#Sv z%inY8%fRrR^>ci$^y^#^Z|G@$u9D!Ho1j_1)zmDEgs6ffG(yuXT#pf9xrd)s$XcBN z2Ii0uU-KBA6o=BY;RW|hTssal_{1j2`l*Ftif89q@@8Jb@&|DdoJ4epH89lOZ*St( zqR|$hVu?@;`?NfFYo7wdZlHkAF+PzoOhFW!0mhlb^+dfA7SBhXklT+CoUyYYdXyBY&VBKd*}@8H`~1;2-^1y%w6Vc zk{SNiE0bLucZZ%^9fb9cw@2%)-*DaV{Gt<4p8DO8dSxogBs9fU#iIfD3w3l?*a68? z=S*OdvO0_tNpxDuYnAD-?Hx;`QWfW^9j(KKg@;{C+nvqY!3WmnjV7iVLn_ z)lcMo?9iB-4b}iDnaei+>%zK|hR9?fN2bT*%0X0c9`xB!FVdz<36?ulyRrxHWbv5%C$)hP8E* zu`HX^-{)IdSu|VlNHnLFCOL&FK19EjkM4=;=Y_uN$3fX}XH&*0Zg`q~TzDGDtaj4F zitavgO*<1h`39w;^V%F*HLbH4hWL}Kj0$x)V^LCzq$oe0g&W%0O6V?x&6(TC_4}M@ z@Xja}o{9mtOO|?Y)|W}_vD-imw@DC|1L{J&K{~=ThASTcJMz8&U+$A%FSsy*v(_I; z2lEtqM*ITgAw>+rT#P&Q!q+>u7tQ2naN7`JXnf@3w-$f*xg6yT?;{zrdk_!ylq>zR zD*^!gJ8AkJ{h%b`p;Czg+zowYG`Kbi>&MW~=LT?oa=IdXcu^+@a^j1`=&9tZ*Wek8 za<@ww5Um&B@yj%nsUtpEOmN@$)@v~A z*h?(Jzu%q+77+?|&~xywR4Fo7Iq;YB>B{GToIV|~27lt{1Pg0%_^8OTIQ_Vw!lr{e27<&Uv*zHl zL#yATMo&YT)pkCu&8H+bb9U6svdjOuXu}iiWme`{=j0W#tX!A}1=NH$J&AAiY2*!u zZ9yC4X6LkFPWFcuNs#}rrp z>`97i6H2U3A^HhhH>>fb-4M0uy#VXKz~y{JmJcRe3ZUFCCS30O>Efk1h5RJGCv!?! z0xs&9UuBZu5G#fzj?$tTCNc9#xI|euYsmTl4-WVjP0v5B@arpPq}4a9y84DyKmI?j z@P7}i)|LNZz9E+iZKN4ZwHx{U8se$ikipiMETbin=>6u*7l!f^v8~O8`vJXsm@koP zshdGZNr<070fpN+!9O(7WNG|-uCsjJwl_<81q1y4LhQ2SfX@dSaqGhGYLjLb|XYFvAR^u^_iN?T}4bMi^Ytl zABIW1gt1i)hQaO6?%U5Fd1~DN`J|L=i(@V}e)6{;RphC`}rQC^iW)x z^Ha(Nra0iNz3J&EA%TbGh%kgdQjI0W&-Y6y3F#SNr=_~rcIYpxv=`_%^S{+3MqKTJ z@%hsz5rXqsBNo{H(s6&2S3iq)b23| zI*QJSSKHeCX%s?KL3LLw#W!*qZGt+fC*PmLEd(?@VRMp5%jECwy@Vidj8tzL&rdpUYIQB!C-6ouQrj8@MaSk-O&BHxZ=@lR znZoqecJ8Dv(PAx*>tf~k3STQ5XrX%6l`YG(wojhS*2*Npnxr(}e*(@%o_YHDZK)roTvog_oCbP7F@*j@ub8%l*>n45=>sZ?Yx>bBuSO8_XB1Z4#s}s4wy1 zd?vojufU&=&kIEfd%S_`zh*6Q?nXMh2=ilKI(!9pZ|?27-n+*+wn9unx-E<5i-t8U zsbPcanBl@cNhj0$XiDlsJ2gE}@e0X8%V*Q5CS<~a-jMP!5cbImRNKQUt|j1{S{2T; ziLLG@&LJzs)VUZ?B|vN1s6%>$MIIDes*&?n-nWCB|oqqh=XMA(ohs*i> z2{R-8pX)3CeRuTFAxesdjSuQ5HouLOzLtJ8@-A#FJ~&(|IUaVVawNX;0oMKs2ZA#Z z!n7GZ{r!M-ag{pSNsj&^hZNuurHge%k1bEh$9eT*j$t?lv6tW$3z4LkhWLsbmVF3^uuG9L^C?xi^K5X65{r{#@+O6B4aSOyf@<6d>Tbh0NlU47Y?bCHjO7Bi#X^;GU5k^`TFI7&r_cAa8*V`trFHZ(J5uH+36#%t4CY#MS zhNOa4I8v@~(r$KTb`SCQQ7Vo3#Nl+YrXVe`amkz9vpjH|;lPM;)Sf+4?=KlHGM72E ztdi8EqpxH^WK~f%lg)0elkR&IUQlGTrex%j5+oruJ^AiZItqeXwb#wtsZ-oUu&1B+ zLfajGU$br6U&?v+2IH&2B(<2AyU*YtGx6xmE5Y6=_rST>W*=?Z+Rn|8+eInP>3L=6 zXJ&{>(HJk}&{aU-Uq`FUr72MoD9c|ycTijOsvV=~s=`K*7a;XXX_H+=L0FI>Xx~4Q z8X{At0HF{QwmPrFOw8*z<^u=!z-}np@#$00mlvo}gxRKjI0B2IT({GkmNs?em#Wst zZt(Gi_}4h?0yazy0c@DcD%91Ar-TFq6p#${(6J?O&toBp?FA_du@}ZkJ~+96&JZ2& zZ|xhn1XICoC0Ehz1s9o-2Y7;FqX$ZhMj~z_otu;?)xk5&=g&o!&$3;Gm&V}h^W?a4aDKIQ#eh^_ z#aoKw;PF*EBR$8>G z&=@-4M&Tt-r>miviNy{L{=59FD;9z&HRw#y2sK@%1;H{$6c1s8m05*J(clFL8BJqk zX&40Pte06rxV0`c;;o?FSKtzL=}%y3np-r<>^o-2Yv|1KLrz-@)MkL$mm$wwh+gO8 zlpFcKLP12NJd_y8mE9dfNu2w#Np@~auvWIJfq8z1|?c2T_s5ggtS) zy?d71lP&N9EjoLpDeAU`9PBc0ZHPODUm$id?JfEREpviYw!?y>sqA3KgVVI}f)Ulk zT)lx9+HrnR0lw(@6j{i*?+yijWQR=%OrQIEN(x_C|{{nQRmU zFq3|8HZ%XNb;FQ>7SF-DDsQ99PC^Yn2X=OEu&(6g*KFP2^jsQ$V@B+1gj175@XYFn zHhih6T)Qg3-tMN0C;y9=li)wOwg|LzMx%(>#vrmkeB^wtcMdHs>zSnuPWVu{rZZg8 z&rP0ti$BmpX4xDLlu=-)n|=jjNP^f= zAwri!MHC6cz|>KJv4;;2VF!}>lr&@)e9~&h-=`Y(2ks1p!tci(6qF&>-%e%w#PzzI zYzTh&e!v)_w=QV1IKpA7w3!lxPFf}Z(PuWyt0<)PZqFQWhM|R{^xa$EvVxs$P4V5( zwJ=1)D#4Y015OhH@QNh7+}XRlKR+7)i`>W3U+pr8ROwo=4&hc%Vwr2Vpv8sSYj`Sn zuI9_u6w?hj2QG3;j|6G7%*OkVK~6LV;X^c17vJI_Jo^cy45t=vWmcLR{OM@6C_-Ke zC+BN#dY-}gqiFBWv%&wDr%o?FbP3ajg-rjAccGw7WcKI8uMH?ZohNMb$&{6!4iA}w zX1yFUDC292BC{yZcE9!97aYVYq4&gFC>qL`51&QOMK;f%71CVbTxOp)e3i0_(B*Uo zDfB? zD6THHTC4xO9bEs=?B5XZOy_CFyWtgp&4_E#>2)dCqk zl2v|FF>*#QSa|`-eMPaN)hgry2n2eY9HSjmcPj-a+FUo5{E5E6F^8gS2epgHQGWG? zoGXCo_xm2f`LT^TubitD@!#@rc2?0O;gKOBy`Lmly- z2o^NCJkeL(#f;`3f9!QV(6Im5h+4eGCCnK}vgf-RKI1y=XXX1$h5x`enf1QKQ^+|P zhb8D5J5Wk}M+w^Lyn|#+t%GFrQHm36P^)EnK@HOIx*{^Et&bOEeZqvOW%V44>Fu~H z`B^HrUO;&;;tm|pSW-Sd5}YVqPW>x_njKpM#b()*rpCr5GYvKzv&QlIUhuz(|mPLV9-CDCKInul>cCgu%Y>IA&hX!@{ zy~ggKWCCHc&Sg3DuEuYt=$JX)8v{_;Y{rsXVco>|H4($C$GWereKn^}mgL zroB(4kGHx%q6{oy`J^2wRk&T)!004rr||4iInGebo8Mr~FCL*th0oTCku7eJRY+iM zt}ld<8aBc+;`6J15~N14(e%+2-!XLMA#&0=Kb`6@5P%#3?L0K5#8#S zUMYddY*CSBH(fQE@_}hq0i&yyFpNb>++#+wMwY6|S+EfWAoKUqT~upm#gS)yZDOex z-}U%k_08!c6sV9k`4Mzp*2Svz_2K&9Wr412ZyszFz&_rXR6Cr@x`&|m{4CM5A!JZB zTnqE*!vU-3WL(VJVOXHOpz-OQh*@2R5F-O-dP0nm3rYSHO+=`vLx;gK+`DALalfJL zd|;+MSm$zHsytabU|*Np-cPx-lxaT3qzsR!&iV!j01x>g$3;Xt|~_5*ZpbmtC{ z^K)GOLxyN;xfB922vj-|0XG8fsZ?bFi-ooZTZkW9H4u9S;FLm$xwjwPvsE}6`k_qxTo5=Zzo%xm9uG3wK{AQuZo9QiRooaKKxOz*!(@>-DoOUH9eQRzFQCJ&>0q@l8M z5yu10CkYN&zx5VccKq2-iznw)saz=eSR3OJwwLP90gP{WJAQs3`L)pY*C!0VnBW{VJO6ZK!>T5Wee`zs=$9rr-3 zXW*10+NXhI+%1!?{P{FEfHr}&6>ZL&9SROZVRx0Du2Z>wOmI%kfl86axYdBt=ti?t zHNZCN4xYxVb_Pc(Q{yDFq?7Ui^8>rk^t{~G7T~Newqv6xBx>rf`}(Y3=ynC-LZy6o+4ZkY^&MI2-dqFEnpM)C1sUhk?Xhi8kV~Hq}nq z?E025N;bNT5{%Dmi7pYzjlYPR-ERrqJh+vE(h99(07sf4e6ILN(TkUK`{-;KVfcec zki}K>%HGKRYK{pZX(-2>{?~Q8jUC_QF}kIS$KW2BSS@y&m;&h}?jZ zJit6v)0}0522XidT_!}h-DUpN1pP=}d4EFVo*c(RhTI~fs0AgrddPzIPD>gKmu!l9 z*{*R3pET1L=VEZsw~65AyMJWLfxmOY&$M50zXWy7uGAj%;crrSy&AW~I<-(w=Apr! z2C1)0a9;>yQJxEg@qVCZuM=I1Lp{%hJ#~wE0KqyU$v8=NG%T?Vx)*Q%uj3q2e-+$b zq{2Hg#AG~N$0isWH}C1Xg@ur%2*=pE#4pBc>pS^A%;XGLOiC36K>=s7pWt{1HqaiA zgKR^EH&e=tI%~*~Go0ZWJMhYvx(m*>FUEFIoK@Gdw%z={kC9#dp!5yKX(V&UMU6LJq?js&w8Ck4wB6a`|wFCztD^4o9*#zaC1A6nMP7D{DR3?wBuH6ADj z`TTcGgQOu&L{)>juX8a^BMP@+*r93#?yeck6m5E(MmcJ?xZj)G`G|w!@lH|fD@MxK zCbw92%NAo{kslUeg4kar-zjGs(DoVCMbg7z0@;#$3y2dOnY+>p9>5mhq7UEe<9@LOh_w|Yy8vd4||<^~)y?+>D~ zW5|1rV!j|6S|rC>Bz)!+B_{wT@~|C~2Ln4myiI^q&;3T=Qvk{;n&Hzi>nzQfZ5Eb` zp3t$v`V^+ll+k;Yx~YjL>eh^(BhM4yWGQnEXQGW|i2F7YJo((kg)PKRE?0p0JJLM7 z1Y)5nnvES}PF2`IEtj1gy2o&2(ZfN*5In$lm@L5ZH$$4S`S;H&Tq(tqLJ{n1(HK zIXsg6(Q7pVz5v#*sV3r&WTZ?{DeX7_eknyT%!azs=v;So&wJunmF5!n)+3E2Y=9O_FW=v^As&yYI#;2++!-sP`ddoJg&-#KG9jE_n-Y5$>oimtq zJi9T}(cQ2oB9}E7{Fe(f;lRKL%Gu1g%$NZ1<1ef6faJ3Fw2^@X-aY5*I6N`z2wk-N z9ehXbCkZN3J6Dhoms1bg+S`PZ2u{|!`JuFoS( ziZ$U;N+F?}QEuTu=llZ@W*{*#7Xn4*PK9B|%1ae?%Yihjm_ZkS-ree=u0D$SsAiX^ zv7H(rpqV;I>4rn0p?e>%C`_S1+LLm*HFahw_ zf5Ky-2C^pNcp35?M33NV{lZHE4byGFbKXw`Egx`KD}&)Ir4gh_sg($#n`}Vjmi4II zdHRmcS$#X%5&RwxgY6X0$L6EC!c`uHYTH*FrD}^Sx5X&AbtE0%OW{nn0s2a<38hus z8GqG-O|fwlq>oUHfn8H7Nt1p{ysF3us5--F!mH&`rMRrx(p4u<&PP-zc_W-b{6SPe z%9%Im-n&ceV8i`^tM516U>01!+>c?dMQ4LAlDCX|EQT6=u_px3*6>dCANf{s6OX7j zG1r=fdsnm5nX-+=B!f;hnH3t*c`#>G=GZvSyxDfNDLY0sf7k-zj-hU2e|#h#X?|k= zLdCxr(#CZ^q5q{>tCI`@a84zKETy<#=rlUE+ctH!?{9L*$SL*@OJfe$qJh2CylTu$ zcLYZX;S}RtRmwFgY+4D!Qc6Kd3RX=lDrI7bYUdorSX-QLx6kKXpwgH;xaJAsp=eeV zbPeb-!FRl1wQa9jYuN&I*|@CV%IT@Zw19P9Xw^lh7-upHuLeV-S}##K$A03Uq^5p< zuc@@u#L$}-j0ZpB5kC;Jc6EJH(nI5#tKU$v5P^*4Cf4Ao9f{F7(w#GQou!a@ zvlknJRY?4Jtm8dGKO~o7A3Dal?@VEZ|DC?#2n5M~Im(OEz*W@$BP|rcm4d0z2*bf< ztu&RDtI`M|4SZvTrXf_~Mc7a#h=$^}xUWZh5V%?6=pC|H@W2~!J#IN^<%DbD;;1gw zOlwf%RPARk##*OtgurGh`69uSoPl~a^y3az8V~NK5wusnLb}Ua8#n!*uH;w&wN$Zg zTja(XbJ1KSZqq-3XIwS4onAXlc)ypr^OR|hIYCw#+Gd1$_lK62*DiWGt8m+(=o@%+ zWYQYd*D29EE+n&sk}nc3ly}=yitp@|$@mop(I2g_RNJ$E;Yg*P>%hm|i4Lle^OV~c z2JxSOwbU|?7q#>_1jg?2nX4->b(%-lhUnEi9zzkL?EpHvj1z0BykXwHZY-~K0j^J! zz;I*E>vZ*kF%YQpjwEWvn>aCuHy%|HAzrN7xd*jIQ+LtIzXF7L1c_q9&wX=9ta$>n z3kUcMM@ZMWY5QmT_qL~Maru$Brjiu?Qa!gui$N9I5FnHC#+4ywOH3g>SSrhW#P!`E z7l(nZx({Ko54YiByTKl`FrO2Q_@ya#?<3#rQ6Xh*mx_Xwnk>bDLB)na5vcH%`1S}P zX+UL0U&@djC$J$RG@m4C=}}J>i&5f{1RP#? zQEg(31>(Rgu!dh0l_$Ck1vcwMpP7X`5gTSm?sG#gR}DGY>DKYQ7M- zH}{6t0Tb@&{y1o)8J`6aMu$9^$4zw$=aHs0G1bPb;~!-M48fMHw&?E5&e1K3vJJkb z7vHoKDccOQJm%(If-pdQGVVE_epyQDY-skyPR)Q{zIDfTl(H`sSLzK?vOhZVh^8wO zK-qfmKMOAXlu}EQ%O@m+G<3$YocmetjVH))x!rGFT;rlatQ~Hm5DTA7mfosw`m}<1 zPMP^N_0k(ZW?)m-94rsOI<#iGN7jY4txb|o;mdVO1W23<{?{!kAYg^YV8IsFglfPs6 z6l3X@m`w%?$Y^7o+*6`0SOIlVf?fV@ZmXM7HssJmeWaShS~k>ebbL161^Bd^dpR2q zok4e2r_-LzKcD|@^F3dqz5_2sNy9Iabn6PNZ#;y|}|4IE4lOF5hQ>-*jq?^ilnGC^13l5E+&SC)9At zjeIXIP>>9TWaA50NIg(_Y0@Q7u9F$IQ03E&#eS)ZoTc^@6@eG1-Ba=v8a7F^YHey& z=qG@8Yf~P^Jo+SWKV*M2`N0rZ=_%Z=5ARYhcYnEfOZGH*M2+4}le2Pb<}1cvpmxhX ze&+@cdl#*XFm{BC@>~^pQnckz@sb+qaKKCR?V=bMc|-G(^P_FkiT{`7B#%pwRvPnF zO@}%oprunD6{>gxoCNa^mwOs1Q+@H^S^0y3@|D} z612s-vf_;WX8n!J?1M}_GL23;2QNccwXTw~^^JWweD&HicUz7AC=fGKXj}Ajo=A%( z+C2hRJ6PG+TEBp~B8Nb4%DDKsrM3pY?B%`j^b!jwSr{xAeIAw7OD(NMmj)EdL9Fv4 z+j(losWovnb_OX6I_D`YK*{>`v==x_!chRL$xc$H+!x4I&2qwIN%yqdB)!H+HT7?^ z_FoY-O9F{heQ&~N6=qLkKO7a9o2dyUMw(-mM9dQ?7N*?qoQxBQ67s^dGFKC*mx5Q$ z4;%1Pn^GOkT}uwSp%mze5zpK8%4}j`Vrl_ zqBX!`*`i~9tFN%YV3A(o#M)uYTPPd;+WTU$T4jy=Oca=5pOPIpEz+tc04AbJr()4oqz24?;SgWqe_P(4CYr^Im*M6OVn5iV5^A$f zP2(Jz4yFz%oN>)OEyL|P(d3tDzj$Tt2*+C2ylY+YJKTduYtY0wqXh@w!X%|H`1wy# zEV?Fj|Uy1__ z&R*E{HEwb7dxvjaKL`R0RWL5rkUNx@iV31iV@Gc#q-S3iB(RX-*zf}ea?wA;Mh)&b zp9mVu4sKq;Vgn|e1&m#F*p3%6l2cNEIj&Gm*_qmvbr$CC7(aAIaXnS~b$GT%06d>T zU&>Tb(G+h53-Z~n+M~Rl8vQ;UKr5%hV{@r=4w=>A@eI+-b zx1t%kZ1~(tGe}?z@8-}I5o0*gIFVSTQ83Io`D5!Bb{2(pT%W;mI9auS;9V?c_6@qT zjz62yb$!!aOyR`L9i`*K9WKmQ8@Ys}@y`6zCWW476D|67T{AVorXD5)saRV0a3bSw zlqo7Af^5Z^Kg#MEmWLz;i{dBdtKgE{q-Lht3ehkTLNgzvb^#;fg0R-F(?!OP$DDdxiHF!4Dj#K$J%kf$&aqW>9A2Nq3Sk2+Uo2;N z@p~h%cm`}eVo;MTY)&y5<61qttl%`EW!iYyI%YwlwU^0fTrO=$5vi?c>$0?VFzJ44 zRTzR+GF5c^(dpgYcRgIIzE#p5;JGyObR*s=YjP8&wHSQ9o(E6Fjox;D+M;>4`d z+K{jVv{@CDqdK7q5hAaAAID68Z&jxnZS3PAIg{e$l}K*_!`h6#@BU_u#Rh&+H6d@Z ziN2C_W2%jkatNc9qoq^DNLYvQp_!R`7u9}zq$y?NK39_Tfer2vLG0?7jJ#XdtKxbM z4gq_w)XbhRb&gAD^LQ^02L?3=-e6p`wf|CZ{y1rhLM9*0-)xK8-iMz@1i#{2No!8- zt7Cab`K4{%iQONFgCAf-^X52eynp}ZW0b9OXD#a>_@&e|sqeNi5j7JkM)w85B zd)f$jJ3Cm3IQwanjrMv+0&#*-G8vQNIFpXPZcVD(SaeSu)XX!VrK~Z z0*g>gfOC2Z;~1vjrx>Fb0_SsLM189rB=iewFoa{=r+a7yd!FdLpR>gQ7Ha5WkTHR^G7v?4L< z;LOY%jET2FVP^|qXN~anhrIn4zq8c6Jq?<@YF&c^_45bNQN5VIz3z-@I3mv0=&T*f zxzN)hz}s}`2G9$jH6o7INYwYN=R>Ot@K?hbbZKh_+>BxEkya1HomlNro{a#WK%7xw zPEnpj(4m%)+f_7JiTM|x?^+F763`7IuOVk0{ndoL4_c6f2k;2!q)tw zOLq|1-tH8C)x>0icDUOzO19^)b+>`R{N*OpYEwL0Zoh?MEd1+qSoe!NlVp2D{6000 zq=!>BPAd{g@hhUT5bRx3YdFfIWXz>I7?kdOlKpMon3j$V_q8lhH-Oq+9N|t18`wM zigf>W>&Bq^X2tTxdxLcE&6O!j#${r0@BRDTG5*eb!1H_0^lREpJ7J$MbAMbML>&kr ztReX|Rq^_$*Gq7q0)%29ujflLVeauwHZb0x#mh^hzi(`BF58)-zwjZ@RW0Lz0i6!fckgw!JG!`s| z#ZipWDmi?xTKCKiKgqS+r0&w~tBK4uW6-K8R#v?J$Wp3Ako9wVC# zwJZ{`F;|Y6#DVEP@Zd|Lqldw@h&iXKvM!I*H(2(K+<_BP?AeS<%!`wT?9G5RQlrPb zsq|a_Xp;DlNa9ki5;PPP$Tjg zBTx93S5L+Fzdpe7eVh-pH%NwiXL;!e9i1WM38N{pdF`3n?@*A<2$jOVCO^nja%N z+_+ATtZoYpD^;`Y6GsO)Hur%sCZ#qZ$DK=|&+ckTH;BKwmcQ`F(s;@bKfDA*PUqn% z;h05~G}51{-Udbr?km82R_!ysR0e)KJMwiOyHt_jYNI>z2jc7 z#BU7$5qAtx06?U03HVCwHX!E!p)(!?Mq-_USGzB^SW=U+#LpBlMbHG(h!amNv0V<^ z+v~z{vs)pF(dfr<-Z~||MSTyoB27YabsmP7M|&=|IsY{4TI?vZOFg8vo715u4tZ z^WTPg~Wl27NNgnCgQl-QDyN?-zIM#y<}QO2ac z+|nLntl~&mBQ_ph=}g6=>@`Cwp(H!I-oxY8ATycSOC&mA2D1 z#-yAPBn3Z@tXa;v0WeYZIRRgBjyTw8+IO4fLM5) zNX2UjH}-d#tRJT<)m%-Brwf7iNWn?a9hs1LzGl220x1$2kqh-)M5*i(%r`$2l?ox` zI<%IMeDf`Du89jYpe{KS4g@;7WDMW-X_gmb@|AWseKK+@p^G4q2)G0l)zez}jtsr_t{$(t%xX2Ft45uXN zk7-1<>9@?h9i7Soz~yQZ@ot&!V5l>oGJ>g?1^>dNlwDuX#%w;9@# zXqjF?Cfe56#TBN!?f6 zxA_3{G)89pV-do(MWv9>RL9Al(7M~vqhoghzs)&q55+arpofQX_bzH;mA1S#rB4d? z1!GJwGe4h@SUT^m8C3ozJxyp(DcS*Q-jo1304Aoe?r1H<0yo_z;ZPg=b8>@P`ouqa zxEoFWnK*b+IZ_d0HKCwieKJlZ%RU^qfJ?fr3|!%Rn$dl*JnA;#;MjI&nWs(^LJwozyy8(Y|E_+u}1}@I|N}M z%=n=a*d3PDYultsBmPKZ_8eb0uB|(*OUEb7jm|q6v!`|NZISvG#BT|<%N*{kaJSOB zc>h|CtN~i^*n&igS`;D^XE-_@_dV=dl-UHeTuLJYM?C(R&&J}&(`G<$>%N_GD0eKJ zOIEr-a4YXks)Djwym3@(g0{vRi{*XjqYOhf4PF;a7wApX-L_fSJq#|Rq^Atl&2rJE z@_=s)qzagBx)3C*Bo1E5gU8~Q#Llzi$2xR%@VOX-h8HodUVJ2I`L3U5Fa5C` z2U66ycu@g$$stnB2zugmV20TKI^?YocH*PW=!k8jjD?n9W^2ef?%UjcNVP|QDtDb3 zf^9~0BHiUQ$0bF_q*B2~oyz;%`LN!hwEJ?u8ouuG$PqTIJ{k9xv5ThlJ6-(IT$q{u zhk2S2D1v`q#F@xTd`$BXW6)xhO2o--#S6WV+9hgV!jkw|kYIA6vZFkP0Uxi@3+H;5 zS9M>qQM24anL~u@z{#QR&DtqeAEli!88Jh7VtHm% z=LtW=@Unna{pXxU3JU0nsAkFvSwG=F>CYR}JR_nf)~2rBdwe=)uLU|C77PM<-5~oQ zu#{YP%dt|4={u2;J4G*JjnI5dTR8(|X`hDYB1=v9;v%rpR^Lsyep(oNVn7!1nTz2? z?zTfA(1y!tE-#F^F7xOq<(Z-lQ97%QGSjW9nBQBVi&9*cmq+f=Kq(x$X=osE<*3i? z%L7vS|G+?uIJ;A;HB<*?=gOkvu?nh5UG1@C{!Sraj~Y?OabTri{GD&e0a!fNGH?bk|{$%T1wS@FV<)ZqY}Hv z+#*WXupsULecVWJ44l3Vy8yJHQ=)H&A1nuFK+98c3`Jg z7C<7For(#IVe+WCMrrmvC=(X0L%bSu|QO^!CHd=>D|CF}3- z*R4;K=*(we*(^yLF4B0CZfG-Er-^Q)VJFhguQ1`Q{sV%*u$XbWlBt<>u zdb6Ejn5CJ^1jSF!Vs^e>nG!7PGK!KrBy(T!9goMI;HGX{JUuBk7^#hB+Fzg;Gtlt6 zs;RvsM~ail^@_YZ8jPHa7djW=MIwV26f&kGrL>8iN3y&|MBdH>1Ku-0LYSF6Mi8SC zyg6tkmedjgV=z$#Fr~ex#}O%w%6eM}#DMAW4cjIa?(-rDRq|dNVwLl`<5o-X7H}fH ze=-E8@dwvrs^JT{OWjYvhO_&l03wP%C|4@w)`vc9SB&-Wjbg$ib9X=Va%wrfAbe+& z70%I`h1VkITB}VKs^43l^@X{Za^dW)M+s}$ZacWh`*5N58J@<5u)5&qyNB{rFx zqWO;~V?#L5)ELsQ8lIw=9Y&%RIh9&U@EI@PN(OyRL!S0~gh3yhDvh*W;+Ofc|D(t@Nx5+}d>7g0Z=Rj}|6OGN*}BK5zj~mmp?&IaxGosM*ijYRX-lFLLl@WY zN&}IH2osTS7&D<&Et)1G$eCNSQ16DqUPpHB*R<`9aC;+Aius@gpd97i2`b(IipGoN zfj2sgliPeV;j2MZ8bO0#yWuMU) zeR0$s5=pl#SswI_2bbkR!kmw^WJOWLlXUiy9zs)vln+lA&van%ofADxN4^dJSrx7y z%@cpn*dNvf+UP4V9;QO#jpVlb2*VdS3dT1xpNn)`1ZpAra*HP6t=-28l4E9x&5gfc zem|0)pmqosgtov&&YPU-!c9Ip*Cev6YJw>eG>U6xiMN0XGgwhqK^=CVAw}+^nIoGt zguQa$%tK?L*24&m8$+GK^futce=vKhEv+E?rlQ53F!lO8&&Jn6$yHU70yH?0Y^-{x zd2tu2FxJ>$u>3a_R2f~~Tup?#inZzvO>Lne^?tFvq8MZw6fTzRm$mcAVY6tE(3THP z%@kHe%@J6ZndL*WT!t$bgbYf#H8Z%-EH2z{wSCF$x`vAiL$&Pmbeg{*SUlF1OlwVC z^`(k%a!1Wp5S^5V_=pR5jMuysB<++~8GQLe@EvQ(YAkPbue7meueQ2-Lt~6K@sMqD z(BBZ-Xp#kbT~Q6~W5GogTfMgZ(hC~+()_dv6QSl2L<1-FmZU|>6Pi(mE4=Qf23c3+ zDp}Ux1iK>Q&y-#pnlb&Oul1JmmX+EZp=)3Y@Bcq=$F-Vx#k##3S7olAju z1W_oFNE^o$anOs|e?50r5TmnqxTV`H=z6z#(rFU^67?D{`GbdT zyK;}+nCWtiE4;j;U-@ztxW3YLJQ{@eBR!8m9$O`O7L*S~3dC`_6k8K*yh0>&1)7yo z#G6Mhfj#?Le@Ql_@yDM|rE3NB-LpiL6bY}JeF^cpdkD+NIWR-R)HpJ74%3IM) zw51Qy!P{jB-XsGuY%eJJQv`O=C7oa3}ef zUv}Y#|3EoJE0L!u-~vC+Qw9=#NB|wwa>umJ$IeEZcRC5m$#03V4*p)#hp=Rt%{(!RLY5pnox%;pvB1;e{qhlL2PuIs26p=b?Dm>U|KVY>T!JqYmvcQ`v#(ufd@?b_ing$=qxCarnzx9kNed+Oc)&AbD!(sXl4%4XxquOsHNrKj!Y% zBM$OO^J=SeEO9I8jdln#mAa1DmDyKKnl9k@GtD)$r*wIhKd(V_N&l|?puUWlF6870 zbDQ}C?i{HKd+M?+YNG+niCJfa(5idoVgCURuzdj~c&k>GZOvfH&`mEQqC5p~OWmWz z3N?dybzCkrol&uar5r#ZWE>$=uexVt9SyT;nqFszF^cDtOS|MHJ8&!Ck0rP29Ht0p zTH$=aX1@SnUOS4DA!W#H+h*}@D4}m~bMAl_hW{lT=pV{@fAG(C>+gb(i46oq`hP3> z|G?G%S@JcYeeu+=zk2a_lh&;k5ahgDWvnvU0345jsVl;nZ2Xdlop#b?NR*vPrl;5P z>DlmTh*bqtG&y<0ph|4cRx(lx96u(tz*63ORMAvbyO7YudY|3hJ={BfQS|QM-T3W% zeVH7S!0cL!Z z2VT&OW1dO_GBEOklPvzk2Wcq&#k=U=mBs{IbbNOi>OK3^+-w9fgn7kE=*+sZmLu zP50-d=q0g*Zh1n`&AvQWvG;{>J>&DO#z@KP+*P4ndiAMYOY?=bWO-NICys7j zhOwps?=F#6xzB5cRBk^CFF~72%jW;V*f$1Q7G-OuZQHhOTQ_anc2%;{wr#7@w#`c0 zR;4C;`o+xa?wA+zsfsf zraW`~V~Ws#ZySG*zp zLz35%*us^|oEIA{Lk9>dvc;^a01;?T*dv19ToQP#xVZ3=4(NTka@Honf@ya!3gwIp zBPP_8Qgn%Oz%g4gT7dOjcdV2pLWjZIKN!UwuBr8zdn`hV!DIM*1Qlh*KNaj_M%o-M zQ#Lmivl|lRD@ijsz39v_MBV1}6l#BsMtk=tmEBbtMB43>t(#7J{w4?nu!c-=u?Z%f~=fATQex{e(T{h1L(BC8qTjoZ_R8jF+DcFpLy=+U>UQG3;%-tRe(V{b zd{*y)bjrg~R!`bvwy1pEb6RKSCz-7AMW7I(Hsu+!wm61;Azina&8>Y6siWuiAJS~~ zeUVwiMb)G1DML%l3R#pZY&+C!weRIJ}b}9 zrlGX}E;#LsTd+uTr)f$|xZn%LHYLIQ4WEH6eOEowf|8$PgoyQoOz8ZQ-^DW&o zZWyOYE7<$^vkujB(aU|HVNa%p(SmOsJ%j^ZpY?ld$`)}Vks4jJT!0ooHY5Q;3+0SM zWQ>i`gj>)u2%OZdGZz6y!hO{HiDg0DOjzkr&GV>c55FThgkQtBVtlw>CbXSz{>hYP zbK7A})jIPHUI)!&8WMeb@Hd%yal&6 z-=iY!D$gt?v9glC5W@bk+IYy02TsJGK@Q2LBDp8 zWUhl0ueCgG_J^sKJTER^U&F9Pn zen8EcVNqHj%uGy|91a_0?b#o83c~N7cvE=&!0_6Z1J;RNvm7ed6s5IGBC?_OJP(V1 ztg8p6mdUW8mgW+L9~5CsAy&vgLgu+}cBApbBcp=HvZ6fw^5u!_6Y0Utr!N{gq)fPV zsnOJs{Jlm&-{5+oNrz{8wEK@Hd!{ToYe;J?SqwsT?k*xA$BjCbW_krRTA<1R= z`EUosxPAq7{Z7|%0gI|Y_gJGPg2q5qwQZ}`S6TTmvYxk8Hvy325~=t)Uof7ErdIPv zYoM?CD*EDx+<5#t^(mr!7`szQHk6#&L8%e%+_p^Q{6y97pVmc?MuSPQfXYzZ9BUM7 zBTKAX2+O&R=%I(q6&kyb${>e(h%l2h4kyP2uz$_a7`%c{dgJuItC$zxQ%ntiH+wOi zJE`ywdcrIY7s%U8`Hn%~JM|@^TOSBisI~$tC4jbp71x8r#rdVg9#+}EPExP5FzX42 zf*UL*&T9tc7PN}Lj1k#29y(m8$rAim7|Y16Tr;zGMFDsCR5Xn>Oy0;Y{YRTSQt7Ye zL$6@gP$mbY(%|L{5LGuOQU6wEQEij0CHO_!08!PhU*Y-6a{ZTSA-rX*+u`V3B6|B& zZlN7z=GPRjK4tn>#d2-2maT*a{mi;SkT-sOQl|W5CopDIWA*+(xg`qyg9{dAvNx)E zx!4R}4(-gFfGiQMB%c&Ptwo0vW-T<+luDx7x**MZ#t9UIvMD;cnX#FTR5J+-V9cyA z-$~SY33^n|G$^lND6b?auPBN?`(;C@i+H);nHJ)gw^r7bGfHp1DOo--IBWN8zy?I6 z21Q4YD8(xiIcR?pNljv9AqKwF$WsH8$p(rKl&gwrKD$Y~>3oNR$d2Pob*0U+g#YeA zlXP)FsAPeR#dk;5wn|0*iNJ?FbyGAOZ5w~FW~jP08^blxOfWm9(UlMHi=TFk2Z3i( z(%8Hh@R|rh9o+@HVGp=>yKPxX?v_}U5_HkSopFs1dN_5YAn(&6zZvMc3_v{E31Z;e z7wr8L!@UzYg)Pp?-Pz9XORJ5L-wejv&o_o(1RwM^4X9@ON)~|}ixM^=Pn(kAr<`_D zOrrkirWa_fag&~@ay=I4>lRg9+3lz?iMCgyrG9)JAX8kGaW;C>zoNAXe@iY7ld;`T zJ`siTMoPl#e-!_FDqQvW2;iuf5~MFYx&_tnQWIEySURz}u;m$Fi(=lB-&CHx8_1%4 zM-BSQ9s*_2?*^6Sk!=o%pJuUBE^5@(!8?VslqJnhXrY^@wwWN!-UrnN)g!N_a7H?p zsQV=1z!RGA-!mW#Dp_sYVL=`3Q{jRu`nbia+-QHrk~*#gUwWN^Y22{Mrf*gypNOIwF?+wYTGm>l z1r!W@wM6ZFVGu%*?`Hg-tVM01Nzm}e;&@xk8!R!h>Fb|sg53M;>l`14yX~(ZU$A*$ zxK@@}s&g^K$#WJ~S>pO;0Hl&KV=PjTXqfvpCUT?cVn=}xMktxq1F#Qpk*}u1>H`fv zkGV?qyU1>U9@L$NR~ilOl{J5sv-K0!h=HpvWv3Wdq8+)>4uWvbO$A53%evEL=3{ci zm%FC7O6csFDP_KfFl$Jk%v^w*v=Mc$-ro&uedkhUkb(5E=uL%37NfsZ4xl2zU$o z#-TnF!bKdgBIW@3oV-K7j#)~P+C2yZnVEQk_S0Fn8LWJ8&TrKmJ&x;i9G=;7;-IQf z#o5gMw9v>Gl>u_yGwBv=;bn#p~nQs|D3-yg8n)_iXAoh#lA|O2CR| z?dWVyYh<%vJ4s-Ty_?U1cMC;H#P2{Vxdi?A>HLHEmUjk)t5cf=PBlE zTb4aEyaRCIVThISVKzlGt_p()@-lI-@_u0zvi~WNOe-8In?>b%;9ow0e3ugx$8THK zT~UzaXeAvfd~(Q(^+^nym6kveJU_7@bK&$Kq?V8_x&M(3PbJhX?{m^Lh}4Kcg%9c@bK3s7N&>mwu5CYDG5Vo3vsjtp47 zH9In6;bCQ*>;x`Qw_RGc)`+am8(NQ6w?ij~Mz6GMUSIcfDsQnqUtTVLE3g}Kx$;T( z!lo4JseSEkd+zp``IvE@adsf^y3ct7Vhe{6T;8D&RNrU)bMdU~!pfO@7^36(z-=!u zGlkjuO2TQdcLc;~aCAib=g(Q6oxf^EroBhdmoCr`zonqsSLOlT_JK&=53aBdzSfN( zQGK{KW?WJ}_Hh=xqoZ>`o0?njdY(?n20xb zK?J@du@Za-BLgoCGrlvwByao#{eKdg*Vn!FE2<~o0|GWuVQFy545#@;^f`||}D zc;Au%1P(`PZ)`9Qtn71kn=SZXq9J?G%TDmlrm=r9vRt!0FuOBb|D_{+^3wbgsE zrHjBzJao&hlyFhJMY*y|^@Q)^EmdZ$k32lQyHds|8bW`r$_T|*wTnhJBOc6SBF9nA zr=DN0uzJ`2y{l@8bEF6VHo{u~ewSE?OLwFtO0(lTNcpl0!{#2QxyxYmc`~{CpI-U1%o(otu)h(R~SUl5Hwu`e9-D{5u0Mjz- z8*Gq)ULi}sQRe*{-g1QHjSQXJ@jLfq!CD69m7^N0Bw65d=?gNkeh4Qv7SL&SRo}uC zz*~vEi`8a73o*Otk&nTC&`yesTU*sE@hQo>a&XCP-y;tsDY#Z0D7Ep}B&^@*WEoe6 zugntJ-*|DwA0BBnjjlU_>#Mwh_6rVNFAg&cS`Qb~d-DnOne|lDaSkE^?}tCXO~FD| zZR~(qP)UM%;(i9Rz-na>EalzTofKUvj%}myGI|n2)dkte!g3`xX+A}`gn!IjYcUC) z$`h*Qk~))NQXM?NGGK@tfvB_EZda_MQieRL0!nyTEB ziVXKeh#j19*W=(eyE4V=#s~aI?*s^Cu4WDzSNV=JuCos4g^~bqBFgO9%h5tK^|XeFWk0z*Bcv zXhO(AvH+DivcvOkp=1c7tK$t+waN-iJs{QzT|cB$29Ka^M@tigXj0ih{IrP}L>W+- zAQoMBjOhzyxf5J>j*@bqEjL`OSqx8r?^_j5ZTT7JyWIgR-2A)MmFT*Wvfvpp*K)AK z+hm%HxO^{#fr7g;Fg3%!_+BCdd-fa%-m~Ff5y8J>efd1~`fy)X;Wynib&){kykHOpgX>f%+Pv!CR*AuVi61c7igpS^qw=zW7V9 z0rH`%qX@ADT4J57;peSdzRh5;*ik!cKl&mj^`c}um2$+Rr0rVgcT%+6nRV1=3Ii?v zK7P82_7w9KO;h%~8&@{_qH9tMXL1GSNZUm#D^4jUH~3EyGv|%>?}L0drfBYLL|O&+HcYDT)FUF1t1{77AE`Z28d14k9js zHZ=Bn#|q}VxaJWKe`#e(pe&VDjFSE6M!6h(YnD>CX8<-rD5iU7bl_oFqoOJ#WmOYE z_RlO81nb>*^2S@RSv^gpR?Hd9cmd}o0_CPJD!VC#s6pkWaX@Q(YO8oVN%`tGj;Ta9 z6b;-hebbC`f709l@%~V;*Dp*8nF_z=q0O&GxCR)C|A440-6Qp>5Ns$#5&Mwy9#fVm zjcR~LnsO|NGOvY;E}%QW3#B9r-Q9~%#q}8Fgd?1JZKFn{#|cHLARI25-7``RF6jtm z=5_^3?kY@UiK>`olfxf&%}5t!W&Nd$UyLXwDCN_^l z?Bk*G`VnOzhz!8^H!nZ5$d6OHIhi1%7uzx1Wfv7!iP)P-%~q^=HJIC&^(d0QY`}TZ z1UzFlYQd4B*<#nWimb8;MVoiGns`txERp>8!Z<_K5W4BaGm;b(&R$jON$y^eB&oX&RIHgajy2++cF;e2@+~K^l8J zWLF^=S2BN{HCqe7>_Z(JQ9MGWpE+~`BIBB7wZlTo$5%BfBI@1a(%skV#_u%Eq=@P3 zUExytE2xIsv+A}uftTIq6Y5!t>yI!^^h7mR6n-W**TEgoRbj2A(&G_b)Bi{_-bdo| z84D6^zIb;}CD>;X!oDI_F;lwDa6QaaDqGFh8UH>C6{cs(8g1w^q&_c`wO+D zT-EE(6O~DxW!#nkJwjw+yiMeXq1kUN7%VMWm-qWDyO1lraIP^nu-P5VO@~UQ<6ypj zs1RyXv0T{ER^5c*urP1v(R2^!k4%jdZpjXUHow&QudqFa$&pRXDCLN;0WXiNSZBCh zW2+W&FSXPIwJxw!6c*XGCaI;WvK6|J=mePSW(tg3 zv1*4I|D+WKQU1rHcWR8?hjo4*=H?gMY;WG|Z zl{c#NGiH{hebWlcQ9Q*0WJTpW?~H^+)}*AI;@}Uw;`n1~7K6N`2NLmRSu_ns0AHtZ zq&2An-vG-N#a+>6(nI!sl_U3%1hGS1b%ngcq3`CZtTBg^NNG9meS*3aLTzG^gCWhP zFsyq`ODoUIkjXAVv&xn|h?Buk%9;ymC;J;0lI8H3UUtY~mkPvlmwt{5_j&faTiSd4 zUm6bW52zIPIU(*~0A{S=T8a|mR6E0tvlywtho45dZd{os(y7(_-w-Lw{Mo=8nPGfD&zm5@U&Rd0MDCGwP->MoT!3r7=fKBsUg{%PG2wjqG&Cy~LLMT6Yjy zO>uf<**wq5N*Ll!5DWK0_Erjt=kdh=SJ#2jxcMv^Dxvj9hNpvLz=@r z7w?QyOEQ#~D?EOsXiVDg#Nm~reN(~o+?DpMsV7iPEf-QxW0cG^%%X`qB96e6ql}L- zQ$V}TXxSC0Bw@{(#{;ld%FJGaF2Hf)HA$HWXBSCc)h*Sqo(o;x7+ZVL$`ZA7Vc)Hd z-p}n2zetp)u#UShXnQ;*+df_!sM>to3LzacAo$R(h{-lML;BjFPM5! zev20MvIx0~2S@|5w1`LRYD7gPOodpCmahPQL7W%=gQlINN+O#JcVbYREz-p?1SJ;qN^)eSMpbJUUI+3zUF$_y$oTY7zS8P&kz-EE1=Hx!ot1fUSGR2yag)Z$uRX>SFwuodFwRBDKv4+0W>SaKu<$q-u(Nq4Pge1vE*s2#B_ZrN zV7TmO5d21P{RkHRjK_Jhn%(OFc`UC3@f4d7ZQ#i3deZAxKu;1H@;!|oX#9EViI*~G z3-mvU$cTzQ^8d-PPlJkGl{Oo{TyI?v#vZ!)wQ7>4ZqIl1`?Bz;*m2C{mXU-V5b@*l zB21xd`#jDA`>uH5>_op_;&&E^9);h66Xyd6TZV<95?*PQM4LpRvKL6DX6)=$@^BGX zIGA`O7I=l`Fxaw}h|7){&Klg?TQrt{IC@w_ zk$`Z5m(Q&lY!LhCob>ezrm&HKsM&d+FE~*BJ(;B{0l^G+{~*+kg^iYQ@ABw!e?NZ@ zNO(|=`nf?1#34w@%&505NKMO*ZCMFVtViSN+dn+oJK8%41QJCT1!oI)A%uYn3Ym6b zY6w2BD}+8NG}+$^{cj1(;z9A@@ZZ+Yw($Q+F8Y@;mvXQ*HFN&w&ks@8@xawU{~RXO ziePcqC6~EatwEOxC)rT8)Lq~S-=IoW-{D$R*w=-6lET^8mtvJ5C~i|4C#OGLPtmbz zrJ#Qafz*tog4e3NnRM6*_rS2Z?Ik_hkSvU^9<1x^w3y+3yZE?txb~Cy@iCJt0C8hg zb;fvuJ%BWc6&fF#ha?L1O0P>DQ71MjS%)-a45wr0FoaSgrWBD6YR0XJF%@s7p`UvA zDEs%^#>S>VO{{8gC!c0r4Y@X=m13_ws};F#3hQrt?B2wkul%5fSSJIA0s4wTY9;)n-8Y|%OLdCpa{}#b!mBo&c zt3;z(6X&Vfmax2swskq)p{tm=7#adSfCMjN!Gqx%9c(3aImLF=oB_Z!(bexY6`qmyF_(o1JEX`RljtH zv(8{<)+KZANK=~fSZN-fsT(`L^<=xEe3IVSGKuO%Aj_9R+@M`QPJ!xg4%6I|Kre$&M8s3saydjyvaoyc+%tgAQdadetFMKEC~uZ2SFKr;b|$?cP%d zvhPeUvv1F?KdDngGJD*>2EyKQEN|I@9 zRJ~{dgnu+I@*nn_fZo4IJ;;PThs!oN5TA;qs1m3<>F)_@hPY%ZvCBH`WiI=R5k~gk zDaJF6t^D(AnXa~$;!{^KJ7o=)7dVkeZR7_J=ATySGAKqvQKGR{?_f0}`(XTmsxu7_`#c?da@7zlTC z++p}DrWlNy(yqA)(`fm_X5IxzhdLHn2P0d~4-@sz#2I1(o(bKzm)$;HxaLly91mHh z6N$jkCrUvuA0^RDAGWwY<?6qa_)g;f^!_RiS zl8?f#qY9m2No zEne0%s0rD>Alc4A&02aLn?-g>JzBzK$O#J}8lLf4`(?QnjJjlJjB%3_a!x576b$)4 zz0iyR94F@me%X0&Z_1W)ZK)+)t{N%ioMK76Bzul@^;-zyPJGZ!jXxk6=ZCUj25PY@NCGn_hWiboY~D)W>5u>BuKSO+@zx{IulJj*%lM5d)BI2U#Q#Q= z0j|zwMt1)^RHM~pH2@k|o1BOu{f{AHkzfHb7niK-$cE$7cyx0+#(|Q5;5a8iP0ai2J~7#v*BgC<8^S3a^gM$SWYL zq36b5^`mU`q3J+uMIrR0p<2u*#-o3kjt4qHW?XA*saMmrXH%Lqhgh8JlayN&Xm4V% zUBIU*l3c<0abqAa{rbMusX8e+Wu}eZr>^f!qZ(`zFiAy$p~8iRnoi&y1GtUPF$?!u z+!KquDiXqkvk;MgvTs4g`%O_GVNStem#DbfcWp z(b!QGiFk$zlAjt;Ls71z#Ps(R{H$U+q_mT)KArxZY@!(4?N!}0N}ZJyzi7r`aR6Vj zM}KOTeb2GWtWJ$Fl~6o0&P8$urN|RfOJN$o)}|{@bu$+y2a~ulX&%z=9gu39UO2xE z&_~PS+uhwVlDL)Hy+B=_nDa1c71Fk9S!{^y_3=IxrQZaX$dwra zmkqvfMyJt?^hit6mk`k^g)Z6u3zx=zFNJAa{kELxM<}ncVaS!n=>&~wPHm&T!8QmC z4t%NBYX9z5b!M4YW3u;*%^~s!1;7)=*}6Pb_AYfE)?0$_YE!LIwRXKRr@=|*VJ7P& zh6vZ9QpsIKe}95u5;~U$u_0f%8_Qj#Kt?u4Z;{U5_K#N~5zmBuAxB5P{+)lPLL-K|ggLM<0x8)TUdCyVUD6Qo^~+)VX}P5yf))(47QBcv1Xd z6iQ0CMO$){g=h%={LE!@yFLt7#q;9_n%B(Q*SUAEK*pWUai{CA3K6%&za59A9xUmt&qN1D_9m4q3 zFi$JQhiyD=iw8)F?F-xyw+GI(F?fxtx5R12H(oGkO0zraygj&C#sD)>Cqw8L+LgA? zD@25|NN;C$>(e*i8RAFW+FRudxzcHAfh6tT7)q4(Dc8{rWe~!b1bM(3|AIx-Pfp zwEiv^+e3MuqrrHS_Wvm1Kgl*LNoS`S@#GbXu+}TmPL(=kNyaiujEV2%N=VzWMu|+@ zyIy4fG}ldS+ULl}xqL>LHgp`|_*U?8ChZz3Mz5>zZCTDn179Jg55Ld?wjQ5S-in zal=08#=_tKKoQ?reNeM??s)_MxBa3y<)jYtZ@Rh{o^D@GI6E{!?dR-LKKVss*E3HO z7;+4vGm$UdfvKL2IRCaGJU>E1LL#vD|5rAMq0^u~2K` zOmhCe4vvk=OD0ip$)!se{vx=L>us;y9z2qtQeGY(rp98f2(>d^;M1W{@ z9Su~CZz2E%Fe}sl3Y1DI}Wk0+ZKV@pB%5jRWy`&RRI+Z{#ep?4^>MMqCSgf`qBCK;8VJO9r z7WH(qA&ghs!l4S333C)ANFR9P1yqwF|001+d4x$?Id$QME?U?mc4W$ts;%D6L(93* zwJmn>;%Y--tQrjXW;d5ejw|-tExI>(ES!dB< zn&rLY^aD3iHm%x4mVnjh(bL7&kZ^d(9#>2`S3m$0T)=LZ_9~|ZTB_VfMGgIBYhmeE zr`keF@y33MI>WiyX`=x{Z9|F95LUCDotCb@ZP#B(tP5wx=^4#w8OwMvKULW1xPeT0Yti=_%Lv|Z*?MRNmQO00 zb4cJGyU4Dk0hp%|v#j`8M-=ITKy+#X32nqAsVeSsg(&T#|t0Omm$ zbAooA1v~{DFa(h0lO6m-^ok6Zs@62dC+_Fi)RKGwFO=&RGKFmq$`KACI+~M^ro^{x z3sch@bPR2i#SB`SOti;%x9ekX3;fJ*6=&aE+zJKlz{xq>wwQ5TtObz8t0pk6AZ_Xw zqD}a;Py|S^2SDi$oZEx=g7~&xBNv!_zADyj(PIX7ZT7L3^%!m|mGP$W;lWntv!lX3 z`bX~E2lH)TM~B?G*~iv(5IJHUYfTW}9no{_+Ld_6$AoSwN$^oFDNVoTk8XNlknUWC zwgSQudou^2P%f#Q65y0WJI9hH7E}IK;5yH&*jP^3GWL@@A?`;H)xqAyAl{)XCP)SG&mg4=;aXy*5v=z52UvtTEfC-E zB1~p!iCP@}`te!ud^C3hvr>8Bm2s-?!cR%XtuRAM7apjNa7120k%&`8!7im8r8eT0 zCD?uK-}YIQ+7i8!U5ZGiD^7j2T z+iMLPrWe)X%qMIQ!di7ir{j|i%09y7V4Ts&6A9Pw{+*ZMI~m!Uu?<79St1`tmw*Gj zr&~TfPpyG#nanuy>3(zhGKNd1yfEU^)P5$BP{JsU)}8R~;R+G|kzV+XmaC!w^gg_y*tY5xpu=Ixzv#s?lg-pzInzL*4twdm}rh07pQ~jWx zRQol5GsZFvjvoE_fUB6`nV^wS0$F=5icx}qw^j_Q#C0Pan&8S znuF^0=0R>VnP(p|fBqYChuMQC$My|QXM+8w_S)6K!S>s?(ZSx{%*55o!CvY6JHXY* zl}yRO#p)k7{yB0a1FjwBmC*QOQ<{_P_eZj96^_x+(+ar`QB4Do%v0FxwKx-o6pJfY zi@)7!KJ;S9r!CpuE(py!YnQ?Ljf>>BE-$-|b6l={u8(VL1%Wz6*nyE}&^v{MMbt&4 z10w9YJCo|mlpKFqB$*YpEs?2W741K50J^*;i3ndsDII-dh52vzd}f`ec4rA#EZYyC zo4cOJRmJXznKsG&n)rc?xbo zChBSn=h@0JTDPPO+5jOuozM1e!u5=KDtAZ(oS>XmvchUj@CqES3v>DCZuCF)WBN#` zaw*bphxSbn(Lc_9u}xKI5vZ5=?u=y|r&C{u%%X12HM_($o6U0z2h9>8SHUuv(w0?D z(Lif#zsubOKqA7V48fm;bR@S>8{UP6NpJ*x#R;EP9-NgP?n$JKI)%##HzA9*sjE!C3NHH#I1qhp7ucW?Ii5UA_8Z>3lX?gJyv|ejVHbt6bu}bvu z_MUdhInMIAuHD}D2ho(IhCpUC?G#fG(H0R74OHvyj4+lc*|Et{jv^VWrZI{Z=Beu8 zUUo;oHr;%tD|LA|EgZ|c;Ep+6vMpR;^?^Ir-ngvLTRCklrC;*U>nL5;m9ctDIqxJl zc!n2z`z?|#{AUFhQY_By%5ual+h~6iO^xI@bn_Uc#rf6h#(0Xq*#C%af*JAeX38l( zHht!&l<@AbPpG#7FY7e?5=T~yHz>n#X`YOg{YG78sD)D~ar6n6Ug8J^RoU-|Z!2hy zfqr_Jr#pF(H$u8I{t_Mhk()OHH56w)r0S+i;#Q8pYTgg~!|D0o6TZ)z-76d(^bCJL zP5t8&siba$lGRU|?4(vrm99sNiGt|C5pOM9CyDZj!odbEJaOT6TP}Hu%mq>jt?K7^ z3eSqT-UJunis#lKAlrR6++!0{D{Wjw(c0BT+~RG(Mk(6l>28UY#Khq4TOrp4?s5_i zWBGvI0%zHSXAb75tfFtQHj3WiFn+y~2ZM<5!PnoQ@7jdnA>n}1&HZ*x429H0*kfbY z#tg(|oQ0JNSvsT@WB3G4y-BkfNhGoWSDx=+QEiaTzA1gd-;sX^)zqjNN6cHG+~ zJb(t}`9--02D1@%nFEJ{Ze)u@O`tAUFE|L|*=1 zrTEWna7YWp88wy3(lTKt*4y8DP2Mi3vl8KIjj)cT7oiCwJtDi0o zs79!n!EFFsOn4n-qn(6;=t@V&POrjlY1#jyyJdNKS$(6nxq0dH+RtIDlMEHC=XyoL z%Y*m%;`ootb?40(X)NlT^m|LJeX(K$l~nHEw6reW9a2ueJ+stUn6=A7A|IxK5EvhH zbzfIh%y8-4*hnq4Ro{UZg3yL$jCp$T*W zgcDxMYn%`l1p&-Q)`Dn8NO zbeI{HR)yU)m>Ffyntlr!-<1AGm>Ix}Z3r$}PVEgy2&T7JeE;!FS^NmP3n?dcrzTZp zMOy03ys`f9am0*s$PDTNEt-HquS}mt1h%77K!4@nOC-!W3}>Xh<}OA+pOR;De>Kc+ zYCL7nXd@73xm?U4#(c$P@Q1A`A|i zPU+o9v~JB^*@zR4Zq-TslAA*q2X)WLv~`-i9QWc5u2~O76jQKICPB$lu zjy^Ujj)~cQH)x=cDR^{vn+G>0^J(v=6Fvs{%mT; z!AuHzGv^g@ZLrf&sXv-=;q16$L*6cEte>G`nz0N^iO9??6q~0lQV~`nqFl(8;pBVO z;opDYyOJQwFCE-4^tV!1m-Z!9ip(l$M>nPQPUoX1l6kNz^KWUJz#z5??{e^Sv!*Zd zrjnCdk&da_2a2PxyLF`k>HUeZJEb#Chi{|egs0lhim97pzzVEzxV@`36fBXbqMvj#Og&39Pp=_Qm5}Jjt{qPHASj8q~xx;nKD5WkP!ap7A}XUmouW86oDi0 zwkHMG?%GWGvrTg+4ckGBtdDzut-j|qL4q!x!}@4SP-B$|g(HQHY^73wVZRB zo|{%{xqf$aIoMO#FW+hiv<;XD^bhjULL#crzGtkFgi~f0)UmXjmL>X&8rV*KU(6Gc zW#{r)?lDsmXsy(uUXpcgeB@Exlwa*kp(98;b%lRupAA(I(n2*3n%h^8W!Y*2>L_;i z-zv@WyWk{XN%nV>C~D+*P^!xzar7)(zHmXPu?TA`bNwhva{zha-lRGwch(#hMD)-O@3j;MaK z+I=X7$MJq=k;XY^HBsWT!<2k{IqCQ^w8<84^XNWKk|qqqt3y0YuMgznQbYv&_E|oi zi<*0TZ+c?7e1C8K!q--F3eK@}&1mHEyU#Xy9S>Bw(4iTezS32Xm#io}q9UX=0FWfY z;kuCSiSe`u23prk7V9->6!V@aFmC7HWp~2XfvW0L1>Ke5VtM|SVVs+w*%tRGqzR7z z%+W=|R9377RFDD8r}k>0BN>|IgEO~uPu^7mNCA)<52Mc(nZA*K-J&WRMjsb z)PwWh4Va+d=C`)%HyR{P?iqS!!Y6HAAfcwWs+tl@kcbrWWL$ujRIOx=mPrqq&Cryj z!j25Kwzgg#)FELvCv=m5S7$ za{fKe53&KAjCe;%Lx=+5sd_l_;#4x1t2`{+g#*JypCVn{Y%aR6uRTbI<8xUZD-o@( zH_v&|MI+dUC|brH9Sw^snqde^k=wy$T(wdV?-t5o5XRz@g3%K4^AlB>UgNiAWny?* ziA{+B`w2jH3|5XE$xMtLYaR?!2)VL_4M5Kh*fd~WhnXm%ZAMo(pBaZ2xvMNjUH9fs zSf(Lyng#WtFPDxJ=-Oi1!+FO!X)WZEA} zfoUQ!PG^w{<$0<)tw6R*LqBZo zM9NM<+A)MSR{N;RUT_CsEc1S$hNS4Q8w~s7b7937Fg0e6CPpZ{{wHSzo6Wm-&T{$ z*+kRHPlxQ!5gTn(6bVc!lb68sbP(el0|C7=pVrRm25$76Q7|h-2JBs)Rwi>oHp1Lw zecct1WfRP9C`uK@!WKyMgl&&PtEa3$8*BYqxT6FfEVa%p{S(|GrQVnvgtj=GKF+0> zt3}r&GN#m0vQ6LY^hKQGh({yw>!2@1M(pp5wl=i4E{JbC*picRQdd?JjMJ4 zmS(&H_%?U-?^9|q>N^t!z^Fo{8!O4*{1h#7WsdcV$*Kj~cIT|Up8|4L<7~t6AEH)^ zA`9M>Uxvl0xvHu-`^hMP-cdRsm6Ej|~UdcUE+sdyU?;tWNOijwDOHpO0 z&cUjG<34Q}Y;Y3a=+a~+KcM~Y4~KcT;e3;~iheV}wnnP@$M=kgm5~OvrrWH`JTN50 z`mX^L4zKTJ<02do0ce@az5z56=f)wJ*fR2XS}EVHr@FF3LA%a zoP2tNODq+SA0ahwt_hs{;FxSsEC_ROUAXS%&GItig$Kc{IJWFBLQ3=X)1R@W=NF7Z z&@8y{ENxPfM#Vc0#%(;908+*~Es+w{?DnZivcWN-_p2n$SK2m`+j1sN&yZk%t=|NH znM(oCi&ZWAf-P56>>0t&j!Wf~O*zuHbh|BI$q&=iiAUJCDH#R)#^evBr4gsR;ep{m zF>i+HZ4Ahp7ysVq;j^-_GEll%#K~@mBVit%ugZE*W04pa%B0Qg%1F*(g%YFIL%N7F zE7Q8~pxSil#+)CJ-dV%VW>Qy9V@?{X^Wjxvu*y*R@2B^UmU`I~*()3JJOC@wP)D`{ zKw(G0mN(37yh5t@yd5Z?Ac$=KRt(Z$ytbQ|2k-e2Fff{FZ4&|VuU)8Pb*D^gkZTBA z8tN!8&R=~C+umLTu6D^j)mdXrOf#U`TaX8QC8N)#Su>k=z0B~xmhL}ifv!K{I-dWM z49f3#S35)AMbYa$ z=-rMX=*ZQFuekpC**J?oeGM)lsr{)7+T%KMnD?y6{xlH98v;-WT+W;!iYYB_Cq;7T zvSU{s*Q zQSzodcily~ir@j}L76flX{1WFQqWo}qccEKyi87>qFCa%0^SLa9W84&zgVw-J_ALp=xUF z{ju52Lcmg`ERxBB98HEimov;3A5x{Pub}7*Ngg5v%>!ouodxk9Bz9)JCRQ9ErqLxh z5!O=0z91%_l@~``E&C9XL8A!Kwq$BSC|pA6GB2o`rDY557TyL+?=$?;aYc0Bj(inq zdY=10dIa{KB{R4|FqiF{Bj~BkH`Jc1>Z|c6_0$ExOu*0*Zi~*Sr=Tl5VR|ICXUiZc zg`Wc@2fA_dLN)SQ#$6DS63fv3Mq>$u*K1N!KulQ>t+M*s0X@iF7DsO57_9dz3&za| zp#}Z3tfj{$%7AcQV)A?8M3fEhjQW{yMV@q!FT)u1b$!7i4`x#<^`Z7`4>fKN{~ zIK4)(6o%V9evc4-G#+y39LR6OXwea~RkIvkjE^I<3Ht zca%42c!oy|HN~PW4XVz$c2&uUWnMHx+NN)Y29J8A1Qk1h4VB_L!nG7W%uF%za zvZo^LQ5*}0P4L^BO(6uuwEv5*Z;H}1O17-5v~AnAD{b4hZQHi(%u3s~ZQJ%_-|0KE zx^K^{b>9BB|HKz3V#kiXWxI96YV@~bPBGrlwIsT8&rbo{{J!|tUD-DK3Qm-9Bsg7J zHm6MHrL`qp?kLsRYl=HP37vkpl6!Uv?x!H~t!X5)JnmqfN;@XJ zAC0Q6xZIMPzP7hCXL*1(ny}k^pa3d=w7ar!@&sa~4>fxB1!C>swgqGIRKT*U^M`Bu zA){$>Nl(P&dzKm8!?TMCY@7cC*T}qeW4h+>eXF@oK^!>s&=Qz%`M*FuPq=XOkv9ck z=aZ*$KZ2w8StICsV(6s_YTGIQ4feO_{S|`HI8BxoL5#cCA&}qj)jf zsPR#mbJ~2mX$_s(m8LDrf$t)hKDSnOm+x^17=%b#4Cm%ha2ROOS)hO7I6oD z@g|u3Cgk+*m!@hrz>^Ntc_!?8Ll29bDlv3~rN30uAEV_zKT@IKoTo;H3o5$1DtSk^ zzwRwoJ~@zH5R?tS0(m`jEmHIBd6BX5hYr7ranvV3&B7v%KtCkf&C)E~Z}74rJa=eZ za0?G5*Ub`6@^oF}F$A)GeS}!EbWU~Du1<>~W8YMI0lLv{&h498Hv-CRi@J%|=_{pk zH|7N@0M&BLg1WI_#Y-nPsoUeW3A7GwYewB?>!@iCk|hAYAZKA;3SJ;CTMM6#_6qR^ zK4jei-8~VrKTv{BNSOk>A*?#3B4Qzv=X_=<-q;&wedg6Qi#cO4ull^&BDVa#zcFTC zsvSE|XGFlBT!Gc^d-hoc9BM{IS8Z_1-}44NbX)UAIC%?k`BDf^S<+B7clsQ494@1H zOjP__iT_4VQTw9c(=Fj@;4R=*a){cYCZ>b6=3%?QHmW4I=T$U%1sri-d|*qDZVRkE z%kh8k*?ZT8O&-}-4i=q&n+aBbCYme4|Vzl96ysZHY`!Ikh%O`y`SO!HoSf-U72((=1oS?li27c=d_i7v0EB+jkQPczCZ;7|0!)*9U zSAg3{-g>-WkCl|Z?o0dMv7D(+SXx9GW;OFqsLMz)X(by`6gzkJE@>wArF19T zcv|)bZhErfb>!=qZcX)S{#K`XRV=r(e%VC(H>;HPJm-GX z)(~$s4IPa=yH&V+%sv5oU(yMu2I<1zJ*!VL=^{C@h+g8y0wPuu4atzEfbFJ??WY`1 zcv9YyF?A`~#zGV?RHY^?#Jl}A{ln6|;4L!Qbh2qx4YERlJi;1=j^ROSKh2GH9 z)7PNgdE4r0-ssAKVG)#oz2#mHMkjcru`&mSG$gnc@nzzO3&y#s2nMSjBI;TXK$J9M z2iy^&XarzO5;#3Uz&zu7h8VH`exO}3- z`qj9-_;_p&4)7mHVTjH zik~b>-NeNw;BPpUKB1*QzEZ!(BXemPrT-XX0Zo^8J&5>ziH0!W&$G^pM|<;-zQMir zBz|#;64)lGpCyA_k-nNz=uPsqE);8;E6@mezeW^ln!nG6Jg7uWS)a>RK=a7tQBW#U z0xE~MC?7=R%D$-xB15sR*EQ>$WN#ny4D63g?we7_*sc^V9aaAGG>KJNC8)2H;NrhX zSz{7E3l`KJW>jQUbN*R&nTG~&Vcj&XOKcZJhTz~DwOhwDx~Cu8EBM1zvc_YA64v`e z|C)Ek2tjgQ)W%4g)Lr+*{n>k7g%6}_IrQV1Q;{QAnHS`ljav+0S_ELP;83khvDvspxbCL3FFaEX1%96NMC2A#Y``|{32yb#LpwkBO>(Aj|6i5 zFjeWx4y+6G;@?wT>Ek36w0Ok9cRq!Z;KWh|W{vo<#QMp&jb* zpvPz83}#dwj^=g*Y2$bdEXqDdoL+>wR>n;WUS>`+4ioud4aX;3N7^c$M>c>;H8OdW z2Cq1Os+66#_Tey)pPdkPhXFJ3&6V_Fq|)Ry^mKqVqY=Agm06^!^j)`ily@f6=Hh{; z$*STP<3#`hBP)VG`oKz$d|hVAYUR?-sY^tg9%gp5DK6*~!$I+M|vIK<)qW#waLs88bRmab80pmwu81p|~ zqrHj4KM8b->k61gNZ-_}h5{@0Rz0$Cm8yXFGZDIwiOCY=v%jho=TMSp3^9|Bj*J6j ztvVxN-wI`>6yFw5aXe?yB}kovZ}S+ZN_`Su-kn>63ZoNNX}4Q*?m3S=eZKD3S$r8^ z#zLGU$%UVm3ilUJk4aS$s;opqAcC`p)wMs)}^A5s^)C`m2!-5A0p z7?mlcHw>?gUegz1G9rq(^fz#5$FofMI1|W?3UOHoTv$D4sszR9KDa5BsDvk7Z7$v+ z-3-h<<&szGZGhvVNB~<^EqHEZAhFMCDf_avmVlfjOzku~Z~b zaZBNQVTNkRG#i!#)|3Zu0Xzlr_$&A^3V+pjS(hCf`Ely{dkXD-F#-oXGt>Lsc#0Je3Xali8KC4$qL0M{=vnfmrwz;oN~~Iq%dc^$Z;K)!6c%K2o&eyL^7(jyP;0mdy?)EZSfLfyF1nKeuHN_x~ zS;r<47LhH#aG^&<;Lq~__;hJ?W|xG1?;n6EY^KutZ7!!;>e~kK5&f3)T>m5s8%e}q z>d5r`sZ?J)-^9xU)$T=CwqJa4eQb(%HC)hV1K#&Z2D+QCvPo6F&y~d4aM06P%3XN!4NFU_+9wL3qK>$>WT{` ziY)h0wg)lU;^`%al}x>hl;~fV6g0a4 z#GRWi{L7or3z{$O4qY9Z^_Q3x^ysgD+dZR;!-_-wNqS*FiZTTMDe3X+IT*1p3D_7K z8T{|u=ao3ApkRVDl*6jS8VDxBgop7*jtP#~6CL>#DzH2dme?0wqXitbB^DL~Awqf> znK8?5S*v7TXdRmIvbe7=ZAtI2+~?1CaCQ6D0uQTfMxP{O!Z!D@+qB2l{ZVFy&iC8v zuRo+5+_r?W0MJz^Yg9nYn$JC9m>6r!fk|A7xVoE69}~%-a%ugEJ+$H zd+rQYWGg5H5Y;@47APQS7^YbYwvo0!w0~pcs8M|qvx69a3;ou_?Ckmb;zQi9=)UyU zq8T)aLxwy_n)Y-J>ELi+M(pqt4dIqy@#MB~fylX5h(^C4Q432gpW=`?cV}iMg^`R^ zCE-${ZW0TIdI)urW=%=dv{nW)lp}}NsNIgd`f^Kp2iJhZk$eAMCzZOEI{gE+Pvhw7 zcG@JKwrCR)m5Gu_`uTE&u`#n|>E}HvPi@7XeW9Wtj7+_i+rG-bFu>p6TGzbm#qsCD z<+(czSL`7Y7tI;GKbv>wRO&eAY&_Hb%kOni?Og@W^a|DO<5Qc#1^MPFN(@t zO{}st5_wLA6-3T^Sf|`jf4CKVpMYOrS=TvAm1W&^ubW|kV4rj)u6w(b>sY#jjkkjY zG$1%Vqnod^OSmuULYQ+!_y?#TqW{ zh2F+1wIY*qj@VnD1NXSHFHzYLAE#JtKOgb{U*(PVAM|Z?e@mqbL*fwlqC4V8YftEd z-G}bc7i9m`6OTxkFKD#4;9Ua*T?K6sNL#%eAW7JsTIeH4n<6VVH+zA8cFF72zfuuuSEs zTPD~@f0v`Hl(weU9_Gv{@X`&9J&iTOW;DUJLv=clUNB(Eun{51uo)3$+m4!Y<%uz6 z+m5Sp;nTc^E*#*TCchg7ap7?@NGpp+K8yjmiIa>{q!CmYr6akCW+#gnMoq+;5J_hz zsm+l(7*1xhXLmFptIqjK)>fi8YOu7|PxqIIR-ci27Nk5TM7K7>0NXJCCuf5>Jm>yYW4V zg1RYijQ(|uYc9;_pyocnZWVhHPwk*=9^q+~dK$;J|Kop<8@Tsw+dGY|^RKm3&3+M-^iNtL|EZ;z{!>~Ju+(#Kkos9*{Yfu||G6$sQr2=< zSA^qcb*>yhG1G51n+LI7i+>}G9yckw#E54irjAzFi;qPyHBxg*9E*=TknV@7;kp;~ z2AIwQD8Xl(A!X=?-8uf{K}^b){CjYJc5$=a!}{I z8CcGpQaUN@=`y{t|nH71R7Pq}T8N707=~=m!J{XaL1ynC^ zfplrfSb4SL+GM)^R+2e}SiX@!aszW%q}ety$fZ;gf9Kw#6WUORA-PkGL2#<#b0~T> z$+*TGB6*3Jdw&pFhad)*H3?&+TO@j)GVI4-$}d9a7)dl^4?ue-NbdM@t8#aPt}63K zYb=3y8p>p=*k*u71c8l3XV1+#WQBafJ9s*CjZ6htHtfZ<7&H>;2YvvYH@q_ukDKxG zL4ctc74vo{)hbtB-a)2o-&3B@{2UAwD3z!ta!OVu80TFbO0IEyLCM{p8`#bz&>plP z;2B2!-G%g1H(6Dmj8GJe=$HI7 zNfYu6B5~UF>W0XC7in5svT7`&;z>$MuEOBxPeVNGqiYpnCovT3wj_;KC(}dx4(muj zaBI|cP+lW2jw^V2^Ks~py+fN=q*_ljT(7`1ZM6E1yF19dE6}T4UjAsRl5H0%QkGcP zUN9>75rjn_GC+`ihYF+B53NM*oQjolUwcm#@)?eK3Yg7hMp_pODNmJrmGlloI?Cju zZ#H}AWGd_^V6@ld*Iu}qkjErd_^QWx6h{w~8Z9T2u{v&bkI7DKs}Cdf3Ims|G%Qee zC?>ahzTNLP<>eJ<+6{l>c5F3byBvPOKzQ)aC`85Ou6kjcd*iqS5yi<(8cHETJ*^h> z5I#3`N2ThF@r%*|^5(xuEAR@d{^%U0_E#OmbR=ziOC2)0(LpGqSz^$$dk}pS0b*pt zhN^zd1z<4X0Og<<2fVh~gMcDeY!jvQHs%_-{xCt=PxRH*579M@9g<5d-tq?*NhLHH zPOR<${vIXI|9Fwu3e;vFJEQ@-BjP!<0jN_rHJ`bo6#sYYmUK(#9iNR z-mq@oNN=T&2<>;q-$qmu%%ccKC5kD!Cy_HWsV}^QK2xi+7=l9J_fv?z$q~C4OGWU_ zJsoZ_hImZ1ro6tMzr+3#F-?jcc7|uaNS&iQbOLAxzMwy7nBy|ih1bKUH31hGe9Dez z2y2wJANu=UhFc-VCTCw*9jw>Dal^A)Hy+CiFMr|!WwR#t;KKLgKl`|VOq~4APl9`t zpvTa;)1R1Xt~1DmeN#qvO?-N4!8aaAx#U1ScN6oNCV$#`q(0FQYBD~_A{^E=0^_uv zMMju^v9`vo$^MeN`I?d-acs^Lm7t)vWWn7uxK95);q_wrMyA^@GMk8yO^5Zh%>KYT zL?PLV6@(jNkY29>J(C|ZIiJ#AnhwUVl%UTEEce`F8c?E`GfNpH0Chvq0u1SlV(UNj z+uF9p_c_WH)TrFa9vFkERl?e%&@x|G4Ou@xGUhn(SA--@{Rj~!N}6TL3dSxKd!co) zeJ^w-ZFj+4@`b7eFQ%$Gqh&R6JM7@F#h{aA6}*QIZfLv3AnoNs1?Rs$NIyd89yLGs z4DL^zi}#-%Bw;-V#~`t=2kMLRVJ?$gvn7Uyy1du_M3&o{U(^g4uM zWssc+-!BWffxkHYS{n(*0_pE_T(L)aP@7Oco4(0IPx=`Vv3mBRoS!o&5DQ;HmM;TD5k|q=}zXUNW$l2S-;T)0-q9rSHbT(1Y@0h zRL{_;9s&JWhrzssP8eVPQ;8^j;B_(ZE%Br|7sG~;XjZ?hrz0oXB7i#MPOi<8Y8Dqz z1C^!eka{e5?fny{R!0=1DFV!E8Nz!iZZd6RIH`#Mk%@xq2_ay zWZ+nL^2~tbwfV%stpG(Weib!>Eyk@gF`>>E5|vqM zwvgp}2ys$5!d(cXbmjilCFYSu8?KU(6@edyx6@Sb{_bYw&5J=#XpOn&oqFxM&b%jG z{_6A$3SFAzW2MfwW*syIZNF3;eY12?K)$T25@MWiACPJ7$*xbX3?`QvEZ1GyO?Ib%6754nEr84`m++x*Lo)ksslM^ndaIs`h5XC>u{iulwv`Vt@ z8WY76KXm+-#LYOJPAganoS(Rd-{A~IDvt8p^_9cA0|7mr&eK1zpOiJuHk0%xA{m$5 z$aLcgS8RW;+iw-LPZ>2I9rUj;^5AYrG|y~U7I;6Qhvk-j=Wg&%=U(8Sls>zc<>lTj z1c1fPC6)Vizl4Lf9a3v^V#*-rsyo6Td(U zEul0&HVU=TK*GSX%*Fc>KR1mxmH~3KgBVZ48!SpYh=-Jat~4EGzZFOso&A;bWxraF zD6%B51fxxKuH7>X)dduHp%ld>rtw$w*-d4^;XysCiRe&DDc=>CRxX2)YsNRz;!8PT zS?u@k(GX6OG2>$6ubWQ75BIPvI&W1DC3$YovldX-Opq7*-Wps3qYYz5OB3!br-8}> zVe>kJm^go0xrB=OaO_2y1XfvraP&F&kHA@We8RVDzx(?9<{k(Fcgj?tU3Nu;&SVjj z%yhvA5Kq+m6H38{DAj&NyAVSZuXLNNO8PU0giL9a3k#@bo*gkAg9jFtRJ2d?2fbHnsEoJ-0m34}0qaW}Oh5@dDYND4p zqrc0Iy#Wkn*a`+9LSWMiX8wR??!^fvO5iUD-#&Q@E>KU2geeeEly5FP9Mb~=1|Q}C zJ!at7Hy+ilp8Sfwz6V63X9H0OP2V{|hjmCv{7sdrP0;lKk1}nxdmzgv*O?{uJ(qvV z`;9H`z&1|)B3eZObKg44ddB!2%kttqakXY&l0=I-W%@lZn|@+?)zJoth!dEi2KG&n zYrrpZ48>rs?j)uY`vH6ofO8?k6C&xj6j@{vlBuX9j$-Ks;dqr6HJ7+NC4UHUV4;M>k33S|OS)ubFP5 zk>_s`6@G@|p5L&GtTAI*L=amHS7Oq%Fif{o^j`0C>Tz}08<$S)X6tbcB(**rsp-*C*{0V1vULfeD7zj^0y z-oSm5y^H(Nc>Rg!fu9USNX320cLc)(TYtlN51>He5kvf(olr90erJHn0hu+F>U|>h z+D)1u%qEIWvLNn?8ddP+>6zfg^tvvsDupyfn6%m@tQT~n)oKOilE>$M@Zx5-p_&xK zjxdi8#3ij2AN)6NEI^+EfNT6Kt(#X7TZ=#E48j+R^;68CPpT!^Kgyg9$fy=Q)NCD9 zBvF5WDJL}7*MAkIs?b+M93QSyMdh3ROY~87m;lEEy;~2LO?lJ3 zvN#3-QpdUGm%POq#m`Y+hAP$1rMd9bl+th)=|2))tF$oj8D6dXW;wm8X+6}0(y*uO zK3Iu1Se3?30yc#q)Ss!aBN0`J;F#Ais(7hZP)d7!ZGDoI*(A3kWzv+m3{jyz2=|>O z(cNlwL5?dUjtldNj1uo93D`GJ*Q`Bc+Nc$fu3n#amPflsD9 zZfS&ZiBm|#4(wP$NP#iDQs-~}bu!EYqrY+mAD5t|OqJ~4Z2YD_UAY#>Uz?0wb5$(H zsT;Q0<7*|t=_z`-WqEHScslg7ch4o7+K_=nijywEkx^EKAOR`22n*TQiqbmGg`{`P^>Ffg5mq5!DxdH zt<3K_IAS$EE7(|~rpvY6f%5PgsxGO|b<&etN;Q3E-{!RzV_fb$54|vKnC0vdtym>y z)UhLn-|`msB7%T*&Ym=AJshokeAl>854I#dL~kHB0L9b0VP-L}K0gkccbH4L>a#R; zj-_CDvVEgxRb+*IM8@AJU%Z39O}1X?MjjDd==x$xOieT+zZE$_><9pCT&;s!e*T(S zpuU*MXNR0h0W?m&KfQA=;QkO@0;sU~z~cpo!(cVoSzihUGZDX*`9k=h`US-h)#%U< zFX{YU6Dne|KV2co2@t3CNTmrM6sWT8+*iL0mfA_MhnkjKD(8V@kZSIOxx9p?s%LdX zI~eUFPjbLsV|JcD@ytM~5QwPNJDb`IXN=$*$QLXH=2%GlNZr!od(Jn4Tn2vg2wQM# zjsc^_*~Wpiga$@1_1IluwH(7}F8C=dn`?!tC)*9lw9pkGFs}KcC#A~49&vJMrM$gl zx6g>wNyBw2@x_h>=Gr^HxpY#HmR*wTOG;2bu-iQ23sxyN#wJoFwCv9E=P1DD>@yQ} zcBr?IlN!ghmwKwgaSCgA1yv)y23v^tK`S66EA-LkCOmero)^9GYZ@b@9#JwYI8~H{TYZQ@(ZYdoi zT0|2g(p2=&R5XY$zrl!C6guBd*}sVrVAf`Z$)c-Is!a+s{6l9=eYps@Ip{1|?K zk)pZpD$5E1Fv?8R3PJl!*1%R0QW?3z`2BBdN-PhQ4d6d{5C`o4(FTYs$VmUQ-Br@~ z2iE!(eW_ZP-w-W^A#N!O1>KZ6RI~xn`sZ>keyO#=I*UV!HolTW+-UseHy|Tjmfvm| z>s=q_d`d?!D(MV*Fe%Q9Tn~;|D?0=>SHWgINBj1bw~5oo@^<$p%nr3G!d@yo9VNam zI(R|qenkwCXXNVcvvpZbW=1urDJUiA1k?e)sqQK5vqh0v7N!>~ifPE5x)k%5+$Lll!l`QP z6O0OFMUbFc(J)etitGnIe!F6i=1szG6=Q_6Y6>{$x(}QUp&{sea?03kRQRCk5#Lh=;=zn1WL8NO^0EP~Tm#%K z;^=}T;Oqe3?M4M6H$mF9mn?4NDfhF*ke4h*_QS?l;~g+Dcg>)5|I|aI!Vhtqz_7KA;T(0M9|9^)eW>o*H5}%yvk6I{AGKng)iQM7U<;3v~pz zY+hK#TSnKH4diPoj+6vZ1+#oSkW-|v>hz-Mv&GO3SbF#qn`EQgMibued&mYOg zA=v+E4ftO$=|3`vfS#qL{{I2avQ*3*F@O9DwnU#KhxXaXY6B2Ml%lYQ!x7Vw3=)9X zYxnWi%?{X-{D=(9EM=(7kS14FfcO=_ihjHeO!xUE<_8^#8}Nurp^K@D3X3SMPVJ@N zV|*S^xl1zV54&bZ;wRWjO1|hFjypZN+dDkENp;?yDNz9|`*aK)1$6vruu$k}`T?~B zC56!)yAV^%NPCF|1m*kUAVx&P=w85;RYxzf$*N%)nj3*eLd_(HC1pgrTFu zT2%T-jTZFf2khW;;%##xnOk&(v88VwK@B}IV8dS`BhPQ)blg_d; zNU45Qus9dCm-B}7`^^nA`^aJnne4~@*6C@@h(@u%W(eoEW+lFbz*@jZC>~^r%d(P} zL-cFIsF{a%nPUX=WMalNNlqs9XUOgY(HvKDL;-nK;>iFPxUn7*O7A(fYDr|&r3<)o zq0d7Y;dA%q4jBg5Wcsh$f%e;{(3L8C3&c>k!fz9oxFyX=?#*55uyJ z2n8!eq~ySuq<{VH?DR8j@XqyKu3mEOSY%=i!DNR-!-A@DBT8D0hAU6t&%4M*aY@ zfornRMN0I~(Uji2N|^?V)rNCGlB4qZWjFD@1?z^3?HzWJ*z?f0O>vq z(Qj7T^uOOZ9ttP{k0wR#h}ynY^`4f%sXcDkun~?V0&j$*dPTd2J$zC|VwLQQVVl7X z_bAjI?iVv7Tqr0C_IOPno^CIJy`~HOYRPU^+6X(vk{-nkJ5^z{G4(qo)el!BJ}) zMNChTBk+7+&x&o*Z`~y~KeLZ>EDkza?c%L^kp*$5j8=)z`B7KZY^g`I@SYs!(EItk zVwrWIF!*eIP2usw96slyZ9ojtcvx>ANgBfViQ{Mn{Hp(VEC;;C}d0$J6>qYR#7VGxMx? z+Y1NmV~Vg0rQMDa&7TNTRcO0YXxrk{1#e%4i2Hd)9I}eueLM>NukiFZoOZ(_&(!h> zG*fScNo@)daY+~)$jRhi*Z`O@XqfQCAks{~=M665*3Pcl5pDa6&XsFp9pR@#$jj!I z6-IA4&L zk2(F%IKHBBJ^NOY0ub_L$qy`(d{-8p;C+!d&%QN#zmWh;{*p(G{rzlJ?7=E$P+gK> zQJKgsx8qJzEZ)sPreR?zs`XSB1@)xF>Sxy=Dp;2F0&!AX2)w6sD3vxa0#SLI+A~FI z)Y~qHQf_v)=u}$>s#isPdZ`}UIfJSe+h0?+*`kR$uWRAC812a!5^>Mi>QP>Izx+1H zlIRnud3%&Xo!ROAQhSQg#JTA7waH2tX3>}+#=T)a8oXEa!I8QmJH|>p2JG?;Kxi6# z-Iz8Ipafp(&@H2ih}u=R!N@QlKZ)ywu7<&5hiL=sis68P0rt$mp3NCd{@a-l<6ckb zO%;GycEqgKfJA9%o6w%);^2L=>|3)4P!ir8l=hh=(!GkpxN-(#zXXs5{?f#bcV4$5 ztx(&)xf5!T3+ma71hqDr+rOzBVlabnHaRa=$0MPTTD0ns#I}P#-@9#^{vEb% z`pd>d>BnK ziH8IT+yz1@6`{IMt51D{+Om(EpEmlZh*k;RX`zdL4;0&=#p(y&1;T-o-sjsz=OUWe z)7u5kM4EFIbj6N=u-UcS#pc5Ah#(DmwpD*Y&3*z)tz|bvt?d&Vu=@qNTU6@21E&}- zjqj@$KgMRj2BkpqF?@tf;I<1W2v>xm41O)p4@M8)U#hiO`~CZ0#}HRP_BB2~GdI_N z5JCRa%1K{n>PR;<0wjJ4cQ zMT+SHJW%{+yUnUK+uE(&eUg=6oA=u^y89bhe-2p`Ip>`AfnTb*JjiOAzUnOePm3NS zF$>V1Qoo08OSLvL&>Q2b^&Cp2cBdlafn~cS2Zxy5HUvZh_Ewje zZY2#QjsNOw2@6a&-Pby|3a=y*P{-|cs-sO}5eX|0W$@uwj}W}Hd*SyZr| z640Gi;mJqM@E%3B7ZQS~iF90~rqY%mUZh^8kpDB|s213XSA-!Aa)RG7{_WNEwWc_DILz!jeh+4G zmLTmV5RyB%Bs^sR<;dM4okV-6StUVCL?s6C8(LaatcK`a53%M^`3{PQ@TfeUPvf9- z%^*u2GyJkWXs9V6XsEZPK*@{%rv#@6!hNEC9&~@xlI^LOoZt>L&W*yd!sfd?VrXeQjYG2$Ib2y<-zagE?8ScMEu^iHd+Q82s4HoOy zFZ};+6#rAQyh;`PzZ|=!$BAgsadzY2@ZgdIsndu+;N_u7ys7f@;A?B~;FCrT!2%M} z*wXMQ$dr4c)+m&rl>v%^A)03Ph~O#JsmL15D;AZ_tQM`C8fldNHWVIjJR2Vo|EwWc z9C^5On{kpHVb#rKwc&8(U7wkZ`dN8 zO-F&ZtVjL!6d1aW+tVh$O2`)&CSkR=`~KyL2rGJ<3uTkMghJkQ<|=v?;$(?PupK`| z$icCR7H~QD+7vCaN!AB*da-buO7{`%*hN|B+)Dqu-N}>o2m0s_;GXl@h(c>KY~zGJ zxm=vxHzsBs*+86IqjZpgh`|+oCMSOyU745XBBb&rlYB0T2xonGdMdtOZWlh)2)wMj zSHtE-*n|nC0xfctKH;UU65#Nz+z0;M2ycIu?4jaH>AxlGAmqh_0LCmsTG$xu7H$r% zrt;F!t6Q+_Lae8%#WtroyMh9vG*Q`YyG7;Uzig6;4F;Ug9N4jkIGRL-*J2!$@e#=9 z$;2Z5(zECr!@r%JixPjW@Tai8Ouz1I^QuLz$f@=0BFPfStg zc`^37>pK_fc4AfKtWz^Ap0=HQ9`~VnLIK7_EP)-wRm`h}d+&Z49ITTnY zi^^<3zpo_$H!g6BU}&73O$>T8Pr#-T$PEfXsT9R~DM zo8*b(A8P8Z1=E&RWM?){B2XP+{UF{!Dd4MK+=e^LuH!v6H|snXR4Qn$nAd2osNIZk zf)Re(`*eDd0p4^cHcueu1zV=_^wFs-#Fr~1&Z(uNXP*E*3%8_z*WhVzK+Vz!ZXjQg z-DoeATdaRIBkx!}@it+hJp*H)H;4=@ieA9KXa-5;J=a946ZuHuvFL3T2iVOozbATl zZOQcxj{m6Rwh!R*tE|}X%Co1}XMy%HU=82TbcrlIC8V?65-mgE9TWkHH5seYS2ar) zte;I9&)1<%?w)i!3i=xPkS8arCnnw*MYSvER}Y!8^8xEsH2tidrzkH0vyT1QWK0?RCdZp7$0-Vui` z2e6>tyS{PorpDE;OVGvi+X^xTIRC3jxke^8ud1_ll4X5nZ*47+EMwQo>M;auVO+)z z@KIz&5?FDJtgLg&m{RxUn+svqcB9HGjun5ita?yTFq(IeAM@`j)RY`1ziU2I5=3-f zM2b+KibQ!X|M(@cXHx)64O^p8{Q^OlQRE?!InA+nrYAT>1y>xt`XW@1=8->;L`&uI z7JG;MzWQ^bJgO-xE3;;0JT-b34tfiK&e4*r1v-ju9zikXU16w}KB9%uPrQuG15YMA zvCVN6#q=MNbB6kP#C4TIqG#DAal>$rnvfCAYCxh^3!@nLuq+k8u~KFmP@98i3$e(U zQR^EqS+nlQXS^FOf--O+2^>`eg+MX8m*ktOQd)-7v_@BMuIXL1wq%Q=y6TUVqd%7F zmqp2L_@4jb(0|O@1~)iS8D9S$W!?LJpJn|D@k;v!{>;hN_dXOGa`Bn!>cwG13RpL2 zs$fVZJN1{|IHo@?1E`@W;sye2qmMmScAF^0h+=DcZ*_Dc%s58%m?(Z`C}*-z zDjG)a$Foj!KuXn=xk((NOT`498`%}U(mtTMyVz~n3TU8#T2)DoY%Cf%zVp8FN{|@| zXaLbT<>3;{xS`|r6**}?IoR2d=3ePtS{JL?rGF!KwnMrs_Sy4Th)7M2rg`eqw!+I^ zki3`=-ZP`deP{N5HWgyamFjh%Naj}V7?J^Prco#n*hfy;he+mI9;*e?<`EhIR~mDO zpa0JMpgLqXi_Agv99uXT0Fi+0F@!uR;vSiw0TJ8+t22~qRBH+%Pc`D&Tz&T+)}%g1>fH@2jATX|D9T*a(WBei z6WLymM7X{wxYf!G-qxcyR#wU+p6tQ3<1rC?%mk+H1Eu;5sq7yXZ!V+yR@~bC`514< zcE{9dX371S_|}sVZL{lghwd|#)LHPlu#g$740R*c@pLTzHeH}cp7g*mD?c#_Kj<1_ z#DKbWMGBcnz6<0TQzfU44@p@9RJn4Xa&h+uj9Ps1;#~^=lp2|GFLu zWM^4BicLmVCwgtiM&LQZe_@_tWC-4qBE^B5Ca`WvzVV7hq7|W%4u};aX=ei!N<42d z86sAV>1Sx-B@YJ3*fqM~gD+M@11mriZyH11S4&h_3##)9Z>6)6)ifa6PSee#Zkv@g zoToG9+JL_*Vo`_>Ts3|aKv6hiVN>M}TxxNaT+Qr2Zk_s4Tc;ae&6&0Fo?>ZAEV$kb zubuju3t=xsK#}lc{ftr#g_G)WQjA<5-JdZL;K%iLT6vo|$kN}jWOpWP{^N2Rm6_ZS z{Tm?t%vQ*`4|x?_B@p4MmER8%jV9}f-0@^SYM$ebY~lUw%6lp`n%VU#p-`K(d2H*8-)Xwh69&fF=Cc!xwnw6H!vp$C7}TehK3auTeRXS zHGwUc6RnR#$wfbZn5wQ_Xak$2ZeMU2iR;IIFUR^>J9FxEDv^R&A?*q&88Nc(FLQ@M zPpLok$a$ez!9@9_BK;Uvdk`XVI@_3LN05C&GGdC7aiP+g8#-sAfbAb*eP#c;lZ79_NhWjSt$v+kdD#Inc`@sRyRbntWIC5~0(`2l%NQ#7h(Ca-J>+<;* zjeSQ7xPEhkS@wrL7cn-K$Nl%j4qYKy>=5a#z zV+H5xyVZyCMooHg&0!sG6_%lI#s9xJd&{V}7Ia%QxD~-e;lbVAg1fs*;V!`;KyY_= zcXxsXm*5f{g1fr~Ztb(rdELFc&mH@|A2mkR&l+p4`T3mpDK={h+|F+blR}++3^CI=YZ(HbHx9slA&s0xTOU- zeAj^duB6v91aNEWwOdC=~`)8Is77NRb&2= zA%-)#zVS@-k!K5U5?gJ1%1N;o|5h=ABB>6FSB7@A5!aRP|D^0|4|dv6H5Y>@1DAe# z;1AXRRs#OxtlNo<`Om3pP^1uIFB7WRn?;j0lItc!cq_*ZAU`)3e9Lc%XC<93INNq% z!NB)51YKqIo8zZz0V1>Yt(^O*<*cFdq=`BoWT|QFZ2BYfHcRzn-y;E45I#mb!nLHesTVyTVgz#mOXgY| zlYsbDBHU;QXOq{MvULx%HPbiuxN5s$XJIjY@=tT)KmIP^!EgB{aNouoEGqx$@BCe1 za34q2($>_;8DtCICjHm*_AFH$g;_(OPgj+WM42qA--u9b7+y(uI6kZhXTL0-E3^M) z{mK#D;j*c%)Q!SHkhyPA7z9e#WiPF7;^ptb#jo7V99s9C`}^KGEx#rW47wmv`+@_R zj7YXfD99g}v3eV!iOk5xgg4VGh{qhqn^3FWa*;TBm}4?XK8VpVLu&v=9TET-%uR+V zN%gi#Cr0|0x_zqkj|80?dpG5IX@e@A>7n+l@RseRtbuBMGn}2D^=s@bJrdaX%k`$l zY@<4)s%c^F>o%EgN*trkp~1!CAH(DZ!d zmOzhr6A=IqM4<*RrM4BET7{Qs6}8!Kg;MORBUdC|0U9)kf__b$Uv%l@4=3IeGK($; zvofWCM4Kwe$;fk;e&ijrVgvhM0X4UUHXQZY4WhM*{0Aon`0@kOfXHY@5DGN55%8cm9umAO|2C&8GrK(^9pZI zKRnbjYGq6gtDq&g=Jvd%g*w53JmL0~I^(_Q^#IJ(Lv!aP1~>{IfAg7g!6@`~ zIpY12VX*1jiUQIKh3EH6HAIwBtRh)I5=}WIdQPrMo5wMqWXRk7JeIV#0Zlj~g9cx(*>3ekMucizgCYwk2S)Xde+| z8uMiN&}p<2;hgh~=5eHtesS4C=B>8(1PG2UiaW%*a4e}k-I|7^s{ z_p|fc;&7YadJ&N8hs%ZO)5mCva~b@HqP6^-TDmo$Wyd;fF|`3IriK_tyYg9%j#OsKs7 zfAI6imE@lxB}>&-VHPZ4eKucJsj8ToKz&7m!MhI2qYul~L`snk^J&Zwkh5HEB(=b> zChhM#AdrW^6WdR;5yO(bGL8)7GEP`ub2{Um^qz2CH*Ye%l)nC0D4Y5vk? zYVLXiHCvh@J2_)>TySVx=!O&Mufu@@8OQpFmkeu`@|uU6BX8W$cwx#|>@`V=A!G&;o$ zb~IH`i-23sORi%#7f>npN^YomO4hSeBbbgk$~3Z2*cBsCqmG#7sC+)hiC@^eGHg&b zmDK&%RK$VfctpN%54bKG*bO%*ck|o+0qmD++u?in(-y~9(Y+ftAaw@H1t{JQy}?su z;&BYX;jWBWjI9eRQPm39ASGek#>pN93Muy^;kf06Q!&xKX(#|c^Is#{6&*dvKYn%s zidPFD(smFi%`*El%PQ{A=p7|gURLZB-;^sHr_W@4o|rw7Yg-v$nz}4wLoa;FGke~9 zFV|E1*$+{mIB+DpZ@4zs+2D4;G4p`Dnn}p_7UF_Zlo1&fXgAHEz;Q2XZiZ)Q;D1f5 z{Wt`5!b-A(N5MNCDU9z1nMg$h=tZ?)I%}%^6o-}fYZXWM92dR@NeU#%B@!5UaKaf{ za)7i=&uv^l8Jj*o#{87f`$E0L#Ir!j1zv`W^d10O8%AeMN#?++){o09t9}L!c;|P! z83R#5_n7>o0@3qEQjz2Wp z0j5cwzXfx!v#rqQ&!B%}$}E*%GAoK;Uz!Y#^q=KbZQr=71Y)&A#8SNuQ9pn-sAyEb zTpkv8&g;xT+r|4m*WBfA1U#I4ad?|rl={$Eno%FSll{DQ?Y*BFvvaiY2=mp2PIDNv z+;5EpyPoQ9ZIm4QR?3HEhn`$9-u$cP-n-`5Ez=W|rlsrn#)Q{Ksw%LeOKMG%`y)`t zM*>|u<3|Fo(yusA11<*AqT*j4&ipoP)=P5H2rIrSHY*4}N?AL8E)l1)@yedlsfLFf zks=~=y(nsGcN&6ECXBO0tuz#LzQl1t4YsEaY_e*g>X5T|Z#AF_XGX2)z;as^QT}#eUvzhGggjg`rhww-Z9Lv+|=Axn4LpXmM!tEWL zW!pvI@2(R=y}#w+)8KDB_0?AKDE~n8E8!aCqr)sM z5L;j!?N^p~4>=%89-|al2U`bL9kPzGHu0dJS7(gd(hbFlfY1a<*3U}xN2n~c)o#+PcXKtHNXz107x49cfmG}X_IIQk86Ih^ z{uuoNL_{>A3YVjXf!TGWGZq_62SgD+c7LukOdvL>%&?OaS1TV&mQ*7)@8Cselh zhL(KA2W{7eU+$~y%lV^dm_d;jFd}!NTu`hy#mChPGk{+%jTIrG-mz0dcogB z=;y#L6GZc{a?sNkqA z3metm8OL&l%qJPu#@ccYtl(cELfd5Y5@N-h0$xM$n}%EJoLbvMZk{)q(k z+0kAY6O!aYFcMQyizjcB8QlEmd#~*Kn|(=MzYxuMQ_~hMN{X^1ehV-tG5>D({R5O5D#rE>{|3!0Rcmng1^T={p0C23 z<__}1j`hO}P_z4ta|Hroj6)Kcee|(u-v(DRMc5d>DPI8?1ZbGQPhwcQ%;{EoH9xXx zJ$KxXI=Q~S@^VAf1`@!KrY12{ZkPGP*E{ZD0zmrkk6a%DYg505_cF2ZCDhRw2N5^h za;w+&F{RLF*y&ZY%a2$62~2x@N7hn@$r;;Y*8A{pP_UK@RiA^W>vu0YYwaA)tLzpF zrIPhjT2P#?D85xC`lBRI#-a;_V9nZI*zv&LHi6N(07hrRf~PN%JpGL}*#Ph7MWoIPToWi(la6hRYuMPmm_ z^u*B&w}GM!-Cz&47$kGUnyjlfg353bKQr}!co(qS*z<4nM&5d+)~QL(qls;$EU9tyY)Iwa8g-Xf*oK; z4?bk)&UGV@^AvIT#=jsrarLqIwBTy-GfrEYz$CZ}BE#RH#!$&%!tfRQkzxu&Sn~Oa zf;BIL0B6&jQj$f_j4+N63?Mb-*S`Sxg$X-|7aUj(!5|j+JAqZi-qyk1#qNI**2q%o z`NJJP)7IG7xKX=lUPmad*}tbi6`C3|af*}gwE#5?i<8s5m1GOgrtT-3OsD`O6 z8W*&7ADqV7&|YId$@osb&b~*mDUzgF?j*gGSyP)VKIBTD3;%j0;@okir&JK=vp)n$kUK?S$X*}}bI~u9HA>ba0 zS_OM*h_NOO^lVAOKGQ^t%^-i9_fO5*1upanz3Jqk_@;|3)CJSXe3?%8c0b{NVe;d= z6&b^eLtT+Y$(-xC1y96U%IoluZPTZ1jGp7V#rkE>jO{=G`N=>!$2?Obceuhix$G!U z5UF-q!SHlj0+XX*i!kSY8@=)_6*<|EOP?p) zza~74$QHvA;AE#1d~3`7cbWs&O`!;dqH;R6 z%EmB-%1{;os?(eqCNkIwdaGp7DBEy{ln2)4nO0A|ht>lAU5e(;&iF3k0$)8j3NhhB zjm{ zW>lBEw(Z7TGsQa%-eFzfT*OwUTeFjchSL-yZFz6r(Sf&Jth{=9Ks9aOINN;lQ_HiC z!*}u|Xh{|bzW@C2?s!YD#xwkq-{xG6vQ%o|_<`N42f>r6xh9ge2Mrd5g~Cuk{;kx^A!NXKuvlCtENT#f!i|wPneq1%`!#I%ixo z9kyG*(3iP{QMHL;1zE5xi)pNy5HAj3y5Z0qNOhuedn9PKI!CzAN5V}nnd~5;Yt6z3 zmQ4cXtwtnM;Dk-uBLlzP-k(-_&@rtKd1r&PzGEHo20vt@`Fxy=xr%-ZBN1>4GiV*F zp}WMZc$uK^y&&|xs6LbH-hNMe)>W#zYF<)c$jaV;22AbX%1chZXZ=ku38$`O=1>_A;GW4;52{l8U? zhzcv4n*C8~|1}}aQq}vfs6Vk>rHFX&4zvL`+#TIRVMD^SI`EMq6$agmNxyjoJ_h3(2UDQ6-2Rm?l7y_GIHnk6_bIP1obYwqw<`@U-_|M&*gp*!AyZ zRvQ2-Pu-omTY*CBPPCbz4h!xVrqYa6FWXcOt$eW-n?*`kv4nMwAFsR>BTRJ$Tze%j z1taYifMq{$FRk}JU~ zwnKZ>n$lh7+&_g4my+%f$rdWZJiO|MO<_v_bzO&;n~veBUGt{qm6?mc8cyI|HB9Uz z%{exY>0CUXyXor;I&XGIT~Q)cH3+Z`P-#idd;gpt(QiH{p7}Ia8@7+zTr1~2R23df zu)`*6EZ$Qc3^c>)FdTkGu?MU`&EBng_918fkb}fAduk`sbHFV7{HAH+sjP5QOKf2Q z{i!c`{rI?u-4SmVMB||NE$o*gBj5!QXAh44-Stghw6HF5TbL5lDlxS}Tdk;i{Jvq1 z_G|l%s?NLt{5EGk*;;#KFSL|}R6hZTsYeg*m^2F&ZT(PwQQ znknQVa)mn5C#?SnV5g|@=?M+A+tl)hWq?0G83Z0iMq_^Hg-y_oGGUZ)#vL(ye_sYc z%-<~{j6fPB!B#73%m9LjAx?0qQzMS1_LPvCIjGDC?k*X2+_dAFt!9Hh2-`~ExA>>90|TR zqCMUBcwQ4!t87bVI;&=D_TFsJBV602B3YG(?Hc!7S^7j@E^0^fGXUw?(=h5Qa0k2E z`jK7Y{GR?tO3BD^m6`F}^rSoq*x2tCxIXW@noaDo+^eYESnX3;5q;(w+>}%&Nqb@2 zqJnHYgpU~GC7x1|d6b`s)@7tA(30hs29OE(;>=wgY;EC@_p3R3Wwj!SHD0DeH#kzp zWW%H)l2(&^&~aL=)4t`tB0z?jtlmu39orP`-eh$MD*9HjpA<)(RsY#m9;V}2c1{l!SH@Ks5QRgZ5B_f3=Ibh|5)CFePqwHD0`M-c4sG=W!J~l zQ}s)92J0I&AWe%V4&rU*0i%Fu9NyV-`E)u>BL1-#VX=hjyQKXqnt!L5e`gL~Rq>z;exdt&IinNr}p z57foGNit_+l5i;mni-PfE!5aB(g;i6v@jCvfXF4Tp$Rc&MkA$u5#fb$5RSedQ(m%_ zE9pXQm0r94I6Hsen629VZMw!Zfe339N?U@0Jw{-@-U0$YdEdGAz$Dt9dj+0p?CKFPKYiAY?Wh-hCB zsiYS9k%WS`Fdfbap$Ovk!9q+W`u()497d?496!7gqfwz@{8MZmv{@OE3|lBNZZ8t< z`y+Y>@`TnXkPnHZ;d|27z8se7v&s;bv-%WB+MsDebn?|c;5}Ned+hxuyUXvr$&oO7 zmjW?Jn&^LRSTaJH6()nBE)Ryf=-D+=-!t`YPXk+FS2WLb6LC zIgkuV8!k<)ZWARX2ZcfoBywvRYBOP!b4!8t4f*8$hD-t5K{jaao9HNSNu>yZ!FhN$ zmYH^*k#>Iac>BD9@(ziL=3t;P@|Z;#F<;URBrXJv1JjU-k^RVE(d$%zw_iIIkkLxM z-5kjaxWpQ5^5^SwF1PWF-gCDbulTcBU}pnv7F+}ut;{2>4;OLb6y|H}0=!K}cdhe` zF9w6{7IzLAy^8JZk1*w2N2y^Z>2pApW7cioR7xvrY&GBCL#>syIO5F3A76=2|IyQW zurjBQp>E3Bq*QtV0`^tY;fV zeuSfA1WTaRXc{;PM5ioft^Eq>IAOO+-}I{fa5DF;hTxE%QhX$fr*Ak;AF<6o4Fw5K zS9$;m?~kU|CJH{@a!0A47|{f4WcHx=&umGOtCZ3*lZ}dDBQ0_H0mQSi;q6aqX^pxn z12oBM0Ak{8zi?3GFcs6zn}S;KN!mNH$uh4z9exJJzNrzN=|n}v>Px{|j#Ko$pk{q? z&JA`nYWri?;RUIQ9#v|+vrts41rcQ@>Yv1J)z>zKZ?3vqsuCmYI24n7jQ|XDIcSWV z@q1xDw5Pbc+`>IcGxJ$>_?yHg?#TjInOhw}E4JEJ?}S*EswLmUpysRLeJgqVGB= zS~*qkbRsti^o-Bz0#U|4f4C2O|6{}`(MZ#YJ(@NUy&x4qR#~cZc!LHkk_4_GTg6Ym zx|6Uais|~d@?bk^DF3sc?;jL@OPlnx1nwuCgKJm*{|DUv$EjwPvfLk2O>bjLM=NDq zVFXO7RP@q-++s@AqH@uQ*wV^7RMiPMb z+xKSX>t``Jzq+6n#TP`ejw!4(Yqq1q+G_zez*dFQ({jZkFX*+iY*ZS!X+d;#U92Ak zHYXzwO&5?8jjO}hJz=40gefD^Px9n}&9ouC0&5z1p$gCO)P7H7#=_fbz#k7EQKd-I zTDG627jYyunQ-0ZlgqogPl$-JsN*LFk~{;8cHBf4>(}BQK4uCAitI1qNeP^0jo!>^ z2KD`xg@H=mQ#p*|{2`I5bjir*C8L=^%Q;2-wbqi+&ZnJA_W2=k>Jgix=R`v5WHg1w z&FPkLP<>qm3ic>)cdd+a9w{!I9|{H6JyZ^gV{^$jUHV{xD#uF-7fB#%*(tld&YiIL zmYd;<6(b=G02fGk7x}aEO!ppPKHmv+xl&F1=4|mz=ZlUEK6m67m(ov9h^MUfY^fdd z;X7WsTTRU5Ow}L1?@&}HZi$#3N8S$6|3;#*pSYnQMZFYC$PZ@UO=7>&L(+(7bE(|I zZKO!`DyVGlD@~G{9*}D)2^4^-(Cix*cCFa>HE25c;k>*x#B{y|XS(vAk9q#U%;t+o z`wEyVXa8;!^-r$+Px)z5 zN-^2)VtH#2Tl3@~c23BQn_0+Q`^O7ttK;hj8N*j*P%sud4>WUYjn5U=#x1RvdoBhn zY?1*@o*|FA1yp;d9L{=~2&IUqY7$ecQ-f4i`eCF7sjbY2wPu`e6QN_0cu}zy+~a68 zmd)YU4ko%)gOkJ8<>XaGjNZD`*f2x#TJoJ9tSOVHBSo^1BCs@Qt;RKrjIwJi{C_pm zLPsGjyjz}{aM=G0AAFYKNPUDBb+Biqs@BK5+0@hu>bLdcOBe~f?}fbN7E!=*Y#K)T z5X7z$J|U+@yxv~E3|2)qyWk%!9M1kZPT&`ZsY3JBv;%&F@C-u<`<$k1QQL=GYcsxw zvsBq1BCw9+MV-77=Hi_<`aDkYTZIPD%>GtJYcNlZk2hN-0d+| zRvZ$&!(d{CW#cy$)7$v9w8bX8NL}0f&1FTvrZr22tuDl(@3C*+lpCJ+L4iaGmeJg_ zL>9b}pDU8{2lTgL3!Iazit|D(*CKH?!6R8Kw3?-rQ7hFeDpb?Y;{`voqR zH>^j^@*5+tou&_4>#_IHuO|qFm6VzW;vzU#%(xQkqz?YYHW%{4c>Ll{IP}Iu4hsQR z9|#!M-O_z?VFZ{14K(}hISb09E3YGyr(!}9!xoVZV^P1{6n`QiLV1)|{4Tyhepnmv z$)8X=pb^Q4a1HhRo-euM%HS{6oELkb9hhU6!2QAhsDk{*0o*^D4NhcWLF9k@{2yfw zTPJi4OrQ63C-pYC&SI>*&V-Qz3zf|7cC%ZaGxxdO9*@scd?7Uhr|&nDsVr=fB+grkJ|VPmqEeoSe&Yf@Y6`m#?NBC zvTdp^c;AALZQ7fpt4~*MSItZ%RDaiB*i_iPk#z{0MdVhtu?qp|m!cOfIB9y@t<{cf zq!L%l)qd4;r7!RoYzZ{$1jc2kJJr1J(R9M!teUSb8m#?om_vuG;x>ItXFfpOrhb*l_(MlKXmW2v;Xt# zT9lLOT~BTa6zfpXiDj>Qj?*}H_HH}6)?(GkMdyrBgrnwhJux zg*vEo;~i>N(+z7r#mlK~&Ik1YH`uNaay<`M@2@Dxs)gUJJ_b<-zeR-O9$&cjVyH*U zYP#UbwVck~DZB$+IV`k?#7;+BTfDQ5Z9{JADT`3RJ5oH+~5nH zK3V5OrGV{y-XmkSAuo-onh##wMc;G|CRffhWX_(zXRDsJ-TZ}Gxm5RCK6s;jjpEMy zzHN8&Q>=IO^3kqoh}2U|9Ms~rQxS7EeZ~5oV;0X9Du%Me$mA^hpn>!w(&a$Id-arG z;T_4z2PdoNxxXOa$bPw47Ey~Hu*G*|ABb;~$-}7Se|G-{JM!&xK3^&@ug+eBIz4O( zDe!!<(?4D#UOMDBH-L(mNKTwr5kWyI9(<8ISNMcj_hn~J#bR@d^}tLxWyy?XMkwoKr`?Ovi0|wf;-%RwmN|%1syT>Q%p3rJuQ#Yw_|56;f*qxO*a08L zz9AK9@e3rz_1FNFjY-_LZy~Bi;^K$PPXY?{_JCve7_I2K`vQx|Caobkv41x9`6K38 zWxY>$0Ov{g;BL&{+WV3NxyzXT+crazsu ztK6C)jDGLDsz73I2!{gbuWb*9Bs^N2RWg#~ONa&>0S1)Y_oK(+jsdG(ron!VApBesuP?oC$+0rSq!{-7#)0!RF4y3NkrWVtxml~c#(Ko$1Kgxn7uDWCeD@Ln$^ zzoaWO7wSZlb`+0$8z>GW44fLc@eZj38l>)*G6P=$+h+pK-LY+fOsX=c!~*-p<5@k0 z%^Vnqu-VSAQHsmIrLLJ5aLeVf6%*@w-M|}My@$1WoHw3ZNvgdz6D}HRt!#kGVn?Wq zezq0afam)AeCG8?A;w4&dS}&{#Ua05{uw2?ZHjsx+2Fo6^@PnsW!YH*ZwHYQ0Y+Mp zv!l5|)wpDgP`~iQ{nhtkA<(1A+PincFl9{|+OhS`rR}&sCT8kbcT#SH`PPy!=Ng0~ z_TD{-kCZ3Wkc9nsg;`9Y@})1&rK%vE$lm68Tyn&kj}6mAw~FlVnUkf^H4mLdhW?yX zqxl%NXemD1MeO6(-{W?`Jl4QjH=r+m^2mG^&mTgsO;_LSNXxT*3hxbvcQX;2B#L&d zDBw@>BmMH9T%!H}6J^~1&;9=sm@Mu7FJNln`yVjTE9YX_yqGZkem4lcmJF1|c(%nB z$FDz0_hy^+H8oNu3KQriGVN%H75<3aHezyqoSEizHu3s;y^Z~qly5q2@Hd;Xd+sI( z5r%+w@h4i}I!(BHA;>@^E%plo0S-Qfv}wV9^bzR-POEnXA?!@GTV>t>jNYcyY;sP} zLTM)27JUmNymhd1za>|F;Qf4~O|%Jei}^Cxx}reMreGJ^&>d9=*Ecwy1oqaiD{i#M2Yaf!U*dQFqS6^UsgSJqbU=7Q-?bOT z!Y7A9;OUXObK0hSL84mGL-Kk5uohf$jzmA zb=ZTgw0C^X?n)-M+w#tX?PyPg91mHhv_a_ec|OqOs#{NgNi1A+=%}>7$@nCgnE3uq z0r%(F@qgL1TCqb{!qkJKf|{MCxhv0aoJ;22D)I-S%NY3+pF$OX0usS;6^R7numIM# z=#di7&Sg^z&#+nMzl>PVk!$pCSu0cBK z<<^s}Nik)tCPx+7pEmy9P_N3FQE(voNGR176GeCFnTiyrQw>Tsb8fClkn7PJk+^B3@ zA3^0h`f&>zSN6{J0zb<}X@FhBGG-HsM?(4XnyDr(l8BVXShd==8=KJ2lR9OUUIjmY z3_vv;F#-;ZhJ#u!JIq3z&_kZ6WDoux)~cYouzU~X2kNR2bUPNC7orrvx3FljhMyem z;=j4d01?}2NXG8D#HuT{c5^uKam4jk)88*R-&tPjWkD8aS(UaR+ogP)uD!Q-5WnG| z(U#x<9FsN{9hCYoDB#lsPm!IW`ag&b?B|QE!SqSBVI9zut!us@ElNlTh_s(b5*Z^Z zIE33>hp2N!X~7N9Qha4fweUeXreD37N|S-s&DrcaXMo;@yXcVMdU*etgo!+`PT^uO z04^5YVAIL?*Z8NG*EINtplTu?m`}?&BE3k6kMaJUy&fInnd>+mLLZ*xwV4qQB%o!u zWO}G?l>E6fNm2Gz{aZH@J*In5HUU`>Z6lI1)S*&a^%8&GVPK@EJwFB09|0J$f2*zh zCuF5e{+bYj?+L6ign<0Bg-a&w%edAVp4Q8Q&Ixm(XhdW)A)Z|^FCSDzS))aTRUe#SCzLz$5?+)u+)2H!^Q-ntbZ?KF1@~A(4k+O=urqy& zVUc#RZ~)yJsU?AbU24kBF<{-aKD^Wz`3S5hPFnK@^RM+357qQ@+<*6Lx&99ADT18A z!wI{;LI|9Y{VDFBY^SB({bL30BUTH2k$!eL&mP$r4o<00=P4PFf}?FmOWPruT%O)d0B_e5 z2x?$^u`@uwpPqtl25U|%g6k?o2Y}uWYq1KU`c?#}y|!B< z=59>VRLo;4yW9P=f$b1y&}xvvC~<^N2O%#m6Pu2rzyGrC)iDfNDL%70o|xV4i+9UDA8BU=H$L^xB``cALoL-S_o7R?p!)TLwpu8K;7e=!5$hJM%$!ZxolNFhOR!nJy9%o(WmP-FcB?v-Bx@GsNRrM z$PSNH*Yj~^x$i(WX+_i3kJVKu=E{tL`&ulD`@w-GZZo;Jl^#9NU|q2y4eJf4jf%lh>h;b=CGy2M@CR9_3sjB^d#z&U&D0s~plizsA(F%Z^hxwx-4|(ozR5cWaM%Z6k@?(WwA4SR>n@z|7YL*WAcvSy58Q=PC~vb&MLG>UWs{1rc z!|Nl7XLs8|$-@?GsLljGVn{%>1`=_SuEN>H{!9uTAG2E%xNrwVevPx@wAsUYwUkV?o zKmm5wZpku!sdz}c+e8yNH<$v=Sj{tI!Y#r)4>!bux292wdKmGqo`N8B<1CV$hKM)aB^6#uoB&ASo&mj9emL zX`RJ~A>yW8$94)k-u2{c@k8Bn9*5@}=3x}5(kI|9i368TJ45UWgJIe#(L)2C@;7{CJ2t7MPTUst?hg@ zH7U`5qZJh$dvx%C6ZS*0-9od`z>Mc140Q@*zFI}WE26wwoat^C4_# zEk|Vp@X9^ahk=jzphNN&t?8A?rtpz$!|7_Py|}@Wr88dg{ibQ+F#^J~b7VjGqb}3K zQ~xp-9-g6w?SY&m6zRT5c@s=x2}K_B3y#-3uimkbL9x+Tc*}V7##ZW`z8r3YDz3}H zYLo53TE{47O|;0&yP6+DXwGPb-HmvzH`>IbYNvQ-P89%TB+=_OXzJpy!`1`^Z7D>U zia(lHs*eT_h8TF4Fj(NTc4;bV%;Fi*@zU8|No;^1WxMAlQMh&LAbUDLuezeG9_ON_d}^VVH1wz^+N+~{UJ zv7)J$jEAa)j#3e#e5XUvBw9bMr{{YWy~4aH!pqsOX)VchyO{Q(t0g$f>NTZvReBM| z8T^j?@ivmY=6;IS1ve3S04k54ZY&qe#4-`nB=pE0 z(nv~fMi;*PC8cZXb-s)PkCev23bPb{Bc=QArnrWV8-^O@YcaGucj62OH4L=hkD{*} zi8?wFNoFM4%aAi4D&0Zp0OC}WDbGJ($4@Y`$w3O|u9*N&@T~9k#0L!*B zMRr$qlZRosOKyPtB*<{Jo=QbA1c(wWHup`#fC5D3Ftd;f@O;#D$zlo!eDrnMSbU@x zmHpz$pC~UnM0rsRP~DY`Xi*H%-L>)qLTcc3;}!?{G+^`-4t6$=A?+oN6#6(}*5en4 z`dVPt(cCriL#DkT&t+~dFQEKT$e%n;W1y?00kt>AehSc^e!fFS4hZtMJmxOYWQ)Mf z57QdLueCLHooj3mXYd+nWM?C3}a7=qhxE=M7Zi0YcO~`GA{jg1%I}x(Zh<(R8B1vPwNEBMsXJV zR&g{{?KECptiUQmJtaxac77js{y^R5M>=(3g`B1DZ`@?(6RtAiUVQdS+=&lk z1+0%!vxLTPs3{;?(;azSwgd+)pyPxowcT=viu$MQ7DOCcew-Y~`fm?t^_HMCqnzMf zoLMDIcAL{hCH{fQsJ-F*ki)Yh>Z0Ky{@wBN`l=2JFQ(n8V&Ea$H@`hEcgsZ#(V}F1 zZmaP{>T8GOEY$0zWsmh%L$>a26R0bysjdb=>OINn+V9Ej&Cml_6)*V^23xeq$Mn1y zIds}Vt*pGJAGWcG3-bhaAS1-}D-3+8%h{Ym)J`IV_gjy&9{dmr=dDsIbOXe{gc=>$h^Nw$s_=8iqFKgOmm6>;aqJkF$b+u4V*fKyf zp_Hi~L774jn3%dg^j#I>zWzT=fqR0g1{rE?(r&g?dOusP{A1>R3zPdR{9gS{IOrzS zB)H;#Zo_J;3p0mDICxYV$lURy=wS!J@TE7C($}xCY(5gP-btdMbB{+4 z6m9I#xq!C?WK{RGIfhq)c2Ghus%ZE0bPJ*MPFA)xkn~=G`cQp^;2kzT_mQmUJN(gu zcu6|9m<1z$+1J6Dtc6@}g#ezyLxUL%)lrFBWQr)l8+L zpXZh>7r5+q?Vj6Dac^LQ>+z^|ZIceHnGt6I+9M7dMeAApHT+H3LW#G74kwdg|ou0UWg#in( z{&2|fU(s`BTFu*#$8HC%mu|>0@Zbz$t)AvbY!brUw=E7ieD{Z=v2<=f*lg)UTtCT= z*%X4YcbuLi`c=L`j1Bd|p>){XXHooSyc5ei9gKk~SUh-X4{ z=byG%?Z9~kD%);YG&n`|2Im_8QTS8NL&(X=^s_T~;`!g-{^a$jI5`D8X4K$cT315x zPdq#sc~3dL&P0)&PA)K&A~sJ@X+@Mb63hr(Jx>(^>CAPPD5+V>y9Us_} zK67P0XE(f&V)4K-m`0(4Y7=;^&ukil6?62fa}lsqK;Fu$J(_!jG@+$c$u75Ijkm@k zfy`L{<9;3N$l4O>tt4AlY#qqd-1x$I|LBbYBljpb&=7H+`?K|DPy__F2WEXL@z~pt zuJEJruzq2c)#&MUF<;Zm54u-8KknCTOy86MmYLzNv2yi3fPoM3z&cX(aD4B5zG_Sw zS^`DWUCvCf_)+XVN#9o-*zv1fZt-{9YpwuefMh;8qYsrjg{LCph@bN=?8HxAh6GG( z^vD(40}#F}#WQ8(RhoGfiV9HZ4C^0t#~%;18Q?^s4R(@X#Qa|z6#wT@I{o=9t2CZ< z@PFdGQuwWbSP^PtBLd^45@JnLpeb&kgW-+>SDVkwAIEG|P30UE%QY{hACcRW${Zu?PC^$+T zMALhSb5cqeUNRP^%VMOxEl%c#_NK^VMJA7pvsXdUA~!owoKELBEE#0 zYSh2iJan%$X`9{;VNZ$VL5`}Co+%DHg-N-tnRz9=#3-x7(3l0!c%D6hi6LgeoUH!c z+*Rkggwp}7D$c<Td|UkiL9^y}QL!ix|iD_KcNs4`O3+TPN7QHHRou zGbaSD1&o8kL$nAl!*1CxuIhQe{hDTUNry=H{mAGpYX}(r4`c5XTwA+!jjk2j){1T0 zwwWVBqp>J4tiv}25DP_CQZMo;l&LP`)t_8-htjoJpm_$r zsIQoDdIb?k-cQKtbx?v~4((5!?YKv$^BSZ|M8U$zVj}3>W**-KoN6l-0t(Mnd1C9F zJSMfLe6^%A|@D$|ti~;VM!w^OwP=R$pjh&?2@p}7&7dzAdAje#VcQnga!O@_LCV5Y%vS2imd|x zFkh}d+6E?yJ;>`QDhOtKDsNgb9Cau#vXVvN$fNIs)04ST))yD%Pj{jk!nwA%1$s3s zsRsnX@+L|qUImaxxYo+cT6}9vlEQLP$_5Krhg_%YNBRy*i%j@AFFo$O7fvD#_knU} z0gREFJKES2I>gH(*a_hh|ijc&s# zR_4|CUJk`|g@icEgR)G!gvf!_gy3cOxvD9U;l}*XsaF_RVbji;U^DB}_!`7kwzB{= zheksP{IL-B_!C{51-HNu=~4jF1@0_a6I>g)ZzF%Sj%|4Fi8cnS*Cw=7a%U^t>!Kc- zmGQHYJE;F?Q3xSSDzH@w;&*(nSHYhvU|aCjrz8}-LOe(|sz7jTXWfDi>w~oHR{c=s zFJorsT!q1azH1w@2LA0ZNP*J=UVTA?bg$k3dM~waQ{OzljJ5o(_U6QTv(QEeMchcn zeE3-KPRL$ts(gaKywu`C_+A)>(yKmAL8|C56|{XTz$+c}^;N^uKZmA&njLR19j<%Z z!u@fm4sjUX!HG@p`;C1B!5-~@*H1Z#7;(TMmz{9*p1Ges1PA}cV+PlsSYj+TP-atE zV6B_0DS*qL2lIgO4GBc-6y?th%5e{)piZ5WxhVJR4G+j+0El~v!hFWAm8=-8GP(y? zZVE1+fKn=6yh(Z345t-UXg^v3d1$}5*+wO#$K-$q5FwK4$(~yZ^h9uVGSI}K9?lCr zoy3|G*iBMCWmRo-Q0=Ko2*Ha*5f0_+HP&XTX5qCDuG^tu=Pw>AlTf09&~{f|AX|Us zus@8FPT~O>#r2|LZTkG;3GX_*%UlmO)z6~dL&b8O-E zfpNLQo#zy3R7pKINY}qx3@f<_9YD8w6-WNwtI61=Ji-Z1Y!XE6cEX3TqbZcC>7AX? zVq4%uVU6tUMO%cf2eXW8!ZW3U^W}WFfEu zB4#xU3zpHv5O&gaKao6JquxYvdgl4jiI|NnQEjN8?{Duy%Nh>ql|Y~VT7H%bc==76 zw7{W1$^JK(*eJn&|A$+DzmN70mHXl!@+0=Vwoecn!fEdnEWQBFYl;gKnlR{HTFPB!sR zn5-z+f35IGdVjm4*H?b|{63Neam;pX?s&Un(d>A7{5+w> z1idI23pExqgQGeVqb=xB5*kTSE8y@)1!7<^Opu0lKKN|UaCUNfR#{eBR#IkGZ2oV} z*p$5J%D*uJKQ?$-MZrYDNWl>F4D^lkjP>;Oe$18gBZ`8t{$&T|`md(1)%c-7(>J1C z|3=jK|M(~Wk9__&fAHVn%jrL)>@+&1u@m$He#pO#^09>acETm@6oQN(Veza_GPNvP z9B0G2cV!4j=ukKayWPH7J@5kDT!?}V?C0Z?=V@$rqHlLkNmW1a^7e9l*Jw|h_qHp; zSsQWB*_Tn(WmIwj%*qm_h7MTVs0dS_sbVz}70k}$dD07AKA(0qZ=Y%+*>>5Hjln<* zvM%KETw!FAdIeRH?g=ttlpHa6At?{u+@ux69D5?Q##_hA*$cmhlzgz#=rbeU$4`g( zGBp}~C`@=7ArfFCP?yi|rw+7E#AX9NyGd6AIhB&8SX6a5ZJ<;LwqWnc&6^&_+Qqi=5>&9Ay?k!tZN9n?EmE2nQc}7gI zDQ@J=dAvlDD8o0K@`a9lcZN+H@QAaruFmyK6FES$M(up~U+d-nLfnc@0FztD@BP(p z#7*!|A6?1J%GMGfZ)0QmpYloV#pBz1iHFFdj(f#&sGp!m5~3$DBf!f}5q*z1+m%2M zxtf5*(98fnhS`9*7t%^&RZt4j(GXT^3@tlH=EoWfMSi~(Mg26IBwOp}`d7~VddiJ> zVg`y&)|UI0*VDSkrB~k5=i8vxkI8{9!)6$8!e+jpA8^Wf!0^J?6&Qk-`)jkFVyRc6 z*BuxJuJWYt5_h%{6GXGzn*Kw!^nOEmu7p7V*IF>S9kZCvPKZx_qs*AY6^P9697J%V zThC*qD>-92aR+g@PV&4Yqx;$jZ}QQs#F-rk-OybzhVr2}#P?<_FN%2h+UeKXtA3*^3BAZPzYm#XAW<~9y-*3 zAO}rVHTgA%I_I)Rio63+wuiOE80-z|G|)X(Yf1^w9sNseOi(GEkz6Yy)&~sGH2Z~* zK~vefa5O-YnxzdU#`3yA%67FzJt{TD+U3%L?Zwtktyv?yaO@}|K)Oq-B^(4A-YNTN=A)tK~| zK~~J%Ti6QX2G-xYT}-9|fU{X5frAZ$X*4D%Xqktiv9r?Rcx37cBD`PBgvotIVG1Hb zrGtMZHujeVv+r8auc}oGzpb8P&8HF97xFxXnUYs(|qQxL{ z#x#?T%oNqbde{q9CCbm1iED_;ji^Blg)CT8+z(5ts6d0~+aqr=f82m{;~-gNrar~6 zY2L{vDMbof7NNLKLphL!$6`}5v{YdOZOoZEgupTlcvUw{WQe5?kG|h$6pq0x7}~nx zDtJ=+6)Qs=`c-yg6wBFu%9(LqU*Adg*VO_^827|WX>D00#i3>CMk8Ip(SYEowrXR? zM6GnVMfhFR?BqO+NFP$OfF}Ju(`<~)q2)$xn46YdQW-QyfHDI8;>3YV>~88sar88_ z7aZ3i*qmG^IVhO4))+gSbSw18dPA=ILABEC%z<3QoUYaHuD;r0t5!}|>-=Uhfj#bT zW>=)NCOTEFmLet{Q)&}T{S>_TkRU_YLz)OxfeqXKEeT1fHHrqRntyx=RnBESwN=+V z5b9cW#wM+mP6_H@@;znja!xLCQrU5@DyT_1=h;D&i}HQ8n#iw8MTUqp<@JaT#CJ&% zuq#S+x7$Bd%a&SiC&A5DgLfiay7YCN$f?jon&vj^!vhx#Jeg#<&&{gC8CF9|hVJH7 znNf8?BO6yD*A}Q0w^WRR;2t z$IC>bKH0f{HYlz8twCh~#A8PH3N&*zaSs5D#r?392n(Y{eRqON4R>ynRXdtEhM~Y( zDN0k^9vhW+xGuFD0$#-%@R|=HPwum;ID5^3UpGY%pXIxB&*}re2gc=yM~gB7G{@Cy z%6TexZJxOxv8T-6z{ah0rrIpN^uYQv&`Bme5xeYPtiL;9_e%4<5T7NxzYVTuB{e0z zIRias(vS9uNoFe9RdCJQjs{)wCXLYbi*1YdP|Ib$Nrl}a&omk zT1zTkT5p&;fxjCy+$5N4=c)LhCM`E_eBdC8Ls+S%QhVIyuPLM2J!zoTa#vrFwM{FHV10*Qgc0=Kce zDRl;;+aOL03~ZI@MEXuNerIn(MFBU*IwYd{Y({F9U`!^90IRnOA|>5%j%r6*EI&Ft zV)zxuMi2F)#P>6RfECHJ_~Hi>!1W=A5Nnbl$dsq@v!EOLmleu0{d^#YSJD4-fyoTV z9v8Mbgyi`rK|Po>eZZM#vS+0^vCZxY>ActJ4^wNV9*POGIQvf+yK;A`Hd|l>7)iV9 zpI*L1XuMJV=Vciz{1hpO&Tv^r+DqHkuS*ou^u5lelbf)gx}#mBG8ohfnJ)cO2Cm!p zeW*{C6#l5!SCD$~|N2c)o1{J{S2jvTG#-qsYtO%4E(X<4!n;n??l3H&ixSk1mBQk_k>p zwp1yMfFqt?v5Q#fi6^tpge34D@k;~Q40B+iKLmvslD`)jjxz*&A!5?hjD{SqzxXwR zpGus%gMzKwwcUK^w0&3wY&MT$hy-^a)0$9k`QSA3VvJB^4lI+{Y9F>SR^O1@nSmz# zICikvgDt3qef>f{I*laia4q5F5IgP8n>UFykxQqra?{;BF5D*c@sSlb9WSgxZKO#P zlH4yJ)mDrCgEw#Z+vb704&p=)MiB}%-h;6uPryyrw%CqU=HKLoX=Ia!`c5K_I`8Vo za|-5PHaxR?0P(Y%*<94Em;cP~G8!(W3Vbdnl0oxDlyTqInvX+=`Od zo}%>JY}O7a152Lq1hVW_+f~2djh>)BFO}eo(fSB?Hb!Z?qTl|;MJ|Yy0CHb&iRobS z8+z4k#9a4yMR1A-5JaAnrDl)|3dZi-x(Rr7Esbt%!X`IzzvtYn+g}{wzPbdvdQ+jo zwm{+9ht`VIYpjtDD7-=qIO%2CbTz&QSJOpbb|jNZ_|h4JFHo8qrv?{2iz$QnWx{_n z>^L|G6R1z_52`Z{E*+Rp-8u#65N-*yBhX*|cJ_?;$puUx;n1oPf~iAD(NQ`AoN#i(ldeF2G&dFw1*#0zIvYqsptu4KksmP8RDA32(>xl=(a z8(*H%)uZ8k$P*rM^o}4e6Z%8_qAvG0%h%xCoX%-zAHZw+HF=0hof}M-s3YU}g=EYx^!Uq;s z4EHJ?r#kg@L(-1!Eav{{1O9(Xp?}TyIexrYnS56WTi^5jf7Ge|HxWe8$;{FSVE;e3 zF)+@;W>ybn=nKAH-rNZp6FHdEjxveCXtVGyiMavefEkcRZYSk6L`KKo%Hv&+u24FY zTpRV=&|lr~0B$+0kpNgJ_e`m&mkg>dZ=Y|uh_LTXA!T}PHCv%_Hv%Y1W|V=-{9P2) zfl6v;3p?fA<`IN4?8Y4{#{9cTosSM(2B$VPGxtjUCv&YpT(FaxxdRvn*uKLxp|XjM z#7)){(iL0I)|R}sAok#-*d?|{3{@=Lp;Gmz4Tsi?(P^gfzb~ey$vT&vjyQFqtBuw# z`4meqkWyPV98>JS=&NZsU9>AbJkxyi)JM?^r3D!^MAKbhR!%%W%~5ojgxC6-U{WyS zn+GZiZ(^oIc>v-c$m8LUv{$Z#pM^7ZPBzC#`g_Ut7>nKexo{82Cuso+X_M0z*JMG( z*6yVt7QKo3Hy{B)bH$3jMdzbfi*{0dR_lnICd}&tJh0e;-|7*tM=|=tA6?<|5tuCs zId=vj2CsVE7ql{442G;_NnuAIYH?0@QxfC*&QoV^nWob7cu$#UZvsb19_tnXSq0pY zOqJ8u76{SOU!aod`#2e!_>z41O7A}(PZ45_96?HiuORFn5o&Di8T{O0DJ!~>RLH~Y z>b2ltV){9Lr3*ko2cWhwqe-NNng>NKelTSRcy~s%FnsYIF*Wd$88K?(`}lf=*9U%~ z44~0PWqStU@Q^FiL!Ri3O9~QdepWw^aP7+cKRMjU?NquGB-oIo`XTV)f}uZ@kiXliI`{Uov4X$0N0iE!0a!YUxh zVL{h;F-mxrw2id=USqa%YkU;VRjAy?SxOWby%2FJtvRInp!$0G2LGtZXAGyoq2qeh zq6Q|oc|LQe!NIK-7niu{3*wY?kFG1Ot(VD{j4h6>i78(91FSz>H$l)W)7qw@;UTJs zt zkAxn3v}5>w38txLi29lYeTA<<-@90tGZGc z>ZK>J%!dpK@sjqsNOzN;9|F8q%F74io?C&pY`2?%-VAsui;^g-!A7xAiW@?U3-vrZ z@Rk-`>RHT2Xm$!QOrXw?V{FR_(&qu`Davyd?ves#Uc@u18;K!J#JMsHxMn=69UK|+ zdoQl7mVsL;{Elu+CBOFAC=dewocSIHY28VtGbOkzOk`=yp4l_`r}XDlQ^T4^6rL z7GtT@MePZ9#)Qf_El2mfW2nMIrY@p-opk&D-V#UhQL9AUT@7|LsdKHWhJd+O-OPhi zakB@FNT8XCWn9Amz1IRgflOrHOYhAPs5=?X2W6eyKJhXh90`{I!xiKK*MOs`5eEa^ zH*;cwYOOt7E8)B-8%+}~U?!z$%lz>Mj+vMU(=tbnX%B3j(*9!XCp}+avUOJ|vJLh? zo7S1YIqULXFSvBOJ?hQ_{wD0B>Ak@wyG`G#;eAk0b6ZjZ{%s|sROi=E7LOVkqXa}G9NZ?u_xeX8;{=BvQ4rF0f=?z3IKC*<$|Ig`$#xe<=V#;Fc>=w_a+ z`Z^mxfQqDUftcj^LP^N%Ua(J?!4hULnBqBM-mE#8BLar-?GWz!{)1z+_e8ub@ijmX zqnRoJj%=>v&1s}oC|ayRRw9#F9jWp{zpUA-O@hquE!i=bw?wx>3@@jm?b7a59~O?=j2ajIOPoYpl|{FrBrUe5Z-U_N{}`9>iS znjvHssCt+OQ`%dJ)q#WIHCZ+46BviCls=DDMEQq&(lgJA!}SY~)}(&>R^1m4)O)5C zPjyL$w_IIK?WlSvHq}{+!3E9b#EU{8L;PIMF5D}#f1V=BEpmVO3VE;gdLZMt7{{qX z=mU)CI}L+ZFC#S@&}Il~alw!XNH!dmS<9cuXQmVkw7EtRJxDaF(;t={P5RZ{)f^-9 zBP)&uEP~o}-B{%l>aTx}R-Y}2v1sYefo&gQ{fW5%8U{M%dV3`(IEk`x2Y1O>>4Po1 zKT*`(^}0g*`cw~gx3~ONW!ul=LCD7E*{;`TjI`Dk$f`yx`^7ou$Io!3{rwwfiV8VVj z&Y36>X6;V~op_UmiIH%V9h=sE?>b?DtFh z*`Jpy2cvtLw%PL$EA5Xy8HUY^rHROfi4u13yjS16OovO6lYZFLVq~a5sVI~D8vGjA z0JKTqg2`4l>dGNjcXLhzn?4jE;8|qE3sz~y&&-tM$ypzb&u9#hXlge(7{qN(*6|6U zj2KZukLuBY>rtQVac&aWlj{%oiw6$;4l&*!Cbu6RxA}H^==%!_BFg)@pDNtZCQQ}7 z6*4P!`57S5JhUwM=|Z)$g!?Ny1{7OPv+q4L0qF3$&KQka*L<#0kytMYo{T`Ow+k_y z>92#VR_tE-SNZYF!eDu(i};kXTQuf_3$l9`q>TzZI<z`OFO!rnYvT(Xhxxu#j;Z$F_*|K! z$e9F0nTCZ~Lx_i$D7xF2bc(vWCToDl@uX`d@3xP08=oH3cUZbT-1eZf_n=pZDk{pZ z?7e)04qdeOK(vGbjTvkRS zGTx+;ITzD}4#^T`vz>al?CPm=$%Ao#{KZgzLyw>hpQjEv6q@Ym&_1o1zEb{AHw7bR zHaQi(cT2TPJpyF<3~DH--Fi1MeF;8eb=qzI$^{PUbCA&!+XO^RFFz+PEd6Eyl3(1=VEj~TL*bGPM#bdJeNKn<-GDWCEZ4_3tSIZ=}7h;T5}8me4kFvRAR3U)^P{ z@IKvq91d|H&4EuZZ+!1kc6-1B!9GkKzbKh*ev$n7I!wL8W6hhwhTZjYzXojtKtDwk zef(v%EMOFhYFa@%WkOe0x-8{NY^gi~x9Mhal#_C)roBmfV4*l>I~!ByvW#)Y!kHnK zT50Dmjq1T4q$K@5EO_&1%@Hs zeiJdXfgl$e<29wF7-~?JPmP~at<%nfCMu!w@|ZX|mEPgK&rM9|Q8H$tC!gisk#}3L zXNgG)Q=~7)T8`Yl9SOWvy1qUx;D5~7zO#o){nQ@BM%skQhPQdK6}eaYFls*((xf&9 zv%_WTeQz|~gw#W+`{_3sYOLG5j?oWfEvb$Y=K`$W`^{{Wi>O6P9552;wSp{z0e&ph zjm*awtS!}$O_a$qH4n@;JS#Brp4$y;G*2yH<}h{?YBIqX%+uj9w1C-kQ`&>+DYw2x zEz;gr)uo6ZMw(15Rn%0X)*1he(IE)rZ}Xy`5hS3?2xC2w6mOm|H~M1zlL!{W49Bd< zN8Kzy+|h7&|L!EE1TB?!jG;I(OqrXrXQ)nV^hmNcA7fxYR^MUFo|1J5ty9@;U{S`O zK4LvcYkhUmGRDo}!dXAOtPw&u1`~*5u148g30=}(Mn?&VU=KxBs+nld%d^`ycOfaj*6ao3aIf8LL zh;cWVVMwfi<7ET(IUXO(HF62^F?x`q(69*b<|+F59DGLV=|WNW6{R5gxEy`X1yG3v zW#t65vX~QPNg&iuaes>$#tf*w3ZW<)Ig^P4q$I%-l|p+gRs~0I}O- zQ<;Va99&9%^x@wJkFbGp-bhFtWYQlhS~cg!ndl;!cO6G1sX?deXl&>E+9S$M6!W;j zTDoP$c1b>(Fv8coRPg~yAmi*-yLz^yr&?b2{{ zL5;&Dn!sscIiX|*?60+!3X9o;@cdwBe?i9>Lm4-JF5L_u8P#M~{Tw{$W0KsWM}rC- z3KPY9joyL5n4C2Q*Ii;nmV1XnlRNLZ<9fa14P;yY-N(NRNqpMN%dqMHg$V@1^1V;M zHxSd@6qI*^<=2HE^lJb}bXu-L!YZ)S2;MdUFaE4}SEY6oC5~_hN4MzHGwr}{I)vQ7 zNypOfx!q_^o%IvM5+Va@htn!BS%Jd zC&7ACzifl(#(<}-r;JNySLePF&8 zZbgAE(VIodM+5X_=C`t$h;T9d+%d7r7mL~xKr!m;zowPxDZbIw-+c&)Z(=vy|Iff8 zW^d#4pW$VsvX;{KV#+5g4Gm2W=suxd1Eo2gV0bQJPbohA`1}|QE>0G+%o6J|X$G^v z&C2gx|A^>G{E*3K;CsFjlQnj$KP9~9Ef+1GM@Dkr>&UOT-PDVM$3qABl>r0zT40c79NbQ85C{b` zyqQSQp7C;57vTv&t*6QYs_`WZpdkn;;hlA zCOb~AwS7B)iwF@^(2cO?ESyY;?{ywUT(j$swd3<$JF+Jvg*H+X@cti5&!mPg(Rld z;-^$z&HW=Emkkn@*eD-=t5{M$?Wb%`rNb(vF7A9{td!$@Eq1&#$sYCVBb$lPKjQ}c zUQ8pat!;&vI4~ablIJPYBl9jj$%C!x^X=&O52EKBNS$X@nCSj%b(pO{AJ32125B>$ zK{xJD!34xUQIu2|Ou7D)dW?H=RzN+3jHoDfV=lc>yAO;O`7hkuHaQt(pVVJPsClL zXWBzbU2-_hbV)CqZC_>>Cs`X^cF*MU&s6APsHK=-Z1A%>D~wabr7|%sp>RoM!{y0a z6ArK75-DzE>;ombl3%O0G?HGRSSEJZOLjL9sIxCg2N;*%2Q^*PXx5gW_m7S~@5?ik z-$)p+RPxarg91G)k-9Qjn0-qjX0i|5g>puHyVX8)OVQ zYavS*wHm{qG}9WPOJK#h6p26l#8OX+rY zx|thu_c}w>AtLyU@ zY_^`mXS>Rql)ptBUMUn0Ia=PorArDGj(_3dCH@V|QqL8BAc4AoO`;bC8N8UI-z;Aenf&4MhJZes~V;Kp3vdMpQKCm&AcNAZ_6O%ZaCisJ8Lh~_WGxt9BiPlTh zg|OqDGV3U~Bj&fEak^rfIOmbGf}xAC9l;LL0Rr!CDgb^_qH^VD&nq%{eDL30_VJ9N z5d85L3J%wrjva(ZAA7{ZD~Ri0fe^#=tv3)_rPCWY1C%VF%6m*miAu-7ctMQ3@@KBR z=24C2*26Y;5jDg~sSzRJI66cv=wG=fKac=!7YGyJA;jSD*~D~s+c0cei>>f8?tc&t z8d)?u9RAqe(h2M4>QGPN?Q9_6#bf-={XMM)!p9)Pw+H0nG3@onQgrwg43jRlEQIvL z4l-8*Dp%t+4{_E>a;LUAvAvlPX^^3ZiLDtu$9Pum>S*56w*-HKjY7t7aH<=}#FvmM zWEzo^_#MyI#*yWYmTfBO{F|P?d{aBRNZQ){9{CBn6!_x~l#@crr%h=e;)wX&&zHZ@ z_E61H`AFdh4Bk$MJZ2eM)8W%H?O25Q0AT6l1)8zxkJfW+`XHsF8t{ha-^jK2PN-Uj zJrknCI-bmMn^AkjvQZK0;emwImj^$dsF&i*_r`(Yx2WipTLx^9!(Y}IB+Z+Q&0y=O zw#>RlY0B8aXH1>JZ!8f)514dy!V80nxP$2(SYDATF5cbm;ax0Srvyjgmk!9gKIm78 zu3@dyuG42&5Gbxwa#CL|PNF0Ao^KE;N7bn-yoJ4MaUL*ai)K=p z7-A)B{wO*p>kR<8vASZXhC3}O4HveJvz7Q-%{6z&0(J``AnP?a(~7hXs3Mf;t_5@I zB?|jD8xs>y49yWf;FV(vZJC-cgT_*a$q7L&UkRKElFAE*?~pQMoywFZO~Yr5t-_?B zRjczz-Xn_7cTj`u;MoD_VP*!`cUq9sObSnS)H|MQv#!I+VX7dXD5g=`W#}HK1wMe_ zYntHfb1bS!ML4=8KY9@c7tPhuqfkVs$43papdgEyYme&$r2)IP(#iw^PbV%SNOE3P zsq@0ECBlYGibk;0fm&b*ZrJxC>kLL%%wj+4uM!JtDXE%XZtBshH^|8Sg6at^T|iRGok6mz zOHlaL@HGwnj>Z^lsrr`W5%-v`GjZOc0cw<#5HK(X%5k~kw`|(CbQ*7ecF+~9FvDp1 zJS{h{+>O6)S~4?zWE+_DIp#A+6O1|rvn}cp46(k&GMnumA=oHiB5vg7*GCB0W_C1F zI@Z^)6dt2Gi|jt;W%MO;<}`k-nES!a7^@obwa4%1B$M#?8~&{1{BVxW2+3sh9J(54 zLUr=)Jl?0XOVLc5{Ozx0N0>XEy!^vvcB>!LnKw(xCibI+)C)3cHV@lIdPmI^bIljk zZ}wOU4NSj)NyzEE4t*NbDy49Qu|mLXZpWGYs>P9(TQ>L>{l9&P@-IJP$b7sDSQ`>;iu zj%Lq?jxvr5aAc!@4NOtE=@5jzTTc~R!>(W2q4TaZ@X5P^!KDtE6ux191XDY$!H#== zfa*$X02$9ihCc2g45hvi#fx8GROWArGkL-Y>9$0W6u3PR;h18mpQ63AQ`Z2dF*zoT zyySNG78{cgF|xqnQ(Juc@7_nOv8Tt_H=$DUTVsLvA4`;PKU*Oi>u*b2Ysdd=w0Omi z$*%FE1bqq7k}BXMhCm66oJ2|qs2?oaC&<$iR>Xynf)Eh+B2&}bTT0W--6)L*s=giL|3M60t_MO3X9uv!ZZT*)yVH!daYMX$A*af2JPFL--wjMyXYY7 zRMW8EX8Q->5P}|I_S%$xDe`GJg&PbAx@onRtw?h<+E@;2u5Lcmhd6Z#$!0mBmxYy0 z%%lEs9gu&CE|?bOpdTVfo`7_FI%i9f6z$4EGxaB22svu@YEuX6l$O zlsV^Fs_3wK75=VU4_mMWX#y~_JEaCF)EzE8v|eRA52G=*RV{{XChTILQrD(eUm*l;+s7re7cfI=l zorV4}1F2Y>**O8E%^V#64cWbvzHfp&0uP(B0Yu?60+27iYa%yP4uw|?e_%1Cf{3Gl z-b_ZEx}MSbqFw1N#Xb0Pw&cd2TT{_Jzh5N1Li}52ae-U3>PGY-<%L`T@}Qml$t}hpafx&;=N`^aPC7 z$%XvwBBw5!^)hktrHAOC5gfjzV%}p5xDySywPB@A%4)^@f6qC|(1;}*X()}g%1GLt zYz{go62lJ`*48Rqx><3=xGv|Z+6~##OFvhyQSh1<9Y*?!F}kzEibBdTM6`RDP^WGL zdrHHA!YCKJo9MlVwg~Cx3tIT)782K(P+uru5mcjCoUl@ z3>9#hY(aLngVy_^t1Tc7$e)~X_p!<5P9{>ap!)?4=OjkH7XwltptAHbWW?2!WV}KX z{Ra-@Wb*q;!?UX=U0b1NFNA;HCS%Q_G7f7Zz&|6XjPUY~WJr}(K_$8Ou3~MbGRUl> zkU>LI$!NE2=m$zk8Fw6x*4kVjpf7Y3-&s1C89OIF{};3PUqli63!k5x-;rRv^j*CXJfz-fQ$>-B)-Pg(IP zMt^$H87E=#oEDqzPt^#F{=i=@bawNZL0_Q|T~ z^hz_+&!He}Zk!Fb?NWK{rMn611)TW~%AnIh?3@Ba`U-_qDth8-+_SI#>;-nK;hYl~ zMK1BOUjIgIzp5O+Rw?_Y8Oxih9zi{_)HVfi3)RD7tS&uYqX3r=?m?KumgY;sTgEk0 z1AR0HH3+#GwZ>c`tc^HMiE*l%119EN31ixJ zs@vpQyUz<4dwE}P4h&CktXs&lXLVn+uhEyT#&DYo2J;zf3uAa!3;4)Rpr_z#$k#6h z8R7|ettoZ)cN&|j_L7}aOZ>d(sCgq+E`{Y*d>chkV(Zwt@&aO}*NU8*K-odFci3{_ zzGpPE?Ia^5*esG_ZC*9XeL8-#nm0A&e&tiYO1+l?dZiyz&U=)ZL5<^4@Z4Qtv|Ipu z?&Vcbkso11T18@Y8I=7=6Lh=Iop2oF)=SYof2-l$%$Ga`crkRBsYj=oT5(`mkqe*7 zA%j}LY#2BVRFa6nE%|6%W@h{lQi+>TLt@r&$m-57&z7qPb%WM2W~V?Xcc5LS4F>rr%Y#@g41jOcU$ zgT|eFeyy2Y{M3!`JZtEDe;(=6;vUU}UtSh|tpF2ec38V1Lay4aLVLaxEWZ+N?y>nl zG01G;h>-3WE!)S><+CfHa8?G`AwmKpM}Sg|ZzItn8zrF_W1mMyMBQ@EEIEO6^dFkk zrT}ATr|Y!Y2e@P==w_R=RXrhibp;Z^GgP&GqZ8&;4I~HL+kwrexf^)QEhbxASD9PQ0gtwM_?jDdzRyjF|2Kb3>q^Ml>l+kJe&@n}1Vw59eG5T-lkaKJw^P=CQlVmxZ11=HzmzYO zvH*&(ys$rHZjO79?R0-X2n(X$k(EZZx~5VX;@7A@!_Bv3q{5&XuxPHWsmb9)`;&3q z+snh}&ux%4MDbx!L}A&%#t3eqv!_f69 zB*y)sK7>w`jc}4cOEvXQdWt7I3JCgPD!Lbt)u^`I%M>ZhiALK^-@Ls~rD?@N=^~X9 zAe1sleC}9d9hajYCJEwpviWIj8c`=pj(7(`3cVAGAy39*|9E%(S~?+AWPpegf}os# zFe(B_$oqx>(;j*qL$TnCj*v+X?RzUrz#X4D=9=|}@zsc$;12|VQzX=&-18YqmDgQp zJ5Ul*;kD|yf{ZY##9K6?lo`5wTRoF)>+~;{=w+9{U3^j z(A{W>zW??4P$fgD|MU6&-?pQc5{ekgr@PB?AVAy3^(Sa#xiQ^3 z2&g_J7#)7C9texk>fbEBc_^KDP=2dx1^5ZHQz0dWw5_2Le>XkIg_5bWTo9rm96 z@PZ*woP9G9Y}W9?21c~3#92L#@%~Yf!uX)AdTUzvt}e5YRkN*EHEUp9`WQf8om0Raqyifz8~i#H)phTi zj->ZiSPTKS#-v>HJD_85Gg3y=wKOi``03IUP^L@JWA`rfCM$>ggR8kG;~3#?mpCJ+ zi4pJRJLmsC?71(0fcaCt{|nYuc%8sZYp~*v=Csxx(cpNZ6=K zpwwzh84*R$kg5;YXQOYs^agU*^x;?N)K zKI`x9G?&lOce0SukKPDg6?Yed%$||{rUM$@C%i#+lXlh>%M!MSk$s?| zafqrf+d=GX`CY+}Xe@Up;}*i3_*lK#6q4gyafDa(=sV5Pkc7hv!Q!(v7J)Q5mJ|v4 zsbw&$@5h9rEkSR4jIY@9P}21s0vX+G$47*u*G%T5YfXqNt1oRIsHfodqE^_PR;}HO zlfNQ04?#~qeoWyk?m4Lh{JL6I>Nn;!uBXXZfftPhOGmoDU6~8Nl|K*)1|a^XwksC zzz0rBX=SA}?EFfr;aF;cd=gc%K^3Cd)P2+TnFYP`BAmlvF${H^#uy{PQyOzs0jcsS z&Lz@qrT=<=9gY`#BsUTypkg|hfH&eD(STyk^bQ2}ZnX1N#Or*&oPAPG>E2TTil*}Y zt)O=7yv=p^#zS7Mwdm09_%!-HSo%H~zvX@K1Zv{;z^UwFpOVcrkz(LNy1JZUH4gyl z_*4no2!I#@Kc5hK^%VYsRvt4{ox5&MKWH(gRDUE92CL9z3n)59>Y6RFb}ALixaGKm zghOG;HNSxh=APW50I%>@&Rgy>KxGTR1~vcD7C6mwK|~{nqoHp zY^!Uy(<&4`2U-JGk6&WyjCSkPu|TPw5QerKLT?5OzI9GWo~py|OlD%=8By7zTFdL_ z#>!V2gLYf+@X(_Ay8)G=IE)u4O};-QIo>DyTxQXHIl&f^bg-KR$@wm}2NO>MPAOQp~f6sno5P@l7 zY$_3Cx+ws-d^Lwi8Qx6(!1Bs zdl)@dcC@lZYDJatSjZ%^^;pEv7u;61IQbkz{$j#I@@bK4TI&cMUd+1UydL_j>d^&=-wzd ze!mrL$Q+F&2MaB~7yZh)*}I)E0Ot54>dxZF1DzD9v?piCo%h`XV$wOZPY++?ip~zU zEF7O1S!PkK%uIztENCOvN|40=ZcBbs*ymMA)>o znsmypS~E3Q*=T;Bz}i7+vG=OtB-=6!x5|t?x}g_ON(K>hp0)xHrQ32Ilv}ZdsGZ70 zB|~hpv@h@FVr;z|F7YwZp|gHnw9UfoKG}}5E~ENBQ9WoL^DW)k3|%-e9i*>teI#0; zx@~BFPCL~Ba#JRGzh?_nbm+{&znl7VKOmX$n5z~TDu)CT553XH$NJRZD9iN@$bA{g zQNdt2EwxnJF@{dHsSuZI9l9+5ZS~dUM3fgyCb;l z6|O*wSIbN2h{rk-VP6~&?!t2NPh(Eq(`2WdDvM$!v|K|VyalC?z93TU{&#@JV06c(5i~?PtC>!o$ z;Jh%BTzCXJ+zuqO)r2jZhU=?}E_a6eKf2h_P1`U8{-n5^bvYT&x|^?WUoXJ+kyqG> zYxMGL^%nY31Wp7gk8~J`F(*hu7o#}fp@v$N^AOp&x40g&rP3W&e>*;hc`$MhjVJvQ zh(ZrtcU`2%R8qOlG6Lvq7WX5y1`#INxB_f;b)afH2eF{)M&i?ozzil5=(rj5%UL&s zcuz`yryT0*zm0iwm~PO{V@;HD?ZZ*$>9I44edrnZaIXg zY81niGuHh&lMI|CULPThVbw5bATY0Ay-bk zL{=}v`x1hY1crv}MBF3V{X!VyBCHM5V($|H-tsx;SR~y*=)HbUjn9gP*VRtf{vZ(?Y%g>CS^=@)U z>FgcHDT<{FpHOM;Q@229R$RiHVqJ=`hPV>J_nwgK zT$W7M?&l;)Opu}PR6{rMM#jFF6_&^TP3$a9VTf)eC|aCg_MJKmagO}ZVc1Y zPw1o9KXOKge@TWK7OD9}$pqY8=v;J@%;Mg44bRoMR&^lQl($gR1?HVz~M94{a+t{=%yi*3o?X0JaQNw6tmg@82C?}RN0*Q!5 zYGks-agyO%WVs-Fl6ECQN7`4Q=<>20?eK>FKClM;vqZ<^2a|j>O4vdG(J46vP|{Fp zG(BTV4vwb$<1RJm9@kh~emC*&_^R{I72X}v81#=83Hi_WL$3X0X5ma@Zs24t)krTV z$s#AqTu;x+BFWMy&d^rREZIm87?}ZRV3^pTpr~0{0P$~ZI_saGxl3?QI{e%TQ9q~* z%Foa29L?wqo$PGs{@FuH%*Y;s1y^4;9h0^a>1|j)rvBU#JEuEDZx205CXk z&>*2Jl}TuQ&~A(W%~K71zo);x`F;c22kKyfQj)S-8_PE&jFm>v zAZF%K+n`D z5>|q7$AS<{#n4}L=weeoH*Q;A=VT*@pe1sO(c{~AeCsDV*LYXrAT)^=h<#0O`&Z>| z-s6Vk!E2jO zga4J31!c_%1zqPj8F%xAFh-j=aV8?VqiArMe&ate2)~?4{xX!d`@Bf274N&Rd%<#C zJXjx5Q&L4JS*kVQ5t(wPookKAkt=KV{VyNkBms6h{=fQ&@jrb8R6^4dnP2|0)h>^w zx^AfrZYeE~hK`iB$Vg#y!E6z=TY@FQd+3jVEh79a zNQShEX90W;bO)4=wjW>!#=vP^jLO_t#KnI_!P`ECZ*_Ne?;exMid{SJ@F9jfmSWOe zob`U3G^-3hQlY$`GXCZ;J6H+@#VT}2haqP|pEy6lT}hmio>;)!LKC{qKni;XC4Ht+ zEHiQjF?Hl&e9oh=ffd*jujDUORw3XTigCY<2e=NYA;fl1WsCT;Y{w1xI*goG?u<_K z@o$`Ougu#<-$5Nc>BwRf-BGp3l2cdkF}6;DQ*5iyr6O<1C(QpUuKo$61MoR~wjWAr z?a!5r^S=d>qKTP_yQsB+*}t3>qpIbk^dm9sYI{n|(_Cgz(3~8lP7l*+0rey(Wr3*} zUJPNsAP8Jjc5Z<@e*GotC?GGQ{F4$b0l`XsdU{Km^V{m@38uwY~%uzHL#WZVwKem&_$%)7K zt-WHX-e?tWrm05{evw+}#A0^zufxJ<-qBU#N2U`K=yCGfW^$vlXhb==i8Yc#m)zV` zhH-b%K`dPBp{(jJRIl6CU^n0+d3w}1nJ_r0_BeEl!$)^jIVf_3Mdtg0YF%=4kbuAD zw0W@8$d0D^(otibsWf50+(`}N4d>>>s4KwQ??rbF`pWz;AT77f#HArdn#2ehkV#*| z#>@x?LXDefa==B#WFkZnw+Ori@v`K-blktm)*D`ih1pZ_=R-4?3Osn~$|6N|^C>(P z`AWbfN2FQl3+NKTY-y5MpA0GNz%O+=xU@A)U6^pxSI|8#twhCTPLNW_!@+4z%_qey zFbMS|O$(aa)2Gm4Gyv>kx>cvmq+!FCSWu#69ho^}>k!#iDR{IF_FUgO)ta1w9h*S; zxQs9x76zje`=E$1o;`Dy*LXyJk5#%#Ozj zP9JoDHHL`mP0ZI6ir`tLpoXeWHj0iVUy~Vf_kXpo=cmO{p&$3cP`aa;k#vjo@`#EI zuw z;<+XV>OPW#-_DH*@nNyjVyJeC5BzG9k+N)k0VLGo}2_KyFgibCc;mWFm`EPB`c^6=??swVE1ytAt*zT1#n* zmzB!7Mp2(d(Wt9CKS0@*I~H7~uHSwxPjdOxRjc#v*t?7(S@5Who%vS8y(+4+W&31j zj%{_S1sL3+1g%_C8~LJyRdz5#aZ_=KN5Ii`#?Ldi9eOZ7Q7rOcQp*Zaw)fu{Xpy!e z+sc;bY=~3Uf_R-(3VnfS1*_l9PvK7&O>1!rxEyQfv*Z(Zqu-nZ4Eu)7hTCg5(9!nV z`xPTO0*%m{O|08LP&s^E8LSyvbqHJB6>n2s^dJ%w8(IE@j^zdsQ{4p4r2+WolZ(@C z=xWy;3in%cjE4DTGp8;8qrSQ=78k}_WJNDYY*${qwg_fd^UYTh+ydVgB*`p{+}qV^ z)J@eDZjmZ`86GbH8YW`WYB()^P1L#*Ol+ZRbSJvWa&prhONOmLQ@d%XV8*itb+Ooo zV~4c+`Mx=%9i1OB8f890Vm)R;xkjb@BPa~G8b1Wa9tL;E!8`b@EY^2u^bsHz43!tj zI`{*kP?!y~7$rKIj^#b>PA98u_$hGUm0Uu6#L%#dGGSe*HKq^H&Cv++xBSm-&}GWwTN==c2`!kZo1XIzx;837#6pHjSu=P|~QVHv)ZoA1e6KitaF zypHoz!96s`zu()BQa{i z>#ji@YEzkDiH2k4+J2;- z?H$O}2XVKK_pv;};y2C@vbdSWXFFd|;Y5zRrbfDSy1_W%&KKW!J}1_glTal~9-ZwN zQzy?YO8m^n{iJ`9wE`A|`-uyr zz&kQ8pk2a=1o||}gOtw4XLhD*2beQsKZ*f6GjY6s5D8?c8R25Ugqd6eJQeKm-@*b| z+Iy3)(J8^O_ssK#=us`;U_lEnM{ueOxsHyFhIti*p^P$;##Q`wCoe44g`F1_3>w%+ z_}(+nP#;h>DhMtr&DEX5ffj)UiQ~u}i{t;|0v_DyVaG$q0~ZYx`l=`A+2O-HH*o|T zmHAxWI5RJYa|Ron_vho@!TSr>ze5nFj;0vrNf9T<6%$S`Z|(2q7w-BvGPUt}VQe9uc*ZP+>VqoTTv`LHsw37)faTP&0M5_<6!s z1q2TdVwSk!NEJ9vObHU8R@BVpgs^CR)Ob)O8Bbp1TCH8H1WUHeP~bKVL3XZUMQ81c zvl4HVKo}DJL$btZSA680cyXh>YiIo1%!zKnjKjwhigdQyXPC&Ua_1F)Bwq8vaO zVZZ=GLKdQdlmv)l#8ELN-qWF(;rWs|Wl~lK!-9s7VuGfy-&*IjG4-MuoL&1bhCXUm z4vgjy4yCFb|H$p@`v6L1HR}El9R0%O<2Ze$iRNx%gie&+?R_(|lboFo!K6{;61ldj zgP7mb#IvALP3~DbeP_cup4^+;jrI{1DKReORb@sRLKgbSVq&e8t1-#5QuWC5BA9DL4+1wT zsNWs|Dn6*dpb%LF7gH{!MNuV#y2)`{sPN3zCrFJweFY1exzl8YPHT0IPOO<(Qe}-@{5WyAsD8xwUh7B2+{KH) z_~Uzp(^zm(H)C(hN5wp*N8HT4rBmY`AddJugcn{!9+OAi7P^>y8B8A~-jGcNpPbU? z%Nhjo()I;ByQ0Pj+!<)J#w{LA-Xcfo5H8&oHl-S>%@^23^~^TZZ*_^&q;Xm2TppW$ z_q5!pTXr>iK)#Dhy#rVjVG5!ZbQIR((nB9XJlp z$;gJJ5V}lr3-Z$~utvrImKSp@N{}^^t3(Y0uAaa&IE21FZHT5luC)%TO`J;Rqk`dC z3KZ21lSE^uVyjZ;riy67jq!~*xkAk>6=vxWR01_{2H^>j5bGH277kK_PTQb$S|qpb zY7*VSE<4spNcaIGw)wUaYYG``JEMBE^z(!*A#vsa-u1I547PMmMsEi-tAS{|5+)kJ%bAEz~AMY3ef8fRNzEPi|JI7E`{SKm13F2u_S zt2_3sl(jwdZ7@tMP;T=8=N<(XH_S^hjO?%8DbQUQc8ef60NHhYpxbDeFQ9%4tZabn zmI03bGMihB{^zy5CVxH4pl|rwDeK!QfWAS{U8t87)|a?n-wiOnD0}acm#-IyUcIHm zxpg#+W(dysIyY5Klk`)`^D;0C^_ z+t8wKMki%1EM%0|Ju_YyLhf-#ngI_<9R(xAj&{LF5r0(N$-eFL`HIA70QrV1k#?D4 zb65TxS>%*NhE+7)ag)Xh#cHii4Hh|fyL?h}oR%{#IOJeraq$YP)Ljmob;^1jGl^Y0 zExCkL#_15uHcTlWE}K@U;$)U^-ZTQ%d#9>ulin=9Q@(6H+}LsFp?RP!8*)RRftw07 zM~j-H82S(u`fwTcz^v>*{J9RX^F-JL{p(oYRlW*|(z+<{=H$u8Vb0S1fOZ>_z6bqD zlG8+Z0W`_C{HXT0ntES1#xbz5`)hg7Ms6`x5d~BDBPCtku#F<8g;mLH%tN{olGB

&9uYSI^cx*iwY##*&0P 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 diff --git a/mods/vertx.mongo-persistor-v1.2/mod.json b/mods/vertx.mongo-persistor-v1.2/mod.json deleted file mode 100644 index a6dd373..0000000 --- a/mods/vertx.mongo-persistor-v1.2/mod.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "org.vertx.mods.MongoPersistor", - "worker": true -} \ No newline at end of file diff --git a/mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$1.class b/mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$1.class deleted file mode 100644 index 2d1f746b8da40ee5137be605653584d6bb2f9372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1550 zcmah}(QX?>6g}fO-gvvI-6S=%X{Z}aah%dkD6}a~OJgUYDGne7MdES19&NTbJJIes zgcp9N&y|{hctAY!QHV2ZtKPO&vE-TAd(S=h%$+;)&%b~E1>hb!ML4)?2G_3I6sJ=USGdtGk~PK)~4xLlw3AGL983x85(Hwr=De z$*^ar=j)y4@>IHg8TxLAyJ{LGg}@JWMEBK2ntfIYbfpP|s#tY0I zB+~nNU!J5&c>v_erun}6TzN^FD0jx{&SfY@K7rx^HOORORBXKq$m}uI?@_M%G~HCR znSrO09#gS>pa+qsc7t@+Z=T;>L&3uDgkE3ALFn(Rv6+sb1ub*jRoJK!Zy zaV&k+oZQiSrje%VX0)Z}5nEeZ<7v0DtP?aeSKdC`o;vC4U){D26UnP#u3M%usj#;p z+=#D|j`n@U3x2!)4rf}GKK(px_PxQ8c6nT#@qXV#@tXc3qflUB(xV|TZCXg7$_Hnb zck?oG<+5oVfHV7uZ`Tz6^H`wwDpwDYOD(0w>N!N?&N*_8-!b))t{f^H3j{(G@B!D3 zS(ENVEOKV^VQED3+lXed@e1M(OBt^eI-8MEkTEM`j-hkUXk>k>$=%X211mEqLSnXD&v6<0E2h)bn~q&~YE^xC zsTjx$46@K_8vA5ZVo3NqmY1Di7_K;OUEkxbzfV>*PhS_N8{G9Q&v#rhOw3xg<0UJ#PEe7NyEPc)h%ess>I|bN;4d){ z*L*7K&!7H9zJ4u)*+{Kj&$0C~k$2TyZu*6JN+!8!)osIXxs=bw_42tcxJbJ%R|)cL z7?9T&+^ zm#x@l!|^P;zRvv}rzT@w#cM36=tZB3E_AC%;g*UtdQ|jdQNBCb<@|@x z`IK<}@haz$zR&j6#Tg?*b5*4Qa}!c3C0YU?PF)djYK(wWztF^v)2|=5N&611R%o9f zKB$cyfN7Zn#IynF0CBCa;{cNO9UWikIEDeD2{Hmp;V!L(J2Ip1J>t|g6hth5v?0+7 z$Y|fdj*uW0JB0jRY{!Vi=_eiGhQN&nxLqPBmPR-0#W3p&@cWN3+W3Tq5!@#~56J4+ zw~%B>@{lAkjHVVThDWp)Y0Z&D#E{g+ej#}XB|3>?C&~X#lE@)X5KebP}h}Us%c8WdHyG diff --git a/mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$3.class b/mods/vertx.mongo-persistor-v1.2/org/vertx/mods/MongoPersistor$3.class deleted file mode 100644 index 13ea7c6c1ab7a548a8516ec064b451ee42e83e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1363 zcma)6TW=CU6#fP%>#kdiw8cxUy@-{Ic1`e&+Qc;V7N|`yJiEYTSpqX=XCe6FfAT?1 zd@w%yql{+&g~D3d&Ccb_`Mx>V{rT(LcK{_gCRUKOki>lh2NrD}7|0pO8z?X&!?v%o zj~R9`rSRlA50tM$8I(!&$QOQi%&?#Pk8ZxskT{Vo&ahVT1wZTe z8a#OGHo7E9S7g)e*4@C@`-w22&0qk7{YnTPoOE5KI7#*{zbaeOhP7SM($x7`!#eK3 zb(%8Z4j*t4Hu~feSIYHxS=$%yDUab`hW-)&L*}B@AKw45yt)*_QKVK!N#VSv;Z38% zn_>BwoH1*@C)}_fkU!_k`Lis!c6&2d8Tr|Dh38DJ)$-VoY9PIM#_(}b80pN*Q4)e^ zW9Cy3t+f~r9TBT0`$3aG_jQWbFP7z@c803#R5ZI%`NFI6uq|5#iZ&kNk&P=bZCE&D z$WH6~-UjRec#8m(=;Cfpj*G*hauL0X#O1$~-JUF^}E Qz&`HbI;||yS)rMp-;#OR% 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 "$broadcast_id_file" - - BROADCAST_LIVE_TEXT=$(curl -s "${OPENAPPHACK_BROADCAST_SERVICE}/broadcast/latest") - echo "${BROADCAST_LIVE_TEXT}" > "${broadcast_text_file}" - echo "${BROADCAST_LIVE_TEXT}" - fi -} diff --git a/src/main/bash/app-common.sh b/src/main/bash/app-common.sh deleted file mode 100644 index beddae2..0000000 --- a/src/main/bash/app-common.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash - -# -# common internal function definitions -# - -function __apptool_check_candidate_present { - if [ -z "$1" ]; then - echo -e "\nNo candidate provided." - __apptool_help - return 1 - fi -} - -function __apptool_check_version_present { - if [ -z "$1" ]; then - echo -e "\nNo candidate version provided." - __apptool_help - return 1 - fi -} - -function __apptool_determine_version { - - if [[ "${OPENAPPHACK_AVAILABLE}" == "false" && -n "$1" && -d "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/$1" ]]; then - VERSION="$1" - - elif [[ "${OPENAPPHACK_AVAILABLE}" == "false" && -z "$1" && -L "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" ]]; then - - VERSION=$(readlink "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" | sed "s!${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/!!g") - - elif [[ "${OPENAPPHACK_AVAILABLE}" == "false" && -n "$1" ]]; then - echo "Stop! ${CANDIDATE} ${1} is not available in offline mode." - return 1 - - elif [[ "${OPENAPPHACK_AVAILABLE}" == "false" && -z "$1" ]]; then - echo "${OFFLINE_MESSAGE}" - return 1 - - elif [[ "${OPENAPPHACK_AVAILABLE}" == "true" && -z "$1" ]]; then - VERSION_VALID='valid' - VERSION=$(curl -s "${OPENAPPHACK_SERVICE}/candidates/${CANDIDATE}/default") - - else - VERSION_VALID=$(curl -s "${OPENAPPHACK_SERVICE}/candidates/${CANDIDATE}/$1") - if [[ "${VERSION_VALID}" == 'valid' || ( "${VERSION_VALID}" == 'invalid' && -n "$2" ) ]]; then - VERSION="$1" - - elif [[ "${VERSION_VALID}" == 'invalid' && -h "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/$1" ]]; then - VERSION="$1" - - elif [[ "${VERSION_VALID}" == 'invalid' && -d "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/$1" ]]; then - VERSION="$1" - - else - echo "" - echo "Stop! $1 is not a valid ${CANDIDATE} version." - return 1 - fi - fi -} - -function __apptool_default_environment_variables { - - if [ ! "$OPENAPPHACK_FORCE_OFFLINE" ]; then - OPENAPPHACK_FORCE_OFFLINE="false" - fi - - if [ ! "$OPENAPPHACK_ONLINE" ]; then - OPENAPPHACK_ONLINE="true" - fi - - if [[ "${OPENAPPHACK_ONLINE}" == "false" || "${OPENAPPHACK_FORCE_OFFLINE}" == "true" ]]; then - OPENAPPHACK_AVAILABLE="false" - else - OPENAPPHACK_AVAILABLE="true" - fi -} - -function __apptool_link_candidate_version { - CANDIDATE="$1" - VERSION="$2" - - # Change the 'current' symlink for the candidate, hence affecting all shells. - if [ -L "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" ]; then - unlink "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" - fi - ln -s "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" -} diff --git a/src/main/bash/app-current.sh b/src/main/bash/app-current.sh deleted file mode 100644 index 4a6baa9..0000000 --- a/src/main/bash/app-current.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -function __apptool_determine_current_version { - CANDIDATE="$1" - if [[ "${solaris}" == true ]]; then - CURRENT=$(echo $PATH | gsed -r "s|${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/([^/]+)/bin|!!\1!!|1" | gsed -r "s|^.*!!(.+)!!.*$|\1|g") - elif [[ "${darwin}" == true ]]; then - CURRENT=$(echo $PATH | sed -E "s|${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/([^/]+)/bin|!!\1!!|1" | sed -E "s|^.*!!(.+)!!.*$|\1|g") - else - CURRENT=$(echo $PATH | sed -r "s|${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/([^/]+)/bin|!!\1!!|1" | sed -r "s|^.*!!(.+)!!.*$|\1|g") - fi - - if [[ "${CURRENT}" == "current" ]]; then - unset CURRENT - fi - - if [[ -z ${CURRENT} ]]; then - CURRENT=$(readlink "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" | sed "s!${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/!!g") - fi -} - -function __apptool_current { - if [ -n "$1" ]; then - CANDIDATE="$1" - __apptool_determine_current_version "${CANDIDATE}" - if [ -n "${CURRENT}" ]; then - echo "Using ${CANDIDATE} version ${CURRENT}" - else - echo "Not using any version of ${CANDIDATE}" - fi - else - INSTALLED_COUNT=0 - for (( i=0; i <= ${#OPENAPPHACK_CANDIDATES}; i++ )); do - # Eliminate empty entries due to incompatibility - if [[ -n ${OPENAPPHACK_CANDIDATES[${i}]} ]]; then - __apptool_determine_current_version "${OPENAPPHACK_CANDIDATES[${i}]}" - if [ -n "${CURRENT}" ]; then - if [ ${INSTALLED_COUNT} -eq 0 ]; then - echo 'Using:' - fi - echo "${OPENAPPHACK_CANDIDATES[${i}]}: ${CURRENT}" - (( INSTALLED_COUNT += 1 )) - fi - fi - done - if [ ${INSTALLED_COUNT} -eq 0 ]; then - echo 'No candidates are in use' - fi - fi -} diff --git a/src/main/bash/app-default.sh b/src/main/bash/app-default.sh deleted file mode 100644 index 1af7737..0000000 --- a/src/main/bash/app-default.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - - - -function __apptool_default { - CANDIDATE="$1" - __apptool_check_candidate_present "${CANDIDATE}" || return 1 - __apptool_determine_version "$2" || return 1 - - if [ ! -d "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" ]; then - echo "" - echo "Stop! ${CANDIDATE} ${VERSION} is not installed." - return 1 - fi - - __apptool_link_candidate_version "${CANDIDATE}" "${VERSION}" - - echo "" - echo "Default ${CANDIDATE} version set to ${VERSION}" -} diff --git a/src/main/bash/app-destroy.sh b/src/main/bash/app-destroy.sh deleted file mode 100644 index 3ab137f..0000000 --- a/src/main/bash/app-destroy.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -function __apptool_destroy { - vagrant destroy -} diff --git a/src/main/bash/app-flush.sh b/src/main/bash/app-flush.sh deleted file mode 100644 index 1f92554..0000000 --- a/src/main/bash/app-flush.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - - -function __apptool_cleanup_folder { - OPENAPPHACK_CLEANUP_DIR="${OPENAPPHACK_DIR}/${1}" - OPENAPPHACK_CLEANUP_DU=$(du -sh "$OPENAPPHACK_CLEANUP_DIR") - OPENAPPHACK_CLEANUP_COUNT=$(ls -1 "$OPENAPPHACK_CLEANUP_DIR" | wc -l) - - rm -rf "${OPENAPPHACK_DIR}/${1}" - mkdir "${OPENAPPHACK_DIR}/${1}" - - echo "${OPENAPPHACK_CLEANUP_COUNT} archive(s) flushed, freeing ${OPENAPPHACK_CLEANUP_DU}." - - unset OPENAPPHACK_CLEANUP_DIR - unset OPENAPPHACK_CLEANUP_DU - unset OPENAPPHACK_CLEANUP_COUNT -} - -function __apptool_flush { - QUALIFIER="$1" - case "$QUALIFIER" in - candidates) - if [[ -f "${OPENAPPHACK_DIR}/var/candidates" ]]; then - rm "${OPENAPPHACK_DIR}/var/candidates" - echo "Candidates have been flushed." - else - echo "No candidate list found so not flushed." - fi - ;; - broadcast) - if [[ -f "${OPENAPPHACK_DIR}/var/broadcast" ]]; then - rm "${OPENAPPHACK_DIR}/var/broadcast" - echo "Broadcast has been flushed." - else - echo "No prior broadcast found so not flushed." - fi - ;; - version) - if [[ -f "${OPENAPPHACK_DIR}/var/version" ]]; then - rm "${OPENAPPHACK_DIR}/var/version" - echo "Version Token has been flushed." - else - echo "No prior Remote Version found so not flushed." - fi - ;; - vms) - __apptool_cleanup_folder ".vms" - ;; - archives) - __apptool_cleanup_folder "archives" - ;; - temp) - __apptool_cleanup_folder "tmp" - ;; - tmp) - __apptool_cleanup_folder "tmp" - ;; - *) - echo "Stop! Please specify what you want to flush." - ;; - esac -} diff --git a/src/main/bash/app-halt.sh b/src/main/bash/app-halt.sh deleted file mode 100644 index 0770d89..0000000 --- a/src/main/bash/app-halt.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -function __apptool_halt { - vagrant halt -} diff --git a/src/main/bash/app-help.sh b/src/main/bash/app-help.sh deleted file mode 100644 index 228ab6e..0000000 --- a/src/main/bash/app-help.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - - - -function __apptool_help { - echo "" - echo "Usage: app [version]" - echo " app offline " - echo "" - echo " commands:" - echo " install or i [version]" - echo " uninstall or rm " - echo " list or ls " - echo " use or u [version]" - echo " default or d [version]" - echo " current or c [candidate]" - echo " outdated or o [candidate]" - echo " up or up" - echo " halt or k" - echo " provision or p" - echo " destroy or x" - echo " version or v" - echo " broadcast or b" - echo " help or h" - echo " offline " - echo " selfupdate [force]" - echo " flush " - echo "" - echo -n " candidate : " - echo "$OPENAPPHACK_CANDIDATES_CSV" | sed 's/,/, /g' - echo " version : where optional, defaults to latest stable if not provided" - echo "" - echo "eg: app install openapphack" -} diff --git a/src/main/bash/app-init.sh b/src/main/bash/app-init.sh deleted file mode 100644 index 32d8d3c..0000000 --- a/src/main/bash/app-init.sh +++ /dev/null @@ -1,175 +0,0 @@ -#!/bin/bash - - -export OPENAPPHACK_VERSION="@OPENAPPHACK_VERSION@" -export OPENAPPHACK_PLATFORM=$(uname) - -if [ -z "${OPENAPPHACK_SERVICE}" ]; then - export OPENAPPHACK_SERVICE="@OPENAPPHACK_SERVICE@" -fi - -if [ -z "${OPENAPPHACK_BROADCAST_SERVICE}" ]; then - export OPENAPPHACK_BROADCAST_SERVICE="@OPENAPPHACK_BROADCAST_SERVICE@" -fi - -if [ -z "${OPENAPPHACK_BROKER_SERVICE}" ]; then - export OPENAPPHACK_BROKER_SERVICE="@OPENAPPHACK_BROKER_SERVICE@" -fi - -if [ -z "${OPENAPPHACK_DIR}" ]; then - export OPENAPPHACK_DIR="$HOME/.openapphack" -fi - -# force zsh to behave well -if [[ -n "$ZSH_VERSION" ]]; then - setopt shwordsplit -fi - -# OS specific support (must be 'true' or 'false'). -cygwin=false; -darwin=false; -solaris=false; -freebsd=false; -case "$(uname)" in - CYGWIN*) - cygwin=true - ;; - Darwin*) - darwin=true - ;; - SunOS*) - solaris=true - ;; - FreeBSD*) - freebsd=true -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if ${cygwin} ; then - [ -n "${JAVACMD}" ] && JAVACMD=$(cygpath --unix "${JAVACMD}") - [ -n "${JAVA_HOME}" ] && JAVA_HOME=$(cygpath --unix "${JAVA_HOME}") - [ -n "${CP}" ] && CP=$(cygpath --path --unix "${CP}") -fi - - -OFFLINE_BROADCAST=$( cat << EOF -==== BROADCAST ============================================= - -OFFLINE MODE ENABLED! Some functionality is now disabled. - -============================================================ -EOF -) - -ONLINE_BROADCAST=$( cat << EOF -==== BROADCAST ============================================= - -ONLINE MODE RE-ENABLED! All functionality now restored. - -============================================================ -EOF -) - -OFFLINE_MESSAGE="This command is not available in offline mode." - -# fabricate list of candidates -if [[ -f "${OPENAPPHACK_DIR}/var/candidates" ]]; then - OPENAPPHACK_CANDIDATES_CSV=$(cat "${OPENAPPHACK_DIR}/var/candidates") -else - OPENAPPHACK_CANDIDATES_CSV=$(curl -s "${OPENAPPHACK_SERVICE}/candidates") - echo "$OPENAPPHACK_CANDIDATES_CSV" > "${OPENAPPHACK_DIR}/var/candidates" -fi - - - -# Set the candidate array -OLD_IFS="$IFS" -IFS="," -OPENAPPHACK_CANDIDATES=(${OPENAPPHACK_CANDIDATES_CSV}) -IFS="$OLD_IFS" - -# Source openapphack module scripts. -for f in $(find "${OPENAPPHACK_DIR}/src" -type f -name 'app-*' -exec basename {} \;); do - source "${OPENAPPHACK_DIR}/src/${f}" -done - -# Source extension files prefixed with 'app-' and found in the ext/ folder -# Use this if extensions are written with the functional approach and want -# to use functions in the main openapphack script. -for f in $(find "${OPENAPPHACK_DIR}/ext" -type f -name 'app-*' -exec basename {} \;); do - source "${OPENAPPHACK_DIR}/ext/${f}" -done -unset f - -# Attempt to set JAVA_HOME if it's not already set. -# if [ -z "${JAVA_HOME}" ] ; then -# if ${darwin} ; then -# [ -z "${JAVA_HOME}" -a -f "/usr/libexec/java_home" ] && export JAVA_HOME=$(/usr/libexec/java_home) -# [ -z "${JAVA_HOME}" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" -# [ -z "${JAVA_HOME}" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" -# else -# javaExecutable="$(which javac 2> /dev/null)" -# [[ -z "${javaExecutable}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." && return -# -# readLink="$(which readlink 2> /dev/null)" -# [[ -z "${readLink}" ]] && echo "OPENAPPHACK: JAVA_HOME not set and readlink not available, please set JAVA_HOME." && return -# -# javaExecutable="$(readlink -f "${javaExecutable}")" -# javaHome="$(dirname "${javaExecutable}")" -# javaHome=$(expr "${javaHome}" : '\(.*\)/bin') -# JAVA_HOME="${javaHome}" -# [[ -z "${JAVA_HOME}" ]] && echo "OPENAPPHACK: could not find java, please set JAVA_HOME" && return -# export JAVA_HOME -# fi -# fi - -# Load the openapphack config if it exists. -if [ -f "${OPENAPPHACK_DIR}/etc/config" ]; then - source "${OPENAPPHACK_DIR}/etc/config" -fi - -# Create upgrade delay token if it doesn't exist -if [[ ! -f "${OPENAPPHACK_DIR}/var/delay_upgrade" ]]; then - touch "${OPENAPPHACK_DIR}/var/delay_upgrade" -fi - -# determine if up to date -OPENAPPHACK_VERSION_TOKEN="${OPENAPPHACK_DIR}/var/version" -if [[ -f "$OPENAPPHACK_VERSION_TOKEN" && -z "$(find "$OPENAPPHACK_VERSION_TOKEN" -mmin +$((60*24)))" ]]; then - OPENAPPHACK_REMOTE_VERSION=$(cat "$OPENAPPHACK_VERSION_TOKEN") - -else - OPENAPPHACK_REMOTE_VERSION=$(curl -s "${OPENAPPHACK_SERVICE}/app/version" --connect-timeout 1 --max-time 1) - openapphack_force_offline_on_proxy "$OPENAPPHACK_REMOTE_VERSION" - if [[ -z "$OPENAPPHACK_REMOTE_VERSION" || "$OPENAPPHACK_FORCE_OFFLINE" == 'true' ]]; then - OPENAPPHACK_REMOTE_VERSION="$OPENAPPHACK_VERSION" - else - echo ${OPENAPPHACK_REMOTE_VERSION} > "$OPENAPPHACK_VERSION_TOKEN" - fi -fi - -# initialise once only -if [[ "${OPENAPPHACK_INIT}" != "true" ]]; then - # # Build _HOME environment variables and prefix them all to PATH - # - # # The candidates are assigned to an array for zsh compliance, a list of words is not iterable - # # Arrays are the only way, but unfortunately zsh arrays are not backward compatible with bash - # # In bash arrays are zero index based, in zsh they are 1 based(!) - # for (( i=0; i <= ${#OPENAPPHACK_CANDIDATES}; i++ )); do - # # Eliminate empty entries due to incompatibility - # if [[ -n ${OPENAPPHACK_CANDIDATES[${i}]} ]]; then - # CANDIDATE_NAME="${OPENAPPHACK_CANDIDATES[${i}]}" - # CANDIDATE_HOME_VAR="$(echo ${CANDIDATE_NAME} | tr '[:lower:]' '[:upper:]')_HOME" - # CANDIDATE_DIR="${OPENAPPHACK_DIR}/.vms/${CANDIDATE_NAME}/current" - # export $(echo ${CANDIDATE_HOME_VAR})="$CANDIDATE_DIR" - # PATH="${CANDIDATE_DIR}/bin:${PATH}" - # unset CANDIDATE_HOME_VAR - # unset CANDIDATE_NAME - # unset CANDIDATE_DIR - # fi - # done - # unset i - # export PATH - - export OPENAPPHACK_INIT="true" -fi diff --git a/src/main/bash/app-install.sh b/src/main/bash/app-install.sh deleted file mode 100644 index 940107e..0000000 --- a/src/main/bash/app-install.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash - -function __apptool_download { - CANDIDATE="$1" - VERSION="${2:=master}" - mkdir -p "${OPENAPPHACK_DIR}/archives" - if [ ! -f "${OPENAPPHACK_DIR}/archives/${CANDIDATE}-${VERSION}.zip" ]; then - echo "" - echo "Downloading: ${CANDIDATE} ${VERSION}" - echo "" - DOWNLOAD_URL="${OPENAPPHACK_SERVICE}/download/${CANDIDATE}/${VERSION}/platform/${OPENAPPHACK_PLATFORM}/openapphackvm-${VERSION}.zip" - ZIP_ARCHIVE="${OPENAPPHACK_DIR}/archives/${CANDIDATE}-${VERSION}.zip" - if [[ "$openapphack_insecure_ssl" == "true" ]]; then - curl -k -L "${DOWNLOAD_URL}" > "${ZIP_ARCHIVE}" - else - curl -L "${DOWNLOAD_URL}" > "${ZIP_ARCHIVE}" - fi - __apptool_validate_zip "${ZIP_ARCHIVE}" || return 1 - else - echo "" - echo "Found a previously downloaded ${CANDIDATE} ${VERSION} archive. Not downloading it again..." - __apptool_validate_zip "${OPENAPPHACK_DIR}/archives/${CANDIDATE}-${VERSION}.zip" || return 1 - fi - echo "" -} - -function __apptool_validate_zip { - ZIP_ARCHIVE="$1" - ZIP_OK=$(unzip -t "${ZIP_ARCHIVE}" | grep 'No errors detected in compressed data') - if [ -z "${ZIP_OK}" ]; then - rm "${ZIP_ARCHIVE}" - echo "" - echo "Stop! The archive was corrupt and has been removed! Please try installing again." - return 1 - fi -} - -function __apptool_install { - CANDIDATE="$1" - LOCAL_FOLDER="$3" - __apptool_check_candidate_present "${CANDIDATE}" || return 1 - __apptool_determine_version "$2" "$3" || return 1 - - if [[ -d "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" || -h "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" ]]; then - echo "" - echo "Stop! ${CANDIDATE} ${VERSION} is already installed." - return 0 - fi - - if [[ ${VERSION_VALID} == 'valid' ]]; then - __apptool_install_candidate_version "${CANDIDATE}" "${VERSION}" || return 1 - - if [[ "${openapphack_auto_answer}" != 'true' ]]; then - echo -n "Do you want ${CANDIDATE} ${VERSION} to be set as default? (Y/n): " - read USE - fi - if [[ -z "${USE}" || "${USE}" == "y" || "${USE}" == "Y" ]]; then - echo "" - echo "Setting ${CANDIDATE} ${VERSION} as default." - __apptool_link_candidate_version "${CANDIDATE}" "${VERSION}" - fi - return 0 - - elif [[ "${VERSION_VALID}" == 'invalid' && -n "${LOCAL_FOLDER}" ]]; then - __apptool_install_local_version "${CANDIDATE}" "${VERSION}" "${LOCAL_FOLDER}" || return 1 - - else - echo "" - echo "Stop! $1 is not a valid ${CANDIDATE} version." - return 1 - fi -} - - -function __apptool_install_local_version { - CANDIDATE="$1" - VERSION="${2:=master}" - LOCAL_FOLDER="$3" - CANDIDATE_VM_LOCATION="${OPENAPPHACK_DIR}/.vms/${CANDIDATE}" - mkdir -p "${CANDIDATE_VM_LOCATION}" - - echo "Linking ${CANDIDATE} ${VERSION} to ${LOCAL_FOLDER}" - ln -s "${LOCAL_FOLDER}" "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" - echo "Done installing!" - echo "" -} - - -function __apptool_install_candidate_version { - CANDIDATE="$1" - # version defaults to master if no tag is giving - VERSION="${2:=master}" - echo "Installing: ${CANDIDATE} ${VERSION}" - - CANDIDATE_VM_LOCATION="${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" - CANDIDATE_VM_LOCATION_CURRENT="${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" - VM_LOCATION="${OPENAPPHACK_DIR}/vm" - - mkdir -p "${CANDIDATE_VM_LOCATION}" - pushd . - cd "${CANDIDATE_VM_LOCATION}" - - echo "git clone https://github.com/${CANDIDATE}/openapphack-vm.git" - - git clone https://github.com/${CANDIDATE}/openapphack-vm.git - - #TODO check for valid tag before checkout of TAG - - if [[ -z "${VERSION}" || "${VERSION}" != "master" ]]; then - echo "git checkout "tags/${VERSION}"" - git checkout "tags/${VERSION}" - fi - - # Change the 'vm' symlink , hence affecting all shells. - if [ -L "${VM_LOCATION}" ]; then - unlink "${VM_LOCATION}" - fi - - - # Change the 'current candidate vm' symlink , hence affecting all shells. - if [ -L "${CANDIDATE_VM_LOCATION_CURRENT}" ]; then - unlink "${CANDIDATE_VM_LOCATION_CURRENT}" - fi - - ln -s "${CANDIDATE_VM_LOCATION_CURRENT}" "${CANDIDATE_VM_LOCATION}" - - ln -s "${VM_LOCATION}" "${CANDIDATE_VM_LOCATION_CURRENT}" - - popd - - echo "Done installing!" - echo "" -} diff --git a/src/main/bash/app-list.sh b/src/main/bash/app-list.sh deleted file mode 100644 index a449907..0000000 --- a/src/main/bash/app-list.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - - -function __apptool_build_version_csv { - CANDIDATE="$1" - CSV="" - for version in $(find "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}" -maxdepth 1 -mindepth 1 -exec basename '{}' \; | sort); do - if [[ "${version}" != 'current' ]]; then - CSV="${version},${CSV}" - fi - done - CSV=${CSV%?} -} - -function __apptool_offline_list { - echo "------------------------------------------------------------" - echo "Offline Mode: only showing installed ${CANDIDATE} versions" - echo "------------------------------------------------------------" - echo " " - - openapphack_versions=($(echo ${CSV//,/ })) - for (( i=0 ; i <= ${#openapphack_versions} ; i++ )); do - if [[ -n "${openapphack_versions[${i}]}" ]]; then - if [[ "${openapphack_versions[${i}]}" == "${CURRENT}" ]]; then - echo -e " > ${openapphack_versions[${i}]}" - else - echo -e " * ${openapphack_versions[${i}]}" - fi - fi - done - - if [[ -z "${openapphack_versions[@]}" ]]; then - echo " None installed!" - fi - - echo "------------------------------------------------------------" - echo "* - installed " - echo "> - currently in use " - echo "------------------------------------------------------------" - - unset CSV openapphack_versions -} - -function __apptool_list { - CANDIDATE="$1" - __apptool_check_candidate_present "${CANDIDATE}" || return 1 - __apptool_build_version_csv "${CANDIDATE}" - __apptool_determine_current_version "${CANDIDATE}" - - if [[ "${OPENAPPHACK_AVAILABLE}" == "false" ]]; then - __apptool_offline_list - else - FRAGMENT=$(curl -s "${OPENAPPHACK_SERVICE}/candidates/${CANDIDATE}/list?platform=${OPENAPPHACK_PLATFORM}¤t=${CURRENT}&installed=${CSV}") - echo "${FRAGMENT}" - unset FRAGMENT - fi -} diff --git a/src/main/bash/app-main.sh b/src/main/bash/app-main.sh deleted file mode 100644 index c154e67..0000000 --- a/src/main/bash/app-main.sh +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/bash - - -function app { - - COMMAND="$1" - QUALIFIER="$2" - - case "$COMMAND" in - l) - COMMAND="list";; - ls) - COMMAND="list";; - h) - COMMAND="help";; - v) - COMMAND="version";; - u) - COMMAND="use";; - up) - COMMAND="up";; - halt) - COMMAND="halt";; - k) - COMMAND="halt";; - provision) - COMMAND="provision";; - p) - COMMAND="provision";; - - destroy) - COMMAND="destroy";; - x) - COMMAND="destroy";; - i) - COMMAND="install";; - rm) - COMMAND="uninstall";; - c) - COMMAND="current";; - o) - COMMAND="outdated";; - d) - COMMAND="default";; - b) - COMMAND="broadcast";; - esac - - # - # Various sanity checks and default settings - # - __apptool_default_environment_variables - - mkdir -p "$OPENAPPHACK_DIR" - - openapphack_update_broadcast_or_force_offline - - # Load the openapphack config if it exists. - if [ -f "${OPENAPPHACK_DIR}/etc/config" ]; then - source "${OPENAPPHACK_DIR}/etc/config" - fi - - # no command provided - if [[ -z "$COMMAND" ]]; then - __apptool_help - return 1 - fi - - # Check if it is a valid command - CMD_FOUND="" - CMD_TARGET="${OPENAPPHACK_DIR}/src/app-${COMMAND}.sh" - if [[ -f "$CMD_TARGET" ]]; then - CMD_FOUND="$CMD_TARGET" - fi - - # Check if it is a sourced function - CMD_TARGET="${OPENAPPHACK_DIR}/ext/app-${COMMAND}.sh" - if [[ -f "$CMD_TARGET" ]]; then - CMD_FOUND="$CMD_TARGET" - fi - - # couldn't find the command - if [[ -z "$CMD_FOUND" ]]; then - echo "Invalid command: $COMMAND" - __apptool_help - fi - - # Check whether the candidate exists - local openapphack_valid_candidate=$(echo ${OPENAPPHACK_CANDIDATES[@]} | grep -w "$QUALIFIER") - if [[ -n "$QUALIFIER" && "$COMMAND" != "offline" && "$COMMAND" != "flush" && "$COMMAND" != "selfupdate" && -z "$openapphack_valid_candidate" ]]; then - echo -e "\nStop! $QUALIFIER is not a valid candidate." - return 1 - fi - - if [[ "$COMMAND" == "offline" && -z "$QUALIFIER" ]]; then - echo -e "\nStop! Specify a valid offline mode." - elif [[ "$COMMAND" == "offline" && ( -z $(echo "enable disable" | grep -w "$QUALIFIER")) ]]; then - echo -e "\nStop! $QUALIFIER is not a valid offline mode." - fi - - # Check whether the command exists as an internal function... - # - # NOTE Internal commands use underscores rather than hyphens, - # hence the name conversion as the first step here. - CONVERTED_CMD_NAME=$(echo "$COMMAND" | tr '-' '_') - - # Execute the requested command - if [ -n "$CMD_FOUND" ]; then - # It's available as a shell function - __apptool_"$CONVERTED_CMD_NAME" "$QUALIFIER" "$3" "$4" - fi - - # Attempt upgrade after all is done - if [[ "$COMMAND" != "selfupdate" ]]; then - __apptool_auto_update "$OPENAPPHACK_REMOTE_VERSION" "$OPENAPPHACK_VERSION" - fi -} diff --git a/src/main/bash/app-offline.sh b/src/main/bash/app-offline.sh deleted file mode 100644 index 6ee9250..0000000 --- a/src/main/bash/app-offline.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - - -function __apptool_offline { - if [[ "$1" == "enable" ]]; then - OPENAPPHACK_FORCE_OFFLINE="true" - echo "Forced offline mode enabled." - fi - if [[ "$1" == "disable" ]]; then - OPENAPPHACK_FORCE_OFFLINE="false" - OPENAPPHACK_ONLINE="true" - echo "Online mode re-enabled!" - fi -} - -function openapphack_determine_offline { - local input="$1" - if [[ -z "$input" ]]; then - OPENAPPHACK_ONLINE="false" - OPENAPPHACK_AVAILABLE="false" - else - OPENAPPHACK_ONLINE="true" - fi -} - -function openapphack_force_offline_on_proxy { - local response="$1" - local detect_html="$(echo "$response" | tr '[:upper:]' '[:lower:]' | grep 'html')" - if [[ -n "$detect_html" ]]; then - echo "OPENAPPHACK can't reach the internet so going offline. Re-enable online with:" - echo "" - echo " $ app offline disable" - echo "" - OPENAPPHACK_FORCE_OFFLINE="true" - else - OPENAPPHACK_FORCE_OFFLINE="false" - fi -} diff --git a/src/main/bash/app-outdated.sh b/src/main/bash/app-outdated.sh deleted file mode 100644 index ff8ce32..0000000 --- a/src/main/bash/app-outdated.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash - -function __apptool_determine_outdated_version { - local candidate local_versions remote_default_version - candidate="$1" - - # Resolve local versions - local_versions="$(echo $(find "${OPENAPPHACK_DIR}/${candidate}" -maxdepth 1 -mindepth 1 -type d -exec basename '{}' \;) | sed -e "s/ /, /g" )" - if [ ${#local_versions} -eq 0 ]; then - return 1 - fi - - # Resolve remote default version - remote_default_version="$(curl -s "${OPENAPPHACK_SERVICE}/candidates/${candidate}/default")" - if [ -z "$remote_default_version" ]; then - return 2 - fi - - # Check outdated or not - if [ ! -d "${OPENAPPHACK_DIR}/${candidate}/${remote_default_version}" ]; then - echo "${candidate} (${local_versions} < ${remote_default_version})" - fi -} - -function __apptool_outdated { - local all candidates candidate outdated installed_count outdated_count - if [ -n "$1" ]; then - all=false - candidates=$1 - else - all=true - candidates=${OPENAPPHACK_CANDIDATES[@]} - fi - installed_count=0 - outdated_count=0 - for candidate in ${candidates}; do - outdated="$(__apptool_determine_outdated_version "${candidate}")" - case $? in - 1) - $all || echo "Not using any version of ${candidate}" - ;; - 2) - echo "" - echo "Stop! Could not get remote version of ${candidate}" - return 1 - ;; - *) - if [ -n "${outdated}" ]; then - [ ${outdated_count} -eq 0 ] && echo "Outdated:" - echo "${outdated}" - (( outdated_count += 1 )) - fi - (( installed_count += 1 )) - ;; - esac - done - if $all; then - if [ ${installed_count} -eq 0 ]; then - echo 'No candidates are in use' - elif [ ${outdated_count} -eq 0 ]; then - echo "All candidates are up-to-date" - fi - elif [ ${outdated_count} -eq 0 ]; then - echo "${candidate} is up-to-date" - fi -} diff --git a/src/main/bash/app-provision.sh b/src/main/bash/app-provision.sh deleted file mode 100644 index e228882..0000000 --- a/src/main/bash/app-provision.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -function __apptool_provision { - vagrant provision -} diff --git a/src/main/bash/app-selfupdate.sh b/src/main/bash/app-selfupdate.sh deleted file mode 100644 index 1926e5b..0000000 --- a/src/main/bash/app-selfupdate.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - - -function __apptool_selfupdate { - OPENAPPHACK_FORCE_SELFUPDATE="$1" - if [[ "$OPENAPPHACK_AVAILABLE" == "false" ]]; then - echo "$OFFLINE_MESSAGE" - - elif [[ "$OPENAPPHACK_REMOTE_VERSION" == "$OPENAPPHACK_VERSION" && "$OPENAPPHACK_FORCE_SELFUPDATE" != "force" ]]; then - echo "No update available at this time." - - else - curl -s "${OPENAPPHACK_SERVICE}/selfupdate" | bash - fi - unset OPENAPPHACK_FORCE_SELFUPDATE -} - -function __apptool_auto_update { - - local OPENAPPHACK_REMOTE_VERSION="$1" - local OPENAPPHACK_VERSION="$2" - - OPENAPPHACK_DELAY_UPGRADE="${OPENAPPHACK_DIR}/var/delay_upgrade" - - if [[ -n "$(find "$OPENAPPHACK_DELAY_UPGRADE" -mtime +1)" && ( "$OPENAPPHACK_REMOTE_VERSION" != "$OPENAPPHACK_VERSION" ) ]]; then - echo "" - echo "" - echo "ATTENTION: A new version of OPENAPPHACK is available..." - echo "" - echo "The current version is $OPENAPPHACK_REMOTE_VERSION, but you have $OPENAPPHACK_VERSION." - echo "" - - if [[ "$openapphack_auto_selfupdate" != "true" ]]; then - echo -n "Would you like to upgrade now? (Y/n)" - read upgrade - fi - - if [[ -z "$upgrade" ]]; then upgrade="Y"; fi - - if [[ "$upgrade" == "Y" || "$upgrade" == "y" ]]; then - __apptool_selfupdate - unset upgrade - else - echo "Not upgrading today..." - fi - - touch "${OPENAPPHACK_DELAY_UPGRADE}" - fi - -} diff --git a/src/main/bash/app-uninstall.sh b/src/main/bash/app-uninstall.sh deleted file mode 100644 index 8779cf5..0000000 --- a/src/main/bash/app-uninstall.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - - -function __apptool_uninstall { - CANDIDATE="$1" - VERSION="$2" - __apptool_check_candidate_present "${CANDIDATE}" || return 1 - __apptool_check_version_present "${VERSION}" || return 1 - CURRENT=$(readlink "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" | sed "s_${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/__g") - if [[ -h "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" && ( "${VERSION}" == "${CURRENT}" ) ]]; then - echo "" - echo "Unselecting ${CANDIDATE} ${VERSION}..." - unlink "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/current" - fi - echo "" - if [ -d "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" ]; then - echo "Uninstalling ${CANDIDATE} ${VERSION}..." - rm -rf "${OPENAPPHACK_DIR}/.vms/${CANDIDATE}/${VERSION}" - else - echo "${CANDIDATE} ${VERSION} is not installed." - fi -} diff --git a/src/main/bash/app-up.sh b/src/main/bash/app-up.sh deleted file mode 100644 index a102360..0000000 --- a/src/main/bash/app-up.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -function __apptool_up { - vagrant up -} diff --git a/src/main/bash/app-use.sh b/src/main/bash/app-use.sh deleted file mode 100644 index 6d41ef7..0000000 --- a/src/main/bash/app-use.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - - -function __apptool_use { - CANDIDATE="$1" - __apptool_check_candidate_present "${CANDIDATE}" || return 1 - __apptool_determine_version "$2" || return 1 - - if [[ ! -d "${OPENAPPHACK_DIR}/${CANDIDATE}/${VERSION}" ]]; then - echo "" - echo "Stop! ${CANDIDATE} ${VERSION} is not installed." - if [[ "${openapphack_auto_answer}" != 'true' ]]; then - echo -n "Do you want to install it now? (Y/n): " - read INSTALL - fi - if [[ -z "${INSTALL}" || "${INSTALL}" == "y" || "${INSTALL}" == "Y" ]]; then - __apptool_install_candidate_version "${CANDIDATE}" "${VERSION}" - else - return 1 - fi - fi - - # Just update the *_HOME and PATH for this shell. - UPPER_CANDIDATE=$(echo "${CANDIDATE}" | tr '[:lower:]' '[:upper:]') - export "${UPPER_CANDIDATE}_HOME"="${OPENAPPHACK_DIR}/${CANDIDATE}/${VERSION}" - - # Replace the current path for the candidate with the selected version. - if [[ "${solaris}" == true ]]; then - export PATH=$(echo $PATH | gsed -r "s!${OPENAPPHACK_DIR}/${CANDIDATE}/([^/]+)!${OPENAPPHACK_DIR}/${CANDIDATE}/${VERSION}!g") - - elif [[ "${darwin}" == true ]]; then - export PATH=$(echo $PATH | sed -E "s!${OPENAPPHACK_DIR}/${CANDIDATE}/([^/]+)!${OPENAPPHACK_DIR}/${CANDIDATE}/${VERSION}!g") - - else - export PATH=$(echo $PATH | sed -r "s!${OPENAPPHACK_DIR}/${CANDIDATE}/([^/]+)!${OPENAPPHACK_DIR}/${CANDIDATE}/${VERSION}!g") - fi - - echo "" - echo Using "${CANDIDATE}" version "${VERSION} in this shell." -} diff --git a/src/main/bash/app-version.sh b/src/main/bash/app-version.sh deleted file mode 100644 index 3ed5a1e..0000000 --- a/src/main/bash/app-version.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - - -function __apptool_version { - echo "OpenAppHack CLI ${OPENAPPHACK_VERSION}" -} diff --git a/src/main/bash/install.sh b/src/main/bash/install.sh deleted file mode 100644 index 5938bd6..0000000 --- a/src/main/bash/install.sh +++ /dev/null @@ -1,284 +0,0 @@ -#!/bin/bash - -# Global variables -OPENAPPHACK_SERVICE="@OPENAPPHACK_SERVICE@" -OPENAPPHACK_BROKER_SERVICE="@OPENAPPHACK_BROKER_SERVICE@" -OPENAPPHACK_VERSION="@OPENAPPHACK_VERSION@" -OPENAPPHACK_DIR="$HOME/.openapphack" - -# Local variables -openapphack_bin_folder="${OPENAPPHACK_DIR}/bin" -openapphack_src_folder="${OPENAPPHACK_DIR}/src" -openapphack_tmp_folder="${OPENAPPHACK_DIR}/tmp" -openapphack_stage_folder="${openapphack_tmp_folder}/stage" -openapphack_zip_file="${openapphack_tmp_folder}/res-${OPENAPPHACK_VERSION}.zip" -openapphack_ext_folder="${OPENAPPHACK_DIR}/ext" -openapphack_etc_folder="${OPENAPPHACK_DIR}/etc" -openapphack_var_folder="${OPENAPPHACK_DIR}/var" -openapphack_vm_folder="${OPENAPPHACK_DIR}/vm" -openapphack_dotvms_folder="${OPENAPPHACK_DIR}/.vms" -openapphack_config_file="${openapphack_etc_folder}/config" -openapphack_bash_profile="${HOME}/.bash_profile" -openapphack_profile="${HOME}/.profile" -openapphack_bashrc="${HOME}/.bashrc" -openapphack_zshrc="${HOME}/.zshrc" -openapphack_platform=$(uname) - -openapphack_init_snippet=$( cat << EOF -#THIS MUST BE AT THE END OF THE FILE FOR OPENAPPHACK TO WORK!!! -[[ -s "${OPENAPPHACK_DIR}/bin/app-init.sh" ]] && source "${OPENAPPHACK_DIR}/bin/app-init.sh" -EOF -) - -# OS specific support (must be 'true' or 'false'). -cygwin=false; -darwin=false; -solaris=false; -freebsd=false; -case "$(uname)" in - CYGWIN*) - cygwin=true - ;; - Darwin*) - darwin=true - ;; - SunOS*) - solaris=true - ;; - FreeBSD*) - freebsd=true -esac - -echo ' ' -echo 'Thanks for using OpenAppHack Cli ' -echo ' ' -echo ' ' -echo ' Will now attempt installing...' -echo ' ' - - -# Sanity checks - -echo "Looking for a previous installation of OPENAPPHACK..." -if [ -d "${OPENAPPHACK_DIR}" ]; then - echo "OPENAPPHACK found." - echo "" - echo "======================================================================================================" - echo " You already have OPENAPPHACK installed." - echo " OPENAPPHACK was found at:" - echo "" - echo " ${OPENAPPHACK_DIR}" - echo "" - echo " Please consider running the following if you need to upgrade." - echo "" - echo " $ app selfupdate" - echo "" - echo "======================================================================================================" - echo "" - exit 0 -fi - -echo "Looking for git..." -if [ -z $(which git) ]; then - echo "Not found." - echo "======================================================================================================" - echo " Please install git on your system using your favourite package manager." - echo "" - echo " Restart after installing git." - echo "======================================================================================================" - echo "" - exit 0 -fi - -echo "Looking for vagrant..." -if [ -z $(which vagrant) ]; then - echo "Not found." - echo "" - echo "======================================================================================================" - echo " Please install vagrant on your system ." - echo "" - echo " OPENAPPHACK uses vagrant extensively." - echo "" - echo " Restart after installing vagrant." - echo "======================================================================================================" - echo "" - exit 0 -fi - -echo "Looking for unzip..." -if [ -z $(which unzip) ]; then - echo "Not found." - echo "======================================================================================================" - echo " Please install unzip on your system using your favourite package manager." - echo "" - echo " Restart after installing unzip." - echo "======================================================================================================" - echo "" - exit 0 -fi - -echo "Looking for curl..." -if [ -z $(which curl) ]; then - echo "Not found." - echo "" - echo "======================================================================================================" - echo " Please install curl on your system using your favourite package manager." - echo "" - echo " OPENAPPHACK uses curl for crucial interactions with it's backend server." - echo "" - echo " Restart after installing curl." - echo "======================================================================================================" - echo "" - exit 0 -fi - -echo "Looking for sed..." -if [ -z $(which sed) ]; then - echo "Not found." - echo "" - echo "======================================================================================================" - echo " Please install sed on your system using your favourite package manager." - echo "" - echo " OPENAPPHACK uses sed extensively." - echo "" - echo " Restart after installing sed." - echo "======================================================================================================" - echo "" - exit 0 -fi - -if [[ "${solaris}" == true ]]; then - echo "Looking for gsed..." - if [ -z $(which gsed) ]; then - echo "Not found." - echo "" - echo "======================================================================================================" - echo " Please install gsed on your solaris system." - echo "" - echo " OPENAPPHACK uses gsed extensively." - echo "" - echo " Restart after installing gsed." - echo "======================================================================================================" - echo "" - exit 0 - fi -fi - - -echo "Installing openapphack scripts..." - - -# Create directory structure - -echo "Create distribution directories..." -mkdir -p "${openapphack_bin_folder}" -mkdir -p "${openapphack_src_folder}" -mkdir -p "${openapphack_tmp_folder}" -mkdir -p "${openapphack_stage_folder}" -mkdir -p "${openapphack_ext_folder}" -mkdir -p "${openapphack_etc_folder}" -mkdir -p "${openapphack_var_folder}" -mkdir -p "${openapphack_vm_folder}" -mkdir -p "${openapphack_dotvms_folder}" - -echo "Create candidate directories..." - -OPENAPPHACK_CANDIDATES_CSV=$(curl -s "${OPENAPPHACK_SERVICE}/candidates") -echo "$OPENAPPHACK_CANDIDATES_CSV" > "${OPENAPPHACK_DIR}/var/candidates" - -echo "$OPENAPPHACK_VERSION" > "${OPENAPPHACK_DIR}/var/version" - -# convert csv to array -OLD_IFS="$IFS" -IFS="," -OPENAPPHACK_CANDIDATES=(${OPENAPPHACK_CANDIDATES_CSV}) -IFS="$OLD_IFS" - -for (( i=0; i <= ${#OPENAPPHACK_CANDIDATES}; i++ )); do - # Eliminate empty entries due to incompatibility - if [[ -n ${OPENAPPHACK_CANDIDATES[${i}]} ]]; then - CANDIDATE_NAME="${OPENAPPHACK_CANDIDATES[${i}]}" - mkdir -p "${OPENAPPHACK_DIR}/.vms/${CANDIDATE_NAME}" - echo "Created for ${CANDIDATE_NAME}: ${OPENAPPHACK_DIR}/.vms/${CANDIDATE_NAME}" - unset CANDIDATE_NAME - fi -done - -echo "Prime the config file..." -touch "${openapphack_config_file}" -echo "openapphack_auto_answer=false" >> "${openapphack_config_file}" -echo "openapphack_auto_selfupdate=false" >> "${openapphack_config_file}" -echo "openapphack_insecure_ssl=false" >> "${openapphack_config_file}" - -echo "Download script archive..." -#https://github.com/WiproOpenSourcePractice/openapphack/raw/gh-pages/ -curl -s "${OPENAPPHACK_SERVICE}/res/platform/${openapphack_platform}/purpose/install/openapphack-cli-scripts.zip" > "${openapphack_zip_file}" - - - -echo "Extract script archive..." -if [[ "${cygwin}" == 'true' ]]; then - echo "Cygwin detected - normalizing paths for unzip..." - openapphack_zip_file=$(cygpath -w "${openapphack_zip_file}") - openapphack_stage_folder=$(cygpath -w "${openapphack_stage_folder}") -fi -unzip -qo "${openapphack_zip_file}" -d "${openapphack_stage_folder}" - -echo "Install scripts..." -mv "${openapphack_stage_folder}/app-init.sh" "${openapphack_bin_folder}" -mv "${openapphack_stage_folder}"/app-* "${openapphack_src_folder}" - -echo "Attempt update of bash profiles..." -if [ ! -f "${openapphack_bash_profile}" -a ! -f "${openapphack_profile}" ]; then - echo "#!/bin/bash" > "${openapphack_bash_profile}" - echo "${openapphack_init_snippet}" >> "${openapphack_bash_profile}" - echo "Created and initialised ${openapphack_bash_profile}" -else - if [ -f "${openapphack_bash_profile}" ]; then - if [[ -z `grep 'app-init.sh' "${openapphack_bash_profile}"` ]]; then - echo -e "\n${openapphack_init_snippet}" >> "${openapphack_bash_profile}" - echo "Updated existing ${openapphack_bash_profile}" - fi - fi - - if [ -f "${openapphack_profile}" ]; then - if [[ -z `grep 'app-init.sh' "${openapphack_profile}"` ]]; then - echo -e "\n${openapphack_init_snippet}" >> "${openapphack_profile}" - echo "Updated existing ${openapphack_profile}" - fi - fi -fi - -if [ ! -f "${openapphack_bashrc}" ]; then - echo "#!/bin/bash" > "${openapphack_bashrc}" - echo "${openapphack_init_snippet}" >> "${openapphack_bashrc}" - echo "Created and initialised ${openapphack_bashrc}" -else - if [[ -z `grep 'app-init.sh' "${openapphack_bashrc}"` ]]; then - echo -e "\n${openapphack_init_snippet}" >> "${openapphack_bashrc}" - echo "Updated existing ${openapphack_bashrc}" - fi -fi - -echo "Attempt update of zsh profiles..." -if [ ! -f "${openapphack_zshrc}" ]; then - echo "${openapphack_init_snippet}" >> "${openapphack_zshrc}" - echo "Created and initialised ${openapphack_zshrc}" -else - if [[ -z `grep 'app-init.sh' "${openapphack_zshrc}"` ]]; then - echo -e "\n${openapphack_init_snippet}" >> "${openapphack_zshrc}" - echo "Updated existing ${openapphack_zshrc}" - fi -fi - -echo -e "\n\n\nAll done!\n\n" - -echo "Please open a new terminal, or run the following in the existing one:" -echo "" -echo " source \"${OPENAPPHACK_DIR}/bin/app-init.sh\"" -echo "" -echo "Then issue the following command:" -echo "" -echo " app help" -echo "" -echo "Enjoy!!!" diff --git a/src/main/templates/broadcast.gtpl b/src/main/templates/broadcast.gtpl deleted file mode 100644 index d9e1a27..0000000 --- a/src/main/templates/broadcast.gtpl +++ /dev/null @@ -1,11 +0,0 @@ - -==== BROADCAST ================================================================= - -<% - broadcasts.each { broadcast -> - println broadcast.text - } -%> -Running OPENAPPHACK server ${openapphackVersion} on vertx ${vertxVersion} - -================================================================================ diff --git a/src/main/templates/legacy.gtpl b/src/main/templates/legacy.gtpl deleted file mode 100644 index 2cd5624..0000000 --- a/src/main/templates/legacy.gtpl +++ /dev/null @@ -1,13 +0,0 @@ - -==== BROADCAST ================================================================= - -Please upgrade right away using: - - $ app selfupdate - - -Warning! You might see some jumbled text on the console. - -This has been rectified in the subsequent release. - -================================================================================ diff --git a/src/main/templates/list.gtpl b/src/main/templates/list.gtpl deleted file mode 100644 index dd0393a..0000000 --- a/src/main/templates/list.gtpl +++ /dev/null @@ -1,29 +0,0 @@ - -============================================================ -Available ${candidate.capitalize()} Versions -============================================================ -<% - if(local){ - local.each { version -> - if(current == version) { - println " > + ${version}" - } else { - println " + ${version}" - } - } - } - available.each { version -> - if(current == version) { - println " > * ${version}" - } else if(installed.contains(version)){ - println " * ${version}" - } else { - println " ${version}" - } - } -%> -============================================================ -+ - local version -* - installed -> - currently in use -============================================================ diff --git a/src/main/templates/list_2.gtpl b/src/main/templates/list_2.gtpl deleted file mode 100644 index 3541f1b..0000000 --- a/src/main/templates/list_2.gtpl +++ /dev/null @@ -1,10 +0,0 @@ - -================================================================================ -Available ${candidate.capitalize()} Versions -================================================================================ -${content} -================================================================================ -+ - local version -* - installed -> - currently in use -================================================================================ diff --git a/src/main/templates/robots.txt b/src/main/templates/robots.txt deleted file mode 100644 index 1f53798..0000000 --- a/src/main/templates/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / diff --git a/src/main/vertx/server.groovy b/src/main/vertx/server.groovy deleted file mode 100644 index 3802bab..0000000 --- a/src/main/vertx/server.groovy +++ /dev/null @@ -1,269 +0,0 @@ - -import groovy.text.SimpleTemplateEngine -import org.vertx.groovy.core.http.RouteMatcher - -final OPENAPPHACK_VERSION = '@OPENAPPHACK_VERSION@' -final VERTX_VERSION = '@VERTX_VERSION@' -final COLUMN_LENGTH = 15 - -// -// datasource configuration -// - -def config = [ - address: (System.getenv('OPENAPPHACK_DB_ADDRESS') ?: 'mongo-persistor'), - db_name: (System.getenv('OPENAPPHACK_DB_NAME') ?: 'openapphack'), - host: System.getenv('OPENAPPHACK_DB_HOST'), - port: System.getenv('OPENAPPHACK_DB_PORT')?.toInteger(), - username: System.getenv('OPENAPPHACK_DB_USERNAME'), - password: System.getenv('OPENAPPHACK_DB_PASSWORD') -] - -container.deployModule 'vertx.mongo-persistor-v1.2', config - -def templateEngine = new SimpleTemplateEngine() - -def templateBase = "build/templates" - -def listTemplateFile = "${templateBase}/list_2.gtpl" as File -def listTemplate = templateEngine.createTemplate(listTemplateFile) - -def broadcastTemplateFile = "${templateBase}/broadcast.gtpl" as File -def broadcastTemplate = templateEngine.createTemplate(broadcastTemplateFile) - - -// -// route matcher implementations -// - -def rm = new RouteMatcher() - -rm.get("/") { req -> - addPlainTextHeader req - req.response.sendFile('build/scripts/install.sh') -} - -rm.get("/selfupdate") { req -> - addPlainTextHeader req - req.response.sendFile('build/scripts/selfupdate.sh') -} - -rm.get("/robots.txt") { req -> - addPlainTextHeader req - req.response.sendFile('build/resources/main/templates/robots.txt') -} - -rm.get("/alive") { req -> - def cmd = [action:"find", collection:"application", matcher:[alive:"OK"]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - def alive = msg.body.results.alive.first() - addPlainTextHeader req - req.response.end alive - } -} - -rm.get("/res") { req -> - def purpose = req.params['purpose'] - log purpose, 'openapphack', OPENAPPHACK_VERSION, req - - def zipFile = 'build/distributions/openapphack-scripts.zip' as File - req.response.putHeader("Content-Type", "application/zip") - req.response.sendFile zipFile.absolutePath -} - -rm.get("/candidates") { req -> - def cmd = [action:"find", collection:"candidates", matcher:[:], keys:[candidate:1]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - def candidates = msg.body.results.collect(new TreeSet()) { it.candidate } - addPlainTextHeader req - req.response.end candidates.join(',') - } -} - -rm.get("/candidates/:candidate") { req -> - def candidate = req.params['candidate'] - def cmd = [action:"find", collection:"versions", matcher:[candidate:candidate], keys:["version":1]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - def response - if(msg.body.results){ - def versions = msg.body.results.collect(new TreeSet()) { it.version } - response = versions.join(',') - - } else { - response = "invalid" - } - - addPlainTextHeader req - req.response.end response - } -} - -rm.get("/candidates/:candidate/default") { req -> - def candidate = req.params['candidate'] - def cmd = [action:"find", collection:"candidates", matcher:[candidate:candidate], keys:["default":1]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - addPlainTextHeader req - def defaultVersion = msg.body.results.default - req.response.end (defaultVersion ?: "") - } -} - -rm.get("/candidates/:candidate/list") { req -> - def candidate = req.params['candidate'] - def current = req.params['current'] ?: '' - def installed = req.params['installed'] ? req.params['installed'].tokenize(',') : [] - - def cmd = [action:"find", collection:"versions", matcher:[candidate:candidate], keys:["version":1], sort:["version":-1]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - def available = msg.body.results.collect { it.version } - - def combined = combine(available, installed) - def local = determineLocal(available, installed) - - def content = prepareListView(combined, current, installed, local, COLUMN_LENGTH) - def binding = [candidate: candidate, content:content] - def template = listTemplate.make(binding) - - addPlainTextHeader req - req.response.end template.toString() - } -} - -private prepareListView(combined, current, installed, local, colLength){ - def builder = new StringBuilder() - for (i in (0..(colLength-1))){ - def versionColumn1 = prepareVersion(combined[i], current, installed, local) - def versionColumn2 = prepareVersion(combined[i+(colLength*1)], current, installed, local) - def versionColumn3 = prepareVersion(combined[i+(colLength*2)], current, installed, local) - def versionColumn4 = prepareVersion(combined[i+(colLength*3)], current, installed, local) - builder << "${pad(versionColumn1)} ${pad(versionColumn2)} ${pad(versionColumn3)} ${pad(versionColumn4)}\n" - } - builder.toString() -} - -private prepareVersion(version, current, installed, local){ - def isCurrent = (current == version) - def isInstalled = installed.contains(version) - def isLocalOnly = local.contains(version) - decorateVersion(version, isCurrent, isInstalled, isLocalOnly) -} - -private decorateVersion(version, isCurrent, isInstalled, isLocalOnly) { - " ${markCurrent(isCurrent)} ${markStatus(isInstalled, isLocalOnly)} ${version ?: ''}" -} - -private pad(col, width=20) { - (col ?: "").take(width).padRight(width) -} - -private markCurrent(isCurrent){ - isCurrent ? '>' : ' ' -} - - -private markStatus(isInstalled, isLocalOnly){ - if(isInstalled && isLocalOnly) '+' - else if(isInstalled) '*' - else ' ' -} - -private determineLocal(available, installed){ - installed.findAll { ! available.contains(it) } -} - -private combine(available, installed){ - def combined = [] as TreeSet - combined.addAll installed - combined.addAll available - combined.toList().reverse() -} - -def validationHandler = { req -> - def candidate = req.params['candidate'] - def version = req.params['version'] - def cmd = [action:"find", collection:"versions", matcher:[candidate:candidate, version:version]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - addPlainTextHeader req - if(msg.body.results) { - req.response.end 'valid' - } else { - req.response.end 'invalid' - } - } -} - -rm.get("/candidates/:candidate/:version/validate", validationHandler) -rm.get("/candidates/:candidate/:version", validationHandler) - -def downloadHandler = { req -> - def candidate = req.params['candidate'] - def version = req.params['version'] - - log 'install', candidate, version, req - - def cmd = [action:"find", collection:"versions", matcher:[candidate:candidate, version:version], keys:["url":1]] - vertx.eventBus.send("mongo-persistor", cmd){ msg -> - req.response.headers['Location'] = msg.body.results.url.first() - req.response.statusCode = 302 - req.response.end() - } -} - -rm.get("/candidates/:candidate/:version/download", downloadHandler) -rm.get("/download/:candidate/:version", downloadHandler) - -def versionHandler = { req -> - addPlainTextHeader req - req.response.end OPENAPPHACK_VERSION -} - -rm.get("/app/version", versionHandler) -rm.get("/api/version", versionHandler) - -def broadcastHandler = { req -> - addPlainTextHeader req - req.response.end "This Broadcast API is being discontinued. \nPlease upgrade to the latest version of OPENAPPHACK!" -} - -rm.get("/broadcast", broadcastHandler) -rm.get("/broadcast/:version", broadcastHandler) -rm.get("/api/broadcast", broadcastHandler) -rm.get("/api/broadcast/:version", broadcastHandler) - - -// -// private methods -// - -private addPlainTextHeader(req){ - req.response.putHeader("Content-Type", "text/plain") -} - -private log(command, candidate, version, req){ - def date = new Date() - def host = req.headers['x-forwarded-for'] - def agent = req.headers['user-agent'] - def platform = req.params['platform'] - - def document = [ - command:command, - candidate:candidate, - version:version, - host:host, - agent:agent, - platform:platform, - date:date - ] - - def cmd = [action:'save', collection:'audit', document:document] - - vertx.eventBus.send 'mongo-persistor', cmd -} - -// -// startup server -// -def port = System.getenv('PORT') ?: 8080 -def host = System.getenv('PORT') ? '0.0.0.0' : 'localhost' -println "Starting vertx on $host:$port" -vertx.createHttpServer().requestHandler(rm.asClosure()).listen(port as int, host) diff --git a/src/test/cucumber/openapphack/broadcast.feature b/src/test/cucumber/openapphack/broadcast.feature deleted file mode 100644 index 886d43f..0000000 --- a/src/test/cucumber/openapphack/broadcast.feature +++ /dev/null @@ -1,35 +0,0 @@ -Feature: Broadcast - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: A command is issued with no prior Broadcast received - Given no prior Broadcast was received - And a new Broadcast "This is a LIVE Broadcast!" with id "12345" is available - When I enter "app version" - Then I see "This is a LIVE Broadcast!" - - Scenario: A command is issued where the prior Broadcast was different to the Live one - Given a prior Broadcast "This is an OLD Broadcast!" with id "12344" was issued - And a new Broadcast "This is a LIVE Broadcast!" with id "12345" is available - When I enter "app version" - Then I see "This is a LIVE Broadcast!" - - Scenario: A command is issued where the prior Broadcast was the same as the Live one - Given a prior Broadcast "This is a LIVE Broadcast!" with id "12345" was issued - And a new Broadcast "This is a LIVE Broadcast!" with id "12345" is available - When I enter "app version" - Then I do not see "This is a LIVE Broadcast!" - - Scenario: A Broadcast command recalls a prior Broadcast - Given a prior Broadcast "This is an OLD Broadcast!" with id "12344" was issued - And a new Broadcast "This is an OLD Broadcast!" with id "12344" is available - When I enter "app broadcast" - Then I see "This is an OLD Broadcast!" - - Scenario: A Broadcast command is issued with no prior Broadcast received - Given no prior Broadcast was received - And a new Broadcast "This is a LIVE Broadcast!" with id "12345" is available - When I enter "app broadcast" - Then I see "This is a LIVE Broadcast!" diff --git a/src/test/cucumber/openapphack/command_line_interop.feature b/src/test/cucumber/openapphack/command_line_interop.feature deleted file mode 100644 index fb0722a..0000000 --- a/src/test/cucumber/openapphack/command_line_interop.feature +++ /dev/null @@ -1,23 +0,0 @@ -Feature: Command Line Interop - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Enter app - When I enter "app" - Then I see "Usage: app [version]" - And I see "app offline " - - Scenario: Ask for help - When I enter "app help" - Then I see "Usage: app [version]" - - Scenario: Enter an invalid Command - When I enter "app somecommand openapphack" - Then I see "Invalid command: somecommand" - And I see "Usage: app [version]" - - Scenario: Enter an invalid Candidate - When I enter "app install something" - Then I see "Stop! something is not a valid candidate." diff --git a/src/test/cucumber/openapphack/current_candidate.feature b/src/test/cucumber/openapphack/current_candidate.feature deleted file mode 100644 index fbb3f35..0000000 --- a/src/test/cucumber/openapphack/current_candidate.feature +++ /dev/null @@ -1,34 +0,0 @@ -Feature: Current Candidate - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Display current candidate version in use - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app current panickervinod" - Then I see "Using panickervinod version master" - - Scenario: Display current candidate version when none is in use - Given the candidate "panickervinod" version "master" is already installed but not default - When I enter "app current panickervinod" - Then I see "Not using any version of panickervinod" - - Scenario: Display current candidate versions when none is specified and none is in use - Given the candidate "panickervinod" version "master" is already installed but not default - When I enter "app current" - Then I see "No candidates are in use" - - Scenario: Display current candidate versions when none is specified and one is in use - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app current" - Then I see "Using:" - And I see "panickervinod: master" - - Scenario: Display current candidate versions when none is specified and multiple are in use - Given the candidate "openapphack" version "master" is already installed and default - And the candidate "panickervinod" version "master" is already installed and default - When I enter "app current" - Then I see "Using:" - And I see "panickervinod: master" - And I see "openapphack: master" diff --git a/src/test/cucumber/openapphack/flush.feature b/src/test/cucumber/openapphack/flush.feature deleted file mode 100644 index 95c6af0..0000000 --- a/src/test/cucumber/openapphack/flush.feature +++ /dev/null @@ -1,54 +0,0 @@ -Feature: Flush - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Flush omitting the Qualifier - When I enter "app flush" - Then I see "Stop! Please specify what you want to flush." - - Scenario: Clear out the Candidate List - Given the candidate "panickervinod" is known locally - When I enter "app flush candidates" - Then no candidates are know locally - And I see "Candidates have been flushed." - - Scenario: Clear out an uninitialised Candidate List - Given I enter "app flush candidates" - When I enter "app flush candidates" - Then I see "No candidate list found so not flushed." - - Scenario: Clean up the current Broadcast - Given a prior Broadcast "This is an old broadcast" with id "12344" was issued - When I enter "app flush broadcast" - Then no broadcast message can be found - And I see "Broadcast has been flushed." - - Scenario: Clean up an uninitialised Broadcast - Given the broadcast has been flushed - When I enter "app flush broadcast" - Then I see "No prior broadcast found so not flushed." - - Scenario: Clean up the last known Remote Version - Given a prior version "x.y.z" was detected - When I enter "app flush version" - Then no version token can be found - And I see "Version Token has been flushed." - - Scenario: Clean up an uninitialised last known Remote Version - Given the Remote Version has been flushed - When I enter "app flush version" - Then I see "No prior Remote Version found so not flushed." - - Scenario: Clear out the cached vm - Given the vm "panickervinod"-"0.0.1" has been cached - When I enter "app flush vm" - Then no vm are cached - And I see "1 vm(s) flushed" - - Scenario: Clear out the temporary space - Given the file "res-1.2.0.zip" in temporary storage - When I enter "app flush temp" - Then no "res-1.2.0.zip" file is present in temporary storage - And I see "1 archive(s) flushed" diff --git a/src/test/cucumber/openapphack/forced_offline_mode.feature b/src/test/cucumber/openapphack/forced_offline_mode.feature deleted file mode 100644 index 9d92c2c..0000000 --- a/src/test/cucumber/openapphack/forced_offline_mode.feature +++ /dev/null @@ -1,120 +0,0 @@ -Feature: Forced Offline Mode - - #offline modes - - Scenario: Enter an invalid offline mode - Given offline mode is disabled with reachable internet - And an initialised environment - When I enter "app offline panickervinod" - Then I see "Stop! panickervinod is not a valid offline mode." - - Scenario: Issue Offline command without qualification - Given offline mode is disabled with reachable internet - And an initialised environment - When I enter "app offline" - Then I see "Stop! Specify a valid offline mode." - - Scenario: Enable Offline Mode with internet reachable - Given offline mode is disabled with reachable internet - And an initialised environment - When I enter "app offline enable" - Then I see "Forced offline mode enabled." - And I do not see "OFFLINE MODE ENABLED!" - When I enter "app install panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - Scenario: Disable Offline Mode with internet reachable - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "master" is available for download - When I enter "app offline disable" - Then I see "Online mode re-enabled!" - When I enter "app install panickervinod master" and answer "Y" - Then I see "Done installing!" - And the candidate "panickervinod" version "master" is installed - - Scenario: Disable Offline Mode with internet unreachable - Given offline mode is enabled with unreachable internet - And an initialised environment - When I enter "app offline disable" - Then I see "Online mode re-enabled!" - When I enter "app install panickervinod master" - Then I see "OFFLINE MODE ENABLED!" - And I see "Stop! panickervinod master is not available in offline mode." - - #broadcast - Scenario: Recall a broadcast while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - When a prior Broadcast "This is an OLD Broadcast!" with id "12344" was issued - And I enter "app broadcast" - Then I see "This is an OLD Broadcast!" - - #openapphack version - Scenario: Determine the OpenAppHack CLI version while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - When I enter "app version" - Then I see the current app version - - #list candidate version - Scenario: List candidate versions found while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - When I enter "app list panickervinod" - Then I see "Offline Mode: only showing installed panickervinod versions" - - #use version - Scenario: Use an uninstalled candidate version while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "0.0.1" is already installed and default - And the candidate "panickervinod" version "master" is not installed - When I enter "app use panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - #default version - Scenario: Set the default to an uninstalled candidate version while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "0.0.1" is already installed and default - When I enter "app default panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - #install command - Scenario: Install a candidate version that is not installed while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "master" is not installed - When I enter "app install panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - #uninstall command - Scenario: Uninstall a candidate version while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "master" is already installed and default - When I enter "app uninstall panickervinod master" - And the candidate "panickervinod" version "master" is not installed - - #current command - Scenario: Display the current version of a candidate while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - And the candidate "panickervinod" version "master" is already installed and default - When I enter "app current panickervinod" - Then I see "Using panickervinod version master" - - #help command - Scenario: Request help while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - When I enter "app help" - Then I see "Usage: app [version]" - - #selfupdate command - Scenario: Attempt self-update while Forced Offline - Given offline mode is enabled with reachable internet - And an initialised environment - When I enter "app selfupdate" - Then I see "This command is not available in offline mode." diff --git a/src/test/cucumber/openapphack/idempotent_self_update.feature b/src/test/cucumber/openapphack/idempotent_self_update.feature deleted file mode 100644 index 9409c8e..0000000 --- a/src/test/cucumber/openapphack/idempotent_self_update.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Idempotent Self Update - - Background: - Given the internet is reachable - And an initialised environment - And an available selfupdate - - Scenario: Attempt Self Update on an up to date system - When I enter "app selfupdate" - Then I see "No update available at this time." - - Scenario: Force Self Update on an up to date system - When I enter "app selfupdate force" - Then I see "Successfully upgraded OpenAppHack CLI." diff --git a/src/test/cucumber/openapphack/initialisation.feature b/src/test/cucumber/openapphack/initialisation.feature deleted file mode 100644 index 701ab42..0000000 --- a/src/test/cucumber/openapphack/initialisation.feature +++ /dev/null @@ -1,27 +0,0 @@ -Feature: Initialisation - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Use app for the first time - When I enter "app" - Then the openapphack work folder is created - - Scenario: Use app after initialisation - When I enter "app" - Then I see "Usage: app [version]" - Then the openapphack work folder is created - - Scenario: app is initialised for the first time - Given an initialised shell - When I enter "echo $OPENAPPHACK_INIT" - Then I see "true" - When I enter "echo $PATH" - Then I see a single occurrence of "panickervinod" - - Scenario: app is initialised a subsequent time - Given an initialised shell - When I reinitialise the shell - And I enter "echo $PATH" - Then I see a single occurrence of "panickervinod" diff --git a/src/test/cucumber/openapphack/install_candidate.feature b/src/test/cucumber/openapphack/install_candidate.feature deleted file mode 100644 index aa30e41..0000000 --- a/src/test/cucumber/openapphack/install_candidate.feature +++ /dev/null @@ -1,64 +0,0 @@ -Feature: Install Candidate - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Install a default Candidate - Given the default "panickervinod" candidate is "master" - When I enter "app install panickervinod" and answer "Y" - Then I see "Done installing!" - Then the candidate "panickervinod" version "master" is installed - - Scenario: Install a specific Candidate - And the candidate "openapphack" version "master" is available - When I enter "app install openapphack master" and answer "Y" - Then I see "Done installing!" - Then the candidate "openapphack" version "master" is installed - - Scenario: Install a Candidate version that does not exist - Given the candidate "openapphack" version "0.0.1" is not available - When I enter "app install openapphack 0.0.1" - Then I see "Stop! 0.0.1 is not a valid openapphack version." - - Scenario: Install a Candidate version that is already installed - Given the candidate "panickervinod" version "master" is available - And the candidate "panickervinod" version "master" is already installed and default - When I enter "app install panickervinod master" - Then I see "Stop! panickervinod master is already installed." - - Scenario: Install a candidate and select to use it - Given the candidate "panickervinod" version "0.0.1" is available - When I enter "app install panickervinod 0.0.1" and answer "Y" - Then the candidate "panickervinod" version "0.0.1" is installed - And I see "Done installing!" - And I see "Do you want panickervinod 0.0.1 to be set as default? (Y/n)" - And I see "Setting panickervinod 0.0.1 as default." - Then the candidate "panickervinod" version "0.0.1" should be the default - - Scenario: Install a candidate and select to use it automatically - Given the candidate "panickervinod" version "0.0.1" is available - And I have configured "openapphack_auto_answer" to "true" - When I enter "app install panickervinod 0.0.1" - Then the candidate "panickervinod" version "0.0.1" is installed - And I see "Done installing!" - And I see "Setting panickervinod 0.0.1 as default." - Then the candidate "panickervinod" version "0.0.1" should be the default - - Scenario: Install a candidate and do not select to use it - Given the candidate "panickervinod" version "0.0.1" is available - When I enter "app install panickervinod 0.0.1" and answer "n" - Then the candidate "panickervinod" version "0.0.1" is installed - And I see "Done installing!" - And I see "Do you want panickervinod 0.0.1 to be set as default? (Y/n)" - And I do not see "Setting panickervinod 0.0.1 as default." - Then the candidate "panickervinod" version "0.0.1" should not be the default - - #revisit to reinstall automatically - Scenario: Abort installation of a incorrect Candidate - Given the candidate "panickervinod" version "0.0.0" is available - And the archive for candidate "panickervinod" version "0.0.0" is corrupt - When I enter "app install panickervinod 0.0.0" - Then I see "Stop! incorrect candidate! Please try installing again." - And the candidate "panickervinod" version "0.0.0" is not installed - And the archive for candidate "panickervinod" version "0.0.0" is removed diff --git a/src/test/cucumber/openapphack/install_openapphack.feature b/src/test/cucumber/openapphack/install_openapphack.feature deleted file mode 100644 index 52c26ec..0000000 --- a/src/test/cucumber/openapphack/install_openapphack.feature +++ /dev/null @@ -1,82 +0,0 @@ -@manual -Feature: Install OpenAppHack CLI - - Platform defaults as follows: - * Ubuntu: .profile, .bashrc - * Fedora: .bash_profile, .bashrc - * OS X: no skeleton files in user home (nice one Apple!) - * Cygwin: .bash_profile, .profile and .bashrc - * Solaris: .profile, .bashrc - * FreeBSD: .profile with NO .bashrc or bash pre-installed - - Order of precedence: - Login shells (all new terminals) are initialised with the first file found in this order: - * .bash_profile - * .bash_login - * .profile - Non-login shells (like xterm shells) read the .bashrc file. - - Also important to note that usually the .bash_profile or .profile login shell files - will check for the .bashrc file and invoke if present! - - Background: - Given a user home exists - - Scenario: Creates and initialises .bash_profile on absence of login shell dot files - Given the user home directory contains no ".bash_profile" file - And the user home directory contains no ".profile" file - When I run the installation script - Then the user home contains a ".bash_profile" file - And the ".bash_profile" contains an Initialisation Snippet - - Scenario: Add Init Snippet to the .bash_profile if present - Given the user home contains a ".bash_profile" file - When I run the installation script - Then the ".bash_profile" contains an Initialisation Snippet - - Scenario: Add Init Snippet to the .profile if present - Given the user home contains a ".profile" file - When I run the installation script - Then the ".profile" contains an Initialisation Snippet - - Scenario: Creates and initialises .bashrc on absence of non-login dot files - Given the user home directory contains no ".bashrc" file - When I run the installation script - Then the user home contains a ".bashrc" file - And the ".bashrc" contains an Initialisation Snippet - - Scenario: Always adds Init Snippet to the .bashrc - Given the user home contains a ".bashrc" file - When I run the installation script - Then the ".bashrc" contains an Initialisation Snippet - - Scenario: Creates and initialises .zshrc on absence of the file - Given the user home directory contains no ".zshrc" file - When I run the installation script - Then the user home contains a ".zshrc" file - And the ".zshrc" contains an Initialisation Snippet - - Scenario: Always adds Init Snippet to the .zshrc - Given the user home contains a ".zshrc" file - When I run the installation script - Then the ".zshrc" contains an Initialisation Snippet - - Scenario: Source the Initialisation Script on first invokation of the Init Snippet - Given the user home contains a ".bash_profile" file - And the ".bash_profile" contains an Initialisation Snippet - When I open a new Login Shell - Then the "app-init.sh" script is sourced once only - - Scenario: Do not Source the Initialisation Script on subsequent invocation of the Init Snippet - Given the user home contains a ".bash_profile" file - And the ".bash_profile" contains an Initialisation Snippet - And the user home contains a ".bashrc" file - And the ".bashrc" contains an Initialisation Snippet - When I open a new Login Shell - Then the "app-init.sh" script is sourced once only - - Scenario: Upgrade an installation without configuration - Given an uninitialised system - And the configuration file has not been primed - When I run the installation script - Then the configuration file is present diff --git a/src/test/cucumber/openapphack/list_candidates.feature b/src/test/cucumber/openapphack/list_candidates.feature deleted file mode 100644 index 988063d..0000000 --- a/src/test/cucumber/openapphack/list_candidates.feature +++ /dev/null @@ -1,39 +0,0 @@ -@manual -Feature: List Candidates - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: List an uninstalled available Version - Given I do not have a "panickervinod" candidate installed - When I enter "app list panickervinod" - Then I see "Available OpenAppHack Versions" - And I see " master" - - Scenario: List an installed available Version not in use - Given the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app list panickervinod" - Then I see "Available OpenAppHack Versions" - And I see " * master" - - Scenario: List an installed available Version in use - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app list panickervinod" - Then I see "Available OpenAppHack Versions" - And I see " > * master" - - Scenario: List an installed local version not in use - Given I have a local candidate "panickervinod" version "0.0.1" at "/.vms/panickervinod/0.0.1" - And the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - When I enter "app list openapphack" - Then I see "Available openapphack Versions" - And I see " + master" - - Scenario: List an installed local Version in use - Given I have a local candidate "openapphack" version "master" at "/.vms/openapphack/master" - And the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - And the candidate "openapphack" version "master" is the default - When I enter "app list openapphack" - Then I see "Available openapphack Versions" - And I see " > + master" diff --git a/src/test/cucumber/openapphack/local_developement_versions.feature b/src/test/cucumber/openapphack/local_developement_versions.feature deleted file mode 100644 index 6225d31..0000000 --- a/src/test/cucumber/openapphack/local_developement_versions.feature +++ /dev/null @@ -1,46 +0,0 @@ -Feature: Local Development Versions - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Install a new local development version - Given the candidate "openapphack" version "master" is not available - And I have a local candidate "openapphack" version "master" at "/.vms/openapphack/master" - When I enter "app install openapphack master /.vms/openapphack/master" - Then I see "Linking openapphack master to /.vms/openapphack/master" - And the candidate "openapphack" version "master" is linked to /.vms/openapphack/master" - - Scenario: Attempt installing a local development version that already exists - Given the candidate "openapphack" version "master" is not available - And the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - When I enter "app install openapphack master /.vms/openapphack/master" - Then I see "Stop! openapphack master is already installed." - And the candidate "openapphack" version "master" is linked to "/.vms/openapphack/master" - - Scenario: Uninstall a local development version - Given the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - When I enter "app uninstall openapphack master" - Then I see "Uninstalling openapphack master" - And the candidate "openapphack" version "master" is not installed - - Scenario: Attempt uninstalling a local development version that is not installed - Given the candidate "openapphack" version "master" is not installed - When I enter "app uninstall openapphack master" - Then I see "openapphack master is not installed." - - Scenario: Make the local development version the default for the candidate - Given the candidate "openapphack" version "0.0.1" is already installed and default - And the candidate "openapphack" version "master" is not available - And the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - When I enter "app default openapphack master" - Then I see "Default openapphack version set to master" - And the candidate "openapphack" version "master" should be the default - - Scenario: Use a local development version - Given the candidate "openapphack" version "0.0.1" is already installed and default - And the candidate "openapphack" version "master" is not available - And the candidate "openapphack" version "master" is already linked to "/.vms/openapphack/master" - When I enter "app use openapphack master" - Then I see "Using openapphack version master in this shell" - And the candidate "openapphack" version "master" should be in use diff --git a/src/test/cucumber/openapphack/mnemonics.feature b/src/test/cucumber/openapphack/mnemonics.feature deleted file mode 100644 index 3444918..0000000 --- a/src/test/cucumber/openapphack/mnemonics.feature +++ /dev/null @@ -1,91 +0,0 @@ -Feature: Mnemonics - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Shortcut for listing an uninstalled available Version - Given I do not have a "panickervinod" candidate installed - And a "panickervinod" list view is available for consumption - When I enter "app l panickervinod" - Then I see "Available Panickervinod Versions" - - Scenario: Alternate shortcut for listing uninstalled available Version - Given I do not have a "panickervinod" candidate installed - And a "panickervinod" list view is available for consumption - When I enter "app ls panickervinod" - Then I see "Available Panickervinod Versions" - - Scenario: Shortcut for asking help - When I enter "app h" - Then I see "Usage: app [version]" - - Scenario: Shortcut for displaying current Candidate Version in use - Given the candidate "panickervinod" version "0.0.1" is already installed and default - When I enter "app c panickervinod" - Then I see "Using panickervinod version 0.0.1" - - Scenario: Shortcut for displaying current Candidate Versions - Given the candidate "openapphack" version "master" is already installed and default - And the candidate "panickervinod" version "master" is already installed and default - When I enter "app c" - Then I see "Using:" - And I see "panickervinod: master" - And I see "openapphack: master" - - Scenario: Shortcut for displaying outdated Candidate Version in use - Given the candidate "panickervinod" version "0.0.1" is already installed and default - And the default "panickervinod" candidate is "master" - When I enter "app o panickervinod" - Then I see "Outdated:" - And I see "panickervinod (0.0.1 < master)" - - Scenario: Shortcut for displaying outdated Candidate Versions - Given the candidate "panickervinod" version "0.0.1" is already installed and default - And the default "panickervinod" candidate is "master" - And the candidate "openapphack" version "0.0.1" is already installed and default - And the default "openapphack" candidate is "master" - When I enter "app o" - Then I see "Outdated:" - And I see "panickervinod (0.0.1 < master)" - And I see "openapphack (0.0.1 < master)" - - Scenario: Shortcut for installing a Candidate Version - Given the candidate "panickervinod" version "master" is not installed - And the candidate "panickervinod" version "master" is available for download - When I enter "app i panickervinod master" and answer "Y" - Then I see "Installing: panickervinod master" - And the candidate "panickervinod" version "master" is installed - - Scenario: Shortcut for uninstalling a Candidate Version - Given the candidate "openapphack" version "master" is already installed and default - When I enter "app rm openapphack master" - Then I see "Uninstalling openapphack master" - And the candidate "openapphack" version "master" is not installed - - Scenario: Shortcut for showing the current Version of app - When I enter "app v" - Then I see "OpenAppHack CLI x.y.z" - - Scenario: Shortcut for using a candidate version that is installed - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "master" is a valid candidate version - And the candidate "panickervinod" version "0.0.1" is already installed but not default - And the candidate "panickervinod" version "0.0.1" is a valid candidate version - When I enter "app u panickervinod 0.0.1" - Then I see "Using panickervinod version 0.0.1 in this shell." - Then the candidate "panickervinod" version "0.0.1" should be in use - And the candidate "panickervinod" version "master" should be the default - - Scenario: Shortcut for defaulting a Candidate Version that is installed and not default - Given the candidate "openapphack" version "master" is already installed but not default - And the candidate "openapphack" version "master" is a valid candidate version - When I enter "app d openapphack master" - Then I see "Default openapphack version set to master" - And the candidate "openapphack" version "master" should be the default - - Scenario: Shortcut for a Broadcast command issued - Given no prior Broadcast was received - And a new Broadcast "This is a LIVE Broadcast!" with id "12345" is available - When I enter "app b" - Then I see "This is a LIVE Broadcast!" diff --git a/src/test/cucumber/openapphack/offline_mode.feature b/src/test/cucumber/openapphack/offline_mode.feature deleted file mode 100644 index 098c0a8..0000000 --- a/src/test/cucumber/openapphack/offline_mode.feature +++ /dev/null @@ -1,129 +0,0 @@ -Feature: Offline Mode - - Background: - Given the internet is not reachable - And an initialised environment - - # list command - - Scenario: List candidate versions found while Offline - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app list panickervinod" - Then I see "Offline Mode: only showing installed panickervinod versions" - And I see "> master" - And I see "* 0.0.1" - - Scenario: List candidate versions not found while Offline - When I enter "app list panickervinod" - Then I see "Offline Mode: only showing installed panickervinod versions" - And I see "None installed!" - -# use command - - Scenario: Use the default candidate version while Offline - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app use panickervinod" - Then I see "Using panickervinod version master in this shell." - - Scenario: Use the default candidate version when non selected while Offline - Given the candidate "panickervinod" version "0.0.1" is already installed but not default - Given the candidate "panickervinod" version "master" is already installed but not default - When I enter "app use panickervinod" - Then I see "This command is not available in offline mode." - - Scenario: Use an uninstalled candidate version while Offline - Given the candidate "panickervinod" version "0.0.1" is already installed and default - And the candidate "panickervinod" version "master" is not installed - When I enter "app use panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - Scenario: Use an invalid candidate version while Offline - Given the candidate "panickervinod" version "0.0.1" is already installed and default - When I enter "app use panickervinod 9.9.9" - Then I see "Stop! panickervinod 9.9.9 is not available in offline mode." - - Scenario: Use an installed candidate version while Offline - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app use panickervinod 0.0.1" - Then I see "Using panickervinod version 0.0.1 in this shell." - - # default command - - Scenario: Set the default to an uninstalled candidate version while Offline - Given the candidate "panickervinod" version "0.0.1" is already installed and default - When I enter "app default panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - Scenario: Set the default to an invalid candidate version while Offline - Given the candidate "panickervinod" version "0.0.1" is already installed and default - When I enter "app default panickervinod 999" - Then I see "Stop! panickervinod 999 is not available in offline mode." - - Scenario: Set the default to an installed candidate version while Offline - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app default panickervinod 0.0.1" - Then I see "Default panickervinod version set to 0.0.1" - - # install command - Scenario: Install a candidate version that is not installed while Offline - Given the candidate "panickervinod" version "master" is not installed - When I enter "app install panickervinod master" - Then I see "Stop! panickervinod master is not available in offline mode." - - Scenario: Install a candidate version that is already installed while Offline - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app install panickervinod master" - Then I see "Stop! panickervinod master is already installed." - - # uninstall command - Scenario: Uninstall a candidate version while Offline - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app uninstall panickervinod master" - Then I see "Unselecting panickervinod master..." - And I see "Uninstalling panickervinod master..." - And the candidate "panickervinod" version "master" is not in use - And the candidate "panickervinod" version "master" is not installed - - Scenario: Uninstall a candidate version that is not installed while Offline - Given the candidate "panickervinod" version "master" is not installed - When I enter "app uninstall panickervinod master" - Then I see "panickervinod master is not installed." - - # current command - Scenario: Display the current version of a candidate while Offline - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app current panickervinod" - Then I see "Using panickervinod version master" - - Scenario: Display the current version of all candidates while Offline - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "openapphack" version "master" is already installed and default - When I enter "app current" - Then I see "Using:" - And I see "panickervinod: master" - And I see "openapphack: master" - - # version command - Scenario: Determine the OpenAppHack CLI version when Offline - When I enter "app version" - Then I see the current app version - - # broadcast command - Scenario: Recall a broadcast while Offline - Given a prior Broadcast "This is an OLD Broadcast!" with id "12344" was issued - When I enter "app broadcast" - Then I see "This is an OLD Broadcast!" - - # help command - Scenario: Request help while Offline - When I enter "app help" - Then I see "Usage: app [version]" - - # selfupdate command - Scenario: Attempt self-update while Offline - When I enter "app selfupdate" - Then I see "This command is not available in offline mode." diff --git a/src/test/cucumber/openapphack/outdated_candidate.feature b/src/test/cucumber/openapphack/outdated_candidate.feature deleted file mode 100644 index 2322d9c..0000000 --- a/src/test/cucumber/openapphack/outdated_candidate.feature +++ /dev/null @@ -1,53 +0,0 @@ -Feature: Outdated Candidate - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Display outdated candidate version in use when it is outdated - Given the candidate "panickervinod" version "master" is already installed and default - And the default "panickervinod" candidate is "2.4.4" - When I enter "app outdated panickervinod" - Then I see "Outdated:" - And I see "panickervinod (master < 2.4.4)" - - Scenario: Display outdated candidate version in use when it is not outdated - Given the candidate "panickervinod" version "0.0.1" is already installed and default - And the default "panickervinod" candidate is "0.0.1" - When I enter "app outdated panickervinod" - Then I see "panickervinod is up-to-date" - - Scenario: Display outdated candidate version when none is in use - Given the candidate "panickervinod" does not exist - When I enter "app outdated panickervinod" - Then I see "Not using any version of panickervinod" - - Scenario: Display outdated candidate versions when none is specified and none is in use - Given the candidate "panickervinod" does not exist - When I enter "app outdated" - Then I see "No candidates are in use" - - Scenario: Display outdated candidate versions when none is specified and one is in use - Given the candidate "panickervinod" version "master" is already installed and default - And the default "panickervinod" candidate is "2.4.4" - When I enter "app outdated" - Then I see "Outdated:" - And I see "panickervinod (master < 2.4.4)" - - Scenario: Display outdated candidate versions when none is specified and multiple are in use - Given the candidate "panickervinod" version "master" is already installed and default - And the default "panickervinod" candidate is "2.4.4" - And the candidate "openapphack" version "master" is already installed and default - And the default "openapphack" candidate is "2.4.1" - When I enter "app outdated" - Then I see "Outdated:" - And I see "panickervinod (master < 2.4.4)" - And I see "openapphack (master < 2.4.1)" - - Scenario: Display outdated candidate versions when none is specified and multiple are in use but they are not outdated - Given the candidate "panickervinod" version "master" is already installed and default - And the default "panickervinod" candidate is "master" - And the candidate "openapphack" version "master" is already installed and default - And the default "openapphack" candidate is "master" - When I enter "app outdated" - Then I see "All candidates are up-to-date" diff --git a/src/test/cucumber/openapphack/self_update.feature b/src/test/cucumber/openapphack/self_update.feature deleted file mode 100644 index b44c0c5..0000000 --- a/src/test/cucumber/openapphack/self_update.feature +++ /dev/null @@ -1,73 +0,0 @@ -Feature: Self Update - - Background: - Given the internet is reachable - - Scenario: Force a Selfupdate - Given an initialised environment - When I enter "app selfupdate force" - Then I do not see "A new version of OPENAPPHACK is available..." - And I do not see "Would you like to upgrade now? (Y/n)" - And I do not see "Not upgrading today..." - And I see "Updating openapphack..." - And I see "Successfully upgraded OpenAppHack CLI." - - Scenario: Selfupdate when out of date - Given an outdated initialised environment - When I enter "app selfupdate" - Then I do not see "A new version of OPENAPPHACK is available..." - And I do not see "Would you like to upgrade now? (Y/n)" - And I do not see "Not upgrading today..." - And I see "Updating openapphack..." - And I see "Successfully upgraded OpenAppHack CLI." - - Scenario: Agree to a suggested Selfupdate - Given an outdated initialised environment - When I enter "app help" and answer "Y" - Then I see "A new version of OPENAPPHACK is available..." - And I see "Would you like to upgrade now? (Y/n)" - And I see "Successfully upgraded OpenAppHack CLI." - And I do not see "Not upgrading today..." - - Scenario: Do not agree to a suggested Selfupdate - Given an outdated initialised environment - When I enter "app help" and answer "N" - Then I see "A new version of OPENAPPHACK is available..." - And I see "Would you like to upgrade now? (Y/n)" - And I see "Not upgrading today..." - And I do not see "Successfully upgraded OpenAppHack CLI." - - Scenario: Automatically Selfupdate - Given an outdated initialised environment - And the configuration file has been primed with "openapphack_auto_selfupdate=true" - When I enter "app help" - Then I see "A new version of OPENAPPHACK is available..." - And I do not see "Would you like to upgrade now? (Y/n)" - And I do not see "Not upgrading today..." - And I see "Successfully upgraded OpenAppHack CLI." - - Scenario: Do not automatically Selfupdate - Given an outdated initialised environment - And the configuration file has been primed with "openapphack_auto_selfupdate=false" - When I enter "app help" and answer "n" - Then I see "A new version of OPENAPPHACK is available..." - And I see "Would you like to upgrade now? (Y/n)" - And I see "Not upgrading today..." - And I do not see "Successfully upgraded OpenAppHack CLI." - - Scenario: Bother the user with Upgrade message once a day - Given an outdated initialised environment - When I enter "app help" and answer "N" - Then I see "A new version of OPENAPPHACK is available..." - And I see "Would you like to upgrade now? (Y/n)" - And I see "Not upgrading today..." - And I enter "app help" - Then I do not see "A new version of OPENAPPHACK is available..." - And I do not see "Would you like to upgrade now? (Y/n)" - And I do not see "Not upgrading now..." - And I do not see "Successfully upgraded OpenAppHack CLI." - - Scenario: Selfupdate when not out of date - Given an initialised environment - When I enter "app selfupdate" - Then I see "No update available at this time." diff --git a/src/test/cucumber/openapphack/uninstall_candidate.feature b/src/test/cucumber/openapphack/uninstall_candidate.feature deleted file mode 100644 index 174e1ef..0000000 --- a/src/test/cucumber/openapphack/uninstall_candidate.feature +++ /dev/null @@ -1,37 +0,0 @@ -Feature: Uninstall Candidate - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Uninstall an installed Candidate Version not in use - Given the candidate "panickervinod" version "master" is already installed but not default - When I enter "app uninstall panickervinod master" - Then I do not see "Unselecting panickervinod master" - Then I see "Uninstalling panickervinod master" - And the candidate "panickervinod" version "master" is not installed - - Scenario: Uninstall a Candidate Version in use - Given the candidate "panickervinod" version "master" is already installed and default - When I enter "app uninstall panickervinod master" - Then I see "Unselecting panickervinod master" - And I see "Uninstalling panickervinod master" - And the candidate "panickervinod" version "master" is not installed - And the candidate "panickervinod" is no longer selected - - Scenario: Attempt uninstalling a Candidate Version that is not installed - Given the candidate "panickervinod" version "0.0.1" is not installed - When I enter "app uninstall panickervinod 0.0.1" - Then I see "panickervinod 0.0.1 is not installed." - - Scenario: Attempt uninstalling with no Candidate specified - When I enter "app uninstall" - Then I see "No candidate provided." - - Scenario: Attempt uninstalling with an invalid Candidate specified - When I enter "app uninstall groffle" - Then I see "Stop! groffle is not a valid candidate." - - Scenario: Attempt uninstalling without a version provided - When I enter "app uninstall panickervinod" - Then I see "No candidate version provided." diff --git a/src/test/cucumber/openapphack/use_and_default_candidate.feature b/src/test/cucumber/openapphack/use_and_default_candidate.feature deleted file mode 100644 index 5acaae1..0000000 --- a/src/test/cucumber/openapphack/use_and_default_candidate.feature +++ /dev/null @@ -1,67 +0,0 @@ -Feature: Use and Default Candidate - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Use without providing a Candidate - When I enter "app use" - Then I see "Usage: app [version]" - - Scenario: Use a candidate version that is installed - Given the candidate "panickervinod" version "master" is already installed and default - And the candidate "panickervinod" version "0.0.1" is a valid candidate version - And the candidate "panickervinod" version "0.0.1" is already installed but not default - When I enter "app use panickervinod 0.0.1" - Then I see "Using panickervinod version 0.0.1 in this shell." - Then the candidate "panickervinod" version "0.0.1" should be in use - And the candidate "panickervinod" version "master" should be the default - - Scenario: Use a candidate version that is not installed - Given the candidate "panickervinod" version "0.0.1" is available for download - When I enter "app use panickervinod 0.0.1" and answer "Y" - Then I see "Using panickervinod version 0.0.1 in this shell." - And the candidate "panickervinod" version "0.0.1" should be in use - - Scenario: Use a candidate version that is automatically installed - Given I have configured "openapphack_auto_answer" to "true" - And the candidate "panickervinod" version "0.0.1" is available for download - When I enter "app use panickervinod 0.0.1" - Then I see "Stop! panickervinod 0.0.1 is not installed." - Then I see "Using panickervinod version 0.0.1 in this shell." - And the candidate "panickervinod" version "0.0.1" should be in use - - Scenario: Use a candidate version that does not exist - Given the candidate "openapphack" version "1.9.9" is not available for download - When I enter "app use openapphack 1.9.9" - Then I see "Stop! 1.9.9 is not a valid openapphack version." - - Scenario: Use a candidate version that only exists locally - Given the candidate "panickervinod" version "2.0.0.M1" is not available for download - And the candidate "panickervinod" version "2.0.0.M1" is already installed but not default - When I enter "app use panickervinod 2.0.0.M1" - Then I see "Using panickervinod version 2.0.0.M1 in this shell." - - Scenario: Default a candidate version that is not installed - Given the candidate "openapphack" version "master" is a valid candidate version - When I enter "app default openapphack master" - Then I see "Stop! openapphack master is not installed." - - Scenario: Default a candidate version that is installed and not default - Given the candidate "openapphack" version "master" is a valid candidate version - And the candidate "openapphack" version "master" is already installed but not default - When I enter "app default openapphack master" - Then I see "Default openapphack version set to master" - And the candidate "openapphack" version "master" should be the default - - Scenario: Default a candidate version that is installed and already default - Given the candidate "openapphack" version "master" is a valid candidate version - And the candidate "openapphack" version "master" is already installed and default - When I enter "app default openapphack master" - Then I see "Default openapphack version set to master" - And the candidate "openapphack" version "master" should be the default - - Scenario: Default a candidate version that does not exist - Given the candidate "openapphack" version "2.9.9" is not available for download - When I enter "app default openapphack 2.9.9" - Then I see "Stop! 2.9.9 is not a valid openapphack version." diff --git a/src/test/cucumber/openapphack/version.feature b/src/test/cucumber/openapphack/version.feature deleted file mode 100644 index c027ccf..0000000 --- a/src/test/cucumber/openapphack/version.feature +++ /dev/null @@ -1,9 +0,0 @@ -Feature: Version - - Background: - Given the internet is reachable - And an initialised environment - - Scenario: Show the current version of app - When I enter "app version" - Then I see "OpenAppHack CLI x.y.z" diff --git a/src/test/groovy/openapphack/cucumber/RunCukeTests.groovy b/src/test/groovy/openapphack/cucumber/RunCukeTests.groovy deleted file mode 100644 index 9509b30..0000000 --- a/src/test/groovy/openapphack/cucumber/RunCukeTests.groovy +++ /dev/null @@ -1,14 +0,0 @@ -package openapphack.cucumber - -import cucumber.api.junit.Cucumber -import org.junit.runner.RunWith - -@RunWith(Cucumber) -@Cucumber.Options( - format=["pretty", "html:build/reports/cucumber"], - strict=true, - features=["src/test/cucumber"], - glue=["src/test/steps"], - tags=["~@manual", "~@review"] -) -class RunCukesTest {} diff --git a/src/test/groovy/openapphack/env/BashEnv.groovy b/src/test/groovy/openapphack/env/BashEnv.groovy deleted file mode 100644 index 2b41115..0000000 --- a/src/test/groovy/openapphack/env/BashEnv.groovy +++ /dev/null @@ -1,165 +0,0 @@ -package openapphack.env - -/** - *

As part of the openapphack test suite we need to launch a bash shell and execute - * multiple commands in it. This is tricky to do using Java's support for - * working with external processes as the API can't tell you when a command - * has finished executing.

- *

This class provides some hacks that allow you to serially execute commands - * in an external bash process in a fairly reliable manner and to retrieve the - * output of those commands.

- */ -class BashEnv { - - static final PROMPT = "" - static final EXIT_CODE_CMD = 'echo "Exit code is: $?"' - static final EXIT_CODE_PATTERN = ~/Exit code is: (\d+)\s*${PROMPT}?$/ - - private final Object outputLock = new Object() - - def exitCode - def process - def processOutput = new StringBuilder() - def commandOutput - - // Command timeout in milliseconds - def timeout = 5000 - def workDir - def env - - BashEnv(workDir, Map env) { - this.workDir = workDir as File - - def basicPath = "/usr/sbin:/usr/bin:/sbin:/bin" - def localBinDir = "${workDir}/bin" - - def modifiedPath = "$localBinDir:$basicPath" - - env = env + [PS1: PROMPT, PATH: modifiedPath] - this.env = env.collect { k, v -> k + '=' + v } - } - - /** - * Starts the external bash process. - */ - void start() { - process = ["bash", "--noprofile", "--norc", "-i"].execute(env, workDir) - - consumeProcessStream(process.inputStream) - consumeProcessStream(process.errorStream) - } - - /** - * Stops the external bash process and waits for it to finish. - */ - void stop() { - execute("exit") - process.waitFor() - } - - /** - * Sends a command line to the external bash process and returns once the - * command has finished executing. If the command is interactive and requires - * input during it's execution (for example a y/n answer to a question) you - * can provide that input as a list of strings. - */ - void execute(String cmdline, List inputs = []) { - resetOutput() - - if (cmdline != "exit") { - exitCode = null - } - - process.outputStream << cmdline << "\n" - process.outputStream.flush() - - if (cmdline != "exit") { - for (input in inputs) { - process.outputStream << input << "\n" - } - process.outputStream << EXIT_CODE_CMD << "\n" - process.outputStream.flush() - } - - def start = System.currentTimeMillis() - while (cmdline != "exit") { - Thread.sleep 100 - - synchronized (outputLock) { - // Remove all the extraneous text that's not related to the - // command's output. This includes the command string itself, - // the 'echo' command to display the command's exit code, and - // the exit code line. - removeFromOutput(cmdline + "\n") - removeFromOutput(PROMPT + EXIT_CODE_CMD + "\n") - - def str = processOutput.toString() - def m = EXIT_CODE_PATTERN.matcher(str) - if (m) { - exitCode = m[0][1] - - // Remove this exit code line from the output. - commandOutput = m.replaceAll('') - break - } - - // If the command times out, we should break out of the loop and - // display whatever output has already been produced. - if (System.currentTimeMillis() - start > timeout) { - commandOutput = "ALERT! Command timed out. Last output was:\n\n${processOutput}" - break - } - } - } - } - - /** - * Returns the exit code of the last command that was executed. - */ - int getStatus() { - if (!exitCode) throw new IllegalStateException("Did you run execute() before getting the status?") - return exitCode.toInteger() - } - - /** - * Returns the text output (both stdout and stderr) of the last command - * that was executed. - */ - String getOutput() { - return commandOutput - } - - /** - * Clears the saved command output. - */ - void resetOutput() { - synchronized (outputLock) { - processOutput = new StringBuilder() - } - } - - private void consumeProcessStream(final InputStream stream) { - char[] buffer = new char[256] - Thread.start { - def reader = new InputStreamReader(stream) - def charsRead = 0 - while (charsRead != -1) { - charsRead = reader.read(buffer, 0, 256) - if (charsRead > 0) { - synchronized (outputLock) { - processOutput.append(buffer, 0, charsRead) - } - } - } - } - } - - private void removeFromOutput(String line) { - synchronized (outputLock) { - def pos = processOutput.indexOf(line) - if (pos != -1) { - processOutput.delete(pos, pos + line.size() - 1) - } - } - } -} diff --git a/src/test/groovy/openapphack/env/OpenAppHackEnvBuilder.groovy b/src/test/groovy/openapphack/env/OpenAppHackEnvBuilder.groovy deleted file mode 100644 index 521606a..0000000 --- a/src/test/groovy/openapphack/env/OpenAppHackEnvBuilder.groovy +++ /dev/null @@ -1,194 +0,0 @@ -package openapphack.env - -import openapphack.stubs.CurlStub - -class OpenAppHackBashEnvBuilder { - - final TEST_SCRIPT_BUILD_DIR = "build/testScripts" as File - - //mandatory fields - private final File baseFolder - - //optional fields with sensible defaults - CurlStub curlStub - List candidates = ['openapphack', 'panickervinod'] - List availableCandidates = candidates - boolean onlineMode = true - boolean forcedOfflineMode = false - String broadcast = "This is a LIVE broadcast!" - String service = "http://localhost:8080" - String broadcastService = "http://localhost:8080" - String brokerService = "http://localhost:8080" - String jdkHome = "/path/to/my/jdk" - String httpProxy - String versionToken - - Map config = [ - openapphack_auto_answer:'false' - ] - - File openapphackDir, openapphackBinDir, openapphackVarDir, openapphackSrcDir, openapphackEtcDir, openapphackExtDir, openapphackArchivesDir, openapphackTmpDir - - static OpenAppHackBashEnvBuilder create(File baseFolder){ - new OpenAppHackBashEnvBuilder(baseFolder) - } - - private OpenAppHackBashEnvBuilder(File baseFolder){ - this.baseFolder = baseFolder - } - - OpenAppHackBashEnvBuilder withCurlStub(CurlStub curlStub){ - this.curlStub = curlStub - this - } - - OpenAppHackBashEnvBuilder withCandidates(List candidates){ - this.candidates = candidates - this - } - - OpenAppHackBashEnvBuilder withAvailableCandidates(List candidates){ - this.availableCandidates = candidates - this - } - - OpenAppHackBashEnvBuilder withBroadcast(String broadcast){ - this.broadcast = broadcast - this - } - - OpenAppHackBashEnvBuilder withConfiguration(String key, String value){ - config.put key, value - this - } - - OpenAppHackBashEnvBuilder withOnlineMode(boolean onlineMode){ - this.onlineMode = onlineMode - this - } - - OpenAppHackBashEnvBuilder withForcedOfflineMode(boolean forcedOfflineMode){ - this.forcedOfflineMode = forcedOfflineMode - this - } - - OpenAppHackBashEnvBuilder withService(String service){ - this.service = service - this - } - - OpenAppHackBashEnvBuilder withBroadcastService(String broadcastService){ - this.broadcastService = broadcastService - this - } - - OpenAppHackBashEnvBuilder withBrokerService(String brokerService){ - this.brokerService = brokerService - this - } - - OpenAppHackBashEnvBuilder withJdkHome(String jdkHome){ - this.jdkHome = jdkHome - this - } - - OpenAppHackBashEnvBuilder withHttpProxy(String httpProxy){ - this.httpProxy = httpProxy - this - } - - OpenAppHackBashEnvBuilder withVersionToken(String version){ - this.versionToken = version - this - } - - BashEnv build() { - openapphackDir = prepareDirectory(baseFolder, ".openapphack") - openapphackBinDir = prepareDirectory(openapphackDir, "bin") - openapphackVarDir = prepareDirectory(openapphackDir, "var") - openapphackSrcDir = prepareDirectory(openapphackDir, "src") - openapphackEtcDir = prepareDirectory(openapphackDir, "etc") - openapphackExtDir = prepareDirectory(openapphackDir, "ext") - openapphackArchivesDir = prepareDirectory(openapphackDir, "archives") - openapphackTmpDir = prepareDirectory(openapphackDir, "tmp") - - initializeCandidates(openapphackDir, candidates) - initializeAvailableCandidates(openapphackVarDir, availableCandidates) - initializeBroadcast(openapphackVarDir, broadcast) - initializeConfiguration(openapphackEtcDir, config) - initializeVersionToken(openapphackVarDir, versionToken) - - primeInitScript(openapphackBinDir) - primeModuleScripts(openapphackSrcDir) - - def env = [ - OPENAPPHACK_DIR: openapphackDir.absolutePath, - OPENAPPHACK_ONLINE: "$onlineMode", - OPENAPPHACK_FORCE_OFFLINE: "$forcedOfflineMode", - OPENAPPHACK_SERVICE: service, - OPENAPPHACK_BROADCAST_SERVICE: broadcastService, - OPENAPPHACK_BROKER_SERVICE: brokerService, - JAVA_HOME: jdkHome - ] - - if(httpProxy) { - env.put("http_proxy", httpProxy) - } - - new BashEnv(baseFolder.absolutePath, env) - } - - private prepareDirectory(File target, String directoryName) { - def directory = new File(target, directoryName) - directory.mkdirs() - directory - } - - private initializeVersionToken(File folder, String version) { - if(version) { - new File(folder, "version") << version - } - } - - - private initializeCandidates(File folder, List candidates) { - candidates.each { candidate -> - new File(folder, candidate).mkdirs() - } - } - - private initializeAvailableCandidates(File folder, List candidates){ - new File(folder, "candidates") << candidates.join(",") - } - - private initializeBroadcast(File targetFolder, String broadcast) { - new File(targetFolder, "broadcast") << broadcast - } - - private initializeConfiguration(File targetFolder, Map config){ - def configFile = new File(targetFolder, "config") - config.each { key, value -> - configFile << "$key=$value\n" - } - } - - private primeInitScript(File targetFolder) { - def sourceInitScript = new File(TEST_SCRIPT_BUILD_DIR, 'app-init.sh') - - if (!sourceInitScript.exists()) - throw new IllegalStateException("app-init.sh has not been prepared for consumption.") - - def destInitScript = new File(targetFolder, "app-init.sh") - destInitScript << sourceInitScript.text - destInitScript - } - - private primeModuleScripts(File targetFolder){ - for (f in TEST_SCRIPT_BUILD_DIR.listFiles()){ - if(!(f.name in ['selfupdate.sh', 'install.sh', 'app-init.sh'])){ - new File(targetFolder, f.name) << f.text - } - } - } - -} diff --git a/src/test/groovy/openapphack/specs/BootstrapSpec.groovy b/src/test/groovy/openapphack/specs/BootstrapSpec.groovy deleted file mode 100644 index 64851e8..0000000 --- a/src/test/groovy/openapphack/specs/BootstrapSpec.groovy +++ /dev/null @@ -1,144 +0,0 @@ -package openapphack.specs - -import openapphack.env.BashEnv -import openapphack.stubs.CurlStub -import openapphack.env.OpenAppHackBashEnvBuilder -import spock.lang.Specification - -import static openapphack.utils.TestUtils.prepareBaseDir - -class BootstrapSpec extends Specification { - - CurlStub curlStub - BashEnv bash - - File openapphackBaseDir - String openapphackBaseEnv - String bootstrap - String versionToken - - void setup(){ - openapphackBaseDir = prepareBaseDir() - openapphackBaseEnv = openapphackBaseDir.absolutePath - bootstrap = "${openapphackBaseDir.absolutePath}/.openapphack/bin/app-init.sh" - versionToken = "${openapphackBaseDir.absolutePath}/.openapphack/var/version" - curlStub = CurlStub.prepareIn(new File(openapphackBaseDir, "bin")) - } - - void "should store version token if not exists"() { - - given: 'a working openapphack installation without version token' - def versionFile = new File(versionToken) - curlStub.primeWith("http://localhost:8080/app/version", "echo x.y.b").build() - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .build() - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - versionFile.exists() - } - - void "should not query server if token is found"() { - given: 'a working openapphack installation with version token' - def versionFile = new File(versionToken) - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .withVersionToken("x.y.z") - .build() - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - versionFile.exists() - versionFile.text.contains("x.y.z") - } - - void "should query server for version and refresh if token is older than a day"() { - given: 'a working openapphack installation with expired version token' - def versionFile = new File(versionToken) - curlStub.primeWith("http://localhost:8080/app/version", "echo x.y.b").build() - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .withVersionToken("x.y.a") - .build() - def twoDaysAgoInMillis = System.currentTimeMillis() - 172800000 - versionFile.setLastModified(twoDaysAgoInMillis) - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - versionFile.exists() - versionFile.text.contains("x.y.b") - } - - void "should ignore version if api is offline"(){ - given: 'a working openapphack installation with api down' - def openapphackVersion = "x.y.z" - def versionFile = new File(versionToken) - curlStub.primeWith("http://localhost:8080/app/version", "echo ''").build() - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .withVersionToken(openapphackVersion) - .build() - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - versionFile.text.contains(openapphackVersion) - } - - void "should not go offline if curl times out"(){ - given: 'a working openapphack installation with api down' - curlStub.primeWith("http://localhost:8080/app/version", "echo ''").build() - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .build() - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - ! bash.output.contains("OPENAPPHACK can't reach the internet so going offline.") - } - - void "should ignore version if api returns garbage"(){ - given: 'a working openapphack installation with garbled api' - def openapphackVersion = "x.y.z" - def versionFile = new File(versionToken) - curlStub.primeWith("http://localhost:8080/app/version", "echo 'sorry'").build() - bash = OpenAppHackBashEnvBuilder - .create(openapphackBaseDir) - .withCurlStub(curlStub) - .withVersionToken(openapphackVersion) - .build() - bash.start() - - when: 'bootstrap the system' - bash.execute("source $bootstrap") - - then: - versionFile.text.contains openapphackVersion - } - - void cleanup(){ - println bash.output - bash.stop() - assert openapphackBaseDir.deleteDir() - } -} diff --git a/src/test/groovy/openapphack/stubs/CurlStub.groovy b/src/test/groovy/openapphack/stubs/CurlStub.groovy deleted file mode 100644 index 22ea0fd..0000000 --- a/src/test/groovy/openapphack/stubs/CurlStub.groovy +++ /dev/null @@ -1,34 +0,0 @@ -package openapphack.stubs - -class CurlStub { - - private File file - private commands = [:] - - static CurlStub prepareIn(File folder) { - folder.mkdirs() - - def file = new File(folder, "curl") - file.createNewFile() - file.write "#!/bin/bash\n" - file.executable = true - - new CurlStub(file:file) - } - - CurlStub primeWith(String request, String snippet) { - commands.put request, snippet - this - } - - void build(){ - commands.each { request, snippet -> - //use second arg because we use curl with -s - file << 'if [[ "$2" == "' - file << "$request" - file << '" ]]; then\n' - file << " $snippet\n" - file << 'fi\n' - } - } -} diff --git a/src/test/groovy/openapphack/stubs/WebServiceStub.groovy b/src/test/groovy/openapphack/stubs/WebServiceStub.groovy deleted file mode 100644 index 5328e8d..0000000 --- a/src/test/groovy/openapphack/stubs/WebServiceStub.groovy +++ /dev/null @@ -1,37 +0,0 @@ -package openapphack.stubs - -import static com.github.tomakehurst.wiremock.client.WireMock.* - -class WebServiceStub { - - static primeEndpoint(String endpoint, String body) { - stubFor(get(urlEqualTo(endpoint)).willReturn( - aResponse() - .withStatus(200) - .withHeader("Content-Type", "text/plain") - .withBody(body))) - } - - static primeDownloadFor(String host, String candidate, String version) { - stubFor(get(urlEqualTo("/download/${candidate}/${version}/platform/Linux")).willReturn( - aResponse() - .withHeader("Location", "${host}/${candidate}-${version}.zip") - .withStatus(302))) - - def binary = "${candidate}-${version}.zip" - stubFor(get(urlEqualTo("/$binary")).willReturn( - aResponse() - .withStatus(200) - .withHeader("Content-Type", "application/zip") - .withBodyFile(binary))) - } - - static primeSelfupdate() { - stubFor(get(urlEqualTo("/selfupdate")).willReturn( - aResponse() - .withStatus(200) - .withHeader("Content-Type", "text/plain") - .withBodyFile("selfupdate.sh"))) - } - -} diff --git a/src/test/groovy/openapphack/utils/TestUtils.groovy b/src/test/groovy/openapphack/utils/TestUtils.groovy deleted file mode 100644 index fb4be87..0000000 --- a/src/test/groovy/openapphack/utils/TestUtils.groovy +++ /dev/null @@ -1,14 +0,0 @@ -package openapphack.utils - - -class TestUtils { - - static final DEFAULT_BASE_DIR = "/tmp/app-test" - - static File prepareBaseDir() { - def counter = "${(Math.random() * 10000).toInteger()}".padLeft(4, "0") - def baseDir = "$DEFAULT_BASE_DIR/app-$counter" as File - baseDir.mkdirs() - baseDir - } -} diff --git a/src/test/jmeter/OPENAPPHACK.jmx b/src/test/jmeter/OPENAPPHACK.jmx deleted file mode 100644 index 40007f1..0000000 --- a/src/test/jmeter/OPENAPPHACK.jmx +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - false - false - - - - - - - - continue - - false - -1 - - 1 - 1 - 1382782760000 - 1382782760000 - false - - - - - - 0 - 100000 - 1 - counter - 00000 - true - - - - - - host - localhost - = - - - port - 8080 - = - - - - - - , - - candidates.csv - false - true - shareMode.thread - false - candidate,version - - - - - - - ${host} - ${port} - - - - - /alive - GET - false - false - true - false - Java - false - - - - - - OK - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /candidates - GET - false - false - true - false - Java - false - - - - - - groovy - panickervinod - griffon - gradle - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /candidates/${candidate}/${version}/validate - GET - false - false - true - false - Java - false - - - - - - valid - - Assertion.response_data - false - 8 - - - - - - - - ${host} - ${port} - - - - - /api/version - GET - false - false - true - false - Java - false - - - - - - 1.0.0 - - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /candidates/${candidate}/default - GET - false - false - true - false - Java - false - - - - - - ${version} - - Assertion.response_data - false - 2 - - - - - - - - false - Linux - = - true - platform - - - false - ${version} - = - true - current - - - false - ${version},local${counter} - = - true - installed - - - - ${host} - ${port} - - - - - /candidates/${candidate}/list - GET - false - false - true - false - Java - false - - - - - - Available - - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /api/broadcast - GET - false - false - true - false - Java - false - - - - - - Report issues - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /candidates/${candidate} - GET - false - false - true - false - Java - false - - - - - - ${version} - - Assertion.response_data - false - 2 - - - - - - - - ${host} - ${port} - - - - - /candidates/${candidate}/${version}/download - GET - false - false - true - false - Java - false - - - - - - 302 - - Assertion.response_code - false - 8 - - - - - false - - saveConfig - - - true - true - true - - true - true - true - true - false - true - true - false - false - false - false - false - false - false - false - 0 - true - - - - - - - false - - saveConfig - - - true - true - true - - true - true - true - true - false - true - true - false - false - false - false - false - false - false - false - 0 - true - - - - - - - 250 - - - - - - diff --git a/src/test/jmeter/candidates.csv b/src/test/jmeter/candidates.csv deleted file mode 100644 index aeffabf..0000000 --- a/src/test/jmeter/candidates.csv +++ /dev/null @@ -1,2 +0,0 @@ -panickervinod,master -openapphack,master diff --git a/src/test/resources/__files/selfupdate.sh b/src/test/resources/__files/selfupdate.sh deleted file mode 100644 index bfa8646..0000000 --- a/src/test/resources/__files/selfupdate.sh +++ /dev/null @@ -1,51 +0,0 @@ - - -echo "" -echo "Updating openapphack..." - -OPENAPPHACK_VERSION="x.y.z" - -openapphack_bin_folder="${OPENAPPHACK_DIR}/bin" -openapphack_stage_folder="${OPENAPPHACK_DIR}/tmp/stage" -openapphack_src_folder="${OPENAPPHACK_DIR}/src" - -echo "Purge existing scripts..." -rm -rf "${openapphack_bin_folder}" -rm -rf "${openapphack_src_folder}" - -echo "Refresh directory structure..." -mkdir -p "${OPENAPPHACK_DIR}/bin" -mkdir -p "${OPENAPPHACK_DIR}/ext" -mkdir -p "${OPENAPPHACK_DIR}/etc" -mkdir -p "${OPENAPPHACK_DIR}/src" -mkdir -p "${OPENAPPHACK_DIR}/var" -mkdir -p "${OPENAPPHACK_DIR}/tmp" -mkdir -p "${OPENAPPHACK_DIR}/vm" -mkdir -p "${OPENAPPHACK_DIR}/.vms" - -# drop version token -echo "$OPENAPPHACK_VERSION" > "${OPENAPPHACK_DIR}/var/version" - -echo "Prime the config file..." -openapphack_config_file="${OPENAPPHACK_DIR}/etc/config" -touch "${openapphack_config_file}" - -echo "Extract script archive..." - -echo "Unziping scripts to: ${openapphack_stage_folder}" - -echo "Moving app-init file to bin folder..." - -echo "Move remaining module scripts to src folder: ${openapphack_src_folder}" - -echo "Clean up staging folder..." - -echo "" -echo "" -echo "Successfully upgraded OpenAppHack CLI." -echo "" -echo "Please open a new terminal, or run the following in the existing one:" -echo "" -echo " source \"${OPENAPPHACK_DIR}/bin/app-init.sh\"" -echo "" -echo "" diff --git a/src/test/resources/openapphack_application.js b/src/test/resources/openapphack_application.js deleted file mode 100644 index aebfa7e..0000000 --- a/src/test/resources/openapphack_application.js +++ /dev/null @@ -1 +0,0 @@ -{ "_id" : "528887f05e75a57eee081491", "alive" : "OK" } diff --git a/src/test/resources/openapphack_broadcast.js b/src/test/resources/openapphack_broadcast.js deleted file mode 100644 index 7cb5e06..0000000 --- a/src/test/resources/openapphack_broadcast.js +++ /dev/null @@ -1 +0,0 @@ -{ "_id" : 1, "text" : "This is a LIVE Broadcast!" } diff --git a/src/test/resources/openapphack_candidates.js b/src/test/resources/openapphack_candidates.js deleted file mode 100644 index 4315278..0000000 --- a/src/test/resources/openapphack_candidates.js +++ /dev/null @@ -1,30 +0,0 @@ -[{ - "_id" : "530d9e23f0085665c6ad009c", - "candidate" : "openapphack", - "default" : "master", - "versions" : [ - { - "version" : "master", - "url" : "http://localhost:8080/openapphack-master.zip" - } - ] -}, -{ - "_id" : "530d9e23f0085665c6ad009d", - "candidate" : "panickervinod", - "default" : "master", - "versions" : [ - { - "version" : "master", - "url" : "http://localhost:8080/panickervinod-master.zip" - }, - { - "version" : "0.0.0", - "url" : "http://localhost:8080/panickervinod-0.0.0.zip" - }, - { - "version" : "0.0.1", - "url" : "http://localhost:8080/panickervinod-0.0.1.zip" - } - ] -}] diff --git a/src/test/steps/openapphack/broadcast_steps.groovy b/src/test/steps/openapphack/broadcast_steps.groovy deleted file mode 100644 index 0f2e5b8..0000000 --- a/src/test/steps/openapphack/broadcast_steps.groovy +++ /dev/null @@ -1,19 +0,0 @@ -package openapphack - -import static cucumber.api.groovy.EN.And -import static openapphack.stubs.WebServiceStub.primeEndpoint - -And(~'^no prior Broadcast was received$') { -> - broadcastFile.delete() - broadcastIdFile.delete() -} - -And(~'^a new Broadcast "(.*)" with id "(.*)" is available$') { String broadcast, String id -> - primeEndpoint("/broadcast/latest/id", id) - primeEndpoint("/broadcast/latest", broadcast) -} - -And(~'^a prior Broadcast "(.*)" with id "(.*)" was issued$') { String broadcast, String id -> - broadcastIdFile.write id - broadcastFile.write broadcast -} diff --git a/src/test/steps/openapphack/command_line_interop_steps.groovy b/src/test/steps/openapphack/command_line_interop_steps.groovy deleted file mode 100644 index 52c35d7..0000000 --- a/src/test/steps/openapphack/command_line_interop_steps.groovy +++ /dev/null @@ -1,33 +0,0 @@ -package openapphack - -import static cucumber.api.groovy.EN.* - -And(~'^I enter \"([^\"]*)\"$') { String command -> - bash.execute(command) - result = bash.output -} - -And(~'^I enter "([^"]*)" and answer "([^"]*)"$') { String command, String answer -> - bash.execute(command, [answer]) - result = bash.output -} - -And(~'^I see \"([^\"]*)\"$') { String output -> - assert result.contains(output) -} - -And(~'^I do not see "([^"]*)"$') { String output -> - assert ! result.contains(output) -} - -And(~'^I see only \"([^\"]*)\"$') { String output -> - assert result?.replaceAll("\\n", "") == output -} - -And(~'^I see the current openapphack version$') {-> - assert result.contains("OpenAppHack") -} - -And(~'^I see a single occurrence of \"([^\"]*)\"$') { String occurrence -> - assert result.count(occurrence) == 1 -} \ No newline at end of file diff --git a/src/test/steps/openapphack/env.groovy b/src/test/steps/openapphack/env.groovy deleted file mode 100644 index b5a73ab..0000000 --- a/src/test/steps/openapphack/env.groovy +++ /dev/null @@ -1,70 +0,0 @@ -package openapphack - -import com.github.tomakehurst.wiremock.WireMockServer -import com.github.tomakehurst.wiremock.client.WireMock - -import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig -import static cucumber.api.groovy.Hooks.After -import static cucumber.api.groovy.Hooks.Before - -HTTP_PROXY = System.getProperty("httpProxy") ?: "" - -FAKE_JDK_PATH = "/path/to/my/openjdk" -SERVICE_UP_HOST="localhost" -SERVICE_UP_PORT=8080 -SERVICE_UP_URL = "http://$SERVICE_UP_HOST:$SERVICE_UP_PORT" -SERVICE_DOWN_URL = "http://localhost:0" - -counter = "${(Math.random() * 10000).toInteger()}".padLeft(4, "0") - -localOpenapphackCandidate = "/tmp/openapphack-core" as File - -openapphackVersion = "x.y.z" -openapphackVersionOutdated = "x.y.y" - -openapphackBaseEnv = "/tmp/app-$counter" -openapphackBaseDir = openapphackBaseEnv as File - -openapphackDirEnv = "$openapphackBaseEnv/.openapphack" -openapphackDir = openapphackDirEnv as File -binDir = "${openapphackDirEnv}/bin" as File -srcDir = "${openapphackDirEnv}/src" as File -varDir = "${openapphackDirEnv}/var" as File -etcDir = "${openapphackDirEnv}/etc" as File -extDir = "${openapphackDirEnv}/ext" as File -vmsDir = "${openapphackDirEnv}/.vms" as File -vmDir = "${openapphackDirEnv}/vm" as File -archiveDir = "${openapphackDirEnv}/archives" as File -tmpDir = "${openapphackDir}/tmp" as File - -broadcastFile = new File(varDir, "broadcast") -broadcastIdFile = new File(varDir, "broadcast_id") -candidatesFile = new File(varDir, "candidates") -versionTokenFile = new File(varDir, "version") -initScript = new File(binDir, "app-init.sh") - -bash = null - -if(!binding.hasVariable("wireMock")) { - wireMock = new WireMockServer(wireMockConfig().port(SERVICE_UP_PORT)) - wireMock.start() - WireMock.configureFor(SERVICE_UP_HOST, SERVICE_UP_PORT) -} - -Before(){ - WireMock.reset() - cleanUp() -} - -private cleanUp(){ - openapphackBaseDir.deleteDir() - localOpenapphackCandidate.deleteDir() -} - -After(){ scenario -> - def output = bash?.output - if (output) { - scenario.write("\nOutput: \n${output}") - } - bash?.stop() -} diff --git a/src/test/steps/openapphack/flush_steps.groovy b/src/test/steps/openapphack/flush_steps.groovy deleted file mode 100644 index 4301ae4..0000000 --- a/src/test/steps/openapphack/flush_steps.groovy +++ /dev/null @@ -1,49 +0,0 @@ -package openapphack - -import static cucumber.api.groovy.EN.* - -And(~'^the candidate "([^"]*)" is known locally$') { String candidate -> - assert candidatesFile.text.contains(candidate) -} - -And(~'^no candidates are know locally$') {-> - assert ! candidatesFile.exists() -} - -And(~'^no broadcast message can be found$') {-> - assert ! (broadcastFile.exists() && broadcastIdFile.exists()) -} - -And(~'^the archive "([^"]*)" has been cached$') { String archive -> - new File(archiveDir, archive).createNewFile() -} - -And(~'^no archives are cached$') {-> - assert ! archiveDir.listFiles() -} - -And(~'^the file "([^"]*)" in temporary storage$') { String fileName -> - new File(tmpDir, fileName).createNewFile() -} - -And(~'^no "([^"]*)" file is present in temporary storage$') { String fileName -> - assert ! new File(tmpDir, fileName).exists() -} - -And(~'^the broadcast has been flushed$') {-> - broadcastIdFile.delete() - broadcastFile.delete() -} - -And(~'^a prior version "([^"]*)" was detected$') { String version -> - assert versionTokenFile.exists() - assert versionTokenFile.text.contains(version) -} - -And(~'^no version token can be found$') {-> - assert ! versionTokenFile.exists() -} - -And(~'^the Remote Version has been flushed$') {-> - assert versionTokenFile.delete() -} \ No newline at end of file diff --git a/src/test/steps/openapphack/initialisation_steps.groovy b/src/test/steps/openapphack/initialisation_steps.groovy deleted file mode 100644 index 2414807..0000000 --- a/src/test/steps/openapphack/initialisation_steps.groovy +++ /dev/null @@ -1,130 +0,0 @@ -package openapphack - -import java.util.zip.ZipException -import java.util.zip.ZipFile - -import static cucumber.api.groovy.EN.* -import static openapphack.stubs.WebServiceStub.primeEndpoint -import static openapphack.stubs.WebServiceStub.primeSelfupdate - -And(~'^the openapphack work folder is created$') { -> - assert openapphackDir.isDirectory(), "The openapphack directory does not exist." -} - -And(~'^the "([^"]*)" folder exists in user home$') { String arg1 -> - assert openapphackDir.isDirectory(), "The openapphack directory does not exist." -} - -And(~'^the archive for candidate "([^"]*)" version "([^"]*)" is corrupt$') { String candidate, String version -> - try { - new ZipFile(new File("src/test/resources/__files/${candidate}-${version}.zip")) - assert false, "Archive was not corrupt!" - - } catch (ZipException ze){ - //expected behaviour - } -} - -And(~'^the archive for candidate "([^"]*)" version "([^"]*)" is removed$') { String candidate, String version -> - def archive = new File("${openapphackDir}/archives/${candidate}-${version}.zip") - assert ! archive.exists() -} - -And(~'^an initialised shell$') { -> - def initScript = "$openapphackDir/bin/app-init.sh" as File - assert initScript.exists() -} - -And(~'^I reinitialise the shell$') { -> - def initScript = "$openapphackDir/bin/app-init.sh" as File - assert initScript.exists() -} - -And(~'^the internet is reachable$') {-> - primeEndpoint("/broadcast/latest/id", "12345") - primeEndpoint("/app/version", openapphackVersion) - primeSelfupdate() - - forcedOffline = false - online = true - serviceUrlEnv = SERVICE_UP_URL - javaHome = FAKE_JDK_PATH -} - -And(~'^the internet is not reachable$') {-> - forcedOffline = false - online = false - serviceUrlEnv = SERVICE_DOWN_URL - javaHome = FAKE_JDK_PATH -} - -And(~'^offline mode is disabled with reachable internet$') {-> - primeEndpoint("/broadcast/latest", "This is a LIVE Broadcast!") - - forcedOffline = false - online = true - serviceUrlEnv = SERVICE_UP_URL - javaHome = FAKE_JDK_PATH -} - -And(~'^offline mode is enabled with reachable internet$') {-> - primeEndpoint("/broadcast/latest/id", "12345") - - forcedOffline = true - online = true - serviceUrlEnv = SERVICE_UP_URL - javaHome = FAKE_JDK_PATH -} - -And(~'^offline mode is enabled with unreachable internet$') {-> - forcedOffline = true - online = false - serviceUrlEnv = SERVICE_DOWN_URL - javaHome = FAKE_JDK_PATH -} - -And(~'^an initialised environment$') {-> - bash = env.OpenAppHackBashEnvBuilder.create(openapphackBaseDir) - .withOnlineMode(online) - .withForcedOfflineMode(forcedOffline) - .withService(serviceUrlEnv) - .withBroadcastService(serviceUrlEnv) - .withJdkHome(javaHome) - .withHttpProxy(HTTP_PROXY) - .withVersionToken(openapphackVersion) - .build() - - bash.start() - bash.execute("source $openapphackDirEnv/bin/app-init.sh") -} - -And(~'^an outdated initialised environment$') {-> - bash = env.OpenAppHackBashEnvBuilder.create(openapphackBaseDir) - .withOnlineMode(online) - .withForcedOfflineMode(forcedOffline) - .withService(serviceUrlEnv) - .withBroadcastService(serviceUrlEnv) - .withJdkHome(javaHome) - .withHttpProxy(HTTP_PROXY) - .withVersionToken(openapphackVersionOutdated) - .build() - - def twoDaysAgoInMillis = System.currentTimeMillis() - 172800000 - - def upgradeToken = "$openapphackDir/var/delay_upgrade" as File - upgradeToken.createNewFile() - upgradeToken.setLastModified(twoDaysAgoInMillis) - - def versionToken = "$openapphackDir/var/version" as File - versionToken.setLastModified(twoDaysAgoInMillis) - - def initFile = "$openapphackDir/bin/app-init.sh" as File - initFile.text = initFile.text.replace(openapphackVersion, openapphackVersionOutdated) - - bash.start() - bash.execute("source $openapphackDirEnv/bin/app-init.sh") -} - -And(~'^the system is bootstrapped$') {-> - bash.execute("source $openapphackDirEnv/bin/app-init.sh") -} diff --git a/src/test/steps/openapphack/installation_steps.groovy b/src/test/steps/openapphack/installation_steps.groovy deleted file mode 100644 index 2c7cc37..0000000 --- a/src/test/steps/openapphack/installation_steps.groovy +++ /dev/null @@ -1,104 +0,0 @@ -package openapphack - -import java.nio.file.FileSystems -import java.nio.file.Files -import java.nio.file.Path - -import static cucumber.api.groovy.EN.And - -And(~'^the candidate "([^"]*)" version "([^"]*)" is installed$') { String candidate, String version -> - def file = "${openapphackDir}/${candidate}/${version}" as File - if (!file.exists()) println bash.output - assert file.exists() -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is not installed$') { String candidate, String version -> - def directory = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - if (Files.exists(directory)) println bash.output - assert ! Files.exists(directory) -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is already installed and default$') { String candidate, String version -> - def candidateVersion = prepareCandidateFolder("$openapphackDir", candidate, version) - def currentLink = FileSystems.default.getPath("$openapphackDir/$candidate/current") - Files.createSymbolicLink currentLink, candidateVersion -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is the default$') { String candidate, String version -> - def localVersion = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - def currentLink = FileSystems.default.getPath("$openapphackDir/$candidate/current") - Files.createSymbolicLink currentLink, localVersion -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is already installed but not default$') { String candidate, String version -> - prepareCandidateFolder "$openapphackDir", candidate, version -} - -And(~'^I do not have a "([^"]*)" candidate installed$') { String candidate -> - def candidateDir = FileSystems.default.getPath("${openapphackDir}/${candidate}") - assert ! candidateDir.toFile().listFiles() -} - -And(~'^the candidate "([^"]*)" does not exist$') { String candidate -> - def candidateDir = "${openapphackDir}/${candidate}" as File - candidateDir.deleteDir() - assert ! candidateDir.exists() -} - -And(~'^I have a local candidate "([^"]*)" version "([^"]*)" at "([^"]*)"$') { String candidate, String version, String directory -> - prepareLocalCandidateFolder directory, candidate, version -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is linked to "([^"]*)"$') { String candidate, String version, String directory -> - def fileSystem = FileSystems.default - - def versionLocation = "$openapphackDir/$candidate/$version" - def versionFolder = fileSystem.getPath(versionLocation) - - assert Files.isSymbolicLink(versionFolder) - - def link = Files.readSymbolicLink(versionFolder).toString() - assert link == directory -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is already linked to "([^"]*)"$') { String candidate, String version, String folder -> - def fileSystem = FileSystems.default - - def candidateFolder = "$openapphackDir/$candidate" as File - candidateFolder.mkdirs() - - def link = fileSystem.getPath("$openapphackDir/$candidate/$version") - def target = prepareLocalCandidateFolder(folder, candidate, version) - - Files.createSymbolicLink(link, target) -} - -And(~'^I have configured "([^"]*)" to "([^"]*)"$') { String configName, String flag -> - def configFile = new File("$openapphackDir/etc/config") - configFile.write "${configName}=${flag}" -} - -private prepareCandidateFolder(String baseDir, String candidate, String version) { - def directory = "$baseDir/$candidate/$version" - prepareCandidateBinFolder directory, candidate, version -} - -private prepareLocalCandidateFolder(String baseDir, String candidate, String version){ - prepareCandidateBinFolder baseDir, candidate, version -} - -private prepareCandidateBinFolder(String folder, String candidate, String version) { - def fileSystem = FileSystems.default - - def binFolderPath = fileSystem.getPath("$folder/bin") - Files.createDirectories binFolderPath - prepareCandidateExecutable binFolderPath, candidate, version - - return fileSystem.getPath("$folder") -} - -private prepareCandidateExecutable(Path binFolder, String candidate, String version) { - def candidateFile = new File("$binFolder/$candidate") - candidateFile.write "echo ${candidate.capitalize()} Version: ${version}" - candidateFile.executable = true -} \ No newline at end of file diff --git a/src/test/steps/openapphack/remote_candidate_steps.groovy b/src/test/steps/openapphack/remote_candidate_steps.groovy deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/steps/openapphack/selfupdate_steps.groovy b/src/test/steps/openapphack/selfupdate_steps.groovy deleted file mode 100644 index 4e90787..0000000 --- a/src/test/steps/openapphack/selfupdate_steps.groovy +++ /dev/null @@ -1,73 +0,0 @@ -package openapphack - -import static cucumber.api.groovy.EN.And - -And(~'^the configuration file has been primed with "([^"]*)"$') { String content -> - def configFile = "$openapphackDir/etc/config" as File - configFile << content -} - -And(~'^the configuration file has not been primed$') { -> - def configFile = "$openapphackDir/etc/config" as File - if (configFile.exists()) { - configFile.delete() - } -} - -And(~'^the configuration file is present$') { -> - def configFile = "$openapphackDir/etc/config" as File - assert configFile.exists() -} - -And(~'^the configuration file contains "([^"]*)"$') { String content -> - def configFile = "$openapphackDir/etc/config" as File - assert configFile.text.contains(content) -} - -And(~'^the configuration file does not contain "([^"]*)"$') { String content -> - def configFile = "$openapphackDir/etc/config" as File - assert !configFile.text.contains(content) -} - -And(~'^a configuration file in the extensions folder$') { -> - def configFile = "$openapphackDir/ext/config" as File - configFile.text = "" -} - -And(~'^the configuration is not present in the extensions folder$') { -> - def configFile = "$openapphackDir/ext/config" as File - assert !configFile.exists() -} - -And(~'^the configuration file is present in the etc folder$') { -> - def configFile = "$openapphackDir/etc/config" as File - assert configFile.exists() -} - -And(~'^the openapphack init script is placed in the bin folder$') { -> - assert new File("$openapphackDir/bin", "app-init.sh").exists() -} - -And(~'^the openapphack module scripts are placed in the src folder$') { -> - assert new File("$openapphackDir/src", "app-common.sh").exists() - assert new File("$openapphackDir/src", "app-main.sh").exists() - assert new File("$openapphackDir/src", "app-broadcast.sh").exists() - assert new File("$openapphackDir/src", "app-current.sh").exists() - assert new File("$openapphackDir/src", "app-default.sh").exists() - assert new File("$openapphackDir/src", "app-install.sh").exists() - assert new File("$openapphackDir/src", "app-list.sh").exists() - assert new File("$openapphackDir/src", "app-selfupdate.sh").exists() - assert new File("$openapphackDir/src", "app-uninstall.sh").exists() - assert new File("$openapphackDir/src", "app-use.sh").exists() - assert new File("$openapphackDir/src", "app-version.sh").exists() - assert new File("$openapphackDir/src", "app-help.sh").exists() -} - -And(~'^the staging folder is cleaned up$') { -> - assert !new File("$openapphackDir/tmp/stage").exists() -} - -And(~'^an empty configuration file$') { -> - def configFile = "$openapphackDir/ext/config" as File - configFile.text = "" -} \ No newline at end of file diff --git a/src/test/steps/openapphack/stub_steps.groovy b/src/test/steps/openapphack/stub_steps.groovy deleted file mode 100644 index b35cf47..0000000 --- a/src/test/steps/openapphack/stub_steps.groovy +++ /dev/null @@ -1,32 +0,0 @@ -import static cucumber.api.groovy.EN.And -import static openapphack.stubs.WebServiceStub.* - -And(~'^the default "([^"]*)" candidate is "([^"]*)"$') { String candidate, String version -> - primeEndpoint("/candidates/${candidate}/default", version) - primeDownloadFor(SERVICE_UP_URL, candidate, version) -} - -And(~'^an available selfupdate$') { -> - primeEndpoint("/selfupdate", 'echo "Successfully upgraded OpenAppHack CLI."') -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is available for download$') { String candidate, String version -> - primeEndpoint("/candidates/${candidate}/${version}", "valid") - primeDownloadFor(SERVICE_UP_URL, candidate, version) -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is not available for download$') { String candidate, String version -> - primeEndpoint("/candidates/${candidate}/${version}", "invalid") -} - -And(~'^a "([^"]*)" list view is available for consumption$') { String candidate -> - primeEndpoint("/candidates/${candidate}/list?platform=Linux¤t=&installed=", "Available ${candidate.capitalize()} Versions") -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is a valid candidate version$') { String candidate, String version -> - primeEndpoint("/candidates/${candidate}/${version}", "valid") -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is not a valid candidate version$') { String candidate, String version -> - primeEndpoint("/candidates/${candidate}/${version}", "invalid") -} \ No newline at end of file diff --git a/src/test/steps/openapphack/use_steps.groovy b/src/test/steps/openapphack/use_steps.groovy deleted file mode 100644 index 218b1bb..0000000 --- a/src/test/steps/openapphack/use_steps.groovy +++ /dev/null @@ -1,45 +0,0 @@ -package openapphack - -import java.nio.file.* - -import static cucumber.api.groovy.EN.* - -And(~'^the candidate "([^"]*)" version "([^"]*)" is in use$') { String candidate, String version -> - def directory = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - def current = FileSystems.default.getPath("$openapphackDir/$candidate/current") - def symlinkFile = current.toFile() - if(!symlinkFile.exists()){ - assert Files.createSymbolicLink(current, directory) - } -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" is not in use$') { String candidate, String version -> - def directory = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - def current = FileSystems.default.getPath("$openapphackDir/$candidate/current") - def symlinkFile = current.toFile() - if(symlinkFile.exists()){ - assert ! Files.isSameFile(current, directory) - } -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" should be in use$') { String candidate, String version -> - bash.execute("$candidate --version") - assert bash.output.contains(version) -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" should be the default$') { String candidate, String version -> - def directory = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - def current = FileSystems.default.getPath("$openapphackDir/$candidate/current") - assert Files.isSameFile(current, directory) -} - -And(~'^the candidate "([^"]*)" version "([^"]*)" should not be the default$') { String candidate, String version -> - def directory = FileSystems.default.getPath("$openapphackDir/$candidate/$version") - def current = FileSystems.default.getPath("$openapphackDir/$candidate/current") - assert (!Files.isSymbolicLink(current) || (Files.isSymbolicLink(current) && !Files.isSameFile(current, directory))) -} - -And(~'^the candidate "([^"]*)" is no longer selected$') { String candidate -> - def symlink = new File("$openapphackDir/$candidate/current") - assert ! symlink.exists() -} diff --git a/test/testapp.sh b/test/testapp.sh new file mode 100755 index 0000000..9dd7340 --- /dev/null +++ b/test/testapp.sh @@ -0,0 +1 @@ +echo ${0%/*/*/*} diff --git a/tools/generators b/tools/generators new file mode 160000 index 0000000..7d81526 --- /dev/null +++ b/tools/generators @@ -0,0 +1 @@ +Subproject commit 7d81526cf38e1bed69aa1334c4f0b4ea84b20b1e From 9c0c0ff9f714e4c34c2ce9ef61fc22666798cca9 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 16 Jun 2016 01:47:08 +0530 Subject: [PATCH 31/34] added oah scripts --- shell | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell b/shell index b146653..4e32478 160000 --- a/shell +++ b/shell @@ -1 +1 @@ -Subproject commit b14665325fc733f4a3a6aebfa2cb97d981ea3ccf +Subproject commit 4e324786b9090008f0633fd8b8df1dca4c4cc583 From 7f2e0e5772513625f119dd03a0e0204126e0dec3 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Thu, 16 Jun 2016 12:01:44 +0530 Subject: [PATCH 32/34] Rename openapphack_project_submission_template.md to openapphack_repo_submission_template.md --- ...mission_template.md => openapphack_repo_submission_template.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openapphack_project_submission_template.md => openapphack_repo_submission_template.md (100%) diff --git a/openapphack_project_submission_template.md b/openapphack_repo_submission_template.md similarity index 100% rename from openapphack_project_submission_template.md rename to openapphack_repo_submission_template.md From 78b70c8f6106e2d7b5e828ba0f282af9be70aec2 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Sat, 25 Jun 2016 01:37:01 +0530 Subject: [PATCH 33/34] updated design --- docs/design.md | 109 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 102 insertions(+), 7 deletions(-) diff --git a/docs/design.md b/docs/design.md index 3c40eb5..fc2ae6c 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,23 +1,118 @@ # Design principles -- All design decisions will be favouring Circular Economy and open source -- All VM/Cluster will be optimized for RPIs and custer of small vms. -- Fine tune group of roles,vms for a specific operating system -- High availability configuration for clusters. -- Adherance to folder structure of oah-vms, oah-cluster and oah-roles +- Simplify using a provisioning tool +- Standardize roles for install speed +- Preference will be given to a single OS per role. +- All VM/Cluster will be optimized for RPIs +- Tuned each vm to run with least resource requirement. +- High availability configuration must for clusters. +- Adhere to folder structure of oah-vms, oah-cluster and oah-roles +- Should be easy to get off the island , never get stuck with a framework or provisioning tools -# VM Specifications +# oah shell + +- The oah shell when installed will enable executing the oah command on the shell prompt + + +## oah shell Commands on host + +oah help + +oah version + +oah install {vm_name/cluster_name} + +oah reset + +oah remove + +oah up + +oah down + +oah provision + +oah status + +oah list {roles,vms,cluster} + +oah show {roles} + + +## oah shell Commands on client + +oah version + +oah help + +oah list + +oah show {roles} + +oah reset +oah validate + +## oah shell tools Commands + +oah generate-role {role_name} + +oah generate-vm {vm_name} + +oah generate-cluster {cluster_name} + +oah generate-launcher-plugin {plugin_name} + +### oah config Commands + +oah config set-oah-engine {ansible| any_other_oah_engine_name} + +oah config set-oah-playbook-executor {ansible-playbook| any_other_playbook_executor_name} + +oah config set-oah-roles-downloader {ansible-galaxy | any_other_roles_downloader_name} + +oah config set-oah-generator { yo | any_other_code_generator_name } + +# OAH role Specifications Layout : Files : +Default Configurations: + +# VM Specifications + + +Layout for oah-vms: + +openapphack-xxxx-vm // root folder of VM + - README.md + - oah-config.yml + - provisioning // folder with all playbook + - oah-main.yml // default playbook + - oah-install.yml + - oah-reset.yml + - oah-remove.yml + - oah-requirements.yml + - host // folder to run the vm on host + - vagrant // provisioner is set to vagrant + - vagrantfile + - docker // provisioner is set to docker + - dockerfile + - runc // provisioner is set to runc + - runcfile + +Files : + + Default Configurations : +- oah-config.yml + # Cluster Specifications -Layout : +Layout for oah-clusters: Files : From 9ad4b8d8d2e2a9b0c090698f5ed79cd1a51df0a9 Mon Sep 17 00:00:00 2001 From: Vinod Panicker Date: Mon, 25 Jul 2016 16:13:51 +0530 Subject: [PATCH 34/34] Update TODO.md --- TODO.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODO.md b/TODO.md index 2e0dd55..ab23e32 100644 --- a/TODO.md +++ b/TODO.md @@ -1,2 +1,5 @@ Refactoring TODOs + a) Refactor openapphack as a toplevel ansible project , that is also an ansible role to install openapphack depending on where openapphack is being installed + +