From 35e6f44cc6bb459ef89ccf537245aa3479d99f8e Mon Sep 17 00:00:00 2001 From: Pavel Kirilin <win10@list.ru> Date: Wed, 10 Jun 2020 21:00:16 +0400 Subject: [PATCH] Second task update. Signed-off-by: Pavel Kirilin <win10@list.ru> --- README.md | 5 +- p.kirilin/Makefile | 43 +++ p.kirilin/README.md | 193 +++++++++++- p.kirilin/images/asg-architecture.png | Bin 0 -> 51489 bytes p.kirilin/images/asg-meme.png | Bin 0 -> 20350 bytes p.kirilin/images/ec2-logging-meme.jpg | Bin 0 -> 91142 bytes p.kirilin/lambda_models/.gitignore | 3 + .../lambdas => }/lambda_models/Cargo.toml | 18 ++ .../src/data_examples/weather_data_input.json | 0 .../data_examples/weather_data_output.json | 0 .../lambdas => }/lambda_models/src/lib.rs | 0 .../lambdas => }/lambda_models/src/locator.rs | 0 .../lambda_models/src/weather_data_input.rs | 0 .../lambda_models/src/weather_data_output.rs | 37 ++- p.kirilin/task.1/aws_services/fire_lambda.tf | 15 +- p.kirilin/task.1/aws_services/firehose.tf | 2 +- p.kirilin/task.1/aws_services/s3.tf | 5 +- p.kirilin/task.1/aws_services/sns_lambda.tf | 14 +- p.kirilin/task.1/aws_services/variables.tf | 14 + p.kirilin/task.1/build.sh | 5 + p.kirilin/task.1/fire_publisher/Cargo.toml | 2 +- p.kirilin/task.1/fire_publisher/Makefile | 4 + p.kirilin/task.1/fire_publisher/src/main.rs | 10 +- p.kirilin/task.1/instance.tf | 3 + .../firehose_lambda_function/Cargo.toml | 4 +- .../src/processors.rs | 45 ++- .../lambdas/sns_lambda_function/Cargo.toml | 4 +- .../lambdas/sns_lambda_function/Makefile | 2 + .../sns_lambda_function/src/processors.rs | 27 +- p.kirilin/task.1/variables.tf | 5 + p.kirilin/task.2/.gitignore | 4 + p.kirilin/task.2/applications/.gitignore | 3 + .../applications/ec2_sqs_listener/Cargo.toml | 71 +++++ .../applications/ec2_sqs_listener/Makefile | 32 ++ .../applications/ec2_sqs_listener/src/main.rs | 55 ++++ .../ec2_sqs_listener/src/processor.rs | 286 ++++++++++++++++++ .../s3_lambda_function/Cargo.toml | 43 +++ .../applications/s3_lambda_function/Makefile | 32 ++ .../s3_lambda_function/src/main.rs | 31 ++ .../s3_lambda_function/src/processors.rs | 61 ++++ p.kirilin/task.2/aws_services/asg.tf | 105 +++++++ p.kirilin/task.2/aws_services/cloudwatch.tf | 50 +++ p.kirilin/task.2/aws_services/ec2.tf | 118 ++++++++ .../task.2/aws_services/lambda_for_s3.tf | 82 +++++ p.kirilin/task.2/aws_services/s3_for_asg.tf | 11 + .../task.2/aws_services/s3_weather_bucket.tf | 17 ++ p.kirilin/task.2/aws_services/sns.tf | 3 + p.kirilin/task.2/aws_services/sqs.tf | 34 +++ .../aws_services/utils/asg_user_data.sh | 19 ++ p.kirilin/task.2/aws_services/variables.tf | 52 ++++ p.kirilin/task.2/build.sh | 73 +++++ p.kirilin/task.2/instance.tf | 16 + p.kirilin/task.2/variables.tf | 29 ++ 53 files changed, 1629 insertions(+), 58 deletions(-) create mode 100644 p.kirilin/Makefile create mode 100644 p.kirilin/images/asg-architecture.png create mode 100644 p.kirilin/images/asg-meme.png create mode 100644 p.kirilin/images/ec2-logging-meme.jpg create mode 100644 p.kirilin/lambda_models/.gitignore rename p.kirilin/{task.1/lambdas => }/lambda_models/Cargo.toml (61%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/data_examples/weather_data_input.json (100%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/data_examples/weather_data_output.json (100%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/lib.rs (100%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/locator.rs (100%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/weather_data_input.rs (100%) rename p.kirilin/{task.1/lambdas => }/lambda_models/src/weather_data_output.rs (54%) create mode 100644 p.kirilin/task.2/.gitignore create mode 100644 p.kirilin/task.2/applications/.gitignore create mode 100644 p.kirilin/task.2/applications/ec2_sqs_listener/Cargo.toml create mode 100644 p.kirilin/task.2/applications/ec2_sqs_listener/Makefile create mode 100644 p.kirilin/task.2/applications/ec2_sqs_listener/src/main.rs create mode 100644 p.kirilin/task.2/applications/ec2_sqs_listener/src/processor.rs create mode 100644 p.kirilin/task.2/applications/s3_lambda_function/Cargo.toml create mode 100644 p.kirilin/task.2/applications/s3_lambda_function/Makefile create mode 100644 p.kirilin/task.2/applications/s3_lambda_function/src/main.rs create mode 100644 p.kirilin/task.2/applications/s3_lambda_function/src/processors.rs create mode 100644 p.kirilin/task.2/aws_services/asg.tf create mode 100644 p.kirilin/task.2/aws_services/cloudwatch.tf create mode 100644 p.kirilin/task.2/aws_services/ec2.tf create mode 100644 p.kirilin/task.2/aws_services/lambda_for_s3.tf create mode 100644 p.kirilin/task.2/aws_services/s3_for_asg.tf create mode 100644 p.kirilin/task.2/aws_services/s3_weather_bucket.tf create mode 100644 p.kirilin/task.2/aws_services/sns.tf create mode 100644 p.kirilin/task.2/aws_services/sqs.tf create mode 100644 p.kirilin/task.2/aws_services/utils/asg_user_data.sh create mode 100644 p.kirilin/task.2/aws_services/variables.tf create mode 100644 p.kirilin/task.2/build.sh create mode 100644 p.kirilin/task.2/instance.tf create mode 100644 p.kirilin/task.2/variables.tf diff --git a/README.md b/README.md index 56453fd..ca2eb31 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# Изучение AWS -Ð’Ñе материалы Ð´Ð»Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ñкать в вики проекта. +# study + +Useful materials for the "Study AWS" group \ No newline at end of file diff --git a/p.kirilin/Makefile b/p.kirilin/Makefile new file mode 100644 index 0000000..2db0855 --- /dev/null +++ b/p.kirilin/Makefile @@ -0,0 +1,43 @@ +TASK1_PATH=./task.1/ +TASK2_PATH=./task.2/ +S3_BUCKET_NAME=s3rius-weather-bucket + +# Build infrastructure for task1. +task1: + cd "${TASK1_PATH}"; \ + sh build.sh "${S3_BUCKET_NAME}" + +# Destroy all infrastructure from task.1. +task1_destroy: + cd "${TASK1_PATH}"; \ + terraform destroy + +# Build infrastructure for task2. +task2: + cd "${TASK2_PATH}"; \ + sh build.sh "${S3_BUCKET_NAME}" + +task2_import: + cd "${TASK2_PATH}"; \ + terraform import module.services.aws_s3_bucket.s3_weather_bucket "${S3_BUCKET_NAME}" + +# Deploy infrastructures from first and second tasks. +task2_full: task1 task2_import task2 + +# Destroy second task infrastructure +task2_destroy: + cd "${TASK2_PATH}"; \ + terraform destroy + +# Generate and publish messages to Kinesis Firehose. +firehose_publish: +ifdef num + cd "${TASK1_PATH}/fire_publisher"; \ + make num=${num} +else + cd "${TASK1_PATH}/fire_publisher"; \ + make +endif + +# Destroy all +destroy: task1_destroy task2_destroy diff --git a/p.kirilin/README.md b/p.kirilin/README.md index f4f111d..eea2aaf 100644 --- a/p.kirilin/README.md +++ b/p.kirilin/README.md @@ -73,6 +73,16 @@ Триггер не указываетÑÑ Ð² Lambda </a> </li> + <li> + <a href="#не-могу-переиÑпользовать-бакет-s3"> + Ðе могу переиÑпользовать бакет S3 + </a> + </li> + <li> + <a href="#что-то-Ñ-не-понÑл-а-как-работать-Ñ-asg-и-ec2"> + Что-то Ñ Ð½Ðµ понÑл, как работать Ñ Auto scaling group и решать задачи + </a> + </li> </ul> </li> <li> @@ -150,7 +160,7 @@ pub async fn process(e: CustomEvent) -> Result<CustomOutput, LambdaError> { Ðто потребуетÑÑ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñторонних ÑервиÑов Ðмазона в лÑмбдах. ## Rust as Lambda -Ðемного о раÑте как Ñ€ Ñреде Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка лÑмбд в AWS. +Ðемного о раÑте как о Ñреде Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка лÑмбд в AWS. РаÑÑ‚ ÑвлÑетÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¼ Ñзыком и реального рантайма под него в AWS нет, и именно поÑтому нужно иÑпользовать рантайм [Provided](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html); @@ -225,7 +235,7 @@ path = "src/main.rs" Ð”Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð½ÑƒÐ¶Ð½Ñ‹ права на запуÑк лÑмбды, выгрузку логов и возможноÑть запиÑи в s3. Вот конфигурациÑ: -```hcl-terraform +```terraform data "aws_iam_policy_document" "fire_extra_policy_doc" { # allow to write logs statement { @@ -259,7 +269,6 @@ data "aws_iam_policy_document" "fire_extra_policy_doc" { statement { effect = "Allow" actions = [ - "sts:AssumeRole", "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ] @@ -272,7 +281,7 @@ data "aws_iam_policy_document" "fire_extra_policy_doc" { Потом Ñледует приатачить права к вашей ÑущеÑтвующей роли firehose. -```hcl-terraform +```terraform resource "aws_iam_policy" "firehose_extra_policy" { name = "firehose-extra-permissions-policy" policy = data.aws_iam_policy_document.fire_extra_policy_doc.json @@ -307,12 +316,11 @@ resource "aws_iam_role_policy_attachment" "firehose_iam_role_policy_attachment" ### Где хранить policy и roles? Так как terraform ÑвлÑетÑÑ Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾ Ñвободной, в плане конфигурации, штукой то роли, да и вообще любые куÑки инфраÑтруктуры, можно хранить как угодно. Я пришел к тому, что хранить в одном файле роли, их полиÑи_доки и Ñами объекты инфраÑтруктуры, где Ñти полиÑи и -роли применÑÑŽÑ‚ÑÑ ÐºÑƒÐ´Ð° удобнее, чем отдельный модуль Ñ Ð¿Ð¾Ð»Ð¸Ñи и отдельный Ñ Ñ€Ð¾Ð»Ñми. +роли применÑÑŽÑ‚ÑÑ ÐºÑƒÐ´Ð° удобнее, чем отдельный модуль Ñ Ð¿Ð¾Ð»Ð¸Ñи и отдельный Ñ Ñ€Ð¾Ð»Ñми. За Ñто озарение ÑпаÑибо [Peter Zinin](skype:live:8422?chat). -С одной Ñтороны Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ñвобода в напиÑании проекта Ñто удобно. Ðо когда проект разраÑтаетÑÑ, то без должной Ñтруктуры проект превразатÑÑ Ð² кашу. +С одной Ñтороны Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ñвобода в напиÑании проекта Ñто удобно. Ðо когда проект разраÑтаетÑÑ, то без должной Ñтруктуры проект превращаетÑÑ Ð² кашу. -Чтобы Ñтого избежать лучше вÑего логичеÑки разделÑть отдельные чаÑти инфраÑтруктуры и пиÑать в отдельных файлах вÑÑ‘ необходимое именно -Ð´Ð»Ñ Ñтого Ñлемента, таким образом, чтобы они не завиÑили друг от друга. +Чтобы Ñтого избежать, лучше вÑего логичеÑки разделÑть отдельные чаÑти инфраÑтруктуры и пиÑать в отдельных файлах вÑÑ‘ необходимое Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ Ñлемента, таким образом, чтобы минимизировать линки между файлами. Как по мне, так пиÑать в одном файле вообще не Ð»ÑƒÑ‡ÑˆÐ°Ñ Ð·Ð°Ñ‚ÐµÑ, так что, даже еÑли проект небольшой, то лучше вÑÑ‘ равно разделÑть его на какие-то чаÑти. @@ -322,7 +330,7 @@ resource "aws_iam_role_policy_attachment" "firehose_iam_role_policy_attachment" Хоть и показано, что `SQS` привÑзан к топику `SNS` требуетÑÑ Ð²Ñ‹Ð´Ð°Ñ‡Ð° определенных прав. Добавьте в конфигурацию террафаорм Ñледующее: -```hcl-terraform +```terraform # Добавление прав публикации к очереди. resource "aws_sqs_queue_policy" "sqs_publish_policy" { @@ -363,7 +371,7 @@ data "aws_iam_policy_document" "sqs_send_message_policy_doc" { Попробуйте поменÑть `aws_iam_policy_document`, Ñодержащий `actions: [lambda:InvokeFunction]` на Ñледующий куÑок кода: -```hcl-terraform +```terraform # ПодÑтавьте Ñюда Ñвои Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð»Ñмбды и топика. resource "aws_lambda_permission" "sns_allow_lambda_permission" { @@ -379,6 +387,171 @@ resource "aws_lambda_permission" "sns_allow_lambda_permission" { <img src="./images/lambda_sns_trigger.png"> </div> +## Ðе могу переиÑпользовать бакет S3 + +Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвующего бакета s3 или любого другого объекта инфраÑтруктуры, перед +`terraform apply` Ñледует вручную обновить информацию о его ÑоÑтоÑнии в `terraform.tfstate`. +Ð”Ð»Ñ Ñтого выполните команду в терминале: +```bash +# Путь до объекта в terraform конфигах Уникальный идентификатор в aws. +terraform import module.services.aws_s3_bucket.bucket "bucket-name" +``` +Как импортировать другие объекты можно прочитать в доках терраформ в разделе Import. + +## Что-то Ñ Ð½Ðµ понÑл, а как работать Ñ ASG и EC2 +Auto scaling group штука довольно Ð½ÐµÐ¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ Ð¸ очень удобнаÑ, Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñтороны. C другой Ñтороны, имеет + некоторые моменты, которые Ñтоит проÑÑнить прежде чем работать Ñ Ð½Ð¸Ð¼. + +Давайте примерно разберем архитектуру ASG в данном проекте. +Ðа картинке ниже предÑтавлена архитектура ASG Ñо второго Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ допущениÑми, которые мы разберем позднее. +<div align="center"> + <img src="./images/asg-architecture.png"> +</div> + + ### Scale up and Scale down policies + + Ðачнем Ñ Ñ‚Ð¾Ð³Ð¾, что `Auto Scaling Group` не должен Ñам выбирать, когда добавлÑть новый `EC2 instance` и когда его оÑтанавливать, он проÑто умеен Ñто делать. Ð”Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑний нам потребуетÑÑ `CloudWatch` и его `Alarms`. Работают они крайне тупо, но Ñффективно. Ðа диаграмме Ñверху Ñ Ð¿Ð¾Ð¼ÐµÑ‚Ð¸Ð» ÑвÑзь между алармой и SQS как + `Observing metrics` потому что именно он будет нашим тригером. Ð’ данном Ñлучае `CloudWatch` через некоторые промежутки времени запращивает у `SQS` какие-нибудь метрики и передает их в Ñвои алармы. Ð˜Ð´ÐµÑ Ð² том, что у `Alarm` еÑть некоторый триггер и дейÑтвие, которое произойдет, когда уÑловие тригера Ñработает. + + Вот пример конфигурации Alarm отноÑительно количеÑтва Ñообщений в SQS: + ```terraform + resource "aws_cloudwatch_metric_alarm" "sqs-asg-metric-alarm" { + alarm_name = "SQS-message-alarm" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = "1" + metric_name = "ApproximateNumberOfMessagesVisible" + namespace = "AWS/SQS" + period = "60" + statistic = "SampleCount" + threshold = "5" + + dimensions = { + QueueName = aws_sqs_queue.s3rius_sqs_queue.name + } + + alarm_description = "This metric monitors SQS messages and fire ec2 from asg" + alarm_actions = [ + aws_autoscaling_policy.scale_up_policy.arn + ] + } + ``` + + ЕÑли одновременно в очереди виÑит больше 5 Ñообщений то вызываетÑÑ `aws_autoscaling_policy.scale_up_policy`, где опиÑано Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ инÑтанÑа. + Также в проекте еÑть второй `aws_autoscaling_policy`, который дропает `EC2`, когда инÑÑ‚Ð°Ð½Ñ 4 минуты подрÑд + проÑтаивает Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¾Ð¹ CPU ниже 5%. + <div align="center"> + <img src="./images/asg-meme.png"> + </div> + Замечу, что `action` у аларма - Ñто проÑто arn какого-нибудь aws_autoscaling_policy. Ð’ данном Ñлучае полиÑи проÑто триггернетÑÑ Ð¸ Ñам решит что делать. Вообще в alarm можно вÑтраивать не только тупые Ñтандартные проверочки, но и целые вычиÑлениÑ. + + ### Я поднимаю EC2, а как обрабатывать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ SQS? + Очень проÑто. Сам EC2 - Ñто проÑто мелкий Ñервер, который работает как твой локальный комп. У него еÑть user-commands, которые выполнÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ запуÑке. ПроÑто прокинь туда запуÑк Ñвоего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° любом Ñзыке, которое будет Ñлушать SQS и обрабатывать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² вечном лупе. ЕÑли что, `AutoSclaingGroup` Ñам дропнет инÑтанÑ, который Ñлишком долго работает ничего не обрабатываÑ. + + Бтв, еÑли не наÑтроил `AutoScalingPolicies`, риÑкуешь влететь на монетки. Ðе очень большие, но вÑÑ‘ равно не очень приÑтно. Также замечу, что беÑплатный тип инÑтанÑа `EC2` - Ñто `t2.micro`, а **ÐЕ** `t2.nano`. + + ### Я понÑл, как пиÑать user-commands, а как загрузить приложение на EC2? + Скомпиль локально или проÑто заверни в zip-файл и через `terraform` загрузи в какой-нибудь `s3-bucket`. + Вот пример такой загрузки: + ```terraform + // bucket - ведро, куда подгрузить файл приложениÑ; + // key - путь в s3 до файла; + // source - путь до локального файла. + resource "aws_s3_bucket_object" "application_data" { + bucket = aws_s3_bucket.asg_meta_bucket.bucket + key = var.ec2_application_s3_key + source = var.ec2_application_bin + } + ``` + ПоÑле Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ñ€Ð°Ñтруктуры у Ñ‚ÐµÐ±Ñ Ð±ÑƒÐ´ÐµÑ‚ объект в s3-bucket Ñ Ñамого начала. Ðикакой ручной загрузки. + Рв Ñамом инÑтанÑе внутри user-command Ñкачай файл через aws-cli и разархивируй его. + ```bash + aws s3 cp "s3://${meta_bucket}/${application_key}" "application.zip" + unzip application.zip + ``` + Рвот дальше запуÑкай как знаешь. + + ### Я разархиаировал приложение, но Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка мне нужны Ñторонние тулы/Ñзыки, которых нет + EC2 - Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ `unix`'Ð¾Ð²Ð°Ñ Ð¼Ð°ÑˆÐ¸Ð½ÐºÐ°. Ру Ñтих ребÑÑ‚ еÑть пакетные менеджеры и прочие штуки, чтобы + удобно что-нибудь уÑтановить. У AmazonLinux, который ты, Ñкорее вÑего выбрал, Ñтоит yum (Ðто как у fedora, еÑли шаришь, еÑли нет, то зырк [Ñюды](https://habr.com/ru/post/301292/)). + + Рвот Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ `YUM` нужен выход в тырнетики, чтобы он мог вÑÑ‘ Ñкачать. Ð”Ð»Ñ Ñтого решений парочка. + Ðапример: + * Развернуть `VPC`; + * ÐаÑтроить `aws_internet_gateway` и подключить его к `VPC`. + * Создать `aws_subnet`, Ñ `cidr_block = "10.1.1.0/24"` + * Подрубить баланÑировщик и вÑе инÑтанÑÑ‹ к Ñтой Ñетке. + + Ðо Ñто охрененно Ñложно, как Ñ Ð´ÑƒÐ¼Ð°ÑŽ. ПоÑтому предлагаю вариант, который + почему-то не оÑвещаетÑÑ Ð½Ð° первых Ñтраницах гугла. (ЧертовÑки подозрительно, кÑтати); + + Создадим штуку, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ пуÑкать траффик куда угодно по любому порту. + в `aws_security_group` `egress` - Ñто иÑходÑщий траффик, `ingress` - входÑщий. + ```terraform + resource "aws_security_group" "outbound_traffic_security" { + name = "outbound-ec2" + + # Allow all outbound + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = [ + "0.0.0.0/0" + ] + } + + # Inbound HTTP from anywhere + ingress { + from_port = var.ec2_port + to_port = var.ec2_port + protocol = "tcp" + cidr_blocks = [ + "0.0.0.0/0" + ] + } +} +``` + +Рпотом в Ñвоем `aws_launch_configuration` добавь: +```terraform + security_groups = [ + aws_security_group.inbound_traffic_security.id, + aws_security_group.outbound_traffic_security.id + ] +``` + +Теперь можно Ñмело Ñкачивать хоть веÑÑŒ интернет. Ðо еÑли хочетÑÑ Ñ‡ÐµÐ³Ð¾-то конкретного поÑтавить. ИÑпользуй пакетный менеджер или `wget`. Ðапример так: +```bash +yum update -y +yum install <package> +``` +Чтоб узнать еÑть ли какой-нибудь пакет в `AmazonLinux` репозиториÑÑ… поÑмотри [полный ÑпиÑок доÑтупных пакетов](https://aws.amazon.com/ru/amazon-linux-ami/2018-03-packages/). + +### Как отправлÑть логи ec2 в CloudWatch? + <div align="center"> + <img src="./images/ec2-logging-meme.jpg"> + </div> + + Логгирование в stdout на ec2 не вариант, еÑли не знать как. Так-то вÑе логи пишутÑÑ Ð² systemlog, который можно почитать поÑле Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½ÑтанÑа. Ðо Ñто неудобно. ПоÑтому предлагаю наÑтроить user-command так, чтобы веÑÑŒ лог из stdout запиÑывалÑÑ Ð² каÑтомный файл. + ```bash + #!/bin/bash + LOG_FILE="/var/log/my_logs.log" + + function main() { + # Your awesome logic + } + +exec > >(tee "$LOG_FILE" | logger -t user-data -s 2>/dev/console) 2>&1 + echo "################# INSTANCE STARTUP #################" + main + ``` + Потом Ñпокойно подключаемÑÑ Ð¿Ð¾ ssh и в реальном времени читаем логи Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ: + ```bash + tail -f "/var/log/my_logs.log" + ``` + Также еÑть вариант подключить CloudWatch агента. С Ñтим Ñ Ð¾Ñобо не разбиралÑÑ, но еÑли интереÑно, то + [Ñмотреть Ñюда](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html). + # Три закона робототехники Ðйзека Ðзимова * Робот не может причинить вред человеку или Ñвоим бездейÑтвием допуÑтить, чтобы человеку был причинён вред. * Робот должен повиноватьÑÑ Ð²Ñем приказам, которые даёт человек, кроме тех Ñлучаев, когда Ñти приказы противоречат Первому Закону. diff --git a/p.kirilin/images/asg-architecture.png b/p.kirilin/images/asg-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..740a184e699d08f189c84de92956a484d2f91c65 GIT binary patch literal 51489 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�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 YUbug?><Jqw3jR@&SG!&$XBPN>01BGt2mk;8 literal 0 HcmV?d00001 diff --git a/p.kirilin/images/asg-meme.png b/p.kirilin/images/asg-meme.png new file mode 100644 index 0000000000000000000000000000000000000000..85a717b08d3f5f3d3c6d5f82dbd2f6c069e07e04 GIT binary patch literal 20350 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 literal 0 HcmV?d00001 diff --git a/p.kirilin/images/ec2-logging-meme.jpg b/p.kirilin/images/ec2-logging-meme.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e45f3429c7c04ef4f3209496edc19832acc7e384 GIT binary patch literal 91142 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%0DC&SjEn~f8;8ianGcFDJ{si}&Mp|7$ z>IefU(kfx)M&|Ie9$v`eZ<Z|&z<=Oa2J_bk$UCB~>Hp$1=H|sR=R6l6V2EMYo^dF` zSQA~cuQt=>*CLw7bxyGth~cO_u1}lk^5Iviu<SNBZiiXt9Ic>5SKs9y`S}-0Xd_g+ zVrK+=b`>S4nO--KP#q*UILlL_Getln1n=XmgaHA?G2q6}9(w0_i$4w73fxy#X(~;B z;5`kjeZP~bLxCg{q{N{weFtzCfftimR?xZ8dY!-IcpPd*FZjca)Y-WzpLLwdNO`#@ z8yt{jSmhA%btCfYcbjF+<viW%?8xB^i*rrR`m-<06E++L(`&vZ#_cz;4g%F?fud4x zni_-04N)s^Xf`9owZ1%-+qEMldaYw6jIy0gTqji8%#Y98TaneRy45Y9)_&Iu%e9NA zZ1_wSz#hhtO><E>MjUcU?NyBkaUR&ELmuu|Cc*~YaTG6JC#n{c20{SV{$ht^pU3HV z_bV(L2~KtsWm&>dNQ7U0A>!nVC<cuB5*`Nc6Wj7tjNIf|H-!En$d<MODW_@w#}f-h zy%Q1sbnaDJNjz6kkD-Z9paJf))g`>(n@r=9O2=d3LS)I@txF86luGf4bD1|%7O_ho zAkR|hA;QbE!ymY#yYq-wF8;WB0&pVzfOxWAiRRbpizB^<seT=+)OviC|s$yiQ7 zz4sO&2+Vg)btjD)@=48k_=Xu%qNShypiQt<!RQG(t7CGw!edsLigf5OYS8ZXE#=FP zI9vwi&?eaxluw(=PpL#<Pf;aAsgL0SuUu5E-O(@j<KJsCD^&yHrqS!8hz-=n#0bmx zJI7{#Gh8;tUo*cFtjq6(M7-piav!}E!iJ`&Z>M`y7C*Kxi!+khOTG?7je11st;9$X zb<5Y6VJ+|t^TKbhcU3Ji2YPg~A>HM!CEPf3m_68PXnWz(Pu(RbzymZR?8@oG&qO0m zPIEoAu~$R;cUFAU6$``Ah0_*(=~@=d(-IvmN7fS~B)5ZTBST{SM35<#g2-GiL~SKh zL*V4oy<@%CXh|c+X})o88@q<hZVLj0Cp41>Yb;wQfLIbX%*OgQHy8lxfGg^@OBCiG zyyYXQOOgPc13lR&IX+RqMX>4>&3CH<rW=bb(u+adQjo85c9o<k?aCERW<!gO@S9z7 zSOZjW3wV)l4EBhYqPT!iQK~B+gRff17Ux1`a^Yz4iGus+m41mfwphnY09jR3Eg4mj zrdfuDDJrfm>bdBq9KFu4xTB!U+d22#(27!^d%DxENv1#I*j8{9?XhS=o;r5a=y|{F zkST+ZwW1E`$us=X1ML#zkRDShrea8M3+u5vJ!d}ZA9tS5mO7$@sNG3XEGnj{o{dE& zr(WT+K6!|h7Y}6r5ub~zh%<#3glr)dT^qH<_9cu9RkejUiFJ-Zx9E~jG_sBdHNSVW z{PI;$f6GgqxEv9jO_bVucIpm#a>vUeF!VroOxDoiKI5OTfc_6A&kAvIoVgwt&=746 z0<sEKX&mJO3wT|U>!zT29T@bY*bvX;3Y()I2XZE<4}zk2L~Z97L~TbuSiiKFm&62+ zT6j_`dIiC20b@OO+K1L8nUn#-nI?;pH8b_Dt=C=;1uKSW-7*LZbNdBbZ{EAKxLAT@ z_}I-FI3?T4Q5TN*O29xiw@+nd(0hoxYP|jPTx@#ygKJWAx6qfG|Mas&mWYgr)+*o^ zSyli^es@=oi9-uV2}2X=kD|`A$E$2kBCTx%AdJdshn4u4FVmWa-;nvdf+NWIH@8$* z`De#Db#%m0vOD{P@UJWLpRE*mMjw=FVwu45nidb)OtgI_0mV4dGj>c2!YAfpTs#1O z7~fg`N)*<+B=xWXViP(sf4-d!-;ML4dq>wuhIz*5NfE}9ExM7%bqa-a&}`G3AtFmj zD@C35kN+~uPIGDO&=beW%9?nl?52O{A~k9;YK13sgL<uxzLH`9YR5M0N-v5gsl&5f zuCEhar8DNhZL-hb9kw;&Ynf@e@?8;F(^YX>zbZM0HRd7NFx63#SuxjS`#O<yIk_Cx z9jSMy3GwJjbxmm1tE4tvoAIom;{&<+gM+1ja&V+GG{Oko^u&g4xO)a`UYgsgGBuIm zoJ$FC&faL1;%i~nT&6M!C?xq7MF6{MQh0roI#_*NFk<8^37>&xzVPDIdiJ4mv9T17 zy(o$VXI@plnM%2!IaT?fCUpi@1zlbg973!9FI`rIo%61P8aC&f@(7;?iK@Ijx_LwL zU<>=`W6P4eh~%4xr3axeH?vLn5<wi#ZTwj2JZ;$xoSp{vNolJD<y#P|1sm_iW`U@( z3L;oA!RV4e6q9j9i>p4`$$<(c-i;S>SyGoju!mRKF)1Kmq5t)!Z9Mid*5L=B!~zJZ zK9$#UTYVC;WdmyxGhsW?j~*x}$fH(*#47VHvSxUW&to*Pw<mNC=FweIbX1i`;o(6K zXKd<HDiUm?J%Tm*9>ia5hFfD=a$*2kkW3oPes`Z%tziGl)9z4P?v3IOO8F1sD$1U8 zJ^F&NFPhUP;wz<EPdrBT0f<VJr2#Hm3p&c}t+TCLf0UEp1chYtY>?S#P>8!N<)<@2 zU)vQPL2z_K%28O8x=_Bdf`6e*xh^R3IOd(+oe;bI%WMs7>9v&IAjzqgJi{E{;az-M zM}6+$H;m%!nQ^fCT<}{nnpw;F=v)}KMGVoGzbrYdS=}E%vY1?{_5qJ^X6Gjt`BuCf z*KkH>uPp_JZF5UP6w4f}=DGZTY?+<TY?u{meJn_|%U8yovzJ0eT{P(z9u(x3KGnd@ zq=ZCx2z>E>DhpU`oj5O3@?SUG>?5}^3034X{9~M>6T6g^)Wi>#B$xVy&rwMvk4Gpv zOug;$jSXne-S!#2Ka{vNpI7fYT$OU|;EU$zo|znNF*e6qgkGHB8CALyngiv5_}LcY zDB<lEWM6gxKbsd0ydk!R{!0TQ#1uR_gs6CoRi5^6O983SIsGz%j0(+Jvxn|EDw-ty zmOY+ro*L~y-FQN+Q>7qw$>S|flwWA`L5>c(3XEmGpf1vS2i>BlOH^t9c%@8!WB3TW z8TV4+2kf?a0WwlVFK}v+so|GJ!;vi3<`2Zg@)s@52NfwVQk&W;_omrcVF$M5Q163X zZYS?;?*7wq#%7!TMZxOa(=c)eyj2hPGZ}`dkt}ZvtHk0+#&+2eU@2*<;OaEu01vBq zY;<t|UvpniTyc9#L4o?NhYVZW;2EC#19p}7r9wr?7T14tl9sDr8pDRt%h8+@Ih1tZ z93loT5HER3aM~dCMo?o8`JSyDzuH$wc+zMw^sEJ;+4EfSCscci<_Bel7=frW_SQAO zS=ITd-8S-Si41-%X<j&882pcXgs|aKzU6FqT|AN1sd%5e;bp<^>L9X6?ck|pzGPor zj;DP%1zW8Ho<t`G@@dBi-Lu~%j-YjX-^_A^Rz46m&w8;O<>Vxc;P{R>-7#fPp3N_& z<~$T9bKM#$NSmrNA1QD3+>8vJwRZ_C8ha(DPXIqzLdB>_ow2}*0TZm43$B9$tj8iT z%Xj^M6pK)sFYIv`vRPyhEzIkZ)1J9Y_U21Yh$=a?F8OyOxJdmuiSw89FBbit((vFJ zV=UGE=2hGFjmUse@~qs@pk|S5mR3`;rVkp9ajxwvET;^MHor9SVif<&5ZuBw!THRD zify4Msd4%Wi=uIvqjj3M6xw>{Tb<_?TUCF0#S%MMoD8;m)wTK+mGr0_tR16LCP0c5 z8fsT{z4Yv{_wk>)D`ASD7OvLAviixIP-w!dTmuEDsv)_N=k)XtT)lK<YR3RVYS|7h z7!{#w=i!jF+amBX2uFt7K$}8g8I@c!JD|>B{GQQN>QxHSaeG7y!0=p3Wl2NK^O`GY z%6DYWU3ht$zh83MOtFW(1g6*g=+FX4Lly~#geO=O0qNfIk|SYIBp8)5+8;(6gs%8L zO<zl+yBbHEm(5R$jJb)obGsj2<|J+bi@E}%J<%O3M8CLX(n0l>7a@O2d_<HEsFE{P zm7F1|Io$B0#TVr^o`SH`_$n$)`J`uQJDfJA<9F3jC4bnM;m#!cI35*9?MsgPJLCE& zRZg20mfBh`u`%epMwgw8(ey|8s+qpYhbHn(4AmMf16&H6Fk50<^m??TR~pbUIJ+BL zHQfEeofAVI;wP|<sjirK1@IV^4X`Rc=`YTj^Q(U*J6LrU>}dK)IrOVaYAIA$QENqq zM9`ChCvWT+RimjP+LwC~N>>em4{aBXWEpd_BIqI}X?bZf)C<J?Y5ZKryR<A0h8ijf zO~uivR8<;5(%MU?B*j~qznSJ<Z$BXt*Ch_V?w)rm4P;*{9Lf+~+(jDed;6tQUkL9h zu^G~s<RyI(CR?nCxHT^$hdk^XF%{L<@V#XHH?_ye{#!Ik1D!~(rm<<lUTCar*zzt1 z(2L3DBqo+2E)ty#5ibW%r}5lw8J<>Tb>!FQR41ZytEfolCa|XK(qmO*@WoJmb+E@r zHv#5Z=Xl?rZk<y8Sh}!CxLx^$&RXqm63_7GG+e(uwY;3m8*_-5WbPMNYjM7Dyq!5; zP}MlYnSVaJfZj6ebb!4x>d#<01>F64UBj|rO(nEuqQj7HRpvu{p2WtYS+4n;lN8O} zsi&+wXwQOk8B=*{3#g*{B3im$+Z9v`+VWK%`&3`uc{4a@qDV{9w38p|eu2IPc?928 zEqDpCU80L{&dFYDI%Z}1%(|Qiis3Xa3cjYtE*lV+YZbIEDLwK$tuoDovX!(-t>fc^ z#=!^|9n+BqtH@IKwW||d<PJuea2t$4)$TeN0<mZ*`OhQ-vc*hSoa;8H8~40(j}$g- zF$Mw{rMqoBvnzt`5{>RS2u;1qwJzncnWMYMh)$H}$(db8d1YEYN={WLz^w`Spf28@ z%70WSaM$9xx~|~Sx+8b3yBCJNrJsS-MPOT_ZIlGsr~K|*5}?XvrIDai9&Ifdlb#VS z^j!GxzPX%Grt0IRK{@(7fUX=L=)jhyrY#ZKjYxMw<eL46<;7>@U<0($j&oKFBP8RS zxEFvl4b_#wYRhy=u-d1iyB$JA<Jfkg)*KuhXER@8RUHK;ZG=2Mdum?_B0v*EgKrve z7<02)44rC<Yl_T^)Bl|olZ{DcdF2wb9@%$SD#o<s2JdEib9@!dJ$Q^6cY$=rJKNGZ z?YSfy&k}Mh^~_!QJF@4#W-j=w*cPi-79aX}%C0hH5Ic|>!Ww}rsxAS1Rn8T}_M<}6 z<edU?YdKr)!Hu@6n%yVK4~p#69H4gzjNh?mnea{dW|E{o<TD>CD+pHj-L-aF&Z@Op z&8|;GDx}jmt>+Bbs&N^SbHT^uD?-{}R$)d36}ZYr;Db#aV{vAwf+wAR&NuuzaW@>6 z<_#=Yl6e&zmK06yszvpaCDgK_*I1;zTxXsQ4rSD#e6HjA^Z4M-@tV{cWi4NFXMu~y zW6|U`Z`iy?0%AEn;9(_eE;C6h?u|v|mvxzhM+QqT9gQ4Eki%pHEvvR}owL!nl;)3@ zs!YZl><Y7PmC)#t{3tfL<u>zhp2ZdBS*slG4#6hR92^+tT-%XGZK&!4KI$25r5N6! z|He3xi&W5?T0Dk09UKdoI%T^s9&ZyJM^D^|y&D4B!NUO$fy%K=+$`^B>uL!0b4>UQ zbTQ?64Dsdg^ZXl@Wi$}-XoIjhf=cQ}Bos23RcX9ar5}+785qC0tD<UAjbvOlfzL8m zusk=g=DAaJPv(xicx)cx9iB~8lf6dVcTQ8sxb=&fRk=yLx1Sb6<?=`)PVPhBznZwU z&E>z0uzyc&Ic7ucma3=IR$FE^$bnN9*X6IwwmlD0z!a*a+nMX`gwzr^E4q09($#RU zz|>doK&cmzu&Bb(YLlqYWW3YG-76J5)LoeIfBH`EmF(PNlftKK&a1eU;*7AGOSfq5 zo1Gex=IUHzVw%^&!1(5+!*H*Cc~;w=#uuSLIHJdw2aRV(YG3smaNTwBCJ6gyud0@q zB+=?TJ-;Q}mT7-TjFCDRpR^!Rrm+0>Hy07r4g|GR^>}uk$jL>s1G7vNC$lWvqD%It zcby63JKvFpSza>uM(#qZ=<KR#?H!;ABtC{Ik#J$M(Yk5SWYU8_=k%I!94Xa<{62rp z3>{0X<3FEj5UosN<zw7{c)2*nc*nuv4a$-*P9XUv(97jQ58$EvxQwr}&@!&l%cql( zniIw>`wJx||C_xsQ%#9#Q5W65hPTb!-Oz<T@j5fIshM6jCOfQ!$#JNAZppfacfN*y zakJ8!hLuKVB`{-Qbh&Hwk(r>VO_`VHRm8%Txs*6BoM_&Eq6b6otiee%?p}l}b4y!T z*<TYp<J|0HVeg;=p<CFrG9O1;P5$|5rz=-z>b46Gu-;NdO#sj<cq|{JGWb8n-v`WE zZgiz+;9d@?+l&9nEVneL)gaD~l+aPJUsxG)dqT!@=YW5`>e;G7DLLD!Y%{cuOE1^r zHOE+SPAJn8Ose4EIian0A5l7l6%DCrG5YNy&$)2)vw`Fdhk+xSW=|mr@)J~$RI#HV zCBI36mWX{x88W~w_$yY#nyPqPG=;_IKq?7bri9lD_B<mshWDPcOa4t!qL!q?UoT7n z*+ocm673lDun1B>16l+6T+g$Ly=R%!z-=nBvH7egE3G7zY+2LVHD_ykRIQNI>oMT% zbiIA+1PYB_;pu9A$-HWSz@^Ac&60-p=tl3I7Syq1)AE3t2I<x@D@Y~QJv&w^U)08W z`9xyT$3iQ!N?o3Iof&*ciioHLxGV97Je{;2KU|v=zg`wDzSQ%NZ@KQfm17>~<|};{ zq4N^t`LwUt(@IzVA%&6U)Vk8LL{-696?QBgr=Y39!(V&<&@mv?mSF6RthH2Yy<XJ{ zzIuM^5Y79d-IgI0{|JfU40_|WI~PsRNxKdL34L7x_ZuC4qboJqYzE572P`KB{Alk$ zv0c_qX|=&KW%&atvJxVs{4!Dao8vIS4OhiZvLWmO)zMhHR+!Hon#~hAov?*I_MaCj zgVU->m#;EWh3>S2K79jIIv~TX81xesI0WYs1Z-l?*U57Qmk@0m<jv!>aub8AGZsg9 z1@h|%`qIm4;T?#cyM_w_YKGkt__hc98B9^jcJryi^Zf8GCotIhxJXVjACz)tb7?3U zR(c!25BV01`u}B(dLw&3bP|RX*0H6{WY{O05li6mp*_}Ep_|1bX=W*AKq*g`Q7bKt z87}bcx*1LBZHI-MG7*ZV`n<`B2>Xaw&-E--`AjuN>geSkDK6qQb1neaBHDp`ixKRi z(V=||#aRE|y~(*Al~Sop%){3UJ*^BQ?f2_troTiYY`<pU><UiPDttAVPk8?ERG^`E z&;VUZmtK+Uwa|81(?f$Y=q21bFCNFnY@TJ75esA;CX_~EdDJPpwn;YZMK+^>gMb%k ztdp|exVrBJ^ScNJkr2$j5<3(vjJi_AhD2ngFnMb?>F4NgP|a4*<eN-(lu6qN9}%Z~ zu}ba3XBIQx7*t%s9pf3UY?+|zw?>g*w)|QqkiJj!Lg8z5)PC1p%QZbi>OpR6tlxf~ zQgPn&-#Hv$T(OPa-atYlTJRz%J4D?fdWx;uq7PGqDluGH&MRx|OBI#<6<A=bc+CV( z+G%PZni4XOrbL)s%yi(>SR3^d`=?E$6uZW<EwoeQ@wDbt7k6yo9FIT*Z4c9AsViXa z=!JED_RJj<HeU2~zE{4Wle#yyhS@gz0aO$}HRujfoNJ}+@APiSm+{5F>6$ynC@bdq zHC@P1)}T1vwF2CfBDuE_Ax&kN*A2EWkvd`|gKOFIM~jjQD?f2{*I5u`KQ4lQi2glz zJtR?}-cik)TJD?P9er`>abXb<FvVuNp1W?stT?w$fJx8Dg_K2;IV9yCk5KdQ7s_?$ zL*bO$#P<i5j*p8e7=s$08%hh$+a?H=xP%fJ-al{J1g?@{+q#aI9xQ(EU4YQ?gkA64 zKw!H#d2FIao-S88c_E6KGx#Ek8NPS+B)r~y*Fk5Fk^meMWCQVLMF?>lZ0C;Ujc*&7 zWat(G*~sIC-*OqR1!Ftz>3`3E&Dx4h$}=QZka{6bk$=to6aJiU!Egpp{Bangiezsp z*iw$5&H^#ngJebpNT)GOy9J&oV6rO5Jt{4XD8ANqcir}!f|Ztu{@8TP;w}#kRTz?k za6U0gPu%{uo)=Mg+I|aC+pmd?V>CK(if_}U%G5g@(tVumwS~QhV?gU)N>OFATM?EG z1;E9V>IZMM_FFE};;$P)KSmS<<{C!c*<kGUyi8#vsPvBbE&Yviex})Lh6T%VBP21; zCs8}(qqNg_r(jCBCku1uzf$%4SgI^j$l4d+ZVsv2VT-KN-ik7Re-R+VKpa|}&wgCP zWb9`EB3Yb)4t%=we!3&xYvRp&67R71l#Z-b&Gh`3t7Y@KpK3p_PAFyxt^m`x+k7gt zucRs%i`1Nc&J-;Zm%Wi7=%tj25|5sh$IhMF9dFOGQ&M&q^pz9X83PPK=f^4QTu)=J zymQw<A7zxMH~rX$5?vQQhd&^6lMFiPYBt6}5hzD9dV_0b(}1A2N>1w@>x5HFjUidY z>=JG4>H3jg-@^5}JU841y6}!9zWdnaXduILF66-0+3;HFTA?aAHK+1L%n~O<Cxue* zqNEKUoO8+KxTokS2U~JZ1$YSd%a1Mi*(2>2HY|Ku@9m3+4v^gZs^h0!N2a<lXo#T( zoO|fE()P^wBK_sq8>24-+Z`eSIyd@^=6yi=4QUg>?cipzK`#qZO7BOql(rLzYLG}O zC7qj@niJq5e%RXtln+W#cazK%yPY~iK1MV1rN69w31A+6I~k_Nng_d)AX&Z$@THx7 zsz{zw=6ZxVPP+%a=Gza5z*`FNhGHyEtK*L%t9Tf`l-n(~JFB*~EL!@ha&Q@~x6Oa4 zMqC)uBDYe*x9snlJKr~aZMe*x`WLK7RZM%;uFPd@-I2_mS7&oI=iJ(i@AG5jJ7B8! zW2=bSmokVwUD);^oOiEa#9JtuDUbgXPw`KP!;1w44F~g21Ox*QgYZw11NBdr0|N&S zg@BESgNubniO)yym5P&#num~vo0ngLmX1SG{GUb#>0eK1c$hm>VX1kjhf!fC9VP$= zaU#+~qu(Ouj9f+TrnT3ZyC!*feXV|ax3>vrE>Bc_4>%_6$li=r{Ska=u2dyunN-Dl z$NW@7*dbGa%FgU<$EvR_a9rU@b}cUxfn8eX(;m+Quq2R1vhe)O9g_mS=x*O9#-t<} zEGhBYBlZ6xx^|02`yiUUBV{qmRrZuz^-U6!rFZe+jyNRQ47c+)D-t3G^iy0B*FUSu zOGHcl3*Wk%8r3^Gf|dfwjha0FtM?=kj2q@)F4)lvMPLZcIm9`#li=<v_wtfo-A%&M z0ER=>PAxr~`lGvkX0N{bFKYEwC%ukRFgG}89{1PdewF*}m|j7GSpV*ra9G8&k`Yi) zjQ-x%gjjpY**-_!{F6eB5!X!+xj{QCaOrZ}0QHgx3t((W@LLSUVbk7}oKQ2r`V!q4 zrz}p_p?jFGS*p1o@c?yA=Ms=_UC>tN%=^K&ZjaM)TTqvmPtZaf_pgvIP*T!Zyv=xC z^1CpCS9@+N%`id#MNMb!ImsZdYN?vFV_(G(proN@OHmy#=k5ONY-@<n9<GL{+8XQU z6;9XXrO<87DyCsrbKyGSNSwwkTU?yWb@`@5^LtmUf{b6;tNN1ZFBDzB{jS!M*)mL; z{#uesjfRH8HlOh~<2ajLQ_T<|-IbiYY|F82+5DHiXX-4$$#M<w%<-5U75lyKsj~9v zV%!_}Pv+W4cn^%Dv~EiIH<(4^-4zV*N5aD6UntI1wJYw@cv-C{;vj>*f)Q}H(ZyTm zRg%<_z=enh>2G(--ZA+P?Qgg1gnyyf{zC2RL5`MZ1xUunl;^%@h8%X;rCd*5BFBGn zE&qk`gJgVkb$^?Dw)A(jyyRcW%&`VL0WGWkLIpwM{z5r-tp-~fZ+)(L(Xpy#&}g;^ z36QX5Sbht(TtV=13SkYblXy@(+YaPSDE*Y$4p}{)3G}M^cK=%kH=o}4{hR9hOkLrX zF}B)&YKF_%EH=D>?#jn<79m&T4VdW?BK2y8Q{(RE^JQOt?xmWAV!CaICwz@l9r-?v zJWy;UnbIfv{-@g1@=@tMvHF{NKE+=syNwy;x%zq2B7D0#nu3;!yG*v6I=%qse5Hi# zj)51)!ryA2#L|ApDyb<;HjaiSt7^o`2Jh7$i34ZPte;$;um9h6?=dzOpMyUOo!Ok< zpLDhr5L)k?A4>j0ZF89w@;knpq|(S~I@11ZTVDDl*-NO!IHbm3`s<3!^z$!NnV5?+ z#Xb4<bA#&VbkskFpG>b3e6K%*ezUdxg=+Fr`lzfM*k}_KfN*LFjNe8-y(;_u26<jo zW#9O}LO8+U9&x0$1A=n=8gY6XH0$BNk9OXP;5POHL$b5xdau(}H|@Lv5Y7!n@1y{q zEM1flge5I{iXRPzja?fqVp|quhcOK@dfL2sz~H)H8WyjdQ#00&M_cI~^sM>iii_qz zz1F~jT|=fr!!^gFRmTr;ZW`ygPrj4qZM#_RIN8!X3AOfV?6-3J&rRuH|MlB(d^x=4 zh#-Fluz$4Hs9CP6)Li>%D1R8rr%oAEbkyswIR~3j6LgfGj}NRKoqUrI*==7h-?+{T zUkIpFs=(06BL437=d(cx%UeWL{lsDGiF9i>s!lWfDu4+D^zL}aeq$GWh`Ecs0*?B4 z&R4Qrn@XFwpY0qHL)=T0BQ)sT#gJ8H{-fo@iG<xlk!}<=g!kLw2NS0YkzQN)b$4|T zvNgD}*B*MiTEq%{-2b+ALIr!RAzaE_mLOKYD>2tpe^*SuXkR_5%4-5{8{Cj&WGk#B z?CIM!J9m`&d<@W;-Uz`TxjH`44P78?DhjbxT=P+p$rVrr)OEr?V6|9X?uu{nHcnlf zj4%KPw9sq&E3aecLShw^UgiTNFWM3s$S3rg|5XAt7sYH>BCPUg`(_hLJzA5rG`~Et zs6=U|P*;=S>Y0KKax<UbP2%We#y6Qn#y)cip6LBT<TE;MsN!@R9W=A50!^*5ecs`! zYg9_Ld47VOhR}cX2>EY)Ub})}ZFcLP7ZOBqPw_=a!JrCuqMtbsUn&bB!sRZHewsK# z%v(pNxl+xJ<+Z3vLxKr?l=h1r%dX08-hi{Wifc#oExykkyf^^(&&=?K*N7uru%mp} zcBzxLPe4Wjzhb+i{GVXPO-JfW01)yM^@D3&oBl<lg?j&zkKm6Ffc2&ahP;L9X85Mi zcA2^4Jg@BKFd?wf0I?zvSH_;%Vuf@L*M9S0c*V!MYhdMBC7{<se~zG~*(oe<$?#@I zR;8BLRjEDD;q`-e^UU!HkXM)E)93N7>!iZ$kwl(a>AG3Hf3dw9Z#uXuZp1^Dq%+lW zs=tLR^Xq3buk%T^cQZSGRtWU3=7(Pn&BtDU{Bt`1kol^iGVrEPXVm%4vs0FCvqMsZ zT|#x7M#q)gcHIqPn=xYWF^@5XjbJJ=!MOgX%O-WH&MaEDf7`RoIl($9pugC&1J<&r zX|>k=!upEf*B)duPd355YJ44F-gt#w`Dkzkokp(B$eT~Ib!GYM@zi#mn)heiJQ+XC z<nB)$^j-UeUvf+H&3u3c3iW`tXOo)eG4c_v37d-<S-`ene2Ul~NIvibM`sLAD`2Q) zK1IL5QL9Yf@hx-=Ht0fH%vX%pFF0TJVhXecc#TtOdBUh$d+Q%En<fh^Z5$^v@xBh_ z|16ino8y*zU9SEMb&OFLToCTLO$rl>4r|`LLA3T#>J%$K1(SKj+O`g$y0LizR9<xd zkU7aK^Ndsx(!Nk`@T93my7$>MTxgqTe@ST8E2xN!9eQ5r6N;ZSthj6$&;)mP`JA_; z*P;UQh^*{`2~E7WuVbxsrds8!`aIBXKC~(Ztex}1cs|xmTfKML=KH7Wd)mLZJ{tVT zsk?aL+fJ}fW)jKnn~Scy$ksje$5!Q^M+xd{HV6nb-sOL%78;_c<Zl-u==!Ec`k{A0 zdmY(Vr_;M!&3cG}Kk?=4{GWD!`FS_fwXOLg-a4h+tKlj}eT+4r<9}q1ga1N(^$x#2 z9lzb&D~{&67CQ<4bxp>6&6M`iJ<~Y)M@u_iQd|1=s?U%+Q*~bdmqx?9^)aG8t4JTA z!sl%3U#Lvq`Ic6S7Ki_ryCU}QHUk3#YJ77YJs}zX)SH@))_)96<t^Sx?xSsSp;C$* z@HFV9ab#@v#ooyX6s2P%7-_w^ApIh(Fn&*OA!(|#1!LbDbe$Rt>j%LX1y5q<-D^|$ zwvM}a@1CCTTfaXt+C|#>xLz0EnkEi*aj!nwcD$**)5{_d-&tXA$m{<?6^BPs&Rz2F z=5xK@kHZDZ3z3(qR9|z8wXOiNKQv1ne%UysJ^E$k)vZnWQW%&2_Mh%_2?Q{}YZ*B< z-c&eq>bP_)H8eeKi}_R6e6zk7aB?X8_T(*C+;r`nxyaDyeU>W2$69^2_KzoY=4*C9 zRNWD-{CT^)$fKFv%*y7s_lO(|`I2)%@@uWyAB=n<X$_xw_J5&Re$Q-IoS{PUbpJvz zcw3%oa_k`5s(|gUb6PGR@Azf_cZRw^U4)Vjwb<mh2&Uz&>&U-QavI-Wk!XJZr2h+L zS+BxuZqHPB!1wz(u|zIQXAxo1HCVq8(4%**QDJz~Lq33MTYIGnNs-k98m4;o{QTD3 z_G|e(X=B&;y+it4%<J?&sZFFK>wrJv3!?iM7k{CYtOcnq+m_|5VQYIsn9h@a1%}O$ z=#+M}HgC~=vt61Ch@IED*ado_I+N(x)Jd&;^zotEyh#@sBK2`*Xh~?Spo0fAL*{El z`b0a6!K+WZk#HEL-h4Ny6PoLMDjs~jBp+;?zSoHeqlN+)WQm)N>Pl+?zHLBm?Oo?U z-zr14rk26NmP_JMq_na^xBq}O$E#Pg7lj9PrtHCWpAYuL+?J0AOC<&2U>vh8XJf&g zeaHF-M=n}#df)n%hV$_|eM6(=OYxLG=hb(bnyrdS@amuGIC;yIYDcrUP8}y>scpV# z*O36aRl^q@{PAA&?U0SHEtYiibpipPy;0W=IP_tY<yui1K^i0;1#EMdypXB->D4Ed zETe?l3qqbIUtMS7yv3~UQrGUR4oMY{N|$wGV71Yuck|S@a$?!*{>#DQ!^p?q=0)KZ zPqI!VWTmPbZD#=k>g8kkokXKLXCjhS8QPnGJ~o#gd7r*;n~k<}z^O`mZllAlP8!Ct z#rakA>U+txL1|jGZtHm2x^G{gMRX={VyQ8rUESut^IED!jU~dU%<fvqbN&~q!luwv z2)0bzVnDX;p-`!c7}xj*zr+gT&&)S%0<)*-mvdtn98qPYRH+wLaKk@=gLhaxP|CW# zMb%<(!K}3W5^HPOeu32A;E^M;L-D(=S`tB?$YW~tTI7_P0x=1#u1uh5J%4Mm44N}8 za(FF~f~m~NM@Hy~d9^G9h0+%ylvGAT3T;Lj@dZOl%(CS%wPCD-*6trrR=c_<zD^67 zsBoH6mefAJoK!7sp>k#iyc=gDH;V10NR-?nJq0zGd!bi4Nk}`_Lm{68DH=Zz7!4l3 zV!KgZd5aIRS~%R1RxTEk*<Ny6;y4>3j3t6v8M1Fno2W}{V+6eTZ%Yobdo8R(Y6z&) zhY84Mp_CF*K7FrnI9azjn|iCZo>)3I#}YS60uTGGA3QJrLgBE>*BA&f^Usu}Y;h^U zs#vn`jL?MQ1jaCl7vXN{FDEDdfGX*Q!7#*uGE>O)NX2W_V0Az3)V|<v?z$t5)G27c z;KaFQW)jXNp)=DlvRy=RT27Baz(Y29wmR`SI<F@}by*n8FglrFE;#6n-oqbYH;oLk zBs^eP9LxS3|AFGc!U+|!snJ|GGu|otpQSGGlk$U@(AL#yi{RwFG2SXk7|h_7YWk}X zO;&Bx2#pssnr0L6(c{Ym?xTpPE-q$EXY5o%`V5iPvA>UiQSFyq2&^AjP!>{it?;~1 z<i^AD3?-GIdkXMX)nX*teo20wo~5S2d{Pp9He7d)spm0!5(p4UY81nEO1$qdt;CO1 z3HyS9=G)IS`(}US6#BLABI618o4ZI4wp~ZTw_q3$TY%=KD58RfchziB>SOLs9$U7& zHvW~2{Di`)-4{K{@#itLkQQ9b;rDRedDC^x@c~l8&eS7DtXut^TVdwi-9!sp7iwL> zF(X|ILC@DBle+1Te^+x{i&d+l)$AN=u6{UQcJ}MXL$ULXuJK?BXfjKh&NAv>NL7ik zKF7X~yJ!qSZ+6>-3a;+Vppza0-9GPADwL$ry$RXFL%6E9qPEf>&opK}Ol%~DB(Mki zNjJEcwDU?#n$pt_nG+GBxVansd(NG(<R*(T7B9FsV_yVBpHa3=XV@Gq6CZ{`shg#= zwsW=2V)ZC!+Ea8iWzz@<6qr+aPWruS7~+w%_8p5m7bg+@H+Kl3@*{FFml5PT7<PzY zv&Ty~kj`-|Ln=pP568xRN-PV&pwgyS2-P8B2jW{AFq87=qSIrBPjHwa-6g<~tFIy8 z)W^5p<LdR%QE<KzRWyr2G#kxZ+j~MI;$jQwN=HK0Qu=6~+&#Z*Ge0Jluiozkvd&bh zf!iVEu7!s2pD((n74)^0SxU1B(v8-zT|GuKfxfn~lSg)n!;Visd;8=cHEOFN|6OP- z%^Lkv(g-uCVM)+aGIZI<nE$qV32m8NU;mb{hiQHVjlq4_f=TU6?)|uMwgM0PaU$IO zf;iQYkkr_?6KAiv$6O<ej2r>~XmpaY2a_%OSWE#wo#22#HvazNK#5*EjYR<qV@bxR zk&MS5u|+V5PAo~<bZ)+M2b|z5IDd5dkP@g*B^-ka15E{vy=yVcV5rt_3Cx_9zZZHh zgkiQOD}%$XOtnvqfvWS{+6`#sqKlNa8)^CD(M-l1yxUp~N0T|u64>CM1d~FheXJjF z8_Uq<f%rY1uh<;vP=qvFH3RvcBlmI5(riOc2RO+mu^u(TTnbM?ri%fu9OR`li<odW zYV=Bu?>`aplD+O8%1xe;c#~zbb#cc0*d*I|`?|hJ7=LrRNb(nI$X$!%?l07GqGub& z%+|d3q0bZtVq$T2Jq=DI;C6pJTmI}4fBO84n^>unHOl^cHY^gUS|XkyT!Nqdkc$8O z(*}UG&s)d<hA?vuk0;;?j9FNgCb)~wvS<k52yEx)j0<+!c*c@8McqC#fV6LHea}rZ zMjzGU6DVgVF}?egr<A<}L}J*E+zlz`4i~u(|NRP>&h5q(qNaUq+@wlYwPT>NnNTey zp%$z{k?5k+hO-m6;Y{URBV1BDDMLxNl;y4RxmO6o*)S+wEBQS=EHdV{F8H|5skQ1p zlW64sCHs(@jKjX*%rPktNJxvB4iYQ;3q|oXQ7I4?-FvudFc&hjJy>w86*xu`Zh>#; z_cRGVE(E%H9rZmiH4&rk8oik>oPw}J-2XikbG9R{@5cRwGsU$y8Uyw1JV#0OQ|9sP zULLCTG6m9`IAHN?M1T}L=VU!1KT<g8XfoDij?BM=L$rjp3uF({g!;&PE$7C`Z4)ZH z=?G?PV(2u87v+5d6;Kl%q7YQCsC@a{)}w-WFF|kgH!;zx%Ad;7Ks(*Ov!g@&`ms~8 z1XWJ4OwZR&h#33)Unn?-1Ac)=Bcn7HaVinjH91ulCY;gH^;BXKW5%^s*RV8JQ0%sO ztCZ@Rnyno>b>IYmbk(Ps?>leCz!S1h?}t@&QNih6(yxS%#?Fwdud6R-=s;^ve>;Q~ z**5T-zu)LpP{^3Cpooy{x6P@Cvm6MgzoT?q0T0eHF*^ruw`c!BuM~9&K5juU?sA8~ zf1p!Q(3{|n1unM#e>Jay5KoZ12L9!(!Fr}R+!}RL{I!DQ4XF(;rz4Eq4v>>bJ!3vl zay?>ko03nxTaacxg*17wt}-}~^iYc<Hbb5T31P>9+6@)L?AGafzz<>+7;n7<2?;Pa zjWXOt0mqqo&_<Qp)Xq~ttqJ=xpn!?j3H}bOm;_aFM&nw_<fD|Y4UpN7b=-R<TU3xO zMOp{wj*iOxRn$E&3!7rTq~0^O)2%m-)cUj|-7(NDd$y4&CV4<F)*6+KP4#%4;lFZC zY9rIL<`WVtDQ430qHM`Q#&^;cN-in)6T3zovRAmBgTGKjY=;<E6mQna9Q`cF4~U*P zGXCi1ym7>924ya%trjmrV$#Kw2sS=PkwHC&f@6=k@4yN<>fA()kYSn0m7`4iMG!Kt z!D9_g`*#MleE|oLz8Vl+knOlzL81vK;X3H_zTO|3uux`#jsMw54R|W#KWf5}5_B;b z&)TScV68lrSXrNDQg9vATt>FB;49IZaKKjgp%+|-LB7#Ivvuwq!8}Jo^&z38DYl@t z@p3|S>If_tMb{CSv)a0!`?d(XMf`F&jt)*xrs5vA2~u+SlP@Y?0J0?7jiq&=^EESu z$bM>M-zONXG5vZuY%iwgk`I!0^o;)lYb59Sir;%W;(kB8>NHqSiS14(I4V8Ctc5-2 z<DL%&nU_Tij7f60V0Vp&q(cnPkCks6PKm~G6IXsb$S2dqB=`ryqTPrTXSfOT(M{f1 z*;8=RiX)fsWgIXcCWm`53{UPKo3});5s4aQuRTQ591er?lO`s(Z#4qBJCfw~wOI7u zj*{Z3Jv)d&%wj9ojvG(czQRYo>{Q1J&^NjSs5Fyla)*rB0(UHt3po_=AM)HH4QQ36 z=m89`I4fMa5e^3#T`UzI!EF8%R3fc1wRs|=s689U-<W4K?PoGlRQaY-uE(#Vjb~Gb z5iX_`XJXvcVOR#Z7^8-qdW<(7N=XjKvmO8ErTpg8A$}86#JyszZ8)Ws5{Y7CFzzNk zRr&lou;vcJTZ-S5S{^4YyRL!rcI(yfB%x|)=A!Nf*)hW%qTKOUW6C~kLTEc6T43H? zqN=-L>`yKsf2Jls{(EK28_46N=D%p@u6(GLbE4nT&J<`wCOHg=9EeX-$<u1#F=JIh zZI2P8SSmX?mUen|C}`<U(?R2#18qWQQ9#Nkde6P{?_O0b*O2lh(-%#b)(tfjG1{ya zhvi<@Mern5-i!p%nge$JVdl$29bC%M9A&8LpyB|x)fgb%2c8Nob0Ute``jwYsvu<E z??J96l~W<Uo&#y#oNhWBF$p|)EBozyqSQ2z#Pd*Ki2p?LzaCOme5BR!27v<5VH4!h zh)!t+?)8u~yY9H{uHY$M6i5CY$XSRoIWM8ZD>6IOwiJX($@|iFm*I%q*w?Dgm_sD% zBmL9lH1h}v`)a2)IFw;*bK>`*Ayi39FqRU*4RRsinMQ-qtdLK7Z`;}_3+*;{)0Gn* ziEkTrl`8*24?Z&G$WRuT<9}!t^ZUL&SI)bsT$jeMtTEl*gN6qlYl})+j&uks^=D;{ zA*uR4JB_mV3iZ-TDs=`u_Qsw9GoyD6avW}Uefqo`L#FW9`ZUf&dUVx+ZHTYsHy!%( zDT<zDQc?HA>p_xZvgrP}q^AI@VvkHHh?rI$gfzIgeviYt%P;r2?^<o;mWjqUBTOQN zv%zuk9z#w`oMkv^3pi+9#^{>IGbDJ>)OpE>Ha!d`cbEP`M;~@uhjc<Xc@puPq)7IU zi@W(SYr@D0|MZEFalvW|A44KZnBS}tF0`DRCz2;Ap?s_ENe3+^L+ZgOT-P1jFIe3O zbWEe@k@d7$PPs7h2lGF1zk~dUYM87wS0ukTm*laR$hj5C*jLI#A<JIIZaDGw$_V>} zk2J{zTjhW4P1MlHu7CAxQVL@W{9(k{*t{XEq}Q8$ts^I+YpIL>i)^E_KXI5J1Y%(h zvT<}9@n{x9kFph9LWaoM`j@Vk4NZR6gB8GGkS{T+%P_*8?UWD&rMi^%7rD`u0H3qE zx~N|VEqGi!>J=SL777Q|z=TO5SK$sJLDg5+H^clLI77EbNe)?GHEUBgX|AZnV;h`I zp3~87B&gugZP~QU$!?EUH{qJvgTn-BHwvZ#$^P_soAmrfv~S3ymK;V9Kf#M%-{d_S z5Hes2ct-Ncf}<|5><diFEqO2gDVaotQ95ehqA=w@Vexrod#+x!(p!SVMKt>z+cv?Z z&Vqj#bh;WWFwsF5)k8O-?bq+7W}}cROZ_@JIZ(DBPZytR$~PVOLxFE`dsyUpEV=KA z1l57s;L5{xlI-Q3f>t3ua+n9xu4zeX%fHSDD#fToW=iFH67Jf|!BGM2tJP>w7W2b~ zKS-|(mw=_x@`w3xfUmIAwZbp3j37*D0qqpGYz)FrOLrJY=*gNUyeXasm^qzC;KZGD z|FC_=G{aVrxXe|oQ1lXTk2WsT$`n<Dl)rPxs63bW1%aC8yEL$}F}>=(p@jQ5Ced|d zbJ~wMyH;7&)<sZ6OJGd-aPj=s$1_bjyY>!D@xwwynT>OxM+3-QNx)n)UP@BJtY)pX zNvuKLRW(2c88eli`T0C?hjyjAA2c!~)cZY=hL|^DYM|~d<Nsmny~El5!oP9dXweW` zrD6pswW-yT5L?VpqY|s6YLrsz)7D60L~N?mENUf2ZM7mON>N%J_9%*~O`r7p`#sO| z&-1?g;mZ45IqSafbH83W=XLIB3|4;Ic=v^3fG8u)MnFb{Qwe1mFecxt$b>HZUFi2W z2c-WthVO6UX9sVE=?Jw1_`BG3#@sX=)y8xczcf(spNAaB1qPkp$yr{1@W}14L!|B% zGAZ&uxuZ<&?1G7Y{j1mlE)!u!G2bCo&5Id$LP^H9vcT@#JYN1A*u5D%w*+XA`cEBa z87Myz#tk~skV93^%|s=Z?7j3gIR4A<2k_oVW;wi6Q$qN=+7w?uw(-W3+3?$4YaxTv zlPB4>!VYl{y$VQQUq^TxXO~Nea+vhq`*i(o5;*KU*MD|*RcIbH(J|XMsobeULItgY zvr@uyeN)dvWAZY^&);W2z10&GolgzDR_a{);%7>tQY4ve0ug0+JE*8k!1r~wl$b@v z8-3>6>sfXssqBoQuYA5-*>)W5$0XvjG1+kgYPnu1yF-nnosaW`-uT2h#$_kxE6*D% zT$<H<j!LY;(Qyb|_uRE3Wp3_kM{2A?eqJi)iAiPij^9O!iT#RmeBW=C`@vayp1Z(> z?9Lp4-=wy-lQ3FW_Lyc<N+TbW)HuKz{7JNJt?D?Mu94HK!iG=Ifx4*T$ScH~<|uTm z+_{(F;+*w*yF0=n`*PYyMZkiJntizqL5Gi+(wk=)bo0QToaoU3SU_Oc#uurT_g-G~ zF;BSptq|*$#xLTmjs*QNn2!&+xs(#Q-BxDT8~26BM4%L_PCV*-+br@a+R)fato}}= zcVg@VXYq@#ZC(|EE}Pk&k21dwiN@iw-BsS;V+oCPevN2U>wf)KAgM3zgmT^bPSFJ~ zV_OdpXP)jsQtZIVh=p3?an4Mp3c`jW-Zje+^SI{vYk&KTk}VqRq3&d_SWzyeQl-A< z9~PE==(9W-GbMsu*tQ?kl1l}`^8F;FrPe1#Q=bYy+s5S26{yN~C|w_Xf9X12#9`$$ z`Ke;Y%B)wNA$PK<Q&7UkquRtmnB8mIwQ{aFzgYU&z{g?tnrH2TLFW$FJx(oDhNf?- zRVPL_?qsZ%+Ed-5;=4I~&~qwtTA}vvKmKjV$%eJ8@y(&rxxJ3xeY1(4+zl6!oP1Ie zqd!Nt$t3vSR-aQDl7Fk_^K!7m2X;r9@jD;?A1;-nOJ>)TI#m=$XCNiG+at)Xfd`}N z>dAG+QVtYjZ~dn1WG$eH--Yl3z5vl+fuQZYMD}JTjSu}hAD4`uOR5&6UTmCo6d)wT ztG4v7ffLSstNbss(w>zxAXiT(RN1R*2#@i}yTL{BN~q3jk-Y=y{D)N)e;GtDXC~O5 z8(HeS!<_vVW~JJt=NRg3WUZC^aOiqSSOnIpd&t*j#y=O{m%BW8I-?aBz9~j9ar(%r zqz4MF5LK)efLSAWxm7H?k0ZflSF)uXiEvLzP+jzyNnO9jyMdnh&#}3zmM70fkzoS| zdouP<8hwk`Xrm)Zwk?gMdybZfN4Z@eZy$d37G%{e@9q4&l6@_w?Ar6RTh&o~GaQkA zyXElht0ow`*}88@*&FXl`GQ2XD7oixd$M2qFBO|#_%;J>$h;`e2Xx%I^Xkiu5E1kf zHBJtJjNGQ#*9Bxczw(%;u*cpM-q*ftbUNb$Fze*oz13h|8Q0%{^vZksQRfGN+?H$s zl*6tj8KuiE4r!<xMuR*<V&paEHp|WLHOD-y_TvAANu|XJn*!h9ff+Z+^3_56&#fNm z23Cs<9h6(%cnYY<c$cNHtKcVk;r<5e3hSp;wTFK&-H$4FdKRqZR5|TWd0e<O-+M(R zRT<3Hn*ZoCR5Fd;W4t=8dWj%Cxd2r5a%0IZp+rfk&euQIp&uG}ar2v-0)DylWyZ`> zY@Fqg24jo6O4WKVN3JEkD^AdAFJ2*wMX7J%eGnJc6j-ttjm_xtw2&VE9cvp}t*x=g z*X%>dV$pUL+to)lZ+UPH?UZ7UxOJMGV=v3{oz_*+doH{hnKg~^)HnWQ!cwMPg6i+D znZUsEt$u5AR>*8cLXR8LHeAzV))vJ|CsTFOCqFNe`7SBa8385cb9}o`v-=_mO@%*T zcT%h+SA(W)RRABNBLds8%VNcwM{26S&b@gPYD6JpVWCW{@>j-SC#?<%mOb|Vn~_7u z!j05AUtZjIc#o0R`eTl4r)iTlo3_R+XJZB7Plk%6&Oc4#g)s>uFf)C%`6%sE4b`3w zYjMGj3Odh8rm16icKhN#f2y;>ypyGf)!cI>7QN>wQ$z_r#9nn9j9_P6(D%*eO<=C? zke_}$!zy-jn{)WU9~IyQ4rO<~_H~%~^^fWYjNMh~?3T^9KU`)1RuELAA*lM_RvIek zQDL}t%?nPKHI5d2mDS}y;a`}GjXIBLu1{q}P}erLdL@tW^`)X?JI@IcU0(VNM&{^r zV8-5DEKypjxh8IoXL@}|rT2+6_io~ODd<d-Dl%y3)YmUfA7jF~S{<;<S%3TO*qfrF z!TYO4{;~M%Ia!Nr$mWpsk8;M$#b67IkKg_FcT)afD4#ul>S3CWQYh2q3sti(Z0fNq z=3o2o72wws6TAv&;p(dm;|s8PZ>f;%Pmq^i=d~3>)Qq13WA0ha`59&i-0W4+6udbk zj8vOm-a>V3<#751@e{edmAYrlY*QDWI)AH4SSWpg`L(L>L9fq(_nP?Bd6qT50@CCg zs)X-`jk{Mm&@hghcdlDd*gwwRNe|QJ+qHDVIXF_cBqug|;eKmNv(&`<@bpJ_jB4BT z;h*QB8PlhT-^fWyW<sK}bBJReL9zQBfV|7kw@++rOc_039A(U07iraesW_>d;?3An z_4tgwu|4~4%d>6e7)3kpn{M!41!(tUuY%^ogzGs=yzidyT!6Wt<L?RzwZ#g)(;bI? zkI&2C=CxD5m$A0ysknadL|Nc`$n1n~q6mQ>J;l&@gYd~T$}=cw79mgv4Qd^^GIeeX z6Fu!i*3FzV+FJ4sq(e<LPTBA<P;53js`BpPW7%&{f6-D+-tAr>Zmdt{o;rku`_ITa z;7S?~ktpge`TGqM`zn8*QNf0}c46RaQ4M<o95-X1lJsR^CWAtM>H;S7<W4*-ioIE& zS5a?R?tHm`mAPW<=Q+mM9Pu|9tUy7{tFqUg`(xP4PVaO&1(MvN73#ARoDvL0pAIML z%D(oM6IR=PdVRlm1UJlLT8Aw`%daW!?doVmsovvE8sUVQwK^)#k-xRL^HQayr2}V+ zwYGV%H`iC4xL{9W+RyNu(Ual%BnA)qp1$m^Ms$j^8}EXzQ;FBEA<v2O<OI&S?#>k# zkb8$^q)NSJF-nFMnh---+9e|<Et|*wyu7OS+8mYM3SJ}$Uf}<jp3tauH|j9IIn59j zPs*mgO?%5f@Hu+lrQm|lH^a*>9y*|7FH+T93|uJ6W}(~i#U(29O!u;CmAq0TlaMF8 zt_e!54!pcOxQ*75;*9ZEBxX;q<bLXZr0)48f$ve?f$sDv@b*nO+4A-E$!!-bQh`m$ znXRt*@@33|mn5Ep6>YD(xmMiLdnj0$y14<0?Uc|T3d$*?4b6RS21>?GE=ZHBLS9eW zRr~&#MAyIcb3V#6SwQy&(^NJVkg^+dOhN#g);Ot<O^MGl+q{zVev0;rwO(##L=uCT zDi@MY*-cf4J9W2}1ZZ_^m6Pt@2cpXL{5Jyo5A{H9WO9IG+tf$Bsxw_dz1IBAQn22^ zI?GDViX@w#@_c>rB`X;YZI9+Ua`aws%J#i%{F3d?(@+{48%uPQ&&}R9O23Dz^#9g6 zt%%6jc9+6`CCEuL71FwF<i3GwQ?sSPVyazeRnCpAdwgR<9B&6Y-()qOzkG8Z(!tg3 zXmmGR2fDgu-H<R|(tS+XY{(t+CscS}TV1jlJYk;5ml@J(TmkOKZgzLsP;YTH<WT{G zNd9bsX|ANN%VI&mea)d>*XfHwHr+R}apNE}gMG!rHLn}}S1c*h#fAZnRbBy!b^WwE zB*_c6y_L`D`&^P7GE}U#7<-pk{?^`p?o*uoQsff%wb*F;Io7~4qC-NT+SL<!{L}fy z14A5rtG7s#8Sml&1zf^N4)?Q=gCRdXx?_|H@{I!IX${=XF-())!Po9oWI-OVUt<t8 z+LPRS8zbu!=YC&(^s2ddU4_VVDVs(FVt(n%8@tE|K|QgM^x|MEYv`}s(Q;&&BuTd~ zG+1}RvnL`@<t5HfVg6Lr>DtF!E4$u>$__Srmb4K$yE>O4vCP*OA$;+k4i3+%A9HPs zXUQ8vJ`XiX(%$~&o0JpXckL3-0Uy53pCkMFPBviGBQLume61XY!uR8-@_-i1U0fqo zxM4U4VH2N@5y1(#^F03j)ScAF8R94?`+l9acyENccd`AfNb)4s|2U27w+OjKl36SK z;#I5SL)6t8zLHtR{_D&huH84epvA3iUt;(eK3!(36ZoFud8n6i=Z#wd$?#hwae7V< zId2gNeZKcbQ$DqSDtsjTE#$J?eUUZ=<!gtolKSahwP#!Vy#6x8wl(dIat@2#H?vba zZ@K<WywUWBUgc{E<7?kj|Mg+bZ~g$vVdO3~Zsp6@AX^+*>`V2HgHx+`#=B2O)W(1D zYzJhtTrlZbI(I&lH)pzvjCK|i-a;e{&G#fOE(Fx%XO3P_e8aRlp_7o{-vda3#=*>& z(ia?uq{Nz_jUIh0$=9xuNL}u~`KJb$rLTR?oU`{2>QIY{gZVc;6h)(BqVD*WynoDs zIMwFTX~8Cl%JK;EuwS<S<OHS6J2>1_sN4v7rDy5jo&1G`6QCqnN0JOdiLd&N1&W;f zCR+9MV#rgPAv)1=saCT5+j0A_xpDdIrHh$gs0i|Tx3+hYy+)TUKEtv`d$-gB!y1)5 zGpz*vU?ZZqd8txJJ3RF~75!{fJ5My7)j}iWBj1=`i$}&rkjXr%#-{!rYCf(9y?2Sa zq1&dpml7_=0-&M3GaXt=Q5A!G{id%rnqMgQnoRJRtGa$~QX*kP{hoqEmG)t3@qval z+;i`ia}K8Wl4|M5(Gsy*$F+Ik?gRF_>xDAmdh+=w#uA@!IKBClP9N$=&fy5ZS+T%P z+}Z~9wd&{0PIR%d>Uv)qs}X7;X}|gyE9w#qwM%{%YNu6t`D5IMz5l0Aai($S+Ctk4 zmtzyWl~cMMH3a`MByu9dhI>;%gm57E@cAA68|(;@!A-C%nR&-9sZ6N>{|vvmOiM7o zfYa<j3lkit#m@nKOHKAdJtvGR70dVD=j??98M&wK1e|{%eY2p)FgQl?T`AFq?|5O) zQPVGI-@(lQLEi~k`zKJQsBn?NHNyYp?|5%t;=!G_fXpwwWxg*5JrSw%W?g(L+T7P# zBxP7nMpciY2SeQB7Ha-+b1FSxHjUrv4>K}1?AG)d8}QqEzAvX6Jn`8DH3O4vR^c$R z2)Jwdj)*UMd@8&1Ip8mYW!1W3xeIEvpbzv^KN*whe>!eB5J5j6P%oGHg%$A(Sj~2G z{_%eTe3qXc|KLdf`GJ?cjT&lKvLhb1Ik^rtcQPQ}7nHTTZEAA22+(e7|BweiB<V}+ zZRAfbuDvZ`9|{iLtpwMVyd3UkpOugEpUfPFWcC);w3^>Eq;+O1+D)ILtYsLalC=!x zCKqLfLQhTP<KSKvCI#Ld4_a0g{_H$?Y3Tg`TjyE);M(ms6=l`G)mrUsnnWI0(a&?N z`>D6KYJQrXZucNS>c^{H>_E<+h*dvm<()JMpToG4oq(pVsGV_D)YcTjvwp)9ZCjfl z8hufRd3=yAVaG2x@LE^2s8z74!s@7S8%~;)Dh5|vsLr2!ziR10kqJEDa-Dc+r*zjY zKI!|zZ;**Do<Wb<g^TZ)C%+S?<{kc&%&%Tzd)~@w85>qCAfmKt?yLl8@NV{78k;)` zXqGIyt9bWMud-&tpW$*b%MW(nE+iAL#5eji$ngalru~OCvEe_G-EY}r%y#!v<IG<2 zqWsn`&ry327;vACGHd=#>E*+(Mnayq%KAh%UVP-qJ;=(Z410brEPt6?%!z&B`%uQ_ zO>)D#XMDUQ$vTZE*FD|5!qgaNKAF*CBHT;$TpqkA<%U;NJj>W@B`H7s>#&S9i|~?( z)~GOQvrbueNg>{eZ#UWaQ=ScM!q~xIX;V9fqCTkms7aW`<@ZFr^&fVhDu`mWxz}t- zEO`XEYF6qwbBDD{ztpUws%io&B~$(jeIj`D`b@0S#A|cl%e-2}$I7Pdm9D2>%it{3 zpEegoHR6pRd@A?MY<_+bjpT2>##(vpW#qy&`*<h2%9fg_^#yx2{RD^N@F{)U2imtT z4?bJ8F13;#YSK`@+@xaR@yhmwNqPw^CWLtitHQY{R#&!l%lR2AfTt8UWWj$-@=dTB z;uiiKsQxbMo>WdQZU9p?`Kc9Y@iES7PN6?~YWl%Zl)b-~O~9Vz6TSKvHp_L!bx}?1 zM#g>z@}j|%x7vF4J^e49y|wS^37<9YB=y+5^0>r!zc%x%LWifk691R1j<G4vE9dH2 zI-88+|1wy(k~`|MBsFv|e5?ovj;nv_XuBR$xU==1MdFXySB=#fccUZc(He}(Zv2G0 zA)(%${kvU8{U5VD#~bx^5M{GBD+MW8IdAL+ogchDvHq<ie~0oQ4NxL^_&EH6h=xr^ zwMqN)2Q}-dVsG20hQ#z&jTWKqENGjbpXcJalKMTQ9t|8$v?T6cG8lWPdqCN7AEc}t zLlgtK0v`qrJd|{u=kG$@;iR<=y>PmNv0)#5Csmnl7<a2F<ri9<cSuon7^ITF?(~Jn z2)^_|?wdN^Ye@a(Qo^s-Tk{JEMeY~$dGdRe0U|8+%B>b(FI-K|h*x}$<jGJrV84!2 ztlH|Y7QJ9-+`i^p*!3%8QFfHt(PSU`N$K9ldi!UlFFw!v&rkZYUWjjWD4yJJXM5@7 zs;@4+mbS)I%#>j3?3JV7v8a!JEMMnlFe9oT`z&cLrHp!g{$-6)Yug#gupP>eejzsf zr%va;xDL-Yt7aX{m0ohobSfRrObYnYkWpQ<O^XbMi6V`0K~NnO2tZJlaBo+4VL!sp zn?=UmzLT&RqMv6~DL;M(O_gao8~9#RP9R^z_xkzXP_VmSaWJQUGr%VI3t(lnSJK6{ z((P<lBjAEi%^%Oq_mq`p3-Q%JpK6kky7g?0ntboe7I*Kf*Y?RAe1g;KOIN)J>ONTw zxQ1s>7Ia&sN8#43Ty((zpP@&Gb#m)7Tf-it%Amgtu%ySN2xXN*8+Xm7;#R)Rk-Cy` zmP46#poX+UXzInFDY>Q%1NJsdF6&E#c{K~?$oK+ZcnWu*NC35G=`u?xkw}d|c_v-S zn4+kK6avVv-fGmyKBGnfG-dlsaqy+35pK2LjbSP~@Q#;*v<b=goUsn^Y9PW$@{Ity zqw}>ZYaedG1!xWZZ%aZ|=iYTm_-555M@dT+H1guQhXArc_Oa(F1IUk`URLjX##LN_ zB!2X7S|65d{cORzrW|EjQV>#&|12TV5pl4rFTC1+u^F&6JL8QO?g^TzDIW3wd6&t_ zZt$?W?Y{pJ&9jN2GRdOGx)g7&E=r`%JC4B<#Dnkf^5*VNxU+ckH~M%b91N)ptu1j* zeSbOCyRf8A$l#4cM}I%3@NigOAf_rt=ElyhA#d#$Sy#;jY2gpndIQ06g!NwAb!VOe zKmTD|LjMEnfIP{7N#L0{7gEv!MbZg-o_SE##LDQSE3<~%H`B)o_hTM2-H3P}v28Rm zD*`01Uh>R+kYay)8;)u|H^;Gce{8gB7#dlfWB;RQ7`p)zl+B0j2v?WAc{xvQ-r4## zi9d0aC)0Hd;C@RW-XX~)`ZgBT{!{NT)$RzMB**D%Px+tK*|R(c#Y;IvMtBSVc1<am z)Y#F#(LDCLDc~Yb_VtWsq0c*>{I-_FV8#B_y7Xr8M)gd1NS1<hNPvIsW*z#QwH|`7 zF|O83ak09uW~1VCdh^*F?QO!c-6(uRuV>u}#51x7nG=)K8pf+3q-9%*6)U>Ed{?tu zEkuF^i%w9vJem`(2&=x?IUsJ@de0qQEW}r`(|au6el7m-Yv#sDBd4g|#sV+q&L`4- z4R5lSREXVA=0qAB_%G#WjWF^Zz0!B<H1USA?(ZtT)<;$!@6sr{EJRl$%=#Cm#2m+^ zU=DTsGcB(_UwBqkt<NU(&3hH6ewQ;S`@vMzc>z~mp~n<Z=R-6UQQ0KLQhjmC((uw$ zp@3UwPW0T*HZ#W?NvRHVtK8gr&i7-A=s8<Q|NVB%$SCM*)WUON$Aq~U$;ZwPzt5DY ztYSk#$SwK)IhvgFM!)wYkC&w4jC9eG;NWC2hA6K*Df<zj#2+Di9VFf#_K)PGU|M{C z89u#M9UcyRj4?u4r&;hFovjz4jy|~ZTzw**rzhmB0rpb7q|`!#A!H~^sdbP}*Kh`F zZ<b1|`9c%y&C5z{n2u*dW%;MK*c$EeQFEet0ASr*AZy;6#IkpaUVNMrGt~g7cM)%d zMfy^tTVOFuW-m`gc+hV$H=|g-%*xPl+Fu5FTrQ88-}0+%1SS+4V$+)26OIIMunEO= zUb7l>N+bKm4fVi-Ed=e&57oHGeZNzdPQtAQWd1OkOGqX--N+ME(=fS1<Z?Rj(q}ix zm-!9)os=PCb#iho>h$(s1|!hwZP*^@bY4vBplSm&twq-I|I1)%2`(!EsOiU>>SEdh z8-tA=Q`PqA+h{P2-+lz;HYD%dhHWQvUpltkrW1U521}Cpq4695j#^N2`>0=)w7ot3 zte6B{-}#@`G+n!y{?EC8!p>*T0<N;3yDoH7mgD^GJ76;){Z|9$|2ZE<KTD={W^!_p zG61c=do|yaxSzWv!9~1uY>2CqU?uVvbReqqa`lpj)c3aUs_$;!RRYGYyQVpng3031 zzk|&|E?O%#JFcne>1!~58NGvVA~lYOTPdx>5IB)bc?Av>fjbjNP9NiCyc}#gW}HJN zpyVU7D7@^U*3e4Q?j3=b5yPufu7C2IJ|re4R!<(M5+HfyNZsP%BEA$6Bphh%1w?9Z z8V*6mv*cnpto7p3`GLF#HNV{#6_7mabBY*v{2`>Wk8^Y|K1xbtFcwPhNsTkYPf1A$ zYOVxrQF6LV|LE#hezK9D5|B6&OG<EG?&&uPv~_#`HQgh*3tw6?3rX?(R~43+$Ns19 zi4z4-L$a}3KYe6CEe%BPsAF}OiVjJlbEBtEoUbJyCR6}}dlT({I(tDMQ-d~I*%*n# zMy*KDd+F_il^?2G9h-|sKihdwvxoknr*SHTDs5Q0=gOHloz=uoL{p|AGIe==w;YyS zm(~C0-MIX3-6&y8NERQb-m}DI-F&=mba6h)7veEiZdN@4XBNYa@PQHwVB=YsmC`cB ze-ETGRvA|)LhNJ1vjUA-(y)W{&4)`ft)NnA-`}KpvfP%?5b=WrMfxNK=`c&+!M%Yb z{the2Z<U0(NO0*V3qtaw>y?a?0(Ea>`{ub}vlLwJiNbfnKsG6d;J&Lucy>4o=af)> zG}7TCcuOdrZ6q&GQ+^u=A#g#lW0ez5o?W23!fCKr=%J@dR#sMO3OG96*Z>qnfll<E zMTEcD*le<OJ;Y)k*7`&XaX}FU$nGR5*&xK&2VYS@<tAFhD7;^4JdDelJ~f@oktkY< zwan!kd|6p|pa>F{Z_M%-&&%zRarFJqghxK529TibqGpR31X^2ki39S8WndZwBL%bu z?fxu6S4SgxNVt<UTer@{XnelI2s`F4!z<gMJTxU=7i<ud1<5D;`zx?O!i=z)qF?2N zw^iZ;@>^w&qyPX6JN;choC)aZ<p9ZdiJ7R5lyj&$jb}vVK}TR@!G!y4iPPpQa$#N) z`1rW0!<4Ae!NEbitelLT%RH8bpxav?ha&+32YT9^$Z-K&lQ7tN2^Ksl7!#G7*sxsI zGn1sF)5+f72?@UxT>}p+*ILVSrI~ByzRZ2e_O4s6B2AM5i-{D9$EShuuCs(5ppE-P z4XS)XN^uGR5HWn0$;;0YhXy;+ty<k$iiKUL6Ck4A{g;6$egXEWB2CN@Md-XbAfsSL z(&=1>1Hf950~|NfQ>0Un+P3*In;8?3IQ@J>*-cw8p|dB=@h%jF#hP=FX9u8^BUxNa z8!nbtE{emP06`$=qf{>aQ3nMB$YC9g4Z8R`*&&nxC1w6@TZ~Jru#jvT))7kCj@B|J zkpd9}paH}q4`x{LL@c^Gw$KFDlBkW_9Ox8|r;pHJq%FCcTK$q49!Ew{x{oHfb#2iu zsBx0E!_}JbMix#yA{lT-Hjd<qC%DbO(mHRIm4bSi>I#(8?Ie+1aIsvrXaFidvdNGU zflH)N2RNW@yH2)3Y5H;6F0Rq~JCr_(o}eHY3>otk=P-{169BF=m${ddAlg?mV)?sH zV__dAzhPqmV9ZZ(7xY>g7+I3ah{s^8!vi(tb?Dvoy3F)~AHM*!w(IQVSaE>1+jaN- z!L!p%0J3RKA8c7!!wR5+g4u6W3o0XOw7OdqjZ1yhG6H9Mk~pO8n&t=wyJUR73yhB( z5EW7r1_*(hktOuET<X^Mx(5blaC1Q2f#qt#u24;4Mn42W0Lbb5gdw$I#6l#{CS(Q9 z;yicEOXek!(5~@mC>%elF5MOAZsWx+X37X>LObdURo22eqpbigqUeF17ffl69!ZLd zQuMtUaQqDM>Y<n_w+n)9F-L_)IaedCdBKjQFr@GgBg&Re=W<34J&wxNpwT^?QIWVj zw=LHrUNJ=4)yVBW_MRPjkUUBmSfPj6;sQK8J!Tm%_=ZzkI9k1Y!p2Pw7L(H5P3>co z;&QSB!a0yox^KD8{BZ?}#G8E>(f$`#$+Fe}(1j%TX)_WWh=d2UAQF31z*K6lX=M*- z1tfy@w6-Oas|#&|&?}gipwhZoyrdF`Ad~`4c*w-$`~=!EC8nfV?~UL7a6t2Ol)5Ev zE?I+pF06o!0dG!7DSswFvRvh)+hS=XT0FfyV5n*SV4C;}MnraI4s9QKfcKL%7~&FI zB-5+kv`|*&&Tgwq0h4v`C9`)JJqHb>fFdGbXbY-I=n1OtN)R@iq>0?N-SH?>vE_0M zgi<yqk7Jodtms28Mt2O`-~#igQF;u6xW3?j!K}M5^W-6y{w#jLA~_>hG}rjTncL|+ zEdu@=ZLuxLN-PP^beV-SMO|)y?os9t*V%zVf;Kv+-2x+x_Y;_|H|(n*;Wul&HSfH) zZ!?i_43KP62Q%iijMHOfq>~{uFGYHQWd{v^gsX0HGT`aEr5X%L7uL*5NL<oerMFW) za4;h`dH+}8CRqpo<9^l$&~4n*cYZ`B%Yt-cevktuC;eoKsXen`E@<1fc%PoQtm-!< zfnK2&&DfQ9;z3jFNlE}XP+Jt}35iRIAMBCp3DkaHO?Hh>(53F`%mjsB>`Bop`{^!H zvaleqhE0aHkQaj8L02++-i=fU8YgHSFf*2|@G|Q?cOJs~u@C|1p#r+WqKAvzXUGyS zY*mqLP)ESqBsl>B8CndF&0ld@(o>d|sK=_Zy;<q$ac8YQlt$P*D<AtX7ti^{lUrDc zOnW=QQQ#u>AWKRCY5OAITxlEZXxqa<8kM2pNVu))OfKoz!llyTVN9TwAtZ*U@Reys zjGEEhDWZ{7ok<S6%K_DkQ&*SZrw{cYK)1-5*fA*VEG0T~d4*|&wno_26>*;9lBGbO z3dkL*B99ZC>6!%T(E~rV<5?e>JV+DLFZdH=M7MmShYA+g%28z9;(TrB<Rn=hgFz4J zq`&|W+XGf0;@S3X(|1%^5*SW*6V+lr8k_~)JFg$l#sq-P8_zbWq`rW*h=?F{@J2`= zi?M-}lC5i+t?LVpZNGd$gv?odsVIg{W&@t<B~b?`<p}zkTi}mzrcGw~iFTlWq~<;^ z*m6Hrb3c{m-fD^6Uyh&}<!-gGM**J7oWsC5N8b4;E?1{<Nipj5|8nqHjCm#tjv{P} z&?oOo68k13#fr<;6+cxnj*jk!<VWFqJBEAzGK|!hWS6(JB?$lbLnYpsiA2vzKuf{E zawoOC1viI#L4WGpMOYu3Dm_Ri@CoR{d;~6W(28`ai;G<u#oiK*ykv5lK&&zc`HDC3 z!-?*i;g@+ltOZoTzNm#3Nb|;GRdZh**dEeOrjBa%wEXwPkDons3+>??t)|8Rx;=aq z1TG0C42vhp75LI7DTA51uNOtN!*%`S%&)H}I%=edn5C&Q%~Xl=y3Nfi3rh*{bF*uS zgzF0sWJPJ-%3)GPoTLA~CqD-8?wI)A2WZUpew--5492AjG8y3B*QBQTo~WFLfRB@? z)b75xD)6QOtWcF-K#zS`MpU3Bo}NZXDcBSf1XwOHD@ySZMEMd#W<}9+KxR!YlShV0 zL#n}m_tCxu#3c$OJAN=q*w0wDHvYq+fwhtxWacU31i$LM{$4&|*X+ZrhlheSYMcOu zJ11q*s8c;VPy3@=vRyQ}Y{T&^qvEuGqd`pcqYUuN2>8}KJL`B6pH108!qEc*j~osm z9zKd9HE{GG9zhZ|7i3ixh;uoQza_AILY%f=j!TBtxEN-F<tFDzGBRAMtU5jEANM~{ zZjQD14Rp}fD$A7a+fw==SvBTW9gvj4h+_qp(13hA`#(Ev0$pExK!B8S2ws<o>|;sL z&Scg3Bl_Mjl@#c^uO~uZ&`+2^-8gD^i~{x0if|r{NS0w1i_SUV5YsC3RnL2bayf5A z62e7`Cdj;|A6rRYK59$Uij#9<)%BBgo;?fdGzx+-_tGJR)c*$|=#mrvaK!&y4)ebu z#CeXJvT}ETU}5BKZD)D&{{aza|A7d)V@>6lioN&4%qJd*AA-bXj)bM%k5t3<4=C!> z+W{_^RnSR-X*h_Y-m-l{5G*)Ju>Wx6-ro0@VL7s~=m;3xJ{9_U4<s%+a{6#LB>T;p zeX{!j?<wrY@LGibQSRhvZ*t!}9fS}zzW^y;1eXrjwn5Y09wyk*blQ#KjeljP8-?8@ zYTU5B68toa#6m0<>!df@NAuU{)`a<3SnJ!V>|2J;6w-W4W|8KwiJAhurLUt;!O7Mz zpNi0SW&7?vAA7mY{kS}!0@6ugq`%}_{Myd<n2x@s6yhiN0cK48V>?ec<M!REsMt3F z>iw2N``pyY%~;TYYnqbZN7x9c=3_XILlN8d<@{sv>gllI!&_tIqhI2B0##L_8@fN) zt-;#+8K+({P%Onll;%Yi<cP8izjW}Y+~2oU_+!vk`T=HdJZz3$Q9wi*Dq7|#4zt{5 z2u<mwg+zXFPsS$-OKNn-yqAXc`2k*>ykJG7iy92i!%i)+r!e?1R|stn+4sJLD4j$R zES6bIFClPi^!L2aIJiKI=})BZ##-eTr|*vTYt8JsVd^WmsxhW%srp5@pBN}|K=TKO zmJsDM_LG*J@&yVO5c7XP%X5D~YkO$JBpNMcV7ZMCl8*%H^<cwa%03Aqe(YY_sap`t zjdhcj<mQ!D<7U^z*?ait#?+hQk*w$Yo}kE2JPKt@%6Cbc03YG~Ezy<nAP~P_0r6we zZU`bY98Sgiis?m$>eUh-2##vhni4yDd);gCK4SEZucIKw2DD*RIBv6QYOOo>HN8y% zlH7b6g(0$_^ZMFFdLTfVf&%aoyDY@_UlKpmxi3y{%&*z>NS|T%O|5+9rKv|Pe%p|O zsLwwGk0QPl<`g>qUhCOZ@BNWJLWj@dTmHB3E5TZQF;gc3PC3xF>FF#1cE8@TBMq&& ziDs<<Hi7SWdO7L$PUkw&`{FxK9`+qO7Hq0S90Cr-q$!6gpuGq-dTHee4efd#Nhf|s zpRIu%pR%w*y`Qt@+wjjaN{+z?K=c#+idYVEA5>X;(Znh~O~Zaw!FQi@G26t}TxGG4 zEP>>8RCO;m5i|~lnrwy12%Orkd{b4gA^uzl%H*`2LibTXPUon-+XANZeYyRl<5CbU zHR+EzcSV-g3%StI+$pAhnU3QeZOvkjy)RnHB8EBUx`zkafBdybVlq~8p$QQ|#F7-f z{&{V0@wQ%ZAw%SEf$SHcW|b2iy|(#~B%LMn66OyJ+Ze*J=*1M1S@C8IKNogzs*y}4 zyDrS6Mo&qJ_78^@eDxC+_IJY$4rVqqsf)T5;6<zfJXx&gHdXo2k@0$wx?*jYeteFR z_u`=?CT{J>;*4UsyU@Qkk*I9_ZV$pX_>`ZYot<A)sHOWkG^I~%kYo)>a%7qTh|0eI z+zm+(=H-{^2u7puT;j0<T~H&_%LQCKeffs;gmrVxmY4qpyP(Z;4A$Bv=|Zv#nM;D5 zL<Wg~kzxv-y62Ap+cuUonmHZz%RtfSf4=Wzg9m$jj;CKtVLP6pIQkC(niKfg!O_c8 z3D(My0}!MTyKv$p+2uGJGq@;X2sJV?y>X=m<BKqD7K;&p5xYkmK3PWU<2<~$#O|P8 zc|{|4unx0O&q4j5er;_TrZlVsKbI2L7ER)1N^`QAPvT`4-D}6Y(Z#`{h2sfsv=$^J z1;TFWn+N+a4`*TmTGLYnaxfb0!c*OB%yN}@ED|-cmzN*8JZ=AMUZcZ+Iv6EqLL=yQ zS7)?YM}tLtn#f7SBuLoLI#+1R2#UNIO%Rlh0<#X}4RlB#n}Ov`%0MEyT$Bz%dt+BH z!T2+Qt}GxpZW9UToH#;#ch6d;$`QDq_Q&_mBM6XiUe+}I^pSn~T0+ksp=74St4)+X z_D9$ru$&B?C*hD$LN(Fp5;8eO#9C~Cj;#!O&j<;np(ZnGqzPir|C_Z2oE6=};7eh? zu8RaZ4}l&kVseg8kF<5`iJt*esO5Q#lXHn%ha&X!D6i7CR2zmio7D$eU#F2nS>ou4 z7J2|${$WJO?KdoOGm-$Z`e<>d3~J6V+^78#AG@3w8A;%S<jqEkd3!rTTuCnQuSxt$ z0#P)*Vch{Ge$DPEK;A55EJcrg%?eULH{RG74xlz0A4p`eUbxBuM!?f-gTp*3iC10V zX($4pm=VR?<wi|hP#&FsKp=rIdUj#PUasgC-TIG2*+h8cSNCu0#hJnAc}EZjc$h+1 zZnkm90q7_momkz+p*^FOAT0{GB}&t@H>Ic2|F|j2=4teA*M&4&YflAhw4(^26OA5x zOkez3Y+Vywc!RJnuHVLBwh<JIO;b|MSCBA$r0CP`)=dub$R{X5^70A7(Pp!9Dmpzt z2p#1HkttjM(#P~zFilon$>`a21eUy%SPW6R|8Imn@^WCv(gJqK82zb?2SP>Np2H%Q zU>;*gc6MI3E)v~G$*$?61Isu@GNn8c{^NzH5Ta(ySAY#W_NgE-6V8{FVwPsEz&Gd& zM3$oPF8D<$zSLNLewn%%Fk%0?m?JxwOw(sdgQs|Udfp$6Y?7-9GMY^07oH#UC|B0b zD!@9hx+dwM{!64Pq2^JM|3ju!;pJoi>;teLhVO8(K%}iUzUmqLPx(ZEuz>pD6*>Wu zCXVOwr9hK;rh>KqGDK#AM9k9lldj{s4eOji`Py)2CeBd;dsjF-9k3-hxxbvkoIe=7 z`9erc+$Cnjtt6iyHE;C%deeK-d6<LDt<>nql3;lH3l1oy996C^2OHUu(_1s3m4Rc} zZL6N9X+`1YgeG7(MpGq6;gK{aueD59Jl)o#4Mg%ijX@MJ3;@PXnzp{+=iVy75pCsQ zh}pxh{4W^O4d^R}l=A36KW>~$HY*wLh`4PA0DI(ttD~Z+14<nGvk7ug6vib7EIzv3 ze-%ITsGJUg9X=$IWK)oOB6>e&Npn{`#t?an(Ma8VcqsBZOovx|6pE_E+m@n|6eMe0 zkAc?K(BvMVaN@ipqCcu1D<j;KrW`4Z>>kT+lLVYS%hM;c2tnkPH>A=Hc-Pag=$|=6 zrN59V5QtvOzClcgIx7poKwF^V69Y0$o%9;IV2NKDqaCs7h%|Ne52Vsk_@f|%hetV5 z2bVX$+e`I`I@9gpQJE(851E9?6gdOHw3@ZNB%OFXqXVR+GR+Z^2cuI=Q0+m^aT=W$ z9VWj^@d(n<0l3CdPB|lS<?z@mdGB@yVNI)^o}v@D@^UA4!rGSWY&<N|mWH5!;Os;_ z!af%oOe519pyPD;r!852EsqP8iRt2B3BvRMkv}jb2@Xvf38SM+7unSAh6!=T@*GaN zb@c$f(&-qAa;Pq}u#5HM=Oa^l&cFx|Ur63gfjL2{h|v^)ON<;4h!Mv8s`x`0=nBre z5|mF^-XxIo@+#K~EG#{(J@V+DB=sW?9Er;ZD1x31XbxVWO3QYKrMp3)nz*3+=;+uy zM2n|lq-HHr$F^K{C%<V5jkeakSTxem5}PnchxFr2U_`EqqoXw)5=vcZ8BvK><9;d! zC6^1u14TT;xMN1CS_wE<9E_l#AbbW)=<3E(1|a!lTMq{r#V9a!FtWQ_HZSjT9Uln~ z+j5_((%brwnuynCXP2r2!4_3*!yx4!W^D|XhrbDOaq;{PY7s%A{6NX(kxJ^Hs0A+9 zMd7G|%_#{E<E*;a4T1<#Tes*@CC;b?b%X>Wbwu>~bfDM>C|dh0Ub}xC13`+ioqwfr z49z1!!lV?!xUg6{?Bo&xN2Mu<Mr)=hsB6}WXrDK$Cc^_=fnxgce4*S~>{mx@>2{%m zhXXx4%@U)cMiv%aXNdU_?Tljaug+;gt|>Nm>9*B=v2z<)5^n%HWuo&rKpC;<=ps5J zK6xZ{g+3>c0-Y}!1ydTyU-ItcOcf{yqaV@foyNw7V$?VGU+BRZXE*p|AdF1MVWKHc z@498VN1NybyD=R>uh32Kku7g5E&W|4nH;RW@AR;Wu-U)QZPz)tfFAgDX`cA0%Qa1$ zPT<p@Sec46)Bu!Bo1BcLyC$SEl_15XWZT$Cc0CqkyFd?NCHXS(jP1{2m7q1~Lnqx$ z96)LT8wOynK_T)H*vZMyG(6DSsn<1qVlY-liS7WX8r>p*@NdM!GCHwn0E7ebb)*1b z=v0`k>mFr5h7Bkpl;#8jN5&h7;7B~D`trYk$corFd-r+>-j!k$j0Z)<q3F>)%@Ir4 zLPH;31|m^-0j=|y7jL^BV~^1I($b<VB<E<2nEnD70^e)<Ik4&FM2~<YK&&GKVMKwA zoQH)i=hukAFH8NvCW}T2$*Px|SV|je9!^n5kCgv1L>wwtCCQO%AJ8Q*mXn({q9P-! zKafh&q^@{8yV|okB6IF~6y4a9MYa=3+ACxku=ao(_4}=>QE4y-fKX!Bex~|ultY>u z0u7cfM|XA!M$kc=HC;3C+}ZQz&Rx88<-%q9?V<DwN$Hn&0xqx%$#Q`2T$Mv!1YQ?* z_Pwe7=qZUz;gmP`^AE_Y>F6986}gRmmZYGlq+{XoJUJzQ#<FXZOB7asagF@{MFlTv zo!yA~>M%ZSGb7V_gQxk8?yC*XjLbCX;^8Z|&PkWO+*w>%=PNqMY$sfaWr~al{@%m8 z*p<(6>>k0H1O<!#``}_Tb0moRc*}N(mk|{AYqnxfNoz}OzdUiI`^%95hrS{Ii(gXX zAG!r@xoP!8yg(lsG!)!B=&v=az2MgokX9M3-2U017Kp43VbUABu$NYFa#1ccz=p>C zt+QpU!rx}+36jTQ{QWrX+hDqn^bh6%?=N3!tllfwEmx$z`E|#SdbYOwyv%msiPWz% zVKZ+K&qi-HKYh&Y`&fHJrnRayYOfAU82xxQ{LvE6-8DN|j~;r5-{v!{OyyIsqjDp8 z0%6>8N}E=|j3}t$&3e+tmCUE>ZEio&Z=^hKdh!Jq$hsy;1}b(<D3>rIEoobDLl9T! z>((FNb9W)A!zTt1x72DqkLKaPuD=YDcIBFBx9km+(tDuB124a^*00(fyEGXXKq~-F z`k?h)w$CM->Ai*~tDUySjD(H}zBNu=t>?G<Z#5}p=63Sl71ph6*xIcSd~}(!j0(B` zlkZcnKxokO?HsRPzb>Efb+#|honGERy(SJOh;x??^pQ614?JWEgb~FyTibVh|1w;N z>Xqjg7AcRa@`~z;rl+ib8Fm)A-<~FD{fO$%?`UX*8?G&}blq+|IivXs`O)0MqJCRH zX=zC<>G@)Q)Oya%<uYM!oBsmNbK)&9JmDZK4KZ;=E%qRuIk&nT4P~e02~N7)4`|ag ziFl!NF2(ZW<z7>s$KNv;KLp9_crpKFC?M`j6jyXW#Dgj_8w-mu@m2MC!OC#cNTlBR z-ihx1!02|z{LgQ4#Wt%BRsJ$OD-2_0i`Lyk1K*2D26fz!8S_y3Kb4^3;TPGW;qpAw zRfL?IGeb((B^h1rg@CNC`rAu0zE}9a1xveqvTh|`L-bLfR`o+4abITa-dt14%HcL% z{4EE0Za3HLeQ7UEN?p)&hTL}zxPkeCcxR`>f>W{`7n8Bk<1~J7_x!<vw>OW*hwm($ zZalOV$(On_*Nk+fqB%aARXbmU>alg-HCwVUm>!8ylArr%{iddGTJ+m0g5HIt?GVO? zZAn@`$ZxIgHH02R-HIW<Kgv#_<faOYQy$6vXpol_JKxLuI!^V+L+1xpCi2fll@f|c z*)~cVJi9DAEBS)RIm@-O+1A0=_`~Wmc_IN5E2pNLD-LF~pvu=X5pTY9_GRp{u$>j} z>&oHUyQ8KO6con%EI9OKm*9Z}+CTfgut?I#nxo~%;b$N8In~Ez#cpLrk++);;I*i8 z;CGvonTo#HR~9!fDMzofW>uPs`^1El3ZGui?VA>QyH!ZshZ^K0@#IG(O~u9MRq(O= zXKl0I?pD@2BNMQ=L6o~nP7Ah8j&0#Y{$=n>UMHgk_ap4a<3MX2M?Wtfud|J9yf<Ra zcph_7;b@3fth(`xNi2lMT|IAQiLFY^%nQ92-2A8E?XyP--}>|E!Q_CG=(EQ#a>U#% zA#;jY?%mH|?h-wBTx_6fy1#w8`nb^<B>j9n@|R!reW}Y?c~iD8N2d216Fg2tt$zGU zkCwE(cjP3|+Ht5|*zt3dPw$Q?hr~?jg&s<D{g?d}N?DKNyI!mJ2eG>E8osjmz4%?z z?l7e_uyhjJ7ZLGGvZ27+UGq}ynXv_wtBDl-j2!<@G{*k)wX#b?f>5OK1(k@fiPcA_ zhyAlhm>Qk~!|?pF`=7t`3EIvbyV12d0KdyI^PHeJ5()Rl$|bf`uJ)s5wc<KbP7}!w zA?hz*#jwBb5u7TH`;KSgt-7Zy&|{%loWvX<H+whQq>-|JDp}zk71D0q^Sn0v{9lHK zvb(2rk;v+v`KqRZHTpMmoR*hE*>=6P_EMb=3d4#e+g(Uu)z!nKuHCcSUE6d$PmA$O z{eKyJ$_*D-j-;56Yje%k-@cNLVf(S2^k3_aowPN_2J%IKaRW^LHm51A@Cb{FX#-8v zVL-8$ewFk8uGO+=mNgxcIl6%oQ5o~;yJp0BReQ>L_MB8Mt7BHcxK*FvrI@<Gr}F@# z;f_6Flfeu{l)pps=L6Hd9MiFu*GXjwL9en<SJ*Y>_{FTbUI;c{n6Gec{&OQPw}%w7 zm)ttQc<=~>6%QfJMqLx*<tQpiZlG>Fsl1fda069@i%6f}U|Zim8hMtlvRW!>8^P6Z z4R<Q}mQlK)D5Ea&&%>S*E}iM(<F#L(0!_CM{xYDqoxUIS+oeCd%W-+|?Z~|`l>kNT z!&vrcb2rTG`mX|^A>!{gn*?r~tnfS(!4CBQ!VtPd(km>ruz?tm#KSSmv2(u?sePu6 zJ@3Mvk%@_x;pGKL<d$8_5>tny*UkPal=EAur~88%%!wbD5}rJEDS4e@hj94uqjW1< z<C&1X!!@0|uVkjxmOd?8ea{9R)<gNX#7}x`4m$oaILG!m(JA{~Yx!+v;&^IQIN~J# zO}hfIw#RmV>;E-tz60!ZgX-^Wzac)RRl0cJ#@Bc+|3Jtq=NHh6Pp;N8Qu|J-R@P#F znPYT<X?+j!xm@9Gcj%v}#tQdyZ{L^s@NRL9^*O-$(*!crs(ge4qI+)h87m0^x7`97 zFKk2@q*3x_NZMV(eamONOQwI>OP-$(5x8;mrf*s|S^N@9$)n`26W1LgLypSc&Toe$ z6=K5Wx=L9$N4vXz^>c=wGX>6uYW+&^;WerMXf=Og1`4K1bnMZC^bfGQH5;y-`vD?Q z!kFt0tHaljUu&?SV)P}R2Zm1aXqwPK>*4pw>a5IMH(tL8d{MzqtNjO8F9y%noKb3Q z>e^iGR2kb;B$C_Sa3yiOJp{_l^;9sNCdM>ck6%T^u#@O}?~3Gt96<u{tX|RGoHsaw zJV@i_{c<n1lk>O3>Gxob9mpRs`6?aW*ePqLX|0tj{AFnE+3j^1-Rx){I{g!!p&MO! zL#s_qmYDK(RWb`dG+)&j8S#yc)U~Q*K-Ij1JfvjX{;2LHf9hkv9ewE!FCxy4+g?x% z`RrU%X<xm1_psNB`{^2s^3fgZ<JRwQ&>ijU5z|%?*&;_*P)bUD!VfeBrh@*<LE9@( zsFxFVER<KAnF&e_+#k7nu5YU14{=tGNEPKl(XJjflL!8b4^1};5Dq^jUt>_;AIl!5 zaVnUyp5pmg+L<cIAcR!EfI*@1bKC&OEAq5r@m~hJE}vt%eC#c+2$##@<M_~`c2{So zwB%LLrS%=<wXfdK!Q4$Zgk7s0TmLf1$=3M_e?=v|#LtX$h*aV_VS^&5#3z6sjUG3v z4$LEN6;l_JnC+T$qq|q{-F@(IESIyRqU*k7j>7C^%ITlQfT4t}q`jM+YTtN?meYn8 zv%3_Yga~{;dn>Awc%>lWRjh9?ZjY|%w-7d%#wXExg}UMzzo_R_x@eL*$}rm?JK}83 z7q)7;WYvZofg6hI3cbKh@y&KTb{p-{Gqs4GnMep)@<x3ReedJ5f7&fS(_q&Am!U`e zcbWD0$jmyhPIkOT81!bU?x5bj!I~>#M*n!FAzV=(eg&IixSFx)t+AmgRn^LD*Kn^J zbFVryojr8p=Z>(cp6NxwPaci~^z+KHYGF)=i@{^b<1R-pqy94VCm)O(hu!vaDJ6YW zQTA&14*Lvw$>|^*LLOqGX;HLgKg`tD4r%>l`KH$>-_LQqq}(MN`_Vo|?Q`KX0|6P~ z&vp-hxkLHougMC(u;qhw9ZfW!W0@O!^rkJRr^Tq5(_i^t6Jb}<J@@b3&132BNy!Ie zYh4l^^S@tjfvA{x;`<+^>P009S+|<5cktj;lv8^?|6I42sk037axRPi&{D7bZHP;0 z$??AI*%?Ez3+fMFrz}2Vzw%zZchZI><C?JOF?dNOjA^nxg;QPshMUp^iy(u<{Y`@> z65uS1?3`@(w|9?xHZ6yH?-fOUymZmWZsyxtye6}qfEY6`I>|!05`%AKpqH?3@TMnd zlBV>U2)7^-GLPZs<YGd8`MtFHZ!A{p7fIcLxEIyseGVadtUffb6R{wmBUmzvxRB9N zfDvR6uVD;vc^y)DFSRi<0)(!)DT$cZ;%OWLX@`r)S>DqBUNrPB=*$O+mFgx>RbI9I z1bKSHCYFD^dd~5>AinmO%)<+nmv$N|G*~81qkl$dzhEhT%T;FGJ^kgZsT2AygNn1$ zZ<kZJk*w;9%kT076;|Jk&wCAmk^<;x%G1Qb7mzf)7?0Uo3i~priEOVQ_}3@PH@GJ& z?Y4dE5xaq#FzdT~*$!qJ99aC-j#E>}80TC;C>DGFZUq#gV(&z98s7YLbbk2MYENFU z@TO6K_ghxM>wheFs^{4)TgkP}UdgT+nAMvr=Zzj^3X=|AI#<tsHMWf&8==x%W*Ut4 z&V@J?7<ltKD6kvsN4|PD3&#tW2r|{7qOd_Bj?xn<-1@&0at#6;SnPvhG2H$<mt78G zoQmi+KR!ae9<EpaxB>KGw3HV=V60jpjSan|vU;QS-LYtf)r|FVc`mK2C8PMauGPpT zUV%L|afx%rGGmWSD!a>;udw*r!OYd0Exao(Z-fJoroen@nMz-VSRzBHg%p`DOV#<& zGm!ZbJJbIH$v`&01odd}P**aq4UMzL*#jRV^9zgE@+ojkIgFZmXSuRU536mBvtPji z?<pV>Te>17eK-AxQ{y!3b0quR@#@DYF?cI5*27Z4BLn1p?d{}MK2Jeehl+|wn={;A z{FZlzDt0M~RnSQbT-I7Ayt`j}Lc80_g+&hziiGVnzaQ~ORAr{eDW{Y09~ou-eN>o! zB~IunBJVZIpAx36!<iLSVpa#p{MJ4^ilY>$ti#_GJ2SjTBg?JxwN%4|)Y7oihL>^N z;l1{-J_-r3St+HCq?UsNoIoSS;D7KY$xU5_wj$j2;y?KmSiJ>h10kC=gs*sZhTR%` z6KZMkJT<Iwb9I&d97o`L7Pzh#{{S{m<WNtIRME>E^6-ZR&L;N1R*wZwf?-dEl@%e@ zGLjpkN$GzD{&d3s0Ora3h}TRh>m!Sq&8Lu;TiigpnhY9xXnfVJF5^AJe+vWPtZ`g0 zkIKpXiL_X=sidhf37Y7MBE*r@4+WXnju)51i6`<V;uY0Yl0xZ3c7g6B6Mq(sG)}I< z>geNa5^#?h?gsV;qfd&v@f<Aw0L7E}6DP)L8v1fWc+opEFYW3Sm3csIv{B-?ZEXZ} z^JdB=k>T1nj*UJFY#Ft<cOD2?JC70ha=4H_FR_1}Fu(b-e<F2FMRpeEMhnfPllc>B z+X!}=qcsE(QqnZ#Gs~bp?-WfgH%%;`g80h^)2jQAh(KxTv$d9f+U#%Oq?}e^&*8MY zD`kD%ZiA6eHWyPz7^iS+xXy6j+|rqb;&W5UB#?=Lg~W>zM^HZnLxWIB6DFTFQz;?3 zG@gL?FY|^K{{S{m<WSXORWx!ocktRFdx^cT)uA%JStFsQkX?pbm%Mm}_<PZl55=kK zo<G&OraSw$Qc+dF_@{~49UF$Arc}&nXoJPWCV9{F08y=|hANtNcjTvWc29U99^IB2 zGU&qj53<ZEHaP1mvbW!2e_>QLd4Ba(liVEB{HllXru}1=lX%-3q`XRL5417GzgxbA zQTb@T(!xGLPx`R2%o3tFgjjQ<;JKqx95uSbYjTbxb)qouVPlE=Az=Akubjj7g0Wsu z;a0O?ujKqf+qd*tV9-w7%@pmD-q!IPKS)@PAxPjRf}QV-k$W2~I}oaHGgMPX`3M%f zh}C&jhe9&7<_W`n;^*zJCIzqm0NohF?j(N>&njoPaj=i^jNh?Q)3p8ixtI3_yZ-<S z2(C8_G6<ynSMvVb{K|Sb`{r13{{YNr`iWJTgKRw3obdku8rEp~Y@b<c%T-eH=XJ2q z53lK1ca!nGzG+cL`J`@LOS!GD_f{dDy294X!{9@Q?7G5!P8K!t2!C}+@`%2*95?&x zgFclVGz<)mCWbMipbHgtBO_nt)y|G9Gz_fpSXFCSGswwebG?nqN7^cell_G>as3Sn zx)}DVqmVb}W{VX3lwVm@Wv#rFcB*Ihd*Ak#C{O#de#&e`z<H$dF#WIISbhNP6`{2i z893Z;!+AHgy{cKmZ^L1AylfRb2M83xo^Cc_E_>)lhqYm%T`VU3Q<ZinN*HCPh0-%P zxVTg}oQw>8RXZhfM!=A~silYk8ztofpw8_RF*Z?(lIhzHLj1deZ~7J&RW%T%;<^e> z7?VByXS@4Li6O8GzaYD!;mST|i~ftM)BgH?!xjaE!yHb76LhSXFy<Dut@Nx;2Y_!$ zExqBoew66TwX(y%<9@a3qImG}Rp&G?w#H1Bvz_cJlNNj;6H^|1m%WuolTl#poH`-v zc-ec+@UpS*I4T-AMVl2n2fW);^sgvsD<0DxA6dbG2HMTkeETd15e>ASalt3VToL<z zp3f<;;M*~kQNBOKa3p?$sXsTf^^z<*-8br-t1(8!#Wb-xT$i?MEEfo=!dp)tpT(Qk zXUrVn+iVlwz&%?D1Kby%;*yCc<Gq=KLv;DQ>jatcG`3oEE5)~bVfH^~=ufZ0<Ppwg zWMSo@*>CJBmP|q>iD#x^otD!vZ!lHVaDDEcrbyZD4j^{VHeDd3e!kM?kK(+ZiuU7T zHva(iJbv(1qzjl#a*y$g{(@Bx<4yX<C?6*D@`;#y4T$=QQ~p{nw6KqmQ~s<kD*piB zeM*b-gFjay!XKFPRKxa%Wc6&()d89P?Y_VK@K{I4o%SYJzsV%}mJ#wezNL)CeI}%6 z`SL_o1a0@MOFz*JhxR7IPdkBd9>H(o7C%*Q@`FwKBUmLHelz8e{MkVI%4F8&XjC|Z z?BhI4d;b6&Z~p*rRM=Bp&098S59~8vthH1AR$sKRf6dZ=?krp6#bG}u3mW+ZKf0gt zh`zN)fA-A!`!Py3VNI&z*1k-}Y?kTZRuw?}FjD2H$)wryXDuE9SJiF6rIr5xLrTLY zKkF#rC;S0p^k3`<i|BiTd=j@aBx!4hh$vG7aTGZ(?g-S>fo3cgI%e1k$o{oa`6vBI zxW$_Nd=?(&jV(9ooTtNTvv6t{V}4U(WZ39%`ih9?;tXUk*uN`BwCcQ|#ARkj)R8G~ z;N9*vO`ydZ^Alte@;fe~{{Y2dI7S}Fh#J<^S?<lK4nMl5s=ci&1OEWp-`KG#LA<n* zwZ8nO%CqIC>@j&E`Dy<EbyxhBU$RhvzdFNz;{LVkU;Pt4w=65<;Yp|ZsJ_bYa`-BL z$v5g=SN?JRuUIF`$7I#b@6N_C-`&k`w5fkLv-OfJJKZ<xoTtO8vv6t{V||T{it<nH zL~=LIYsV8i^LJ#5-&s?BP2W=cl-wD$KC#kg<K^Gkl~Q6fkV%G3O2;rh8iSbM+5oa; zE-8vu)nU|xPf*#XbJ}g)ZI6ll7gac{_VrEVZ{fe<kEJ?!otg4Dy~OoBm&;|0RuQMF zj34n6`xYHrQ$0f;hE2zaM&JXTr+VYqu}V-mq@<KL-;~)<{xsjLa>b}z?s^L6v-_^* zA6fbo{{WVY?JOhY6#oFL3(CXor}~PZAO8Si&(+AVW)J;LKWHpMx(~in!0B7>ZmJr{ z4db3R$iwU+>j(K8zQoHH`6K?NgnW)KsW^kAghqeqhwV|l+r;d{=p**5GY-w)!|F8m zxrhG%Y^i1&%0WLcvcsv4(9-Am-1GdY!usV|9Bv}2m96#-5A7<N0^^aCO>;+qFLnN) zpdJ%T_LdL%x=;PZiy!xLu%F0&)s1|DAKgwKH8Fi^l4%8)$rx|*_G40FcvUS^*@!$f z(!?A<`PY(^_-+|ZOk}E(SMXyE&BMy=Y^pHIhrO}YMq+tk=CSZp_+>lfd{oR4u*i9= zJXe)afo#S(f5*-HRSp{WS+&%YTiW&(k@^dh{{R%Mxwh!ApO#1Us*lM(>PDTGv$raN zf%&b*{Zp1L@>l&!36e(_IMKy&dh&(kV;C$rxBmdW$~o}*+3969Y;JgDEH=vRE*G9+ z6?4@~1smKXnnL$(8@c>s>?*oh<B85|$%KIIJ>aex)LPp0Sgje}3`$7;hO{pvE&kSj z-B^doW&0&)u+R9vt$H6LkLz;6eohqDc2mKN?4tpGYbs(o#LuaDUHQlMy<lzeu2`K+ zF0_!*%=VuG7*#eQ4|1j^%HMGpRKJ_q`pFg@{{S2HPFSTyJkN?)>7M32j<cF=(5w;I zrYBWb!mo!f9%nx-<ZbPLa-Z^U`j?#II6WOqzHuXS%Ls9{iw&Z|@Yo=9krG)1LAl9w zhTEv9+y|XY>uO#7zYm*b_cn@K&``L5M$$>u->`iCJ+GcGimM~U@meZbWve7IYKF1d zLtD_Fdcc0+W9=}B-0H72s^!a>o&2Y6_UOj{04T7#I9UGxOpo}gd_J!p!{d?}XKkNS zz<&Dc9o9Hy#A%yBUNbgxDB+hj*5=!*l=RdX%?(7{NXU*VhCRodz!inTK0k)XBy>=< z>~&KCX$%@2RMik;STiK3Ii-6lW6bmI*HuM>;PUy)V4ICB&F<dT0C?_J7gG0Gk<>(7 z<DdgDSfw>SJBQ0Gl#(^9WlIa3a_j}wEha0AQd3k?=7%ivHHRoXyZZ?G6%Ujc9Prk* zlAbeoqz-B3ecN&DKczaH)<J3GEt;BVWq1d0N9_r)`Q#RYFvw}4aC7W70Dl!r<t=7d zxV7w(OPv_Z*5BCG{*qyT^^yMo6^7!l*25(wJZyo}wm@SUgRjlE$6x6t7ykfRAMsMv zK{RvIMHF$iNZcILrSv1-pHB|us!B{t7Nez?&ZKrpr)v$g=t_pBhO!Eng%cQG41wbL zpQXZ^1I8rbQ%xrl8IH_x(1YL<Snr+CzF4CyWk(shF#B$u<mL%b+MY9;=Myuy8V&3Z zUWvX=<8>{jbPhZTWbQen-o*6krN+fw3nZE_*(x~A)q`zrsjw_2VKqE5@n)EJT<w4! zBT|E68i1mw#4BQ?#3N{AvCQn5o#NZ>r<OXZ8aU^W%_prK?<$)SmZmC9I}E3kK_x@P zdE9g-UmNZ0SclxdDCmt>0EoC1ZQ^G3Slv;5+wz8#Rt_MO&T8Al`{S*A#`{@fc!%BG zJB3w6PwPDCnM=WNweP)vUQXipULj9Z+BqI(Fi0e`Zrknbx^qXASY^mR{#<{>8hKmJ z{T3BhEX<B3)Uof8?z37i;-+JKq{7K`ZXe~5_<PlwRRwirOi(}sxulihtsbr2O2sMZ zvHUh!WTkj(8C1etZLk+uRXs<P7;JLKNfTbj)i4&Eqe3pcrmLvNC}M_r8e)<44Goi1 z-8a=){!w8r_tnSzQLb;47)wKGI6#W1`o8`?z=M3B@`@8w>V^;Kbz?Yfjr*qdRBoyA zj}8+Wc+7%Iwr0(gUiUk!d9TOt)-rri^Tth60B~~}ZZ+{I=uuWpjo`1Ip8P2tQxS77 zy^Zu$lyn%JHFZ^Rz8Kq1{PxT(az=xG%s!U49K+z5oJ`TnQpUJ?$8;q&qYtfusy{Si zbHgBbz1^k4!zrq9>^dn~PSEB)se#Qt(RDRmA6X4VMi}iRG6%Ny@d)O1?y2ycUa~q$ z%2o)0mDyV>Mu6r$RZVcLp{Db<@n(M*bGyY*iW6!I2?kjm%bb@C&h`xg#c8SW>^ezg zqM3|iYM5N&SZn~ghKCo$X=!Gpd!h}fovbChgQ?qFe98)}I<g9=n?%MJ!ytIRcj<BO zR5exAF;l|9E@>rrYe%bhQmpSOFp@r5AMsQ#!7*A1>R`kplnQy6@+{ZuVePVE^Vn(X zTrDLu&kb-rZGP}vCRS0=Q#S7rwo8(F*ltxmHHa8#sA;2fAT=)y11LF3zL(5yog4h4 z!i!uiN1jKw(zo(s{BS4awp`}c@az;)Ho@91E7})uA$Em*6^jN{n1Hjw)E^~1(|8dE zt`yA+K0vi=LM`N1EduCCrI3%7%hfjPf>;4rszs1(9hPjDT<}@mD@Lwn?zoL2%W-wg zF0!;B7;?P^okH`Mk(qAObV16AiV<aL*e+KE%?3sHuyZapR<Ajw(ahBdUH8UlRjh=K zR({C3%Vnrp09loQS~US>vfHz6&6bT^!piFQTq9ug$MA1`(Q`n*K)qZd!=f&k-m}0h zmdj<b*=Dlav`Ag6Pm0K{EP#sES2id!Er?me)ulQs2I{j0Xce<rZn+8$Yn@~`k2ed2 z#Mybdb=MHbbljs`rrc{~cMj^vV_dCHd(Gcvq0wcX5;S7Td#)}-*%;&?s3CA^I<0S_ z%HygL@wDnzkJYO4H(s5NG9FO54|zKhZh)-LL7kTD(Q2#~t24f3#&GSwp}OW)>DVL( zP?*;MN_At{=0-NMk)_&rt}X8&M75eL4?{1Z%5tLo<z%^6cVH^SA~NW>YWYGXjkc=g zSPf8X8>%^xB<hVsofir=3$8qZ<gIo^p>oHf&3#b?*G_cX1(GqKUZX|pbwz=TlrB7y zWdU$UF&Za6O#%#t#_mro)@Ow2XK}gIU2&v5$Ty0KjjA&<uF=tXplHg_oEf$BMXy>b z<?JfMb!10XdBL-GTo|L#XmwhvEj>LDcY+k{j60#xa`zsC?gV{Tn^8AA-QIFP0o+*@ zVAb7S!iILOMVBa9t*Xj)M4roru68SBvgKB4xgC}rRosqIs>!QD$k1L&&9j`j8<?&e zv<p{VWxBasD9-E7NF}9ZwSqFtd988pUU5_N1S5=Sm^zfni8dV&4jEbCyxxhocT$|^ zZnDMDq4-MUbmuv@xKD^S#3I)Pb;SpC4@4c7=(aeOiCJv49|A%#N)X`^E}csc(v3w! zvc%2PTSar?wDdLY*>_iTF5q3zvt<iK-t@LwdRJC*%MGrHdv4{G=O|h8G^6Ibdlk1R zJEHY{7Gu$QyO41@CX46_2jbZoAG22$dHbi8s5$M?W-@QELS`Kus>s=W=n-u<Sz`!D z;h<KEJ9I*|g7@7Dntfb13eIT@hak9F;oHGwCq-w+s?Q5ZYOz}@j>{0UFs*$6vtGca zvD(M@ONk7=vdF^od-Mq1w)lNM6qIeEyNN5+t2h?fS+X3e!0xk8s9d@P=0##rh;>=> z1(P+(;z~Jfb&@vdfP{LZx@?Z_j*Bit*_|E0R%2`t<~JyZo!2jXY_iNW3r3?HgF=g` z4cdAvj)KqkEdsVeu4A&zP}S<A0IMFtuWdVSJsT34Pa*YWrW$Vf2un4yJa?14*2Sl< z_1%#w^6ZFYdibjbn=UM^T#>F_(brOgpVen*yH<_rm_vKWJ>MIm4Cu58wI{mW!s77G zM|41ezeRse{4lj@?gicW3xs_jZ?cn!d6+a_X`1f|f~#2it56SCf3EA<WC3ElV?}Nn zGC#p*ViC2vt{zJpAmZMtDDrnu2cpWX_wJ;mc?5J%h3)R_uJ41?t=8+jxlf=|y&EkP z*iP$;-lbeN>eE2mCeKAB$=$uS_<cSQ>8j@n#4RJ$YAmvmcOyCOp_u4awpm!Mn(LRm zQ$uAS-ElaFlxuYD7OQo--_hM~s<Tz~TNSbFv09>uvObm32(tRCSe0dUzxDi<S}tI+ zxtyul7_)RmrQ0Cb2_J=Y*1Ai$?wcX_!DoK=(KL^Wy;E|=cPY<3)~yz+MXB_)D)w51 zYXz|E*=8M^Bk&h$;YbDEiJnjkySk|<;kT>(D=}~N+aAs<j*8u-Wi45VM8pTZ8hMT6 zXu4=&HVY)35NrhsX3ch#*yH%aRdwxL#aq+L!FMfmUwm3hxwY)oU$pu*S}PPD!(`WS zO~Nzh)FLxzf3D_XUbOl}$8=p}=Cl^CK76{J(26ml;wRQH^I0Azd4+JxwpJRf)>_D} zB?WGRzh%|Ywy#`QJ1Y<-W0bB}6_!?)1RZO35{M|b)75BIm6or{-P4%Sc7tSI(Po9g zZHtEg0M#w<cRiPpWnflm)g3Ie%x=#Gm4ex}D$YEK`rKPZBaVSS$jJTIn^Sd0cgd;) zS7t+p8?2gKHSN`K&X-;%#bl06JQjJR+hDz7(W^n&QAg3T+t9aE>%S=hXP05R5Ydc- zWNIGabFQefz}vS+k51Xbwq>F1-EOo#hclLD_4G9>L)l~K@g1_dHfCT~5#y95HLW(f z9u`vDx}Fu=-dVxc>xTDSE4i79<ct8X>1o+zsrWs80pgnx`Ou6-W`n8mO>;$=ZIEs4 zbVCkdz57Ap{*|1a7csibG+G|QBSra&&eoR&>qjcgv<r2TEz06b?bdrNn=IkTMGHyQ zHL^#l%_l0*-DS$NhiJ7b*_PghOxpHY?yy!e1Yl@D#};A@?6l>}(GnDb-J5n@%R%t> z^pBt(Iw0p8c%WdC;1nE3Fbd4y*tn83+uFHWt|KcndRcH;do0f+E=QpjVzpX@V6p|x zWz6uhMXJ?tO4nuP%(1%9)mepcr?t?@Z4lwjlp&e-D}))$uM@JYnR6g@LC^49IO645 z+>S+<l2Facy+o%^1(s5CE6C90$)I-2E8KF+x-v(rlb&}c`h~p{+jYdtqS;@xP4P<L zz1C?@%<e(5aM&&_P}Qr|w<G~(EDkF(8qgDBk}xwB#?7j=(R{8NE+l%3pz`pnY*ntV z(|0VC*9(nRBdmcgL!D;2F~aTEXS(Z&BfzrD1I5=2omI2h689T)LExN$4qN3yD7ipc zWpHxQqg9?)0M(#sv}=V+34Qva`i5$<$94d@-*jaRHnQTDmbGwY_?=Up?wcYV-j8%% z&z)x-J_|3v-Cwj@ssOiDcjy->?95jT+_0l9^jDB-HoCNMS;@R`TjH$JG)|79L1K$2 z!O84gNcU>tlC18lAa^kfm1Ghu*_FeW5=k!6y3Gg#gjvx73K6<XU2{K6Cx}kU&FHcj zY_kbU)ZH_PY!Gwa0J8HYJZimOu0&=HKt(m~xV2Jj5r!FgLbi0s9R5OeO=~iPZPl7V zPJUHyY7xG`HE@|Der218EJ_c2qnPZSEJM{vx{-kBvidq6%e<_)mDX>8vMSwx+hxUZ z77D=Gqp_iIEvVTBIA1qJ*NHEE!p)w+a{y0@{*G+2NKlqn=z$@+s}tB97U<?hp;>B- zOm`~1_gXDbd~VrgbL@{Y(Qda|tnr;f%PfY;vo+mNmC}o&6*JIek6aebWu21U%bMsL z9XhYRyWF#oa(hvZ`lDF)4-{Dg$hPSE=M(`aM8Q%V?5XUPy);jyN723eIoz(+T&-2D z@OSJn$TUu-Z+Eq%p(GBxmP0?q+$%S_2B8Ao2ZFWDm$7DMu3Tw0=n&6)tyW^P61&K> zEX8cLR$NHwj!uPIW@SdpF>)=8uB(}9v?|LZyDq}AnT}POE4ZyAa3yi-8bS=6+Adob zt2LUhS>0SX7>mxgMxB?+oX5mNk5#IVFL<VB06E*;HH2J9nN-uGj;n~>ov)>`zr)_$ zm+iPkpze)RnjGmpi#x`S)p`9xt$l*Z#_FuCeLF*ZO4V|$$^fC+V7&6O#whm%dA1!G zWMe?Mc!OH+Z&Yg_ZQ(00D&tkF7FUJrS|YVtJGa&rhoLCRqTsl-dY5RkK{<D^4m@@$ z<zC6ndqF)H6Ch8teCXY!HbW76LTzM^v|#AeB!0Rp5p|M7sPwm6uJ>mvZm#C6g!~cF z7Oe`k`z-aD3M!ThJF2uS<>*#d$Xvnc2WHt?>t4+eTkF_Z$7t>QELQ;Y#CHW6st0NK z0clQ1+hu9#+~1jHJ(dKnW4a`(0=ZV9Uo(RH@dzF{T<*D6-K*6>au93cEmjhXrya^M z6xTRkGUGj>?@p(rfE)Z}!^9@D2SSEM^7L6mcLj5H>WFA5@MbM@R<63tWwItof(@yC z+EIkqGvbw!5tw@yoJ({q@GdFcgNd>x9`9pgP>2QIH?oc|jj>z{-#RvGx1qAiR_k8U z0=WnWE3Q;Bw{+Ks9E0MZ_ZH{q)cESeK04VGO$$LE7$YSk^H~<j86Pqi=($3<?9{E- zD%`7P(P_HjybG1wX>!gSR!$y^J4KUCL+;g?j~XXS9H)i&DS+v!V04Y)4{FYA0_4<s z9L?1lszdZ4cepezY4k@cpJnSwb+$l*U=`oYRe-m_I0Q$aA{|qCfhn$;oXGH*W*t|# zXzyaz(YRZ#Rc9>9;45T5LcCz39FdcCnXu*euUPOE#H}G1AU1n^3Id}1e-!AWC4<EY zIN7bZLORGp4~pW^$(f47vy`pYyDe5=do1Omvu@?VEU`f4vdIzEA3Ayrq`QdlMk$+@ z*n(@_Ccl82!n<4wgM>5ReNZG=`X@5bD=RKmt$q#3-IfS)?yfW;2Rn57$=GuZk!+FX zd-nDs(Z8j-v(}DVs}ur_wMNnPLY^2{^kZZ#&FoxK)?9e6HK5koXtMFGb!OF{r3#3u zUw?XUoHefSLQ2{Tu=^47GGc#$StV`9;U?Y2*V#4n&9-gA^U82N#3w}{AhmnZ3ge>4 z<#r(DWzNgBebSVGIxZa{vo>CI)0t(}tp#$n??!hG)>b!}G1W&mfLWr@7VNvBa_aSC z)6l<WzYPBXa(89ZDW>1WHf9~uKL;|3o{86B9M(rA^M#$=R^FDqw?f5eoLS$0=uVZK z&T@0)n1Jqz`Ij+Q>|~N`5Q&tnuohRZrm;O&1+!QyzHTCG@@#~0y{&H6Mym~Yaq75b zrsKBZ49BxXF03W9d=q##y5Y#(!gKPg0JRH`wosc}QK3E7CP*1$Wne6ew<za1b8Y=m z>D`=0yHK+Y!r)In!%bAV%S_BVBHC*Qv%H85^^MWVm6dK8ZKD(NQMZS%PBDu&r=haF zm6es&>zQgo9HD5{t5%^}%SEVGWWO@E2$kF+5xG7qJB8L@3XU)x%yvR*fEwquKBAG1 zd}xO>w%$FOE!Er=fL+p?B!fVQo7+TVw=%TN)2h35TtM5YD`gz9jT)R;-3!(1xG@eS zuFwFy=B$?6X08*RXLx^8Df~w2c3UjW*Vvk4U~9)j(GA+*iMh--Tu9`~T#a<vfQy|r zRt}!Um9D>|pjmC%b+@1xPL@F1Qjaaw{MqCCs_cpSZ=&WlUMn@MRf5sWnd^fn(C$`f zwP{U#Re%RY>Z(iGqVsn_oY`5l?TC#^Y=MBs;umz^u#0G}Y>nEpMvG)QNLGo#6C{G@ zvL}KOvXPhNa?cCyUUdjj(u=*_R~}#;C$(mGG>2dp-5I2|x3al%zx5KhtsR$FZ!F7? z8>~VxlXu96pEH#R>DcU++RKL*FX&t{>yhvlBeLN346%}iNE|QKaV4KGfI@ob-QERo znMl$tx_v!8C~MDE;H>hu?AukK?BJb{4K`VCb#<AmmQ6epeCUAQsJ@k;mbaoHI@VgP zcU|@B-DT?LArK}y?z!Gd%PVwQnm1f09TT4;MfxXHXR{ceh}Hv_;sUr-=QE$Pd=q4> zc6lAGmT10pzx5K*v>JL0e0$$S*Viy;HYhm23H%ggrnE8?_@^CoKLNV2SGwcOOJi>6 za!039ts7e6JP?tWYn!urCYbp$_#neM7V582DSEj^Nfw(cU21zZT6She!5%`nT2-D3 z^>@ftc>ee|?79Gr)?zhVEmf9<SQOWRvW}#8tzr|49d4_K6Nq$M**bZhnqO*bc$uE` z$ZvTax()--)6v`DO@^q(?wzcb-Q8Al?ON5wn4TIkMDiQaG4JmVzK*4Cx9quA3AEIb zmV&)>?jc@9a2ItR97WbekI;k}b;4RLR%R`GESt@HtfOV(zV-sk6G9hg&DCUmtbwPJ z>xoA&<6BUJg(hWr>6|U>R<QwQy6**|)b<CBmR-txRbMibBp#{jj~TNbbxo=g2Y{W4 zRLTp!D^_R8VtcLZ*=_JQ^sG^+jA`4Ijkzm5LHU;s5n!}TZ=<5!Znswo$Sq3UZkr29 zxhu}G0^IIy#Y;3zvs~>KbKYLnX9aG}yF-D$Zg#7g74t0|wHmC=l(XE0D9iZjOwEo$ znkS2cAoe3AH#>cZHby)zYUV34;mu{5oanD3zLj|z(!#Su(m~q6WOeQBM7mqJ>@J%8 z+P9(({-k4gxGU8&kgW1(6`IX^a=fnZAnWiMm9DNm3op90+@YfF1sK6Q*`YDgiyK{N zuC-a57qMuqZp#!~*kN~7l<t9Z?{#)7-C51L^=}~y%ul@ts$%t?#AU<9+2Bxv5vIuC ztwhpW?M{}eQ5%4`PNoDO1;r8izZ4q;dHhyc-H~1H5Bb(dWVu|{W^J4h7<|S+b}5w( z(fw0fF8=`3uJ<nBvft3uqfa|-)75cl`I>zb*<iHvO=Vt@N2;(kjhZwmDyqjLH3~r8 zf#vrrD-9R1y|zL|i-NN&6`P{E%+==&@3V2)sah4XxLTVbGlqA!W#-i7tP9R@Lf5&w zSsH2vg7y6|&SXbq+N|7G-((|uGPHDAX<}$AT874sTE{=!h%9!0!Yls(xm8{<(Hj8y z2Frm>W`*X}GG}-74NZ}bHFA9|0@NbO1={3UZ98>W1zaswt1#@jO^P;O#WIEl=sVV2 zSx#8n(Qv584S{=nRl1{7T0mnpPkk`T!MA3v>@Z4nR}Rr~uV`6bR-K0?hqA}BUd;}r zMEv$`^<Hg<zWIiwaU?hDN^Kl*Y2vcFQMXh?F9mSvwIvDh30&5oI04QZlC!)qzQpM1 zhE}c=d7UGQeMFIFoVR}j*FD>xhvq9oW~;6J9ahV3#>;Nq7VA}~ZP0{nRBmABmwTsK zf=QecjHiBz%pHMbYtBR%&0Mt>y5=hRbXk?IR{fVjvMaRiuXU)*iDz!>*tvQvx6`U+ zH7K*bGV^L84B%PC9z3SX(Su{M6;<)(lW}!s3kBXBPXuI=T{;9Ji&qpUkb2jtBYEhU z;nB(|M^^kUo#l6W8+Ko|%J)Elb(y1W`*v0h^elTg@;g>86(1mrMeCn(cU!HOFt9}K z<&~NQGPEMrx7Gx6GiAe-2WGoU%++z|YVA97g_v#GX7=U?%>%L*1YaYr;;$*u2bOxa zAxRFe8ZSMYPE_YzXqz=gr>AEEGC*0}j78VW@SfC7{XI{kVpHIZZ`-oEve9eVq6f!y z#HKv`P-OhKSsE6*u0v+5>g8M}knZ;A*|%29lrCr7D}`W>qhhSRi%&x+8Z3nN2D5Uw znX=0u*%?XZbCg(nB=wnfMGV@Kn^ykwx+@jNk+zAbwmp%DHLvh_Te`cC!do{o&Kq#O zY%A4j<Ixs)EmoeNt96!F8`)i(tkOKIE!CBRzfiK@UaL6jtn;GE)xPNV-u;*C_AX$v zE>v@?+Qo3zWfXrEr8b3*<%A;lH$aP@(Pk^oByS{Y=SDSfss8lc(Q6!vj#i(Hqm*@T zz?QN6$he-{`~}wyi!*^j?OL^QsoaG_m;pQA;rG>M^fNB@h_W8|2+Jrsdl4QBytXSb zSISnaUd+;`SaOABy5cJZBc2AMLZ2hf<qHvaD}@|khb8%n^GbGD0lFAfDCU0TBgB6@ zhUm6U8c#2^SggaLOy<5{fXdUUS0~W7r**=Npj>XW9)?@3mfr)uy_f9Fw^q9G?bAfs zh|Zy9tB)_tp5Z8I=!++CHe5K!_p5OV8DttG!I8Hf)y&;Tg0-xz(O3@77+lA6;hSEG z*E+6Yvasl*YX+qZfM<|%dlTI`=eCMWNzV^){R@VBp*8XH@b*NTA{PiZ(&j1LGjgu; zs<7<UZQHug`WYeJUBPOt*`mn)%&rzc0df#zjrB~_-(>pQI()8a0^u?VTXr<+6+RtL zPB>+ka80J7iLCLmvlvSI%f5tPRsL6(O%u3GCtn18LBF|5`pC02g6df4qB#NZ(F!_t zb01=4buwph0NcR_Fp#ax@>6kXWVUUYWb9g|lQl(+k#LRdZ@GG`$K0&;KHlYi0e83| zmYM$mLiVeL9UVZtXLS}Ggwy5QF<ELOY_&nD=AI*!-xLL%@VTSf5y%UaPpqdrKDP<+ zQeoxs-%O!tM<!o#l9p*X9k}pM5H~w|SrFlW?5wYa&Gst_XWQJQE_JQ(R%cT<H^p31 zyC;g}qmwVW2xo=S-^E#;vBzK)yv9N8vdr7u^jcBB-(|%oU%~3RX&sl`zVL70t>*9g z7v3NAE_mEM>RPsw6k}xgBx{~nZL$}I?H=Wss@K%4=dWd!i<`3HXpFRx+C)R*IaQCO zA!yaf)o<9>QC7A*dH8RaQ$)qY9?0ts}B2rADHvAozn_x-^ZYYv-Fw0kWpx(zHo4 zteGq6nCh8EnUvVKn#S2UM^2Zrs;`#TcqLUwEd*|bt?zqQBNaR>;YR&EnlCiU+>H3k zDc35eXAQ3sI@T(df;d_0ekzF02CcYabmozbdz*1!pNq*)#+ug*vZ<1%3~UmP=(eh^ zYRDS>da9a1hc|!;8LX<QV{Ta3@&e^5O2Rd6iSdb9=ML%BJ(IoGmHe0RM-h^f&MFHp zU=;GyVd9!bjRm#3lN6Gf)63DSq4juYo4glg(M>INJ7u?usKXzJ#2VY`0;qx!>fEYe zu7pX;cHLG@JU~-LA<;NP6GRl=37AY6d~Spst~S+DJ`U|y#R`&&I2ze(J?JydT4#GN znL$;EK*r<^b^KIk3a8;m9raRu(2zOt_d!z%{28)S{7x9w%1lFsMLSK}#QZW$7bF7X zJ(RJApEilP(V+X7$5TVd^KEXt=MSfLTk6*h5T=%iu9{v^lx(>4m|q@QwiZ!W$wDBV zo3sVz?uDYj=%>ZJ-aj}wtko=7whL(-Ib6o*oB^;WMR%P70Ce~ZJ7TRPT5gQgdK7cO z>v*k4pxGuZ;l_2k`;_cCl`%zcj8#l<)3%k2Vdc86sSap%s};l^;0xs?ze1XKo08(H z>YXD)gI#S@a?1S-rBKsxL2C#)Dk<ou8CuOyr*r$wvUHKWadPac@d+N*xP^+;@mrnG z(_dn!j<#MEj+RfLigPCn*s5pF`vyAdilL8h0zLIqG*r?KPytlMu4#LkG`iqn(}q># zwUL&$$}Stu(SQ-1^9NKsDx5*@XmKv;s&SWMSq;mqrH?hkb}F`}S2R1OzQl0{$l$>x zil@e5dmQismkSA~Y;(3dS#j$;pyuls0T}2iLn=bzRpa?2J4OK2M-^PTWs*JBPAP~? zz~T+HQr5B8XGBHqm;k4#ji5;?o|dio9Q}%u6{?xM3+4vujuy%TDfTL!R@4tQU>#N+ zg~aB%C)hbtVbDAV-MRvtVP`jpPQ-BhS<I>Y6)QZY$m<Jc@l(*kL{2U_N~o%n84yC# zrGQm*v)2h^BPfyDD%!fr!4xJ;z>cb}M$`!+XytKFtCmddWcT+As#$P4@g2L{C}FAc zfXZBXqp(p@(n!;G>#Ah<E-Rbxn2dPKW8#ry>`+(Rt5}A0r)9?8j{TkGXBBA}({yB` z<#&Sn$#7PYgmzvD-xuPQnpe5!#H&-(NWgkE)<vwSkORG(vI@CFPT)MFrs%R6<YP|Y zIcJUT4)FyrV$(hGoi1LYIDeEbWCK#eKmJrWH5{45cIO3f-BBTD;O5a7qo|RrJp;5y zfjo@9`COk-JEoGT>|Elcu8?afy3WTIxOgj?>CL~kPy$(GJ}x^Z`R#0viN6%NWy0!Y zi1o_lmbSJ>pKGqTE~=Eb@N;OmQB_F5dIxB-dE|koresCdNb00xd;^NHa^ZR0xi+?Q zWtN_*Mvv^e$a(EVk8iceI}faMXTUnjA3dp&?GCxj>!|SjK4%Ap+mx)cR!ZUEURN&V zeb=qTqSRj{^$E0;Ik<7?d=_}#<{uEUyAhq^!#P}5J@LDvmp&&kwzkezY3n908yv?( zA5&8#xlhI@g3Gj{B`rj;X6PPPS!*YAeXlD#PJ12V9IWc;%X|yU&kNqic!IJ?T|K`X zuT@<31K{LZ=UlsTR}PlGX0yONtkcxJ=le$MBWtF~;hfo7mC}!3c|*=>WsrCm6_D0T zlkjsJAi>kOPk_;GwO+BI$b$fBD4I7TngVRO<0I19YOkvC^e=6DJEbv=h~zy{ylu~I zNn8qd`!q&(IJ)W0_A8?F?8o3ay$&1XBFiKZ3;3*^R(ac*$oZre3%Kn!Sxam}&o6W= ztQNB2-$1R~s9JV)S~#mLit_g6aaLlox4~|;D^j^!tt$h9C5#OyzMq&ZvqIoeo&2D9 z_SvzO#q)BwZ*7S5L~%1R64nfW^j0xuEBZW5XSEn9<oB*))m^?Ft{%kif5J0{;s;gD zs=2UPbBz$Di$<?DYenp>@!Ybb&FNVJ*4zXnAz#H`qRxE_g|EYIyUQz<>viiR1gld! zCAuuEhc(cWxq|)+k`bbgnU)!oYoKXyaJkV~tpe_p21hh_p(KDhMVXz|cNJ)lE0dh} z@7PP-(Q%kG?R~s{5Mq^0vqr?HMNb#bhG*&#&6`!kWy6;h{O(**-euKl^M6Q`VtKO3 zy3=$c?bToUo{nARsavfqwd{m+Mw&|#mex*uF>*ZUgw@Tt@L9awyWM)2!$3lUm8Rsb zB}=uk;l}<|l*w?pon@iXIg+RFnR19$x+HuXSjODlQ$`tLMas^uwp%Th%RsYrTP?dZ z?Dbj(tGU-JH$-M!XKs5k_T?S6^fU`(2ajQU&4ARdTmJxr{1<-6w4PwNMEb_2OW;&8 zMB`}`XGam)p<cgGxW+j6i_Nx=rIqj5y42{nVc<H*@tieMmUnO4ve|JCh&(^MySG+z zPi}z=N1~06)ZbOY9mvA4_&pW+tC=)%uvrOBrwA)6g|B7%ELHs=BW?75*(jDo2Q+2B zPcq@MAY36K=Hr>yAN<uh+&*4^(&pRhQieyv;&(=zx^A2O4$T(K%Z_ai%#LXF$;+<X z#Yin?mtDU=_zdCRtnQgM?YgIPZL)SA<MD_Kio=+0R#70#oMSr#Lm#U3uI6I1yKaNn z>lM!XqI+(FWFcknRx7v{ceA>=S~OE)t{U`DX&M(5b!&Pz0_x>iY1&vFYb{-x-G#@Z z%&fCtw^eUMTW{)`xags85ZcM^V~9D|4rvRTMxd!g9DsNt45zgG5bYk7*`hb}?SDk8 zU$w}30dnZIK7mDV+yBG>C=dYv0s;a80s;a90RaI3000315g{=_Q4nEqfsvuH@F2m_ z@i5{4+5iXv0RRC%A%Huq_2;bsBTTy1{@`*1$&)C9GbM8pjkYeO2u4}29G$@FC4!Ka z!IKVF(grGcU}eS<FfKrGNA>PFMVf!_4Le{(dXMOPjy^B{07yxAcFjZGv)$_d0IFJ< zG5-MQm~kt%Di>F`{=fzo7Ps>=s19qWEwnAuO2WufAhL%^u@~-f0v?2;jO<ZN6S=Kf zMuens1*;JZ8D9kHN@nQDGP5~HwPmq?+ZJH@S@RQ?X+JCe%n*Lx`z;6Mf9yhq`+N~` zHfd8>H#Idwlzw8iKR!OafiSQ06j!vb{Y>RJ+y4M#N<)mYt_kbUTgS2q;u^eM7O?^s z)UJr6HqLa7`jrd=a}`<8I0tk}36v7)bM9pM*r7B8u}`=*U4V0|c(v!HrkPiuqr6b6 z)0bIbiGURicm}H6pQXH>47}^W80MT<kr!r?Ku}Pdt&pgda5!;=wB2XdyH&YJ(xHH> zR<HE<i(btO@GFgYRv=CyY=k8fWkClBoI;r*ZW}94EVN%b<geY8?iQxD_+sjHyI`yP zBI)Jy(}$8^_LUT&Dq7X;@Ye!HB|DKyMCp7b48FvOt7tC-T0Y2qantP*A%<0qvdDlI zY(^8qRXWShOOP<Im05&|L$NrQLWzu0$*?HKpg!uHB}$tD{Y6vMy1=lGZdq30c3c2E z1B`{cwarltDw8DA!0FZGdV$|1H`*>_fax*C9)cQG<`D!PQMk8=-eV31@EDsM&)yl7 z=AzV<hDcpeWJ=XOt7HSYt?-a3u&dsRino*#mqpQD&fpF+9%7G%EEvrzF?>NWC08aI z_dJaxrKq}=0V;a>OQxPeT;exwqNku!xD9L!exN~y`wrorC1ljsi=nR)0BC{d6A&}u zLS58wTEGL*fUiQXpeXiWT5dKmlry{moa14B{D+5h2k=Q;uGQ!nV}bkto}ZMfRZsK} z_4f_m!u9_EMpaSvgg@(_yn#eN-b(ckP|UX&{t;tVsF)E;oEU%$fzl3GrIZh<o57c< zVe2#W(;w*lynjL5e@osn9i@>0D;H>0Cb0BADkWyHV8ZSl9#XFvotdFi+8za*RXoZK zt?&{2vuT!|WQ@vVCs??8BCNUB=}*kb_g*cwKgk}ypM#JawkZt%0I_^;1-z5Y5^%Xt z6V(EbOsgtBM7x=viEu;UZ!lvDGdYs4!w)q~C9ET(n6T^@45_H=8s?V?iqcc_E}**1 z#G=f0cb@<zxPP<ce<YnzFi7B4h1o&e2ZGFqqYk-=xBNa2_8>)se1VGeWheT`hwVRk zJCOeXc`IqSzU}A0;q))muP+z7brm%A&tte-rA!vIA4okUw1zRAsrPG7*H7=ec>aU9 z{+GNgQu~2zd&Ev{E8U@T>~Y}qks#2vtB$5Mw7i{Bj9dND@F{jLK+DAen4w!0R&??> zga`E$*wSICq%Tl34#s~6Yc`hd2^&A7;a~NC_yT4B06+3}pVW2ns}{Vtp`U`cXs?)d zguF0-H8>2e(<*#AB*pTW7;CiX_yL(+RDs(B&59!os&>Q{Vi+#kFNWc0G3La!www6A zro6Sph<233Q9_jhwf#W2cEq+m*Xj`0FHn)%=h@-leSwyKr|Dh$xu>_^yoqx15uLj0 zulpgAYKbiGhS!w8>&(eDM3*lTYeji~Nt@``hxY?8yoP`pzBL%97r+`GYhO@?3lkJK z<R|N(J%bIRKh%5>ZH;1mLdAJcX@0`~;fyX9nx5#skl6nKdrTnkj-{Qa5a$m91x+kS zs_}gO2f|H>V^Vz-oyLA+xuHBNrxkUWCOzd&U!TbsEYzfb=>ZLgc-zArBCC709Y7NM z1NOp(4RS;uyZ1RiWi}Jiw)RX$wr#zi2l65O1=Z0$up#uXTG&a(YxOV@rg+Ogf2-7} ze@gh(dW}?EW^r;n7O{wppcg7YM$n3>hJZZ4K^JPWlx|h2_F^R}V9X`3<i$9&tU?(o zw;cyBcc8o+i^rbgbqT;Z=tXaw^;oDFV?}>pS$`CIn>&LAU4?1Z4^S)}v3#y^TKMD` z-tk2X*#7`)?hH)`Kt%#xdWQ%!%=6+r6MRzEg@jU)i(EkqRzD^d7LTRWP<xd0G1=A> zS@O=GahwFBR1;f}$SW=-I0>lIU`n{7A12=6uADRc582ZN*1q+tm1X;b5Q{j`3s4nm z-sUah;n1NEO@{<7^-6ot(SJ62nKrxVK_9|LXj8FCOdM4~Y+ydDjY8mn>_O_bA-g8f zfYYo(!0%T88V17yMy6u1KqMlITUg}86ZzU%aYfVA*Dlk{_>%R?1Zd<-#obFH7%h*D ze=((&^Cs5O`|jm8@NViADvuJN465wETM{|u&j6`Zc#P5^CrA`5Y`RK#y8S|hFrntY z4#a)#I|*vbZu!ASSk70a{JgADnryvPiuitRXrzM=)A@nv1Qb0J0nzieRhcr>VX27j z&|fJ{>P?syq8W~52G|(3Db2!EOSrP2SWsuGHYJ56O6V;%<4`CXw!3M6Nxj7>AVYIt zwz-#OG}K#7Ej^{=W+<sZzi=a}IW7V&p5Rua+CP&InrudzmITO=v7m+58HyI-B#j6a zSjjJ^0ctF2W>Kloa2XeGj-Wu<WIZ%t#$AMWb*!^?*@p$X7+5uM>0%fg{6pnq*1R>+ zzU3`Z(+yBhLlv;{YOxd}76}Rk&vM2|jeu#&!U_k0;1-2v&roBLsFeX0UUJ1ow!(Co zvSSwY19r%@>k|R1QJ2kvf<BO7RS=T82*0^?0>Ww*cl8}8OX1Ohe&hXu<=|yqvC295 zG<3iNd8Pdi@QL)R^^q`-35X{nJROt~e{nC#v>TvL++v4fqo>OtZ;Z+fVXSezq0|`5 zs<>OY4HvrwzR-gP3fnqdsO>4qBL*tWwJH$MMhlxl(&8*}buIy5q&C=m3u4nzl9vd= zuSPPOh>-ZVF5eKzyAKpPOkvRq6N7t5%HxjwO-eH)QVb!gX=u~z0&VQ&-;UTO!EJK} z&G%?fbGvtrNSl2yj6Thz3u3LMh(@eWDh-6SpO12@8xNmH_(JahPI>`%mdl3%wc3}E z7W-jfUv)*5>OoxOxpBF6xauAZLW`SGrNmMNtF#sw9ZX8td$<8Pc8<#-cH6f4D;M)e zxb4YE>eRp<hR!aV;cwI-)n$XS1Km-~;B_u#PJX^!as1S-l0E+b>0}v0m0KV3JaXEx z#eQB$Kd|ZHji^Oof-cjO6;VZihC>gx@JftD#E=MB?2ZL;zPIhb{k<Ch08U^qdVp|g z!%&$qKn<wDYz<<jg=_nYLpRAQ`td!g@8gYbk{;OpVbsc16j^-`2NvI|p@S%?3rF%K zCP9hzrpHEKXd+c$g|m@g$(0<|4Cja7_*kt!-DAVyKv+T()q)T6rh`x)Q7@V{n8$V7 zm`?(uDh2+znod1_xB7^ksMmGBWD2r>5=cOMslQmin>$-e{{UP-B|XSP;U62~TEZQx zVy1m&J_%K*RjUXlUQUrikW78e0O66SUlz)5EYx2gL8+#mgV`zn0NmlrAQaux)~kr_ z;syC={jt075hzwCB9)ZGy^R^l#tE^OE|{;NKTrU}h_PBlW!)2$-zMRSGd10DbX+db z*{`|P_W-=2w?S44p46|lQnjGr%6z%)fFvwtX=mXn^6`!BVL(270rlf0(J<;5tD@@j zQlWZcwiLyNak>K>1Q=+$V5G$iVf7cAGhjb$lB;EC3AZ7|XSkuoxCYbJsXI)%{{Ytq zjjkEJO7sEx{UvL1FJ?dHABlRvUIU<`<CFXc_dlfR;g9V906f>2_Qxsl0QBM51MoxX z<n|xdb%>6K?0*<#b!s2S@<It8ZV)f_+#D^-?;O#;$>In*s@xUGfv~E-N%)mUd!sY^ zbpen2zYc$E>VHAo=B5MNSNQlYFJ??DHl-ap_dXM90N4ZS_xgjAed)4nK4beBgb4-E zDIyynt)(~mp7n#60M7oi`|k3=Bc7-M14R2xu?^EQ9{&Kk099%|vohlQx8fIHP@;S- zR1E#4j)+yC+wheY#6Fw<0F*KR062e{QCxfaj=X7RJ`Pb??3;VhpZ5OcH!S}Eq%MWf z=|8FK;cxCb@Cw(z?`O`RN0N}uv@>zKo*-7=n`kdm$o~Mfpz{UW;>J$9kBIoe=QGIr zmYa{Z*d_jis(NqBkG7u$yhUr?8Jl0s^oTexVjc5|85X8gRbfqVn`MlGK4<M-EoG=V zd8mKL$Ml^%F)K#^OW83BreQl2r}aN%_r2sW{V<U7UI@Re>k6FrUC@36A2NP_^;|;l z^5n^X5sCr=C6nquz?#A98C6&GAD_t->x4EJ-{^$(tNB3dkkEKPC_+)x{k(PVq(3OS z8CL)w8)5-0P>F!@QmJ6iKe$pmFb<m{U3!MRYAaQMKT?58Pqg!R!*Rv_+o@{2GN&;y z=s$x$zV9j#jW~p*23I~m4-NhG+P5q&_~6!2{$uZqzU{I#gC3=OiU?9HTF>(>4sc_z zuvgSFS2xk_F>1E^{{T@C0`q>QgFHfei{^f$+E*|8zjCUy0bs)3szK0{elR-bKFB|S z{{XY!dKm-xB3Jmif3zy-pRF5W%*0@ZMi_~{^98G=*F^r$v<;$UtP4$ME_cLe5ta~$ ziG*g^qtK!7yuw#09Y1h?A{lUx#euRcX5k1L4&^5L2Ix!-KV(@n2EmqPLAcO5B_qg? zW<(4nTW}rjGlX*hT_J{D+4Z2<M~EBRA|i#Bq1+CXvedP`Sxjr)4@bLCa=ZZ&buG%E zS$#y;s@GuyEUA9bU7%81I{|9-3Fu|aQmyk^I$^|=Itn$g#a#~BZ{tdy5UR!tdXzNT z2z{bR6o&(5@i?MJ$eL618d>r&owrSlBs5i^)*%jH6tiJ2lOEz2t)(dJ${Wz#?o}hM z+lXMV{{Ui!Sep=a+LlWwPH}PdRV3q3yHQk356RYTuu=a2CUb|1VxI+zrxmC-o*XX_ z5D`~k8oIk8WKTN+7i*0lL@Q#fKJ2PvwO_Cerxo^K=RPGr8yNop>5Gbi(B_DJ3NE@y zVbdpOTeWq^oCq>%G8DmaA4$O$RbU}(q82Kr0h!Fm%~nz_fXWj`&~v~nzM*hPJ-HSW zs4t9XUy`3mUU1znFarukDkJ)`OEm3e#cE(3WQD&#%Ajn@?(=a~i8<QrP_vYA3dkCf z*7Cuchu0_!&D90BY%u*ol9|i7b_^r;Ee%yVy2@U$?seDE*h>s7V$cOr#DMJkO4O5N zg29Cdwz($7m5w^u%jk)shFpq|1sBru41=c10?NEguKxfJ)(Yt$Js1?bVJ?O}lO}{g zOtb>jKI4WBiU7nwJHL#OAt-g4tsk(9d}4s%gXB2fIF@ZB3ucPHqT!!FnzgDW2N>$( zr_-}7lcD>Y{mMTWEU{AJ9M+Os-Mq*2ge4GVbWUnk2OVZQr$kCa;#Prrsf3ksLaeah zq~@rZh+IPTo=I0#b1Fo-mXvT}QJ~o<xcHg#r>G{h=?(0;gcwA^Ep#J^qvw>E2e7bC zn8an7O=i<EaLYo<7~QbtpS~alNKoH~fn&t69|}W~b`is}P1V+=g-U7%>LTsMzJgQi zK#n<+;4n52Dr2rNVayZ|x>RnAqc(LYR-sfb6`RAX^HFkF2`lRvBJ*50K%m;BH4R2m za||z9Od}a)EL#ARZiqnlN+K4w%rQ7NMp6gNXWK<+V40-6r0Bi=$hNi-wh$`OAn|v& zzj7{cu+cLD+{+UQ$qp=997^p<EZG<44W-7VS|#%h;^1F0`B88{sF;dBL@-l&juJqM zI?dd)QN&UYN|~p~5nT-nH3Brkf~o{AI=kj3k8+g+G)Dn+-}=jC$*HZ@$^*opXAw%Z zH%7l{f6lxWdeT+UT_FAgsdgMi*MMbgQw&pfhJq<&Yg0^f7%-S+sX?+9GFcHU=;aW# zmr>pG^$>AIQph)&eG_5{fd*baV1x3@A^9d<s`onx*-S<nn3$5_$1XPt@V8Oe1Y6!z zB}8d@>Kk0CYtBK_o@SYvx|f!9m&B`p5E!tRI(t+dEHY8^9l(wJDYyg}ZI!Jv<_Z?g z!GmK5?3tqW5rTluV_BNaOa!IZbu2;Pu^=&+fCcX|$f~l-py)mZbxJ2tZv!X-<1;b2 zajK5NnP`Z~zNOpnogE~`bt>v$EOQ8A1X>yl@Igy>6~)Tca<OES-q`K>J_M`^OHQIV zyCwxFJ{Q#X1-VMH0W`Q;nM<2^4doeST}A6jh&%X;U+RN6vxqT_&C7kuXqA5WK{}2l z0<4F+d`gfg^)1h$Jg#2mWS12(A{dU{unf7Inzb)R3TBplL@BM3F}WFLcWy2w=oz0~ z+yJgPgJdBZ#+*T38n9~(za&jm=pqEmRWZve2gpAtZ&c`tDpM;1{MT{jsF{o`+$Dhe zDk}0dEC`r;Ld;vlBJTN>Dl2l3SItJ%nX$1mvUfTWYN=X>Fk=zQG|Wz6_OgKz>oFV* zuZxY<ouK(fUBu9h*n;~@9L!WojB^-PWebYoABoLK5Bw+m0#$&S_+WL6CZfZ0-czYc z)b)^T%3+8#G)X{=V2Y#<K;~*I)D%659vThn4{?VAWs7C^OEXGe67rd;nHUyb5ZVJ| ze4~vhE5T9N!7BW0vvWD|EavbzWOe#V8mC*IFvR#roXqNrlnJpa!gp9SfW<G~4^Rl% zo8X3%hFe;!w1Frk`<1bqfNCL7O}mUnV?h>y<CsTBvdV|DDRJN?bRTVubjt%3u_cfV z&ZtKTnVFeWB(%Q*t#N`}U+`!A91Ot{+90+}F_@rlC@1zPGTbSadCo3mAmV|{iS#d< znHsF_IO-*cqRZCh0s{*eT)Y|j&kl|2Qp>8`OA1V*6Y?oWb5U8#GKhsbAi&9f5aw8E zW=MUS0Jmd?w<{c@hG$ddvhgF?Au<urLqcXMTtUFhDG9u^L1wZnhgxuJZZ%zkFEbCh zL2u$R^jtRMzz6wUw{ciJGczi@l*%PanTgoAj-rh%flP3AxPmsdIK&Z|$q?+i++0}Y z6Ov?{RiG>oxIB{;fK9As=!XN4xydZciRLQ;)UyWgn}*^`R*=>T<{>K?AGN*I;fy!^ z5RD=S1Z|3yvyl+9xnoZfHr)i3>MsI=nD&{@ISjZxt1b&%+XxnXeNCs=uML~br61(W zm*6~Cg@c%h#3lH!l#a|q3OIt>scTg|!XYgBaFaZ%;$Z-7Q-jqPr5sH03T7<g&O~0b z3tdhC*q9*z0O6TOt7(W%j+|SYsYWFtOc2dV@kk3$CWMtPv05hXV`e3LhU&moaRmd^ zF)Llmgl2(?8obK_W$&Xw0t<#^*OR`bKmE56<*u%Mi<DO)4jY}1`3X!07)pnW2=0`o zW%$A(3-bUqI^)`R5vgP;)T)F@W)leowjv5qDkQceRA{@DXki0ZRxSb+FyWUkQ#5a~ zYjZ!7F>5!tH9WvL60Sd)=>A}L5R%9|p%w)h0e400reZ=fwIxebNpmY7-7XTag9h-5 zHLoJGM4L^(Y+XeTqcIs_^g=Gr3m0>dW2u80mP;n(c><@@QaRU!u<=(CW+KjG;9xtB z1DFL1d_jF%^(jm^!3eP|0v61?aG(V4eiZ0=+)RvgTq_Gu1J}%yV$dDS1f{p!1EhF| zrHJH>MTKS?9ojc9Q2~fP3=Ak#FmZT<UnnMWmIH_>M7+4hsd8A6zXGwdLOQt6R<WE& zZ-@eGYzcm4VTO1_Y)IjoOT^DHij+(eurkjJn-FfG3`CXU<^;GwkAaJ!1*qkR65CMF z;xN}R5{$4hGXq7RP$&pdIL$K#J;CNtXyWE~){?d3hNXi|B}ey?87Ae3LNv@|!ZC?l zB}7#+B-oZdAr+e9<6h>c?1}MqOqr>N7?=S#68cmh2IO%D61*oTEW+9l?0~|1AWDOg zcRrlb<*?BXpl+t6kvtyBe*+NkiRZ69j9}|wtoafb@MD1>Z(|We3?rslBXDw%iY{{0 zlGcVL7)9m8!B|zy#F&PW)K32Zi=LFW%nN2&1QMI5`|#i@1+y&%8y%q*Vfju^Q+;>} z;Sd8!aR6c*XyzTZ;xHG(4GHn-UC$AO-UcqB6rwK@0$CWFMp&cm8iq(tMrlcY_5xR0 z%vf2e?1zwO@s))5l<sBEm5gjI1Oi-YX(^A9m}VsBUO9;ESwaT%>SG|5CtndMrttvM z%_WB-zeK92u`*1JA{WTdk4riH235*=5rH2#GTxqI7QrrDs3vYbA+>{0gAEL&KsvF8 zNk}ZnTx<caP{Rofj2Ci=lF}l)VNkm*N1;Vnf*tr&a(pG!Vyl?uw*{pZ(`4ovMe5T< zBEej&6<?7!j3vi2kuYXj_k6_YZZCm|<_aM2Mx%b?c=f`Z%@qe~hdlThz5-v#7Z89G z45I;21x{*N28=3>Ag}`j!6I079$AjUAXPTpQ?67&XQ;e_kxfoX@dmI8A>5&U6$z;q zncK`#vU03`d5bhL&D_dO)Vnb=@@9JiILzzf8FnS%;=s!o)KGzYF`wa$K%MfFm~c?h zER)AP*q27r1Zj4;KxBKDMEgxh!a{AnBJ-Y7729&|hgMdDh`LZs#Ie0$c1yxuWr#bj zp_45_G;JAnClCb-aKWU}6GC?ZQEAy`y0|UDWsw6c=2<`oq(m4rG_^4@v@KaO)WVe* zXh#qe!?}JVF<6ioMQo6vrZ%EeNsB6@HQ-h8DRCcJrPQs|J|g1JOT(v>;xP$GCUFja zINBv&Xht*@Lr2zeEHMFha>>e5l9!YwGYRLR^EOb*%!8>%7$JAm6Zb-}cEcn;5{(2j z5}EET%DMhnrNs!_+*}_KO>`x_&|`-tVxuxta!S{kLKlGA2Q<Wd233s!Q;5>mV&%xY zBn<?-&Qh6Ny;j?(NYPD8`%#h$h*ee0YRK%Bw3BmsMlNGBsFeQz&IqvBTuvwwX%lhF zNDS1Wq9QSAksoj~N3$wpzzNgJIhaFm(8QK<hFB;<#4%E-GKrfoCGNQ4K(8{V{{U(n zvf!wr1-$bZ<rG#SvJT6YTDX`BH2ii&bBW=wI6+<boyLs{2n?udG)B*Jh!f$L6$9K} zrE@RbLsKKT6LPs=)I&EhWJUdr6}gYNOu5Q)v2nS`ot|b1P0hef$ieW`Mse-|VMNKj z$u%_AUVDlg3@1_aSMC7gp!W@&H*89?3OF*WjaF~>1)`!N;7%d%oe^&_sp8F3JIs|1 z8!}U4Er9bBshKD;^B)mRG=f}2TGa1oAsc2h3Vcc-Bs+w`4(0v*6us<q+#)whF%M$~ z<!(2J48UzOIJ-Q@5juscOoS4`PB^)q9IV4VYcl3BjmK=;JC?9NF@3NYmJrvQLV$d3 z3ixc?%DA^F)9o&f++4{6<~?Z}*<nWbPPmzJ0_~OB*5DEq!vvIU%MO}K!!hN)?qJld zaU|F++~51DR8|u3F~TDUa}bwDNld*cmJ<@{CliGR@oLl&i<GW*PD`n^Y`QN*i@{b> zx`>(a1t+t@aQ^@ZUCQbvlP+0?WhQq88Q2X(oFEfEXSi6`AwjOPy&xn8`X-0=PUt1~ z6PFB?9yKeuUZUw?FdFAjO46%yY*RS5=09abE3=$Olc{5|1dLnENT$0^2r=sr?Wi3f zD|0xt?j@mes8G33#>D~D%v7_$!I+e+w&B}TCCib%QI-`3^1~+$VTG8Pa~QvL1lF-g z6=)3^jjNb3WW;U^VJyO%3=&a&!FH96^C~zMZ*WXuS~O>L#4YKLS8<a%Mrqut-gucz z#fnqJdl2pzjyi+`NaA4_7BbSJQejz<Q3*8$oROrX?%Bj|a4RdJTmifS0Nwf!kx-9h zzR4LeP#(LQm2iji+)fr;3=m;V92jUn0%j@sm#c9lEw?g2Nk<fbHC38jty;NsnRDSl z;w-)#A-hd=s5r5b4XD*aoKO+KM0O)IJ#H#4M4_Q#7g@WOMP1Fy7{H$KdyvruaALI! zBxO2+u^cL<{{WRU9s&h>oVR0ZfgqQCO*WwQIAajvEV^kb6Ol2{=pZyq`jmi1IGJ%A zd_*N4AzhZ1rUkU;CD?--SzWmBhW3sE@i`5Vq`&PCa|DMbB(L5jYGay|AAu63Tu)v~ zoh8<H>RoI;VxYpqLy`|zsYoegt-*>HVH^xhcTA{GI*0!NIfuS%Iiu)@)g!jz&r=XL zM&Cl>gG4CvbA4tT9o)?WEKF8w5CczQR<Z9sKnS+OGQ}29(AA(8Ro<l~AZrk&@bwwR z=CN@cjh0+u(&g?eP-X2O67fvwzXtIjO(#J(UBruuj#WpgsbLxp-*C}6lu5+ORT0B- zZW3JTWI9Ld;tAxqD6bip4~7D%i-QxP!fYEbS^#iNuZt>bCHpIsd~$`e0&1l%v`A%z zV@Rg?S`BXI0%BZ4+@7#X@*eVLZ=9jZWG3cYa8z7e?li6@#Kj1zVlL%k(&kA>b^(uJ zUodo-t;<FCxD*d2W_SZN0Ulklsl;~yBd})^4G)4Xi#2+W{Y#H?Ct0_c4Mk}{&cV8m zTvs*YoTK3s{Q?quPcyg=xn!P@pi!)_odL5^nuJzQ#pFg*1>F#c;FKfb1-Y1$FBr_~ zL#yH|hjET#y`MOb5Ohw~ARM1WB{&}oFe^pC3L%oZjIh+tgt)^FG)KYhl_+it+zy$x zi1%vcIz$fXbL@f=H`IglwpQjnixv@VH9&?OsE&j8Nso0H{I#4#?am<zqNQ*q*#}U# zZti?JtOw;d_g2K217ty!Zmw^>k&2DXVlU&47KRIjfx;_QD{ac=(^4IQ%NE+*Go%`v zjv^!EO4hs(^UWEBWxg`hpcD4)Tb=O=k3odX<d|wetkPMDgm~~dfdPrsW!>De2T6IR zA*IJ;K~aYs2Nz`c@o0bs_+`sO9Jq?IviPIN!x%iK&<v9&iW$-t&gO7SxPN4Ng`0T9 zyV900H3IE{fF9u^(qe^8?h{dXM1#98GPoL&L;`%&X#}h=@FQ^Aj%8^aWu2zQV-nn( zhHy;Ek9P{9xJ32hbSV%_`2)=7bRh~Z(4vN)hbZs~ST%?%H5b(zj*OC{X<CFFO3)d^ za4KS;*bY(%u>+hT(NiS2=2J<+$8I55#I7expA2%|CR8-IGU%4np67KVj}d0wBWI9Q z&THi3sM^uxB+y!1`59Ug-Rj;1z?q<wc{T`rPFV?|D?BBKPF6XY)rM4VU>$+j%y%Gc zfiu4ZwR^Z?6RAbp2`(t59m+ahP6S6~P0nOwlzV`_bj$cAnjp2qFq3eg3BKaP42EHe zwzgG17c>4y67huQVR03*G8X2(uenbxJtd-mX|iyNanx3ExJ!c!O93rlm<=a83*I12 z%obf2fr~LyGJI*{HhuUK0M$f<7Xk<q;TUM(wp3+LWMdR+;9%TypW-Mo^9hkan5ANE z7Z<H!z*uT5Uhn{18FZg0=5c|;6-8SPc^shBZWlA;w@m7Oh{ngiS&DDYA~(6#Aux-& zgfS4@$rzAJpaz(^pspq<Fig&X)J5wW1UDGbMvOXXFab-+H6*i_b9KTcjbAZVTF1|b zkYB|SWsr?rvMx87#05^Lfq4p!WQ2Dm(#R!EC5#+JwB{_u=H(*}4H3wLavbPS!ljRf z(93`&dzYMcNIs>ogk2m6Ts*d211LdU81`+(_(Z4fM;|Uxs09f#D9%k0&vL@XSdDl? zG2WEox745q^)lmEq`d*P>HtQ%n8JbW8b&z0+C(Z_0K7uF*M!7Dt`x_EIe3YdYY@B> zmP46a#WG3_jeHt|qXf$fbqG#VXpbbeu>(@Wa_G5%Ocl4FbhsCZ8JCF67vMxmQZ`|2 z0mCpnIq)>=iFP(c*ieH3rsH`=?Jmgj4&%TpjqW=Q!KW+&gI~3r2j#Fr&EDrSmj}Y* zvjK=IvQPqFN#<Zv7RhYPkSS=@&87(bIO#!)9@bQ`Rz1aPpr}ZY3+`OHBbqS~EJ#US zRCM!04FoJxfR#l$WVrK40<Kh*7NE0Lz2+68Eyo2~buv-SKmaEakWo7mhGcH@aa21i zGn2%jStI`d2Asm{EIK0D9!C<>Xbcwv3pxNrsI)RH@etjG;#9=MKzKs{9KvNUb3}@6 zHz$g!dQ4KuPf^R@lNp2UqxTL#gL3MliW^qR(Kb~@b{7b+=nbZ#_Xj>UxNGCU;-g`u zri{QqN~kkpu88N`1YRT`EEsO$MiV_5gT`G5u-exXK7?tST%z5~B6=7>pv~y_lwlsF zHNNcLaSfiYbq|eQrc#1WNm1!vdYK^@4q+zk${_>X;W*+lUGRbvHMmsT<#Nz%+ib_1 z8-V-EAr{#E!bt4olob<$mSJseIE!x@2&6cw;wsU@slZ3REJhD<zGt>^AkrSNw^E&W z6sfE>p@X=qJnzcmMD>@N)j}InczJOXV#TUdWZh~!?EJ~BamH*Fa<<@Aj$=QhHt3wN zU?#R*&%;HE4_G4kBX&a(QCUNv9A*MdTLHb3TO1Kr9;J?`LO^X{*j>!7j2xM%g0jZD zC_t?4>R~G}rQ8J(+2L*;DUgIIwmBGr{{Xaas{BTrH6ArVdnyaC9571Tx+33<0$t|i zFmkK1W-z!oPLGv3iBqcPD7Y{#Ml3NHyGOGZDP(}_!mkxD;$?_@Xu}mTFuv1!3TBzX z$n6I8l^+o*2ZvIM?tt?M0Z)`s7U91LV}~?`Bn`=f2y;Z>Y6Pux3y$oswsT1vvj$QQ z3&AceRFhOLJG|7pdPKjp3;fI!P^nn?mFmPTVFP74fWn!QrSQmtIU^(7mY^*%({fJq zhhfZZeDN9gx*(Caxf7BK_DYR0O^b64FS=zu%a;_)QetifM?@iFHGIL57_vGeKA6?Z zbC_Ya=>x}to+KV{1SNP_i#`>n6FuKVs>CiW&Ive>a~LAdXo`|{nBFF4Wx>R+6KNJ( zQH3~%1YqRUO8)>1)$0ql7gm4~K6!IXr0O7s^q3=Yu?buS*1R=F8HQZ4YFZqmVStMK zkl7g9F58*eySQbMA1;R|*Hc2Nc|_p?*tu|9pu&J{IZH9UjO1;jHzX%%iqhjV8-9>; zLw5u48wO`g%c?G}-DwMUV(82+;?6q8)1M7987|tD4;e{>%4SqS<OY0d3^7IuD~ct0 zdZ7~|l$xt8ZZ6iwC2@Q)Ww~%+05fs5SgV*cGQ*6PM^|$I?qPEb_b_`DiMNTtKs`%^ z7^6hWqx-I0X_S{2n2i|jF)+?nt{1h`8#1c|4~Uq8`D$4i!shdiqNG@eFQ1fxeMitv z6drccV&UED`<aen>v0nfaEYveaTWT)Sfmc|{n4hHm~=XcE1WU(AY<_JlzruWlLcT& zP87vT68``Mg5D$pnRnJ!Ao48<gsEY<N)JTX1F7^AOF22|@K9i4`a<osjwQ!1B~%8O zi#lzkIcCgQxk0&SNsOkUBHLdvRVhYLoU(H|Tqzgvq@$R+R7=L7YXBw=R0dzCGW(Jq z*vey=FKG#l1$Ipp$`)0Z=!pHJYO^%4-g-P>w3`p$dxVXZiAzw(g*rBQR5ulnKrP$E zLv5;AXlJxano$nIZ1PGNyc%j;%hXlsQB57`m53Dv;fA2DICvK5i3gm-ZkXyQU>@TY zY0SSi5Hk#=qa?at#0g+p7E@W)c!)I~Nl{73O8L0knplOn#O&QbZH_Xg9dfNpgB~2> zQ=R+7Z8WAXWj88IDjXZMTDd?7Kyw>LiFh56E_r}m8O)}JGg{Y=ZP!RSMn=p#n8@<! z1qpl{MCB|zVWp{Xq8EMPe^Jf$J|$4Q6F7qvH5ePBsqK#3vMcBb%zvp_h3razYXftM zqh#$GI-ikt5qDK{v7{1fGL<VcSR=)arjdBy-eGylK#gxbMOqnFqg`<5U%B2*Vq<}d za%C7X31ZJBjoFV>a)86d82K4-yxPrBsn9Eg+F92$#K#Kh2C5J%2&vR7d!0*|Es<oT zTO7t)lT61qGMFc_Ev?Gy(;U-x5QRZ9mod;m?gmv4647&k572>58-)VN=)(6U+B9(Q z>OSUhW*}vBGU6*xyP5&TE(r8nggq{UiDd1nhP^9n)FGvyh=(>q$`YQ^sKiJ!5(qIi znt3;h4~i^&%}ym-Qw`M90JTuCB6TvAVa6ipMsO*(bnxTb;%npX4=Is3l9JpfQIN&3 z?oc*|+*mdui%9*;+{hB1W(T;81YQbynQ0u<xsb$0%X3!xV2Kh{1a;z%a=ZXY1WNma zyN#+XHaUxOr2~4Ou_f}2Q4RwYK%{%DwRvU2P1N(<VjN?1)FTb#RQG2Q%FT5Q3^+x4 z6TT5#%W}!7YsMiK$#H==@X8Y92<0;iZOe6TbFmYV3MvCgTQb&(qq&+JicrNvDK#t+ zca~${fLmC6Vhv-*H;GIq8=9g*xcCm)T*Ec)BwiTr3ULsTQM)p*)@+o56$wUnEr>Q7 znTUFUOJXxZg;Rr>i&L8t$PgoLg-n3Tmu|7ItwlJGb^&`P9c5+_+^%<wA*3*?aS^}m zLjuwIOaaRgYK#yyrp3hdLO-}JKBK~+vX1a(c?5MAhS5b(H7;{l%e5DTCrQlkjm&&Y zl{h7`S|!vYHquxrUSUWnVi%o*HCAD%y3OUxuX72rW?6^-0D21><uzK_W#k~4IF;&D zXCWYfcpVW%To6s{IU@Xvrcqv+feT_4?ZnNa#>vEj(G%tpj;jsE)J&y8!vxNGNbR1X zfKzcPFpnlOmr-Hrc$~|`G7q_vB~d?Rfo`_T=2e(l_=(wZBU8Q{lOn}XSh=dQ&(tu( zFeBy}hKpggeIi$G49g`gL99%fbHG5jm%6E98mV}f@c|(Mrk>?EhFwEiC*H3YGZA2n zz=_?0%*)4lO|EDVKB70=t$^_WVnv1NVMXZpl)~lgiKLf*5OTu*060S_+NyEWQnr=z z6bjd=pH&9*s*N?Bsr3tUX2RktiHXG%7}FS*GhoVxbfHCUd6^eAM6NP3ByLx-)4)P| z&<rx*m0Hm`_Ui6k_aR*;+)f<ko0q~qN5#ii5nade5iTq?#MacrfyieB8@5w2Rmy{; zu%vCvOt=%6FdWe0VlIdo66QV$UK3AJrR=p!cvcLf#44Ch-O8^?g0d<ThB`r1MT%U) zi}0LGMYi50RMD1EpJ;OsnI&+!cO15BFwhHQIH|=d0>5t#AP51qh{JMe3s?LW0c6qK zKm^yGWq<|~2Ki;6tw(VP-qY_<;}xIG!_kFDWl$)Vbt0g#T9jiA3@lXg#@oA$wT??t z$c~2QAA(v-n6ni(I8wG_sgeR!gLN6nhm$@@W|NS@av^5XFesF`CDJs7Rwndl!&_U- ztW>BDVT7?ZfY+@tzT1u3TqIuu9Pu$)n`^?nl4fS(WD^p(9Bx)39`YWp3FhK8C`1Q@ zN}#!2!FkS6#kMm)h;TBs!cy|Nz9AlI38-E5sBr!(*$SD5Ol95bG*JrfQ~>rZk6bc~ zd5E|+7Ajn9`dq}tc~NDrIU*_%%})DW8FG^sDPb&kk}X~c(TTJq2JQ@UoQzA_Qm%=f zr=sOeXC;O)QEnw{MAL+?09*~(oQ2B~SHm$UL8j&R61ly?jj+PX6N+J%&Gh0feM~S+ zmqKb;>Q}Wg0Kl^?kGZPnGoTORj(%H_OYm8S1U~R?Fnd8%xYa6iDiIOaaa=RLaIS9r zbg2Nau>}(6I*ea(Z!F5turn!xQ0EeddxoNhie`QkBhnWmY-ge`(QszbsIQIr$5NY< z(;ow5Ut5={vlPJy;tpyfIjI}Mn=HmbmcCdL&>L95K|B_QqrRorEvEf8OyJadPLLag zFft`_IYmyEF94r?9<C|B7e*%aC0f~ikgA$R=2^!^Vqja@b0`9@(8jf(OKH6yOil_0 z42g))T7dqWb1{UW##DhN-Q~hH#5TB<)GK1)cqC+ED!9r7qY3CYDr~|rQ<}wcNp|Z@ zj-y{sZ{~^L<gBL{2{JIzilZv7rp^)y;xP?Ux0%fIE%_mV9VUJy1ypswFcIr31i50% z49BS=o}wIbqbCxem~4aw!FUUng5eF-%*h1C9qw9~j5FK`F4d0Rb_k?#;Mv|tl@k@X zjB2O8Q6pr<%;sg#%@9$A(3q7zW?5-k1@YTq<AAh3iA4p?uMcooTrFwbwEAn=Nn6oh z+)f28mIiVvg~7OGOhs~_<O_lV`TV511TNXiMs_DIZg(Jku!h#+mD$9*+AHhA>rQ4t z_RI@y9C0s@Fxv!voCYZy{uW-utE<jk$4ZuRf)VstnICZMh3d<`TTPjOSwkxp&ht^8 zK#JVEs%D=0i(07~&$(p*s(OdVJ=vJ$qsbs&s+OH)B3%w|wO~1GYn5XWZ;<5<yC7!W zrp>Y8CUz^_p<Ex03Du}_R6eHehTt%a7R38HD=`THc55>U6$P^#9uyi;8<Cb$p(x0o z0!Pws700+7ieS&gu4h-}E@s8`hmu!dvCDXv=hPJyACw2uQ<&qO5gCh>TZmK<ayiUc z&k}(XuZW04tjsbfISBhf?0~p#TrJI|{v#Bft+BIZkQu6ulo+pvz+udcW2UJBK_N}t z8F=s|SbW3&qL0Kc65h?Fa~r>TKhkX|EI$cgcPj<LHm!*Dxl6>&9=<M^uaKYio$H8y zXveJ^sD9;kj0#1Bxdw{#J_O&wF1by^@QIedRWj6@_Y$(~A%ZJwn`H@ch9LN#Xk+{* zIvYD46x*#I#Wo_K5*3iA>Q%G(NVr+IaDKES0=_c>tK3J7>1rFmnV;@1IC3NThJSio z#P*xaDB{A``IKQ=gOFB<2cjJ~XSUFWTPf|U{ll|iqQOPq4PVS$?12k_CtzB^UK$Yo zW;H(3DM}84{!<=z<v%i*;EPKC0QM*06>F_rW}Xc-h-FKrX7f_a>k^Eq%v#heBnV~q zDFZ!|o@D_N8u%sHK0y;tpC<>90su?EtRq`LlqY|*TGZ=A)kg#=++G7yT;BvZ^(_!P zaHTSsw#$Z2$+uGx`b-&Y!pwwQmKxmKAK`t*2-6EKbvCy#Zd)3xBA2<Dy{5UAW@2Jp z3`+!s)O<zTx%!A7xijNB`>Cwr3@Q|0h%qnf3>moK+^Uu(<7oF7@>m^{dxEQ1+{sm~ zM;uSWgl=k&(Tp;*miIXBHY$51co>dqXk!fWnl<i7ZM(9fmONA-6vz?kW7Ky#n?>F< zM~F8l7hZ{W*S$umbt5v<E?0&zMy8&R7(f6J=7>89(kEP`F%55&FCqvIYry%H5WoEt zG|7h~qpgnM*1TAm+c6XO9Lt;YcN`O!;$O9H?ov==xst7O23CbicTi16FM$x&5b6~p zNF}<Mhb#j+faQc1M8Oy?E13%}S(?Nfp7D|@Bp|{#a4EEFA(h326;gfEDmwrgb1X+A zhskkMrXg0G1BkS&0y9*4Ww}f03$M`z9hifU8CdgGB{v^3?vmLQvwO_We8Q`ZWiykD z@EY7D)))Q{`HOKYp}Gvb^ja%2&!Xn$GBTm2SDhWl3^+~d4-Q?d%T(?WaK@q;y+8rn zqZE6Ur63+2BH;UFEFz928!20(4Yy=*uNLA8^Wd;InDCw|SC)}(VJukqqN*rB5RkG= z9x~+xyvrb{58Pbj7JDLpb!6rcT3{am5`{bwG3qP?b2D!-AE?~7lGIO$8q37B?L}%F z;ufVD@`;-3Vth|jO8)=@{49|SLQO!AVH0~j!uKFDq!>0S0K#an*)Tx^GY-p?A(G)J zA{yddoQ%CHJxdam0GlOZI4gp(ng(MS0-Tb}=3s(}K_O;Yh_TK{a43w0;!%J35>#>7 z>Q`Oe>?*46%x)yp9xO7_@d6rB0?ghQ(#j+u!V>2<Q!2<s^{COLlwHMpRwAa)aOg`- z5|VGcn~Utd!;yrSZxVIt&Mpw4I4<EaO2I2pSq-)+B-6TGR1L)}DrasZva8flvI)@> zr(cO}0&=m`gKRY%;e|rD$k_zAq9e={-()jHTTIs^LfK|E+@;ea0z+vFA$KdEMj3k6 z;U6%DJ+d5JEs3Kc8ofa-i0w!xg-p+OmGLjq3t_T1?IPa=3dIW_TkbZ$<vACp3!^I% zpaBjG@S{a3&GOXu)GMW)ReCP2)TZ+N5hNN6T*|*f7Z77o8n63bgQzf@@`{(JJ)*%0 z9Bv-PH$Gv*qT}XjeTCt<7Z1^X*sgMGGd5hs^Dpf)h%Fd<Ux_OM>4#_evC+0G3a^<& zQ|-`;-J-*xFldUKV>GkkXYhSS$ZHqs5Pbxvff{~cBK=gz8Msv~q28rVVU65tvMK?e zCs0MD1wiR9F#hE<5h;}$s+$!^nEP=m9?64m#O9r;xI?PuA<pAAh%Q{zxO|X!Di;jR zxCA8HbN)hg9l`UY<&3Xe6X3+Td{)Wx7yFA4-`xR4(I0U)iLb;970geLe&cJHuX6lB zZw6NPELzbFtA)lU&<>Ck#0P<mmZj9Nml>ocF#@$H>I{)LE(VMswr;7FnZ3*qhGEjT zIs8C0VQHGw-I=};0U|@Ih^<F3lVq`}nXWucSeB68#@^@u+5ij#0RRF30{{R35E6Qq z?5Mr@I5R-ionUcJ%0t5t*^24gWK|gQNGe=_0cQ7)18PLqt7rs(3}6Z1gitvYf?T9G z+wr7ix|W|XkZeW>GX#nW6ed9mhVujx1iM^o1>BBT0JpjL2_Psy1xi>TgF_^OL5$!C z0B*2`0wMDmv1+3aB#KJ_06!-P4Gd050){Lghzkh&6g%|?yH%g)G~nxiXASPS${2qB zl8BYKpIgrRm1OV;pTv;rEfkdp!2bYmLM*gtUdg#_zWyf?>Rd0;A0J{-0mKqXAhtyW zfWZV34G9uS7lV!&5J7+t0VGgiAO?s45=cZqKqOp6B$GHGG6@Q>NFaoPCv(o=5(w-N z1q8c;01nNd05LR@1|Wk<2NDTz066oaC4$FLaQdZBLXh);ZE-*#Ab>#>pLQ#<$Rm*X z^6~eBo-q9FQkZ}1-IPBc-eC!vHN5PnuqULYRFI~Zmp`MhPY~2#nlVT{!{puUzHs0N zNr3lVRsR6kDpDH&RY<Fu?y4j~PICTa`~6n@O~u0ZoY*Jr5Vh~HFmkcwX#&MoyT2Lg zU-l)ESGG7F9X5Pi1CE)}x5MFLpuz6(^yI^mQ+O}CvoDSpdb0-zu=Lf$>hd0i<wqpl zX}W$)lqcwnXg_OA6MDt~k`X{0cJ+s&)$%0B?3stTFximt!;oR=<pV`x2pNK(i?h$= zTUmq_;ODCU0REw3fVNeCgWm<n0;W!bg-^*sgjxn!1pDUsS^;gJTj%~5>RlIretcw= zghToS_b#f>pR-`>qN^AhXFxEuJGf{~@v{9hh-UifZ3X}%^w9CD%5<%edAL<WT1c|9 z=JS5oNhabpcpGU6ps59kdZXIa?db$i0^#imlpyP7(Ais}<?2T0RpJN+hOYUcN31i) z$PMyxsoLSH_Ly@4A|0oGH-j!W=N;yIeXNGb)F2>of_`%AwQHHk((z5Gv^>>s{{ZYu z$B(Ui;#OUM^!OyqN<QV2VOhed=B6rj)<!G*@8k>8EUn09T`&<Gd2r-`<F5AadUd&` zcIR)GhVldJ7>DdhqTWRQ3dpY}u!JbQxFwHRAJaFZqyjk~f`mxDK~bh`nDGZDTz+$T z=8+WC44ij(^*7t!ft3fbj|58R64O)2etO%*rjj0BHPW2R@a8WyrV`fd<9ItT`5DY- z^kcb$Oq11m7)Hb`SC$XoW`OK<p9$9X$ecT=X{>8p!kr?&5)5<c`S2}a<*!ylQfXVz z{(RGgm1nzxpXDjPkS3=&r<yZUvu&h@w`|(BHva&=)gkZi<CC6NOKkgWOOOy(4SnI~ zKw?*&v~1FEOaA~vxA7+3S0?`e`2_sIeJq`2rcto!%=|)6A8a^epdr~1?Y7)%K)TQ! zhll&Mz@lY(11L>~*KZ@s>cI~cz7!$d2z<1^Er7lRml7~1Xi7MNTK=M8KH$$MFt#+H zQgPI8jmlK9Ul5@}Y;Sd2raKM|^Hr9(mJ{ufG>3*RUtD%*kbYn91+bRg6U?La$lw`C z{t(g<q5LAW1AM*O2ID0g<e;MrwWRvTdZMsZ75@NX^JYvFdR@ZrnO(@Doz83(N{>{R zCeE2TOj@IRj$kMgj;@cJnlUbvr<?1qFR5-XSsCo!8o316MLTD|MU8hp4?)xIWNFW( z{{R_KGe%0fsIh^$hC`nuv~Cn~_r>>WT|={w{d$244a3ARkp1a|f@yS`RJCT&C<T^7 zCvq|_gi+xAI?Go>=<jtfVKTxGDn0XpXQn}t84T&!rw3+JufJ_nKwWB=ue7kUl^=V~ zP517n2#!T1w|eedAZm_BwbjYCb{_8H@GuY?`le9?UHiOHpb;i^k%h>V%x-z0iJ9Qz z5%s%c0EridR9R`>P__H7G8Wp@UuMfh6P`!D#-<+$5VJXb4M9l1IB(!gy4TDkKza7Y zt?K(mu-EPp`Pkg|@Ew2YYEH>fX(rG`{{VfjFno0_%0x>iCU7<B80MS*0C&|tf(TsF z&i??W$pYrWIZMj;?(U&l{V$Vjz0NKPu@dXCSwokx=g@6R=HqyCG62C*U@)^wdwOfZ ztTPC!z312w-dLW=4#G_80<YOr%MD2?aD**6dv2LXklVdK##gN|aa{NUWV>lunxT>) z{Ol{hD<VXsS#L$xz(&Y*F)=WA@FS+Gz_YeTBb`)Nr7twXNhGsSJ1z~?X!9?E<(Y1` zg*GazI;FDS6j_>OB$7DisinU8xAZUt)9tq3&s3-21$5PK0w!fCG6?`4Xw;uGtQrXe z=sB2eXU#U5ii=3ccbh+V;UN;OsRCq!AC(9R8uL<{GlBq8f71CYO$AZM-M6_(bhaeM z9dxapuOx`uzVu0_*Y4wtJ8q|K!|J(oWthOqgdkg`O0uhM-~Yq_BoP4t0RaI40RaI4 z0RRF60RRC25fC9UAVDxuVX?t+q2ciV+5iXv0|5a)5Y?+t-?72s65ICI?0;zo@)i7$ zHbxirLHwWiT7NJ6?EZ1&17^rl3&L~o&i?>7H~V|vym$F*Bge2m-ei(WK0<IatZnS9 z#4Sk>cbPnYY+D>4_mP76Y{QZ~9F*`<OrF1mbDrm)>V97v{yF|XVjBSk@h`WXj$37u zZd(ry1^mfxukbvN<N4U@gZx<hiPv<KAld%_C&F6ZUJ{oJNpbxRwtbUq;M8>wAAjIK zm-D=LbpHSl+XM3R-HqbO`+ZONF+U~t+hq(!E^i;v_9795rHd_p-IIFn^Y{GWKVTm} zCr1zQVt!BFY-~b5v9__WY<m0%GWbYAim~TV+Z!Rb%&S(d+P5ywi9|Mh%*!}S)$`ou zLt=>XN&JMJ`vLQTPnZ61kGK3`tUuWY$q6qUU%#M^857L6Y!DVhmhD@<X27*Oil{`p zd}xwrR<DbE6>c0jY^|<rIV?@vwQ642cY>d9`P!7f;VbO><OKf!8x*bBXCR<y0@(uC z;G(l3f>`4cf0k!&Pw-gFPx3z4e}Q;E(H)~dE)Ema-E%jHu#@%tf0{q>kGIeHeg6QA zKhDAA;3w+c{f|d!9)C~hxg37+ibp@deUG2z^%(H}Pru{{=5b_O`M;y#JTl6M$LReg z@tYytzlY;L46|jI$TzAEW5MivzN73h;B1`Px5SzF%Pig;FZpvN>E7q~e>zE{w~Z!n zX|^&XHcWZB-9J7)_K7Fuz-%^T{7SrdhzTqtl*tkT#fQu30~q;f!HEV1f*4yR?mz6O zAi%$t#q5E;cuD<O;g0CZ>dfPuVB4Q9S}dzJN7iS^hn5nIwgOUE@oF1lYG6I#qd!>m zmJ_M-FX1-XW;p&249IdF;zgkzWs~;J$&8rGogF8GGs`oDyl2UVTg$W5HIwiJvC>LO z)*}%4cu2lNJNThtzDtB~{f<0syf=aDbJ_7N=)%%*`v<)i4m??&%kLg8HWr2agg6X; z8^N~BjI?~6JV1SsX*hxVVRs;q2gq%-wtR8CC)+)VkmGN$ZwPI-c=Fi%;f{}aF;f&v zZr^bdcv`7<k2rC%EPlqG$(c%U{rru#mL()3?c^}<vbTfL)w~_%!w}CVllCCeOC^x3 zA><wM(GGL-gLA;Lwgx<X<GXA2%$qqjLNw#T+r}_55ypP?hF`|<;29oIvT){KFA(g0 z8+w_<)!w=%hhc?+P}rs+$*b+1keq=hZ*e1t7IW}AWck)tCz8Al_Q^h5KHlFa{2y<V z-M0H95q*z2vY92!S5>_%B-vI*LUCQSjf~!<5B;!UK(YLTKH483w|+oN!+DJR_&(Wq z`6aQy_Hpc;6O6XoSl_`vjNviEtT}GSyd;uv9A)PCy<U-IQrl&g7-el?g|~$~i)P!= zZD9G!#y-q){F5(jp0oHr2Ogh?hxj+3*n`_97vC>P53xGr@jZS4O4gm2SQed0W=wsU zc`nW}bvAky<-eb({iGev2Ek`fyd#XEmhxbp^DEw*)3ep<$P+BGV+TfW?+8yXL_CI1 zTXU~(WAV0anIsll{v<ZrFuQD9Z#GlOd2f-ZEG#cv_=jO+7UuvUur`tsc?nB1e`Ae! zEV+A_m$SB6{tSG#VshRO_#cJa<S@jx-(dH&h-Wqk4;tQ?%VqNLoN$;=?6ATsUYrt7 zCO*ZML?GFXR|%hukAFF3mdnqub2iTJ;l2D8$-+S7b~r)Ge<LwXp7Yh-TWmJ_qg+J| z;vI#xj|@GulP{369^TGLvw~S`jIziq<2;60C6HMMkVz$$d&lf;?Y!GzZEfJ+TR7Qp z;kA(qWI-HlTWmhwKrGm_;pCQ(gpl?y&w3wMxbYukwtmC5o-*}3v+$b?=0%Y+FT7_7 zmTXL(Gk}6lsqA*}?TA5RNpE$+-Y2p<<>CwC&ew}J9>(y5bLKi5KD^1c+ic=|@i^R` z^kwbnmVONU0|fD#1)fht^E>U)po?$Wc6%0VoG{?aA~3;wSsJ{r9t0c9;&Z?~hDYED zF9Y26Qoy}p*kIp~XV^2T;6aqMwlVCY4Zch8vE=mNOwgw@(0Fke@W??2US5zu+y0h% zLjGGV^C7$)i)|elFEcfPJ+S*CIWUXL1lhtk%WPAI+baws$YHn3EW8U#4U-v9dEpV) z1AK6@3Hc$$K?I%6ytxE%u>i_#5=R`8!7<63AdH6&`Mx7f@9g5if6SK9lQ}%{_2uSq z%h4F%HsmnNvTWkXLk`(IntlQ^;F3uIY;%0!ZI5h^BiTO(OE`s*D|&!L5Z`0N#})`S z7Wh6NV2_cTMnQ%=mzKU-BOY7CcPV7N;fTJkP<hGJ<Az2ZzhkmPFZ)L#(ndf>3By@f zeTMsQ4Bl=}y!^9{8gCXBu=&YLZLaZ-3tuH5!wF~Y^JvM)_m;-<1`bZI63z%R<bMw% zhu)8<=L<O~;9Jy0eEbIn*=>lJEz3J5(U^Glo|3{+wp(qJ;@ntE$UoWK^^4i@(i{^F z=5sv*jmE}&^z3@We**6Z#!%0*2JxKUT|*zEj}Oj%r=|6L{w~KzjTSaA`FNY2f7%3} zY{+b%caPBru3P&qPL3QeZ=b^x&V1Rw0Bz0(o8-9J_{$;4e4c(UxnnTk8xLWH@zOsA zFK=(FPm+lblSIiv%J`BDvcgH!jN;YEJJr4;%VoSG2+mAdZv#jmvu@r?C}FlNFD7}B z=QEh`fnl+*-;wx0Up#Mv<+hx9LEcOGeR~k)<9J}>ZMN_-`6TLhVJ=H-vV834ma%lb zaBkb%WG5C-midxlcJ(a$4ZMS6<iWOCz)Di~EJI*$`S^(}=DgtEVmo?l1F}#3Svh># z&N$Pi!Y~+qPCn24a!U-IS+T>&$1&amXADjYf!pHE=s6Q@=EJcPL_uWv!oH)Z+r+{I zg7dj~VJ)x^OhdDhZ@ilwzBv4sICxL9so=<L0kF4&mi&_Vn0Y2f(!r0Gc|2@lH4Iw} zF=dcP7I60;ZwXI14#6BH!oY`lyfMUA#2E~O$ZQ$Mc3^VCie@z|rIu{6e3oAH%yW?+ zaN989Lw(?mGCu-spJTAdhV{Jo>~+aMEOt$U*od5bSlN@*FW4W+XT~Gt>iX?5g{0;g z9IvU=V%~9#v3&8!5!*iyc!N6d{%q-FWANi7lR2nU*>Q*1`5j(%Bn0@&Je9$ldECK= zAItkLJe0!#d40W>NOscp)*;Hb>;<`MP3Q!O_wq9IS!b$yC$d{?4E8{Vdh&+MLc@oa z!6LzoVUZ5Pnkn~g!6fR;h9=rev3q)&qD7nK@<x0`Xn834G%T6kcxf>Z=Hx>^EhV<t zOJ%lmj}n|LH<igD27R#bWJtZTpOT+!;|tf$2;`Nm9xqd%lk6qQ_F&sqTP=h{o-BR6 zY$5#QcR7_KZIf&xmJNnd42wy2{`B7Mu-h`d96V*Q5efssNGg#bD8H~Loo@ke7yhH{ z34hAb7?zO>ES`1gAMNVYhaip_{{Y(!h!zHMvO%#NGDakSFC;rq*3LBri9;>zw%ZN7 zEP%B6X0wmH9+Lb*zhhVYA<J)(qIkpc&un4r!Do`?v26siEqM5p+ukF{IzuCYGKy;4 z{0)O`Bv|2PLWQ*<lXCEeCbqwV$?{vnjHvcSgqSF2*a!rZ$i7B=knv}N!o>CdazlgS z!rnbEHs_M#Hhh;a7q2)xc(-_W;vBrCmxFi_GlZoM-YvG+@ow9e`FbG;gd#+b-{1nt zpPbDeTYN9%^Wr6z?*pKG<Ts1Kko-aXlimwuoOK+N$AK3PZcT5jZ>P(}gyUz>a(!{U z9EKQtm4XDzWc}E|2R)_U7~q~#!PhsCUxc>sPM|{Gd?j9^2!UbpXNxqO6DMbHWQ6U> zb~^+zSm0q0&P&=`GC2gkFI&;E$1ft^IkH|43B)7qk@jDE2Nm$UKR6pDmhhF(j2736 zChz3J_Qc;O>|tRW_Evd#U=t=5+%t|$PdIyegtK8AEVfk4wqZOVFMlsjVHs|pytX4F zZCDZIytI*jCH#(a-^}D5I45kLJY=!!k|`8)KT>(=oJ>h=t*!#&rb<e)&B**P#}Y2_ zjNIsiNjSXxmf}uLz>fwDBY2*FVYmIE<hePw;O)P$D`VM+duYObNdExaBqTCkH=GS) zePFUh@xHRu#&Kc~wm8yKG5Ici>@ged>hckgl_nx-!wr&5PwWW=keT(x)w5(qokT45 z{_P(lHE;4`(o>3*a6z^h&Ax*_VET=)I9p}%AuW?x{G1P8Z?8E3A8mLz{Yu?n$xLm* zt?S5XCF$T(mx#m(89d}_8PvSB4<wq425KCXpLQ6QN>SnG0rFqK`;;<m*lEz2YEO<O zAi-@J>j%PJpLjgB-VS-Wd~inFtjD&#-d4AS=JCnK<M{*g<&Fd5#%US*9|5=+FMfVx zJi>jEBaHC>0L=c*HYN$9Uu4oAuQu{A)u%1z@q5~E&yeN3nsX*wmd*|28GU<UVquK0 znBbG}-_D7$bYH<R${aq%u><Yo5<+ku%KW}5A?2@Jw|#&&@Ls=f9?1S8FQ`b^i?HxE zt&uNHw!+8DI~gq>V37#fwp%1J$#k=t7L$^a{{WM}*k<$6-GXeUL3w~pw*LUzSDMN` zS++2O6EY57g`Cg*m%j0*@={Xra?_9g#zH`FVfiAK={`;%TDC)pd)nTd9>FKo_Yn1F z!-=bANi3XBV^)c!{CPBI2mC_`)#L01faz-OzGv*0%QM?!$;GDhV`I#T{{RBs<d9GH z-~F7Mwm;c<<@^Mb^8Wy#Dg1;VBmS>HB{teyBI!DeS!J8YkQhG{gCYwVG8WcKAjem; zo4KSu5vN#b2*0`ryt0*!2jb83HS)vkh9YzMz{Rj)_=Ms|C9SeQxhKhI<o)DJW%5LE z{{YGI4dX1crrRdZ2DX1DJK?-9#CHDxC4b8Z<8AEA*Epgt>d~~564^!mZ88rN3vUs& z^lW{T{Di@Y2}$-H?ns9s5~<v)T)lmrS%tka%Reu(8m+vvOz|YZ*f*&1^x_PJjM*G= zEY>|Q7<-qbKg|5SH=($&bJ%WCW1Lz;Z5~-IvoEc(^B}V#ef$8j&(HU{6I*$YPcqz> zoyUw!$>oK+)DJC-7%|z*K(RjlzE63FxfR{!aM`7qo>Nh1usJ+0CH5!Q&b$p{lQ%CM z?*MBD<M0>Alki725HfE%hbJ;^Nh<}F4OkwqrR{{l<co<!XYA|xwj>{9&0FD0y^Jzm zw!u0Jed&w0$h4Md$uFB2tx~@AV_DScx6iW8blSHm^Zx*U_`JFw^Zx+s4<p?7{{YXQ z{{X#^7d-d>0FnSe&Hn)P<@|pi^Zx$;^=LYOKl@?q{%`*PM++>SScjMV-XxK}k$i*s zI-g07uk1)NQcPiHKV^lS+vLM0LpU(;o%;`V*~#F>tUhsa-RHK@fZsVRCk8hAXxpYq zoZNd4c*&K0onc!400V@6J}<5l8*IFpWbY3joIfwFAD7=M`rvub>RZ^KDr#++cuxn& zi|D=%<Q7EW=nPBGi7~xR_X7wP7yrZnB@qDu0RaI40RaI30s;a9000315fC9UAVE<u zVR5m+@PUz`|Jncu0RjO5KM>u!a_t-~{{VLX0KNnCVSi?LqWqs`Bg3=D4XTmu=J0Y2 z-S(OJ>iBLC`+$9IChV*k^Q7I1{`6(`53_Ccll|HLtp5N|e{5sx%Jb80%9@-GxY{Pl z{{SR-U*g(-v9IhO)6D*a<Mu(#g8tw6U-?=7?Ee5$_cDLm{V`ARztejCzoC-Vt4+IG zSX)+D@x_5+#{e*)VVZHnalK&XVdMlXv+BYLgiB&gV9%0l8Trq{dVdW601#o!EV9FZ z!|}v6S@;BUA^ahRBZo4`ER&0q?WrfJO7scnnEa?46r+UwIXN4SEN!R8`=6ihJ}1AB zgXcbJX|u$%{{VrB@R?z-OOIArZbvrT3kbqxoXo@-3=oVkUPS!9KRJC@gYY?N;?=SL z0DQ*h?YtB04bQ^`;>d3VUl+yT{{VrHm&Nra!I0!TWtLe6em9{r;^*vV%SVR!V;s)z z_t^a7caGM}dPj~gTgA(s65qqj`Nf6ko)^dEbE^yD_`a?D18k7)LEN7#6Q5$_@5|6H z53ql1CG#`)L%u+4XM{!pgmE4k!Fsp(e?oY=AtV8S=`4!amrED0(7x{t<#|tE;j$v# zp_i&gJ(2*jKuy0bzDhB(VP^LK0Jc$+{UEiqasp-B<7>k4_6+iM`3_%fvd_%d+dKs$ zk7_5`KgbMta1S8<!#>eJ$`7e333`2%qWTxWu@N9JzLrmApJS$AFyk{kv49|BePKR8 zeg^|Zr<fi@`^?A4N49O5wkbH-?jRDk{c;Z^!2oMD<+G3xpDjMYAYm+Xi85zPPCp}$ zMxy{{{7Xg@4xD@Tje48WpMX5TH?jFR814ln&Ir~mBlGkB03Wx<7~|i+{Ch=^LmtZr z`T6@#R~)$-e@?Ks7m4#6{D3?9IZjSPKSzb^{H$^7%^T<P_v`!L-^0Z$*)0;n`26@# zrOdPRHXQ!|fP#Lt)OL6G-=EZ*#!vRx;AtSVw6nRg0ui*4dns&y-GFH!_7V92*2|ko z2R70OFj&Gz&;VdQaFX;N*v^~^<e>=LAhen10A;W%#yh|8FT8mT?8|1urx0?|0{~CQ zH#?_AlFwt}lvoq-EcIjicoN?@?UYc?C|_;3UsY-8>?0Xg!ZE!m@$xGR>+p<k=uhHM zpXyA?@a$MaHeZoqH)TG_F_iXY<bwL^Ii}o)0e@|<rf;3uThu9f`vNriVVHIqk#Qc* z9zvFal*W*xr157Swg~PT84YdVLnylmv3~v;XP4IY^YIiZS+8)(W3WqP-WHILFKOup z!R4H1o1CtTHcKRq32IpLSTKk?_&&pgyWXv|LF@-@_F=3C*e9@YFyj+vbg_ro?6BK2 zItO_8U*<fBChVII&)dS<9yWe(O9}6O%OT&%mxymbqr~<g+c-nyJKO!)p211fwh}fh z8Q`|czhz$9>{xMt7x35$!;OW3E61lJCj?vFh5k`g;#r2<7mmbZk{Xj>%iLLyyavPw z)wkG(32e63ZKWFLq=NR&d`1?W8iV9)4U@SrW}c!o;r{?w_Wm1hXZq#+;k=alD`vzj zk1gBNWad!+0JAbZWSm;Y?3r@i`1s0BK;ADOA&|S{85zfedH(=tGwjWgmzms*32m~% zEsKF+c`!r<a3z;!{*%i>^#?4@G<dgyL4<skyg0Qt{j!n>h9(W+gr=(4MJ~KPcGh^E zR<R94x5*<j<U43Dh;6s=t7qGCSZ$WrTUIh!vJi$vyhyN^a(>vPN7zUVlYA_$L7T{o zdF+TKyoLngM$`@IY7xTaSr!S=^`67QHf)j{NNp_7A>SjJ&9?ILXS(n_;3bse_C1I! zw3B9S4`hNry!~%nSf0TcGSM8dIb+>#vBbQxcotb@oQ6C<XB-w;JPqW^7Gtotw#A#* z^4yniyks16Ey;D%Ovs8Lo!ZW0lf&NC8)c>~ky|4UHJ$*xt<D~WY)#+8#$AiVxFfGm zcz!QZ7uY`zV$L?_1F>XVIJD+j$AbG5IJ2Jy=iGJ0oBHwgh}cUXCNeN(;~OpN<Kp?} zd>Tc2PJfg4r^d>np3|+K86&|Dwm+BqUZs_v^%}iFGR#<ikXjubavOSzOqf_Pw$um< zHrYPdUK7ZkZRC`DWLeVo1+<079!)Lm<*`2XB%9GX*x+7q>f3p7KDa%@Czsnc$3Wz> z@H~48bNE$O(6b&}J7i_N$h^4&<&*3_!93b<cgKPR;n{>ZB7`%;GQ*45`PNA+&u<BP z2Vf+e8$SUE2E<t`;Ex*-mzfQagL@W6U`yNE*dZ?iZ&C>3>I+xN9NybzTMx0kp|kh_ zlN<yi6RF($df>xtDS6kQWbzQnhB-@eSh4P0<BD;mjFJ}GIo9{>pW$+DIZ{4w2#~bF zY{Hl!!w89K2xMY8`g$bx%NX3fTY(M^Psn&VM9U+7Kx9D=FZ#yZFXq0*^Xvk1txw4b zci+jToiV_P1(_4<h!!j#V1Q4@9!tsG2i^>j9?EHXNe&pmoLpq~NH2&i<2S21tcc>q z_T}K|XxaPz&P{m*KqDRtJe|i!CKJVvoRXfF?;Zml%P$-pIC(Q5_l7R<aUMOhWSnPN zw;~^aS&!gS4S~)3e9N#gy@j8Njb{g!+?L4Lzj!~yUCT+}Pm9!SMbg=hZPZi6q|dA7 zSgWwvA(EE*kCJ=I=4;Q}ZyYmvA5z4}<F$)39_If5ZwpI*czGZ%TMR~aVds#K0GY6C zL1!FPL9zsmUe1X<-Z)}Q1C6A>mT_P#qdefY(6zF0IETy3&+&!T)bM7uw)EL%@j3Z; zw4FGAg_OH&NU@1)eMU+A5cw+mHQd)c92sU>$BnX_pMFYY%hdAI8M4HHu*-b6E#3jK z5oktj?|Junz{t*!+WC7U!-?~YlE*f2{Foceg4isZA>?Ywu*j32iDi__Ih+{m;>dEv z<>`E7th-`-ZxSV<2dgY&BZ1wa<b-)Gf*47XS!p|R3p*8$A_B#elafyY%Pg(p8pQ^D z=H>k_N$<9&pKll$XZvG|4T8ZIMB7U?&6%A409UN+regCXURi3}K13w*w%T7OYQ=?u zdBJkQ>|=*nh~qOhSsBcaESckm5y$26A8jCl4rP<U<mKLrA2|NA63aL>5B5~~%s1H} zwJp7~z=<vypB&aVGOuOJ5JN4?cHgcVQx-`xJtK?5;doi+Uz`nj4vBN1-#9TIme=%f zn+8uNFt?05FeHc>KP@;OS~5j^bTnnDcwQa^K*-@7Gb9rf@jbIUy?+qgkCVo4o9cNk zo0G$De{Gjz<gLwHVV1@s`@n#d;6XwClal`cAzQKX)065$<%}(}wh#jJ-gdSddF`{w zj;-rIjh0q6a`9z~Q*vEw^!nfTjY~*mxqX6q4RFRAQy0jdrP=hf;9`!;TNBv+)`f%Y zGFnNtzsauzj|-SfYVm5ssmJu2!|H3)`7GnSs@@JmZM+WiZLRhhKPBY5z+NyGAjsDb zNSS1LHpDF$32mm-?g<8aWk!9K8!3CYu^BVPu-anFw`sFu5=oMNvM}~H#}5AhD^|&J zOHGZa@*Cx{Ngm*SOp&R|*kHuc9G7_62JpmoFCSqe5I-!5h!>*?z9;*%{>J5q`94Ho zLSIm@{f1%7!b!=K@tY9)FJ*jw2xDm;wzJ0~W#<!1AK4GcgS?ImOOXx>hR&hsA!b3g zj#e1s8&v*NMx2Zseev^d`@!cemR&8$#PeHt{s$jZ@_Z%bV{E_Q1JYQ20&l*_c$au| zyhT01XJM_U;b9&pcCRA}D1*x`^AE6Wm-*sT#o}wZn{2!;@FS18WrgDrhs)00W90I7 z^EZu3vBnt^&pp_=?8^(ykrGHl+2p%CV)<-h*c=K;cti7P**?Q>2;<Q4FL-9#_#z=^ zEFsQL()Ta>Yk2naz_Jdt#uu3_yC(Dq5St?<%jyA;uz->lYhbn;&NiD_Qx|10r7t&$ zZRYUEW>O0g&Igc^`o3^%vIrp-N?dw!6@hQN{baBbXUjRZ*<>3$@_mwYk7DLak?O`6 zX_j83K_QmMli)Dyxq9HvGi^qo7Ec9)44_r8lQP_~cp&yk@_j6Wgh8-JmiB#zKB2+^ zAduc8+a%6r#etB!X7cVaW=={57|DdQn^3sjpR(Q|y;^}Kmh;QVmeNa30hsa<MYp`T zkFrSy@?)V7EG&h1iVcymyh8^pFKz|`cP(15u<SX;XIA+U9<W3=#N*$w4vh1&Ai+9_ z^X<88!t~hTh|C$st?e<OvdJvr2jDcfVA~P?BR211**IYge`lL)vfJ)BCw<}5IQZzC zFHz|@;*p0JE!a923o<>Kk%X36(=4*g{WJ_m0Oe*l2o4Vz=jmq)WVxGoZH^ynb~;>r zgKu^pggpuIXvx6a8}8kOl0$>GWJ}a+kZ0p8vPmO@3kaHHgD)ZzI0^atfEUD;Gegf~ z3rTZ<Y+e-``F4{_30Y3)#&}ySh4Rnx)AnW$$tC6(<o^Iu=aQC^l1VIVvdJuy@X44v z%yPsT^41)-{#a)r7S1-yAlb43V|J67ZJl^8cy<(m+OmFew!mSQd$8Ju$2R+Vg9dwK zPWga9%f~PGKG`vu=KePOB**Ri(B>aw2z<63m>`$S&#}pQG*sgt;^nYo3k*%kcZ<W1 zH<#Hjs3v@u0&n(pEtlA3wl!l`2L_w`+a6%ehxT~Z!Nz3C{bY-Ov@w`}kVwnek0aSJ zwqsk|8S|M2UA^HpaPr&RFmMaRq*=yEvk_8=SH~{rEC|=g4+05?8SCY@t&<-z_?*G8 zbP4M?5jSA^!a$SW0uy+P?dff#x8!T1Pc7zcu-maeZQ=F}C9e_9fd=rGu0`_2=i`k{ z^T6j{7HsEbvXf+mmO@BmEapNcMj(mfvGyUJpOVR`UWiWnIk^$xu-|ORa`E0?Cj4#n zk^M~*%a2n{@*amVnBYS>WAFyv_$kla?sX~oD%8FZvyg%T&WY-C5%C;GjlYZ=?+oEH z!mDMOyaY1)CGU?C;V6JQ!TW8&7FzM1SoB@C*nO56Z&8xTI9p~sStkz@f<f|k*<K!Y zbueC&&}qqnr_1_01Ek+<;36lfZDk_T5Q_^qn>h<o*2eVazZ37?0|O<w<%4AT%e&?N zBxQ+X%x^!u2yyDK`j$$z%zx^1y?n8>N@TuXzavj&U$!!RSYQ{N0!caSVky8j$B~H4 zY9?&P_}O>ljq&!!QL;X8T;=R(w2e;Wksb|}9A_RaPB5DI%!Ee&0Fdo}kS+74{vfcB zUW*^dC#{Fe5Fg}a<jWg4IWEf__9ZBr4%@)JFL*Iy<OVTlklSs%?Xcyf?#UiT@Rm+< z?VZaku(W2%%EbN1iDCjze6?h;FtD+Cwc_>6%ugd2d2Q|Ou-jn-L!Ah7XJ;KxQLU-Y zzaMf|V_8<LkzmZb6EXX2A30@`WH~u{w=I3J+Aw8@&a4cFv9NGSgx$Zq+?ThGi2RCD zZt$HRCx!PK{0)a*CgDFa{(5gexAXS7#eu_5<s{au9O0QCKNMr^HHSB(ehVeN59|Yx zh^!fk@LONlSspkb@0X~_d2`ZUek|KF{s)A-A_Mzk2i1wx-UB1&;>$}2VZ3ZaPm=VT zWD)7GkVuO9vdcdkmi6_wcm}|+IE4Ei#KOyujt_Yz-+n>Ygm`4(H_K;YNtSCC4Tn6o z+hv4oIj#B4F~}`Eo?-(2IX<C;Ns#{lyet0z;r{@#HUj>C>F56df0C^}Z=dvI{{Y`S zjRyPY{+*DD?tlIE$G_L{_s{-p6Cdxt{*V2(75&ftU;aAv^7@~aNwQhT`NnwX0kQHX z42B%|hl`W!5n%x$SeEb^F$_bJmcy|zVaakm?2|*$%K_x0@3BZD$bSKUWA^pFx{qM9 zfdWFyIQZw{K5|DG;cQ<Q%zeH%cxRg&G5W#s3qJ(y^<l8`FPTc(-~Yq_ClCPu0{{X7 z0s;a90RaI3000315g{=_QDJd`k)aT=!O`&H@gV=&00;pA00BP`{{X4~0CRay+(5VT zzwRWTsejx6ekHyA#4F)H?FL3ymRC>Nm%8eUjORnRKe!VGRhsnpoBh^1Yt$cR6x(Ks z*0OU!>JaywrC|!FP|BvLwjE_JL>nB?z}-XuxcIp#{v&|;Fn=Yizng+Fo2-urrH}a# z=*1uYksd`~{U9J-mj3_-S^SZgJ;>EfsjT0aGUo};_<?~67Oq;Ltp~1UE^n3p0CJ{l zf5ovc0A4ShW{wX9xj4+MEzDD2wT*A;m@VtnVgfzgMHEuedHaji=QY%|L?2S&0reAi zZxYgb;+Rv5(KhXfBW1MI4YDegxAzrN_`3e!ropSr`;Pz}{{WD}JWE3UnQ=|8EMf-o ztBocHEZHhOf4USf{IIV70Av2+vVSIiP_30Jyv4KkDzD`~+;Woqzud{Y?f(FCcqhyL z;G3DWzud;$V4tWEQn+m{4nNrfXuoiH-N1flsrhHU{Kf6I95nu7UF2YHI3ZCL?dDtx ztC%zj)lLOtW44_cz*Ge!9NfX>iC+*kT^KMR0HxCM%3g%ezd(v~LyRBVE_$4|aU*i5 z1e9Nth8US%5&?5lP{5#ql}Wrtt`@jz1hq=m4sI(*EAL4q41EBgT7)himi`5)t^%oH z7!)YLUOA07UGOq0EvmX-1n+{&vQ<7I^?G<!kRW&k5P+ssQPNZ*ghdz_=mA6_bzzpB zTvgqQUG2o@$e6JqTA{R|bV>_RK;$4uveH78M?--NCGF2e#8eX0J<A0wiYx+7F9385 zK;oalrJYx6iHKCPg9t_4BGlDZ8AhQ|1PB9_U|_Ttrvs!h6h!_dCu<s~0%REQq(9Km z?PNg|QYgjNqveXmzS(g$Lli~q6S#ogVJ!gI6kCUt(Gh?Mh$L&$Fl9N0uglaJCHMd{ zfUN)>D(-+vC<VTt-F1;udj%qf@Dg|_&qz-dOLXS1a5W=0r5kGywu0bC613ew4$#r8 zTpE9Dwy2vr1YyB67Wj(l5E@!2zMWqzZLut&U;#_~H`9f(xgrikBuIjcsH(23E!QKD z02aWOg564ljT>SKPe8F&5OgE0Tis?TZwbcS)$Uql(T|`7YS41AlKRJ0(mh-}E@sal z=vtq+&Yx3{3ocnKgUm{05Aj}-$putN&l2YN$oSRA&;;4@F&w}!j`(otY%i?a5zKOY zP6}d`1DN#*jQD@lO`q`x3_KhNAGmD2B5I+!CI!Gb<)F!ETT63x5AErGA*?pQ=?DFG z7@;q3{jT7%ZC7-D1L}X%@Wh?j-}L-3c~B{ERwY^oR`Fr`fXjOUWy%R`SS6gn1^TKn z0?-Rn20bFNS<TceFQN)RAJGTL{&CCnPy*hyil1tS+#LS^*-dzj+S8}_+Y@xF5VWDk za0KB004mX6fD0<${ais|=6^6PQuZ{Y$ILH;1SW9p;6`s{f`o~nthJ8-n&DTJ^QeCi zYQyvrbel@f>M29&{{Ze8#}D{OUIEGFFWSuM%o7UVR%!m0ZT|p^3~GI1E9LxS{^A>x z@;}oA0Y_{UdSfeuYFWfG!2FWOP!GZs0)dvU=LN?aWjVP@>Qlt6(ngJhzAg<mJmP~` zH%+~omFiwwJBj*$`hv}5Dy(%8B&v{GQCZn9D+{9Onf$!p<yIh07mX3}RHJkN01IOE zxTen$62d1loBS@yl$h5_v-KDC3xqU4++nkMAZ+D_N>AQ>&-#8C3lCmj^!zZLKFBF3 z@L4TqBS?Y>GU`%XuEL(SRNa~}0(z-gV_-pwd!-k-U|G~E)~EfC5m)l(FVR4nwnChO zf`wLv_CaK9!E{>6kWlYTAUGL086vMbx`BmvN>Ak|MRa#~SHb*$1?@ykm30T{Mvx6? z;s{m>2mA?4T?w^h*rvn@duRwilx#}2g@*frE(Xwq2>w-3ENT7_i?3{LC-7na09*V( z4U95-9sVZ@sG#Hb4$Vsq45C+RXpS(YBz!oDq=lq7fh>BQBUCpmSU?@W+*n2hnQ`j| z;xNMe%dmyZF|`R+(_zO^2x?HEt$~4%FA>W}&culEejJD)_KQD+w~1GMRB14@&;?1` z;f*r7)o^`}V5X(jxQ>y?hUM@m#);U5d4P|Lw<L8U4P_0sQ#5)l0+Gur#?}*^u_~;` zUc#5%eDez>1XNAnIe~sF{G@a274c<5y2V1~Hr6Zb$miHA;>w5_tChQ7S*};kODRfu zXuJt8-p32FW}A6yg5{;5u$Tx?{q-G&JThOB@M^Kxx3Qn}JW8A-_9QPZ2-uMTSj13| zh6OdJK`Ld2oPZi^9NwUsVvR5_N!-IO#y06|e}xgXi&k+R(=D)ie}u496(3al<o8SN zu&JHH*|Ib?l?unX@1W@y>Yf-&RUiOozdlu~HYJ#u%i-V(`alwrEwM2H3SjO^MyQ%V zg#`u+8Y*I|G5JJ2vgviqZ8~3tfLjy>$T<NUW0mb2E=dnF%>-VP?1e+L2D-Rb9V94W zjL;U>6Rn;pSwd@N*WwWi=MGW*bpYOV3F+_rL~UCf+Q~t-%L_zD7a-XJ24`YZHdVma zu^1w7fnJB0jfH=5g)Ls0lUL^^#^civGN~%QP(2$I7B<bODlc&m1{Wdm76nOMWU`_` z=E7iww5ADT$wLPAg{3&*KRIKH8YS#H61GWpRzldLMJ&Lybc)w%1bIa3d^+YXjkLA| zPl#gpi<v=du?Po9^bu-U@_<IH7^7F<Fd3@Qm}GBSOd6;Xg9M;3;xy9?))cs4tTyZj zWS$k+DnhLwq)ST*I}p9W-Ox8`0q7B-<i`wGazm9IV#8c)X#gCor0jgl%mW@UCj%@# zRNCgRCT}*2i!7q-8e#I(vbLeBwy!e*c`LQ`1fRDkU;==qs@Issk4gsijhIX}G<RN* zOe{2&%Tx>+kgRmHZWI6t3Ww4g!>CpbFC;Pjiab#j1%fr%K8}E{Xoi;6i$eO@PJ*Q& zL2N7$tI{;gBKbEd`vL|ciyM8xW%pdeuqaEc)pB*Ys0b@oi>n?dI{{G9QMx7d5M+=I zAfk$HC9B^pFT~bnigh5=SM55M%e8p{v<l1=+V21}W5HGXG}Befca(M};BGoWZEL($ z;+I8l1RoxMC?Eu;z@muU0Zs)j8%l<43L$TiV-@lgy{?`24M<UO!NGj3&{zoj=s+k< zoGDCllqrZ(*VnCA#r*4@AdK*LN}*uT8miGwg+-792}@|UyVM9;+&NUVItKfWpitKw zBJVBqF!iC}<gbZcT;BeX#X+v}JXWs}n5g(klr`pGAAvYw_mZvi0;jnKrM>`I3oH@_ zhl#^aSRjEH(T2I#mDXAtM%h!Q)KkQ|a5Og%A)TrXjx_0G9Vjdq5Gb}X`Gs*Z%s>D( z2)m``WINz}8NV#NW<@rMxjJld2O$a-L9t;=1wm@@;x(VTi4+P16)ic0uWX4x3qo3r zj(04UR;SmlffVV`)#Hy~TW*b!x<HX#;X$Hx8#*;eLLZT1Ytq{mqiZDx@4$siWs2^t zRidG=O9d<YTOTaA3%YUu_Ut4eQ)b2wJVv&=1m@KXQW<UJJBuakN~m466|gK92f%=U z01>6;9m&4o8L)V68X#bd(f2|@ebeKp&7cWO1UvVH6J~_ayPy^12=@kKW2{srY_TDD zv1bIebSVSQGt3O&m*}++rg@m4bOfs#Y(z0>?=6F8ny@b^%nW=eT1!xj+7xiZ3<wmM zMH7U3iV38YS(yg(V8Ni@g*h5FSaNf-P4oOUw8ok(sxGC;#_}vHboq)R_%(KmM5T$t zhQZ2LOa)#yin?-T3GN14vg>#Rv7)w_*_f0%Vv{jTYlCGd)zOG(8fSGH@IMGKJ>CU5 zf{MEiO1_VKIYukI9F0rL8Df)l1Q!5)slpYwR&0e)i%SXMYJp9uLo@}TwHqAsQNX~t z{Fz+SoioBiz__3*knB4^Eu)E5d%%<^I8?H@a4A|4WG2djK%s2~L`Tzxpo5L55-kl{ zLWl*DsOCI?tSArKHh`if$PB%e`_klVi|6B+b#^EbqED{1_9RR=ty4h?r~tIIHYL^< zWe8H0+BeiuK(L?&xj_``kOOABs&v_kdt4hGws~zpq6k7#mMdwJ;r3!dsn<ejK!TzQ zFqkcrrht2Bh=!yD)w^AYmLejE&2WlA$iqr#i_qB?<cqGmg4$gTjImKIap|17fFO8f z@2&#^XVm<p1!u1s56t?4<$pG_E$Bn@Q;XoH%0aV*!RXiE#+5w(01Rcs3WqSN0bzw3 z#$t3SUKg58J!Mgl4wW;a1VY4mWtauNC2ya<DHB(;El%k_QL`!$_mg6pL~BHd=_rT^ z8Vvv!fJ`pEDWK?j{T&f0)_aej?S8+6T|m=;Bkr%%_kRSu{9n{YBE`matvWr2ke0h- z7J}Z$s}s85=zr><yo}Km&PoM+`QnIt)&)jFP=m0wSBK{c;*ScI@VkzZ+CKpkMt_6- zrK%oB_m%s7c?Z5>M(m>J7yt^G(g##I%F(M8>f{uCAagEIRPk>yCf~)yivCL$KRWBn zd9;9iE%}{(wbi2H{{W?gOI^PCm0g>pgzJ*4e%>XxLbFby>^plxH2%<#TdS(L8@N_8 zMddEuIG4ldFpY~7AwXdH0DZ@ws;%{<qE)L^Ybr7@C@3%i^p1UVh|G5=ReZ8up2i1e z>APt5-1K`)PxTNcq+SwVO-07mbCIN$c<l>I1{CZ#u0#p(>=V)>?+K#kQ66nr7dJ-6 zxSKjr#C{`Ah@(s#(F-_J0_8|@`&Up=1{8X!fR-U800pM)7%7&gC5Rg)$!}_)5w-wR zhbYMF-TW|*jI~ZBgzfmK>7kWruYaQ<ttOStKM(_w(2=SZ?XsHH{SA!=1_UAB(64F= zXcmI)wHcEoJW>Fc(U*XrVh9yZA{Ke6vC}CichH`)4(JZLZVtF>D(yr<P^RkO`SP#L zGsac(zv2BUTfQBK*9iC+?ctl2v0bA5{{YiJ{5JA@C>m23DAJU$CZWqJstjWY_P-qi zez+g=JpTZNOe6_>34Tw@X6o|SS7=9zvi|@?NPQtlS*!m5$GH87$8;m{GT^3)Oy*rQ zFh56ie=r0}rD;I*vwXgR&{9A0JjuWMclclb0FmN9;rYZ6U-4Rj1jkp4%w3%EDm)@C zA>jAhzN#c*D9kNE_7l$QhwVxGG0y%u-0-AVq*4Zv7O7S3Ejbh~By>cW2o17Yh+By4 zs`F{?3c#4%^28`oEj?HoYr0|_ae|W*L3FF2vHKzmkyI4PhoKYiKh~gKR(}w^$O3Q3 zqVVY_BApfg0Hc1Pwr*nT!CtPG{{ZBf)&}KEnB$6$k7fiqY<qc!C;n~_QWP&l9dJW( zf}iSU8T-hMf9A16mQ&_vP#C^w)8oY$TMgV+hiHrxI~Ck`ZJYl9SsPb2c!${xlnQ4m zc-%etUl5{gfK31@z`GUrj{Dnk*tAK-*c&6f4y8CvTcwa_OjDl7z-N0>{lqUqQSCPD z@Wo=H`w%_>{gBCgaH}}ljji-S48$Ct)Ztu%U$HG|9;^L-Cf-L$YV<8f>HI=+Fn%T3 z>_rNwKdpmE1aA2KgheR(M33E17ykgN1h|#(wL&-KKT^XOpAFE8f$}m1d8$4cOPRsf z^oCoAr@{mBe&t~)_%$7Bo!Y4T(a;gHD0>9_U=`6`8^5H8K~bmQ{$bJw?2Y?Kh**8# zU+Q0jKfwU##`4+y49nR#D?dR001H52jI#tT+B;>IJy>U<K@om^qsiu4Tq?&@dV`m8 zc~&_JFd4+bXd<;E_P6d+YNtvBA2;fM&GU{n$eg{*PD~HtAdwl}5181y{kqHEkr6o& zG4;;c%EqhO>kd67&}v6oqpS*qXn`o&lsyq;XGE}w1tr$Jv0=3J*bGvd!$^^-8m$!K zi+hVGH<Fs+x*@^fb^HuQs9O4-8i|iF+p-(PT&({9$FTaoGa5@uB5c+rR+Z#d5mXAO zl}=Rh1^$sY82<p^xEX&9(&%9OF#98t(vRcXqQVA6NGF6wArsnn;L1zef;3Z+BveI* z$=RA(i>_cxd&R*rjza1ZsPO(P+%*hZ0^r(6=SAKJY2t+i8mDCq#3nNJ4(xIvdQk<$ z4MuH8?-IbW`pXI9ag3306rV;3Zj!oCzB(XSjIvG?y&K2l1DuQdbP*+hEoi`4C&8RT zQHY>KMrcpm&PZ4qp=+6Zir~XCv;h<aQ3PwJrC-1mR)AsN6(B5XXaK6mhBov!LI@JV z>_N!N{u4F=>;|}%!{YccAmkM4V=wzr&%(j96$&|WwDf@P7G3T&6X4qozM;;-54x0Y zsfo6`#MQ+UiWNyHrvb?exj;S-^%tER`C6fBYMNsMV9Y>4TWg^9L^&GK2o5b>8Wt&) z{R^gQZ(S~kEugtBb!MJO*eW4D66=tsA2(SxQlsysY6(a;Wms82qA&o$DyoGAM&`;v zHlG4rI52=LDydgeaH5^qQ4Q@tqlUp+w>Sg~o=_MHa5OMOi)uS6<xbEk3mR*S%M7U4 zI1mdxNCB~FNjYiW8;1;6uGQ2X8CFV)sV8{Z!D`{c{9F@3cBn?&8z4X&n`Mg!3#{k- zMqHyUe%6S$R5@c{P2F}HoB*o;K4q{YTEzk)F)fljAsE3eZCU0RsX&v;o_fHA=~psU zL6fgx9zfvzW4LnFfz*rja;;P_z{1zDG-CL05cWXi5F4CoWn}1ug@rj2&lSg60|3|n zIYvc{S~K*T)?7t}f#H<ia2?nH3T<FKlWJ~d3QSj`2^lCtl!c&8F32#V@3ahcO(0=? zBmxMu^WRlCR@t;Vt5&K*xVjNRL{x|>urkTU5=CGDRX~phw2ZO=O$xSk6IH`%A_`kw zCuFewkJ-FHw@`Ax=(I3+M^QjWpCB=TQmi{6o9#_1ENIpCv0!@9+>3Nez$&092odN) zURxqGlG`b#T_i;CMJ090{{WG22b}F4yctzhT~Czcl$C{EKXR}Qq^n-w8my!$Fg)5- z6)(<)6hdiI;PV9p;PVIxT@C&S?6}}Pfea+cK@(gXN+(zs4~lATnP`1?P*sS98>r+O z0ZtOqV{{^-EtEDe<k8_ExP?8qijEzWxbYrb^;R_F)f{XC;0jX*-5aGij|06ZYanZ9 zd)yOEcx0hO6U<2dS*t1Y1+rM+7n_FPR6tn4NWwNYle|ECA$V~*51)t!+JN1M2nwVy zi^lhp76Q?{5H?>xI}Mp%schk)QyK-IYKx8rxp5cOrbdcs<02xDf?O4<y#D}j18c)k zei2<p-hpabh56!H59FPoe6xpw3AWAohXYS6rty0=Su3;4Q3dJ7xRqoc$y9{UY5xE+ z(CSiC)kLhFiuX0Bucd3a9*T_McI17bq%-Og4zDh*3bK1y!58U)X?{s!rRFeJckarG zL!qun;guK?z>&%THpQGzGxpfs<BULZ6i}<!IuoQp;0F0(LyLmud(__cQS2PoFd5on zSupelGPl<&6^MkX+~3?E+zGG===+A+2)8X$^epeQN|L@mUgvWvH0RVQWS8JTY>g}v zkr>bTt5jbVHQh=M+%}^hvAg4ED%!QyPF}f7sdx4uC3=+ffPKut*0{Gcd9{e1xT`IE z#R?)s3M^ZJ3mCQk0K!sQi+eoIAep%MH4bKaPG2oON7>ae)!*|H*e;~l3dbyzr;`a` zs+A3p`-`_!*vwR{mEl=g@edQf5NHe7u|;wk>Kk)alMs0zxpgVE)O8p^aXd-|LDMiu z9_pj7FL;96LJJlVefI^{2Sqk2L&AcC%}ZMjh70pF{Pn#NM4G3e^B>E-KQLV+U#yh^ zL`VgdkW|fHrdbg~7YMp@j2IoQg}+W)OTJntIH2%D*{#vb86#NVqF*qrgkcYLMIae@ z7NCo0uAPQlh0%jA27XP7KwP;D7}PYf#+#ewTxEmUh+MXg5G^X8F!$4jI3Vy+am=hR zZ7`XV1NApK+Tc$`&;J0i)k;wyg8%@i*6CL3n8WM<a~43gRphxtxV|Eon@(-<9UPG# zGQDxkKI5B0@TXN?E)es{ZCc7yS|e^d1&DN!3m6HjP^nt-pdRjV`*;F}{zoJv8ltWd zns8pAlv_x#pgM5|py`zmqq3j_T-bOC3e?T~qkGSX5QZ8ybQ8)HmwPYE6#;z2RBIQL zWYt9?EhACMOt56}gnigENvf~nGU9+uEL;4_=BcJ7nGgp^{K3`@2c_Ud3i3JUWrmAO znwu^a&!{XHQq^*;34bheO!AOJN3z7Va6ll}P*Z^kNFd^2F%u?>Cx9Hnp6c|P0ZgV# zip`*!m<qauT8?j&GN52bMC!yzcbbI9))2y=en)YuaTXnoK<Q@bgfj&I+kpIApzNl3 z2rrapd}Uok7XxW<*FLGrASu=(a^(lvo0lkZ6#`v*;w(wj+<C&but{j)?i*lS^F3aJ zj{HNrSO+jQ00+)MvGxZ!0VZ-OtZ-^^YI)*bY!*OeRI$?HCmEh#g-#D~W<L0`UW)3Q z5FB!oxlPJ1L^^4$PNs|^EyA1w4-FKZO$$6clJ{fbi(0PPYD|>ZO-#ZZK#+M<P(BfC zJj%4Z%iOp+UN<*>5;|@?lGeP8`7v#Ws_P||V(#{8;FD6hOP)UEzM|D$C5`ReQua%N z^f-r*Wg8GL3>~6k*39vw5DcLEUHHI3`%)|p^HB9<!#I`(ej!3{+_xI3w-3Y@gYf`= z#WR5UsJ((9VSR!GSW93Hi+AE8PGg{=5vdEw?3_?Epo!NTVo>*Tv_Tlo!~SDqdSs%a z74X@%CK@<rSc~T=x4T{v7w(-l>R=lQ78URq*@De_fnc@25EenE$1>$CL0LsgR0V~F z!w+B(u<!YY>H8XIa3+I!>PrO9L5yD_4IGg|*tjBc#h4QFVCD^aj*@x4(^9gF<dzWT z){(0j6av&#b(u03lums`-YrGrA_#}5<&BI5uEqG5m#=CGNP(<g8*WzQX^a3YP>Ffz zI*7@GXHQTH;I=LO!e0$)i|m>Rv?&Y8fMf@lRmn?2p*>%y1;SKnTwm}A%ec4@t4T!K zjtx_}%(l3Iw_DWVaKW`T=6Xf*E|{t2h`CU6h-kw`z|m5~&Dx69z26aWc`dG1Fqph0 z#VB}}sad9j%u{CpS{)ScoCvaU!m+3<Dpx^|&2xdwagiN65L#vU5s7HA#!SS5@??Bt zFz%sABC)(hh96^}hy;4Ro}&S)ONxn5+F$va@pc+l+)mkAyFOwZf~*KCm<o3qs*RaZ zqN`QH$2To97eAGaK#?6+FsGp$e{qs4p|CDQ;UzNq@=h{msk&nUufUfQ*9h?x<Q+n? zcIAX+s-{a7@Xj^BR${zbwti*{vDn;W3uCG;nOg3uhw3fr+Lx$c6EaBcL<4(*DL?#G z#STs&Z%7)|2n%i8aEx1W2q|DLBiTEswalR(k|n^G3V=C<Rc~;c0rMV*41*5JUx<!Q zz}T0_w`k?s+8a`c-Xy#^h=X2>ZVz)twHRJ0yx6D;!Bu+HePH%CsFdj<D&Slx8v2yv z1HTcNZBl|VgGoZ<3OPUPhE+U99tU#_Q&H0I#JD8usvvwq?0T05ARa1PQ>di_UI@^r zf)N0%Yy#5kk22NeJSf-=aJj}%wkB=HIxi#)lvZ&aq*@lM`-mzX95UsO8GKj!V-<ZU zxb-oZ-j4nwvD#x~zj4jXUPMqx3B^i!xb0Cs=il*l6<Z$hzhnh5iZI6@9_Agut5^-X zjC#3kB1dI9l%?Eu{{V8+q5^W7fI4Dwu7QxLc$$WroQH9OgUMw>dqr8&Q)aQ#7u49T zcQ`^g?_wrhhcrNovZ+wC#<NunlBymcGpZ%MrUt-!(wO{2asVDUii&Rz(I{f7S#Xm% zmgq0y9dT%QXNe~m6!Q_|+-ijQfo7xJXdAyU00Q%wbQkHlaE_nUM+h86aDrl=ix3WY zR;5b#vY`5&7Eo4cl`nULNOwgDzYu1SQ>BL{X^vs>3~QsfJFEcZ*AnLyUy=dRg&2aB zr_6XMvKmW#%Y4Or%e-X`6WIxIkg=l`MY0+YNJ`6q4VHs&qgll;lvSwN0aQy07DIuH zq;ceH5m$ssPsGf~6@|m1H+rV}Wfkie>QD#^f$<Bj?0JT5s*ZkP+^VR@MGXhYk2n{~ zidg|3Z>jJ`P$Ew=U;>lB`I7+Y53%t93jL)h*e5MR^HGD88TmPm3LJ;MK^wedj4Fp* zt;e0P68@2cAfeQ}P6Vi`CcR4SS0e;nMaS!s4pYktqp7q`efgG(uw+U?cpjiG%SF^| zT>?O@(OC`#1I4u(jXIG%<;$y?3N-N+g)xZT{8o8D<U+A05C;UX>5$wK!udmbOB2+h z-*UsEJe4$*I><#4Pec=2i@@;^KwQg+o2e3+vbutR)9zdAi!5Bc5kxG_fC*P~uy{Ly zB0Qpq{KBmVo`wu!ha(m&E=!mYBO&6h7!^l=s8!EZ2l_xw705Ju`HmHN&y;eim|swd zwavsi+f9^gM+VtUJV0BxxOrfbymJMSxq>b3RswFAMCK!)`6!rGBDC6MCm~FmlWqk% z*cJ?JoIsoLDzc&gqh;V2XgMsOB)x7%u><45)8gYcA~aLxURcq1U;adTS!^$9EkO+h zfN?3s%y`wSft<@OWld8lw#&GbA$_?~h1k@!DP;jME>y@US6BtcAb?Z}N|b2}7T%_8 z20}S(ub3X#JC^{eRAaF&*x>M7W5e)558dIcX*W|(xm&s{rHA>I9vymztuF>68XkwZ zT|~4h+CyT#<j0k}jH#-l7Yvy!mM0MCH1!W$J|L45hA~u}H`KV+Q*JhsVx?b*#yn7x zkwupQ=-H`uLd(wvB~5V5GoQhLr0O>s7&?|21?ihwWV71DaBO>uvR{gbZbr@_U12qh zVF)xgkC71))<%WNY)cChxLb+=Da8?Nsec4Y#Tj$T7i=q#>Y=`Wf)UwGok0{eE#~E` znA3)BcL2NzxM~G)7P<Zf6%k7=6n_MRlo(%$q;f-2jk2U64fiTFf~SwHz|9UGVdO9C z%rmwH<;uTM=2m`rEHVYM+!A+PMuyo-l9*xXmx4avIBc*m>h%Q*t&7^zpv^*1$xbb5 z5&%+EPd!8!b&A<(c`~Y;7n)%P;Pk*EtzEPI!l6v7*weEpv0TMl5#!{#f>h9!dqJtR zIUq|C=fq0Wh8y*aT@u?VvG^>QRMZI6ox(|IMFB-4+aacbOBvRYS<f<_=IgA4o*y<_ z4c=yXpxF6({t%}z7jW!@iK$|UMn-{bYnTDyEs90=2B0KfVE7>?TZIr6pydr(Gp>Fi zm(eY5xnbaxH(*+>E6ku#iJ)&L8O*v*U!<fLHdkOZd0+js9gKWJ$C!;mi0v9j#JH`? zYU`P7ZzSqXf0pwoor$FQhUJ&gl)HiGVtQN3>QGl%c8^yqxU6+?0qaq>7^8rqAXe5V zv0X&wuqRTf18q<x@1r@3+VM0JAJiAx$PO^zI3b1M8Zo9!jp)=fQrD?~cK~>9;+7?0 zDOW60T|GrQg2UP>H`HPq7@)O9yW1G2sYy0JL%;6!9~nYhULzGk6TsBxxT#-N@dzNj zQV(+A%Vox;9}?w!rKLazGZC&zM}KyT5<N3L#Y>ySYM{?BRY)G^LS6)M(GjiF)GRa! zLYmqO*s5O?y9<B;nF_ebV;_?SQLj^Kc)5MBN3vCc^$pd`Ew7HFpP-bcv{L{elp2Tm z0vLOWA4D)0Y(2Clb7lVkn37&xoQqJXLZvGxzlvk{D4U&+lv?^Jf{l<?>TaAHrV*h^ zDJD&Dvb(*)wF!hzP(tM*btQY2E||ahdLHwuhya<@$_hH%dK!Y*0O2zaxW}$x9Vdwx z5YgSjSONZ^_%(+x>>;;u<M<B~Q8{LW`Ijm|FYS+JXf<z;hSrZgPc`v66Z1=TflBiY znK!t~sj1udEw}LCBb|)lIT<RLI_$hK)OqR(+Yt^z6?Im{NDISIP0m<dK^oZk)ha6+ zc3g3nsCb;E<&~lmNQJa<C?dKsp}REk0a6wVIgdhv<sXb}Kx%b^LuT4!Ed?uq7|P$- zVt%HsVTE`|dt(Fvo*_d_4&&mCLntqYVY{5$6o6PPh$}+uBl=*R*7;_#mwS=PkkC-l z7!(Mn;wdBXaXUm@E0%_z5ulJdr9@YFOVlIHIqFma!vtu6@JgN)9u*=Z!U?ekF>rW@ zyM^hKS&Iu?!m6n3iC`SU50$4SnfAd+7<R3erMdV;7Kl7HTIva_@QKQZw$H@l+Et^* zOA_~7Yx5NDyaLpxgIqI;J5UsZL<$abG{|pQWbiGrOUsZZ#9TvH%oMUb!xx00of))9 z37;)Op!x>jGnQmeUFijjZP<W>yK=tUq10g7_D6<0UlC?E0_vs9c$y_vU=<YtBY6V_ zkM0`ELM?|$WI$qN8+N)%M4*0xQN^V`lE)^r$n83HE+l?ijoLdZTC12%fp6HIicB>^ z(jow<6i6t_3pNXGD&|J|oXx~_$v34TDCqS#fg_MAAmRW%A%lA<wM0E7qL&K9BMloc zSVtH*fw#mZK~)j+hf`K<MH*@|KtL?>44|Rl?i=(*rdblIJA<!swBLCwJE#+3u53Dh zZ&ui1!y1;;9rYP4mLyrkD8j0)+|^5^wM7tMul+VZiD5xh0#->m?)}XsGz6Io0@Q4! zz%KZeU^EkhWju-A83_P)fBP#UQ&-RKFn_{YG1j#SqaanZ63PRmmnJlUgTx3eDf|?p z!5!7AH&Vf9vv`Q##}i|#ONxs_xl0u`?47~Z)}953lgK<v$tl;6K$;S}XPwmuoF>+K ziQ8{3WkO1<XeXcWKz?KCw+sGr7O=Pj7ZkNxj|EhDT+Wcv59(U_lJXh;B3(cOL?G3y zpDH8L%g}fD3Lc&j<Z(9&o0QJt3|uhXBeX*js*JXR5E~1fVi`9V!7K>81b%yhszlw+ zqO~-z1~_<+(b*VUs^h9?YvuwjP`%1=SG4mDZHF?8Ai<i;EKs%iQs{I>RhP(LQ8}=l zCz(gM-+^&bZM1u+h#;2H5Urx%%3v$4yCwC0MS?-0Yt^!@u7PNgbI}7Ed_e9*T7efb z?T}>~jHf?3Lxx>+fP6*7M`P?%D*2d*Y`{1uHi|4%Ej%d|gc{_%p(h7x29(K5&codV zSS$+7xTpK~3+?jVV{H|7sk30m6<&8Aaq+2KKe*&zxGium3K;%YmZ!ER>J%eMTcjpJ zuXDyxuy-X)6Ev+}4&cp#*-Ei_L2z0MseA&kpt#@y7V=K8vh+D}+f1tzvt$M9Hw7LT zX6(4AZ<U0{0;X0pMVBgCFWOTU#|?{UyA`doddhNhF5&4kW0)dtZWYvxRI!5?IAb^B zQ|QgPVwpuUqhje}5YeQf(VT0Nf<}2F>Idwmx%!9PZQyJ^A?%+)@fV>5t#J})SL6|u z60a=$#Z!5W$9NQIvZS)fpD<(w4o}Ik#HO@>!QmHT03d@Ukb}(68Yt$*1?DJ)w-%0= z904UV$ZS1|mI6;#s~>L;VO4Z4T`A6PV)l1A)k7N!lc={6tQxPRtYxh)Fa<3b{lWhL zbVc8ef80Y`QMJ4GDscFCg{5f}Bgz6bg9S^m;v8gfIz)XHB(wgwOWZ(5v{v3ADBT@7 z5Mw(427ifgC5*IdB2lv5h{MAb_W-ggDDxIiF-4M*YNwJm_7Q=33c%e-${G+qNMwW3 zP*qDTxQRl}4aBD0v0$n)%76y0T<z{Eg;7w(&6R><Ox*5O>t%wi?hytR3L0uvk(;{r zJwqWvR0KDPV;h*1Qoj)7Cl({tCu@CdD1cFJE?LyGL<G;_Np4M-c*sE)nr1ziErLZ7 z1i}e-4Xgs4LcxL!CG?2Yx*XgGf2;uYY&s;OiyyK9g@(}%>n@(6Lk(I=^WCvlmrF7f z0NuHC33=)SwYsNpkTqB4JYSIpd#neD=@FnlB``uD?q;z~RmPP9(j>*xz9w}(+N_Af z;5PpN5|o*0T}C#Vk}Pi^2O;27a6Croq@r5`Qmt>qF;j4ID!*~fH;H9jc$T#xZJ2s! zh^;61j+Z&TrLj7fQLaemNq^vl{x&;}y-pt(1(mX_s0p!O)VLaz7D5fCP+=apW#()Z zFl!-9wrH(F3qh@({!0;QW$H)D<xy3oM_e_H3|<hMsl2}tvkDO1ov-RLh%U9%Vmc>_ z7|+ZiDr_)?*gdRaT9*C9<&}KK(W2t6H$0<rL^~EcNnfa3;6{zh>I;=|jcl-02dex; zD{BQ5&Ei#)X-iH~tAJ^vSBbfx=&)+9e32-t@v$^-pm>W?%UzJ}1lp+SoPmuBcw9vn z*K@){#5|OhWv)j(H5z0n)$}UrX(Yb`0My}YOJhK~RsP`5DJ+Hn8DvFqP~sHzupxyY z0cXS}wh?0kM`6){(STV=RDH!Bspm+q!5$u=u(Wz~h$1>09?>=!SQJa(71hN;e<>Wj z8_aD4Jwhu-a*c$tolO*NxHL&X!a^X%Q9h#6wx-lP!EkjcyNHPda5D5iSWeKXlJaHL zMRQzKRF~=q3v!7GMtsad+(J{O>+9Dq%v{MDa$LjoSXdNY)MZ>ZESyT=VFTe^IEn)) zT+6CG@`zb02yEtZn)IL|tmg{=R@=(X1=h$S^gBmz(yS@-6S<!td5-*D1)Jhm*3hd@ z9Y&l?SO?s;%kWBoo3+u@S<Jqn7S~B&U@U4W2>1vp+ug&Y>+2<t4Os<Z(Q%Kv{Q* zhoak5GNBtPfoc_s%Bs~SgUlyasj;pgcfu2idjN=rpBtj!EkedA^8(CabQc3qdL*L; z{{Z<gbg1)@`UN;9MH+YzQ&|#QF_xs9GC8UlOSodtPA;GI3Oayd>k7NE{{TEu=3U6w zl+5ldGBzMQ{{W~SzMy_tazZ>FqjUrT=3ucoCbTSKY{cWty9~<FkMJY@qB4FH0@2)) z_&}i(W&FgRe2Ce*SHqSVKidjz0L1m>?5E~how=9g8mcKDQj`?RmToTq)C%hN2tjYS zLF)kPi*TcN4k1Gw5CC(M&R|Etn=8SES=1m^>M&KQEP(|pW(_bE&?h?*rF={+d5J%W zM0cAZ5nUVcR}NgeSX31)twIRA6b&vMpl&aTV|;=Zb2*D>x5Y8@k<Cn;7gn1r)mKI8 z8&^7wXi-r3fmskm*VH!-!C%~P4SGwmA$oAhWkeM0GHRNF+RB+!fh}h&uz_Odr!fr} z$z1XGI6T0E^C%S+=YSM3Fn2toYl6r{Si6+}0O$=Vx5v!g2T)t=g*(8#Uke_V8bZJR zr7_3?YNtq_p_q5L)DjL*BcrK8!v{{_rV{>KKm?3pRJY9M4{$I|AE=8oR|1y~JPA_5 z!uU>Bf>Ku?A*oY=M$XQnLM65-=3LZ90Pc#PB!1B?gHY_A<@Q>#QZm^}QoiCuYN9}L zib_j@ja6$m3`*9b3ni3@Pz(zx160CQkT|U9KXEGuKmA9B0zq%Z#0c<PZSj8MbhBrr z&Pkx!9}5%?piiC&!F9IUf(vvaY{q5F3{;}+VljDa+@8{#c;jR>C~OX+el)Pl45kJ- zwJ{k4(YM!_f*O`vD!?eC?p6Y?9bBLsP`;tOV@1mc>}!#!QF|UHSr}noQ!$wLw<YcY zLM*IqEVe2)*D)209z^1XR1QY^j0?A75q$*hbuvg9TuS4P8j4UacLHo+0OAW@h;><I zFSr`Ur313!w^;$Os0nN(wQxZYY5xFH)#rW2g<lfO^36n)#b9a!Tt`f^3If)$pl<lY z2Z8t{=7m=$64x59QB;@V2GXFMxEj`J==q#U8y?}XiD`LHJV0e+04z|1HNrWDL)SvV zJ+boAfV1@})$Ri;W!++oB`ejU2zuD*f9?dYuIYIcrW#z@?qNUR%;p?0yr}#Hy&=N0 zE!JKlbg1hYN0#S_P*}V!COhIX{Yzm?L8yST16@}9#=8Z!@fjH-ViS@zSp};HD^spe zG^LqsANdal#*JoFSTwvg5Y0(TAV)E_j?@kVg#@v8ssiZq4>YR3pn2|48P9jb;v$xN z>TV$Ch#-YkVg3S~v5*h}t-fPehnZZKpsJ?$j)Vckc!bh?Mr$ZhfM8QaGAb_1*fUd> z4NiB3{XuCCb2g$6B&>~(Cq5wPgj@9lpo^Fizp|FtFZ{wJ^#UUY$xBvo$M%dGB-R<g zAjMS{GeCU9CS$18NconvIzr7MNa+w3Q~?;-5*Naa-4_rYTJYYZMK!9eu_{4cVqeH3 z%31CPNjfQ{_aCq}ITc=F9I6t(v=&T{VLU{OC>#t}Q(tgSwwfrGYgFq008qxItirj6 z)Y9<97pU~u>n`|G?c{}M6fPlEKnG4k1t##2dY3PmQ#7=EMbo^EN0e%)CwwS)fnY&A z%l_qiToL*~c|mN`)Ko0fNNcpV!y5%xth<A0-|!b&?r0}bo&hT#)Zo)w3Y<xzZ7w2A zx#}rFmOD7)BHD^`iR6c@Iu8>3SzdidMznoOg&7Rc7Ts&qF75KlWy^<hg8jgBuwS(M zsHQk<ZkwvVL^-Md082rCxmgHcwXYKA0nl-#%j0{55ZV(>Y^)0+{HT`WV<b^4a2)P6 z*w!!>`CzTPm`HVV!x+1UOu7F6RF{^osC(=peKR-R;s)-g3DgatASgWpYW|~6BWUCp zg;F;DQuo6|;Q7dSH*K1n5(}+XqHeKZ^b+Ml&=V7gtWmPz3VDulLfYyO5UvOXJm)24 zMObk&tm7F&#?PdGaKbr@-avfRs}ZP@siOLZ)@Z7xH^j40<EWH__Y5Y~&3zvcMIzJ0 zOedrJ6%`OPrR=5a#3_7ADjh**5ZVihRz_$jfM#hFc%%4-OayK%(7TG+7dY!%7m$b_ zQ3o-G4ZQlAYKRC)a&-eqpy4}+P$)9QZ#B?9P!?>s80>&s1^{s6Pmn<LtM-wbT7D?W zj~=hwuxkuA3^|s$V4GLT0HBT8IYzm1z5f6Zg{F9qp;FLVxSV?%5+*Lg<_dx*JX9-Z z0$$Cy6|DUbU8Q1?_C*pKQK?gyCb`)MgdB~EYxoSTdTU^hS}A`JF)>YX3exh><kX$K zC1*Y-C>(11k<}AQt@w(En+m@Lyg=iR>2k0Ho(2Wyn2e;R({53qL?+@<<qF~#s&hp` zzr^5YdI+Kwjh2U~>qB7Zk)mDXjVyV-Njak+w%0s?RZ9V7U0RRa1V7O}h;Fif4^=J< zKnB(LhA<e7fJ>Ja?&=^~eNBT>#yJO~+jxQ69<ngDb7&x)60Nv)IgubTcgtl%WiFLO zErXEdJVd0o1Zo|hGPqerwgX!nT|vt4smlsBims|t7;s1CT~x}jdE|*O${qC!HF*=X zXq>(YK~S^AASsWS(^l5Q^=sgle0U(lwz6s~s<M?J3W02}s*p$H_bpQbcyp2)LJbe9 z4|bQx=Tejim)W^}FT(Q=)HpJcDtm%bX}1@<4b;_WolOwgY8Oau)g(n7TGsJ10bP<F zgZ3cQas^DaI<$<GfS`j^+=$618j-UeO7KL1mt2y-1Pb{=s=jzzC;`OZiOd|9x5Pr& z?lon@t}J@VMV75r%*6mMcuI(_pZKWFz?!`fNDi_x;32h}Eu3{Ko=e%@srmg%=GUNl znSgR_f?J`7+QBV?7Q<gM+pd1%8cV$}Mlsa2lCZy7U<D<2R|(+ee52e@R1K(8NdAc0 z*AdCu2^Y~8AgNU}5zBBR9>n@7o20-doZ=$u!3}j)9&tt7HCGGrl`TEbJR9JF-LVq! z1ejX#B~+tnc!s#{Y;&AD6Zg=nA99HbnOUzf*GjQV^#+as;J?p_Qyl^qkvxfQ-u%a$ z#ID$I^%jexD@uuoEe{T3gt=l(dz4cGf;DX>dXDA0MY6D*0Dv0B)7`xw9jU`9D{>L+ zEtcuncBHHvuq6iJHsGO_0rxqmD<M!~%0NgK;Ndn6m)bq0;>SpH`y)x>78zSK(+t`s zJp_EMOlr(!RXbF=fA(ibn-?C}U@UimD2Pir7+7x4;DLR+gwj962N@W9u<k{C%GM9W zqoizvd5}UXN|df6P7qT<NW(<lO<>4tc$fOP*hR-66)YB}0XjwyfcEmi{-T&w=<^bc zG=PecqWrn;2pmi;!B}E>A!|+fl^Z2sTtkK;VtI-QUC5?E0}Bo2y-NW3Mn#`DjBVdL zfNSt;3rRxekEkrzmrQ3miv$?^66AD4+!#m%BQ%XZh{}Yvbt~9juf)63b@32brZLcg zwQ!RJ+MJ&<>r-`5M|>1R`irYco$@l00j}4fy@WBMAf?yDH3Qv>S22T#Du^r!TiI9O zVRHLncBHojim0=(%}eppwZafRWjJDUL;=KjBY*S|T)q=h(PT{~6_U68${~nDb;e)0 zM<*3ugu4>nNFfl{WI+zRL0UKQ0#yRxx`(KMpdy`1x`jC)Y$Gda7!k8s{rD<8#nKH~ zG%K4Gm6pKbTAab*AA4vHBTKqZlwc9rN-k^^X)DZgakD+_QV>)Y4?1O?GVPzhsHbnZ zCD-u9nuYT&?R^*|*B;qbEp4Qv61cSxkf_BFPBFA(9>Tu0Sl+A%ax5v?ihe4xQbFw< zmUKq8WCukf6?uA_yB)z454wQ}Q_KrC(`CfM*7%1Lw-+v+E)c+*(FdrvHpAe+X2iHv z>;M?3-*AtBtMIy%A@~#XfBP+hOA@!nxfV#Nd9Q*Hgf@7565MaC-9>-_Hug-0ML=Sw zN?9#}-7SCD2Zj4N`jwPwg8sI0WpPvS8Etl=_+3g!@k@`s;rVjdc4Tr<3{yTKI(>w+ zK+X_NMnJ%#Sn&l^5$R;6USPBWgP1CYvWqI?OE1)0tO5Y8B(VsR+B#|7!F#n=bq|<% zmop{EJ5uu@k*1HBp*FKIgA~GdE((JMB1KlOxoyCYhU6$!S4kV+tk!MN_i(7S70eFG z@VRdxcB757r~=iEy1NR$%A;RZg9FAvutpWz9=Zw$D^CQ=E-APxW^oDQB?1R<ehlWK zBC(7y4D|uYc#g{Ym2A~K3{MtXaw!mRRCv8M+E%d_%vJ2LT}vWQYOlmrzHLhTVge0o zFPtDp?OZ>i8$$>SuBrxhqK3aU7Uu$%)zm+x$kC?5fhPd6i)WquzTl-EB5A(mZ03zW z3;?Z>Qdb!Xm=tOsqR4i`QFYeBbYvE-{J`O<VA=IFE~2Y!z19HT%UI0pq8ad(RAN0+ zoMmdNQuL?`P9O%t(eM%SXNA~Zdx#pF&|Se6E)-YHWOVqr{Lf6bF<fkFaYPr2m90vm z!le<uCc7E{V?gkSS8XYgtQ3zCEgA}l>epZ*t00?K#Cf3i1@=n5pl-5RE1~*hrsEK6 z1}8R<(1r6m4v&G?_i=>XhMM)Oh8`-4SGiCm1vM?NL?Ys~DC)2*g;`vs0V^<7Yqcri zosC_k(-?Jk`&>`Nr9DL4?~z~=T5KI?3vvm8xk!aM8iv5P$xoO;H8>ME>QrMM1y<^C z;g}(ZiOA6k6!1joS-0fsH1nkwUSfV0*te-xJET$6?f(E5r^F)4nEq}JO`Q8V?;y7$ zK)k>yxR!;Q1Y2-_xmSk~=tw0*9ud?_;`dd|6$`jyPGtwF=ND;_M$=G~dzEkI7)*Ac z%)v?dg`rlub1sqt=rL(uQ8ruZGgS_V_;%|_U~{14<;%C5`bC2mA{awC1Z&WFiKvTZ zE9G$|&1J`-9umFyKx1CzTm(KC#7If1v}@*R;|0VWR0;y9wI$iu)bk&8k~t_Eny~#s zC1@)T`iW43%aHoG;KLyShG0wuaLVzHY&pBuM{Gk(W$u74xRIsAvYs=;3@J;^Y)SOQ zE>uCnFf&>1Qk{szAf^#Tkxh7&E>hYx6LA8#YM<^lE#`gm7Qy1+hg*OSpvz<Q5zV%F zWEPv$ah3(v_ge*^1%-ZjjqXcGRq9oYyUnNd4blsCfp+?Z3c{th@hB?l-mm`vB?iGz z^pWZF6qcaQNMFJt-X%AZ;HA7rwexXOUl5#$-QpEa2+r=-EUQIDl^O;tD+_s8ayn-$ zqvC3Wea11@F$z;5KoA3w3u!$-hNHwf!3*u;G<5z5KvCvYt2Lc_j{|>F-mB^!RSJdz z-Kc(H2g?(8pko}b@F>OKWZM;7Lw=^*ya{idMJUnMRU!m5zp_$n){t4M!n%~RJ(wXi z;WvEk5EWqQm-Q&eYqNBQ$1BD#*MMT67Pw@|x@^6jRCNlg*D$I*NaBsH7)maZJkf%J zej${JPSo+Tjg~8?b^XWIqg6P&9MPueY#F=K^6?ODhhzsyjp7QU?E`k~VN|NLJ|MIh zj&<e`#<^d3Xu%0po_?kHb;j>lh*%$*AW<T?C5^#3LJ5vaR$S!DjcG8<+&E&GG{Y2@ zv?n<HA%Mq-wF&}uPWVqaOrvV?1EM`{U<ieHmkHWbzZC!uIR5}p`Cdx@0L)cRUn`4r zsd`Is4D%YK`-SpF%})^nlgl?yhqRPez%qw(ShQ~mY8djxa%<QILzbeNFcQW5Mi$O^ zN-Z5KiyvmiFj1_bEjU0J;hk#)M<XK^Tf}E9*D$>V@FfYQc$_gnDq9qeBjC_S>QhDP zQ-v#iMEyY*V73m<SzA}Q$8UQjg=omtMEi7=Np_oBJ&^Avi;#exNZ<ygc1<zs{{Us2 zlxKiky0@rQ77Jm}$&;XO;G4VlkWjnByLp_92zWLyCnGO)c`ejS!d1JN;yWcvN`N3z z_=L6(0Br+xG{mWI6Q4`mMQT{H2SG=~_Bq?z;$2t{B?isAVw6#cOT;X>YVis^HwHq{ zBU7ZUh5<2`qE94Bcs?g1p<Kl%0P(QUfSbFnBJ#J3hS3lK{LHKnEh!QI0AM{Lpfp=i zHGt01FFU}u0<%X;hyZDq4uJwCtl=Vod?%@J*Ggqidz{@7nU-VfJDQal4lv+BwdKTD z(S(D<I^1%?3>P^LxaW{5B4q%t(j8c+<we#J)ulWn1au{gR22(95blt78;rG1OClfQ z8DDDOFvzBN($CaLSls)K`C_hZnpzMvJ|YhHo^mpU(?-7KxQ!u@16{FWlAK;_fo(x! zJ!BM#R9O7W+9EJTH@gEf<zEr|lcnNVQ8~&H>I;c*a}7C^6>+Fi3^xgQ3}CG;y1y_Z zQ00$ph652*xlqC~D2a_=6?ajG%Se?>wjp=Sby#$e1)|~6_V+Oj{mNKQBF7#OLb{Z& zY+f5UH#%-P)%}Ta+UaqTBJ(S9epuFp;kf!}9YI%7Yr_=fRh@$G+yfL7mAEc&!lfKW zabk}W?7GQucKac^0|?uV?iDUI?HPs1eaiV+`F`?E;BRph8_zQ$mo{894c+Dy%FuHJ z-4scZsI?hWHWPxLSVu@B=}_$KQGovd*}5Rs@ze`F5Dntj#Bcb7RaEc;{{WNWZLAV7 z?cBJxAt6v*Q`~VVXx3iMP_Z4bEf_##qN;X)xmxBbk{je2!2v|2#C$_tX3e=kxL|Oo zR|^7F%qHpraV%0yS7Bi{d_s^1D#r=MHkRNUw}=X8z(fn?P!z|kc0Bw+;&0_bbpE2- zu*w=raNR_;$Hm3n%3E-{`IL`{+Cuo21}JD4^fzqDi()TQlVg0upF!X59oXcS2!use zpM(IeDAL6m%>!LR6>9SpQD_aP#8$kP<d9{GtL=*#2z!TD;#X9bf{+-Z`cW$gd}bu8 zIvyfsXBNzf)K=r;R@p`PyxmpgD7CF*w?H;L%d)Sx(=I($qi5s-V-Li)I9t5B{{T=+ zU@&Qkb4_fa0k;|(>J}0jlsRwi83M1E@9CH+$>+UXw5Qt#n2WurtzQzklu6)UGbjE2 z0W!0=?3W8yP$R_XAOxH_VYNGkAM$NjKO#D$VQZ;Q0qQ6U+^v|0>QD!ijaET-38+Za z5IL4$Cc~)kms7h1hK$Kmtw>V$qSdTeun%E%bwBLNTZg`r-VOvx)yx42;RbZVP%^Mb zjeuS83YtFV02I5F6qhPk#32K9fasN7%XWt1;2K3s)>3FIhb6gd(dsg=3NDw~;%SBg zmHuMi)zIYkD5GGF#?4%&qwW!0_kJ(IG!IG**N9GQ34d%JzV~2!Kp~B;%ii0I>N<;$ z$rpfZy})IXtZsSUXD9AME@mdJ6s2==mZxoZ$_mIlxKwFj&iO)I>;VNemkqs6PNqf@ z+ctq{zo_8R#987}x6Pm{d-F0bR4&F(3h$`-*6=<jRkY{SP<cl4MzBFia{`>>)D|+! zXw*U*8yAU>DsQQ19HtG@xCUF%>9G1pg`wKQDbw6WKzuT=DUC)2VaBmnEsP=(+K3$| zaWK);I#oU*3a*U1>}lK%WX?x(L7Zx3BS;#$fL3sptEdGqg}R8T%h{USs<5Zx;Pg76 znhp`Ql-^2tff#hu-di1r6bfkQ`IP(yy8Z}ixTjn73Tx%LpDa=5wUE19dV_5s94BuR z1!|I)t;Va&pdL7i)v+FU^%9f-6hY-WfvQ;-SCKXWyLQSH)mno1&LhqSx+7Mr(HEJ- zK>W(2iV>B4N=`;rKX6BSU1<Gr3KMjgej#_2xg-XFwNFv0u9C_J`GkoRQYM?PnOgj~ zCH%!wz)~&h8+T!VUO6L@D$&vSl~XivUM(U3{of2$ZPG8%W}f?9Dp2*z8Uaw%+r&Z8 z!tR_@cg<~EdVqy^xhu~RvW}v~cNvuQTAy0QJl>3c=HO10i(Nhc02D$YbYlZ(^BZ`b z3=%q$&2NT5SI$K-A+C+=n?zw(K{ZdBh!DB8A5jd)U-(7>J62H8!wN6%0kL%HU01{} zrbJ#BUr;ckfIq2magWU4=naXA?SC*xRq9c(UKVe!CrnV1-AXD8hn5eCMu*HpNMCxc zzM||Zm&Cynk;YenJduGFf<~iJ<r!Bt<Redbv;*}z6JMZiTDpMYNPImvK!22RitNIG z&&0Vp#2Z8R4~jxo+j{{_$f=z`{{X)9-~LKW)x2DHtQm4e9l9gor87U#l)*6$bJDg3 z^X7N5K1G^4QVvWLVDtVX<Lw=xqr__Ahr<@*)v}Br5v7S-D{wMkL!uj!vHOQ(4ZgDk zIXr_@MnZeW2r{RLggi%GjkpVU>KstCD0LUWwpf0VN;bPz({<zb5#czHs*jk5rmJMI z%Z6vFiuDCs3n40G+r$bUVfAG6=D)aS^s8!L^n#T}DgpSK^knj*U))Q;zlAN&%zB(D z)def=Dc)Qe1Ah}6wp*ja0&@fiIXt-+K`NnmEj~%JkINV-h{9RJgKUNK3MNL_-Htga zl)GqFfQGN4P-=KA**`=|v!OGowN#wJY{5Xw6uj&alr9<twDL!*jp$TY9}rMhw1~Uv zAi3or(sS_@MRU|FQ}G5S%g0GlJk*s<QAE-pK#BoIPT!bzELi5Aj$-QZ)U3BsnSTfP zB9{Q#)DxVP3$SJg@r#ZHz?UV06A)I)B)(v6-a=sJ828ZxyJP<VE4c$dXf|M8!iwe8 zUE$|n34Y6RI1Hlk-Ka!7OMoR`Qz+=$0^Q^Vw&(_u$Va3se0@T1&j!@}tO1b-+JpVD z3*JQFVU1g07^?$+1-F-}M<Ku$W3OZp1%YUBCO~Nv6nE-#3@@cSkb5hJn=Si_gqJ}Q z`H#}8F^nD%_b(EB2Eb_bQSy@jZLbit9=;BizcJ@bu3@QWK6E~S{6>D_76$3{9`ZIq zQRAO7tZEVy*2*3!T0H33qaAcE=DV$y`8&A=boVS>D?n4XsEDeh@;Le+z9~AsNIK`i zcdko=*bZP_LkEwF3%{6Xm1S<&)I;q(Xe)Z?lpK?q>^~I@3}ty~JSK?YbDLj-U{t2L zW|#KM{JNISJ1Q4~A~Nzhcx|y!9r=p}`<<xi@!Ubhur%?J=JGF;FSv4$C=W(+aQTi} zC8zX$rSV8mMA3(ce3S%e<-ucE6V0FQU2$6owP&tln?Gq~7I8e=Kt&b2_a2+n7ht8w z6vkW$vtd35GL*97U_se>jV(#UAGwM8Leh>U!5MEhR}E8bHOHvId_`xGEc%Sb<!Mn6 zepM8#l)lYka_m)4wp<|#Na+Tc>pInsVC-*`V!l9X3kcG!x7;M~s`nxdO8PPa`Lkl( zoC>;5b0~z?cZvt)Ef>Jh@*Lb^cqyORQ=F!J`3*r9TW$VYb^{Xdu$WA`VnumZ{Lbse zL+p*J3k1NS++p4okoAHeLjYBA`jk>S#(X4l$N5*QQ8|x-m*mu6REw9*hM0V6iHEY` zfePET#DAZr0g1_~*;l)dBf?X_Ema7)jiaxGPSBX!IOTw2N>lJiavcXG^1dOVnO%=C zp?icXJyOApfI2OLjOY+=7k1pg&kKmZ4(99;#-Zd$&2ijc6&tliWAtL`0Yg*w7pRuZ zPR8NBt;AD>sOG7Z^&W~vFVKW*S&4JuYET5Ku#aOnwvb`tV)~1JGziX6{Eyga9u(Df zdAea*OSE2X*o6yVW6%O52g75^)>7`UBs^9i<}F6Pm_@T!1oZ0wST~e-)k_w>Q@LcS zdx7MX$_HqPBEl^RxQe@mfYJn0%(sZC2h@Bs4E|r^%D8AW2R`9I8%lqvaq`vf2*J0C zAbe_+i^`%5Me0BX8Ns-_k=yf%i$+(d*b(-CX%R^9l$A^FGSJnCp>*I8-hayf08-CU zNLBlT(z+n0kIYlyz)uj|p|V<ER4x0;0V8UhL8DqoDYgMZqAXgv{tN0oS1|q}HiBr& zyI=*DdG9jCjX@AxowXdZD(iBa9&RYpYVzMWc`uR%<IrgQY;mu9G4M7LX?E4rHUufW zp<yWv`iG_gSCEX2?g*r$oI1~m%+~V<Oy2?A`Y#u$>VpwmpN8xOw`~h#QPuL-8^DK( zQ%-zA7O%7hQFf%~0EvRvxmk1-)Od)kwxhc^GiAMq2=<kDMny&p0#H^AEg61UQJ-m6 z0Z1Ez>o5wx#AS$u8T6aHRTj`Gd`qI%R}mU=+yvmWi#3k0_`TGw>kCMo8BgIT2Z&Rx ziKfD=A&4-P-`w5usfJaL$N?qOzk>LPaHUmzv6x#b`Qkn~SNAOkPyp-?#6Y?+{tjgX zTG+SO{{W%lxs9Q${m6o^0>E|NH<&kW)jn!cglV84qUNYwpncSbOO7ZLWwqS8Ku}(J zKG8@FJw$LsekBA0@empAbA5|h1ukU>T$RC5whqIn5H6A(EIbm2JBBpuUa`Y80QCxq zu&Q!LGQXG$4=_JVhK2(9A_kM;F_}$-Y%#T!OV0rSl$~5d3Uw4H4{%r4h8Wxmxw)Qb zU?_!#tEW2gDJb{rDIH2o2z&`H*)-WbA^!joDG{V9qA-JiT(}M5t;|J56=6_4CYg;+ zoWL9qz*owlM|XP%h!wOVfMHf&+)0FJHr`F*HVnIEWxg&LAS+)`u_y`r5N>e)0Pt%P zq3$39Zi#d1rBrnt$^gOl3~9252vm9sD$Y=1jf;uHR}dQvCqzNEaZ#q5f-f-i7WTn4 zDby@N<|rUZKrS&=D1642*hOm$`h}(HFB)p|j#ZQCg9m`9DzGTnGNA>v=fnq?8yRN- z1w&lQGF1z7W2tNfU&Kpyl9|P}Ipzn5Ik7lL)sbABjv8ep#XU0PX1uY&wfT#XS=$0w zHmhKzI#(zu4U&xw7o4EJ*G?k;0GW9QalvIKo)l}~(DIzvQf34N!>I5&%5!Z8L(D04 zTO2k!;c;>{YjC+xX~qq}YA<|2EM?N$j<VQK8!V?zqHY9v_cB!|)kNe+$bSsw{NWl! zSofq19-}9r2qvc0JjC?3%2!-|B8#-X>U*d`2E9U%OR{G1c$~Mgts|t7D2kZzQqwie z3Z}xoAW<+PjX5M0lsvBM-A8zwSf**_EYa^QRm`C@H?pV!i7Cfy772B6^9Dy4H$<|C zw{crfs4^uO(Xkc_s8$Z^$1;YQZ5N=lIm2J6vdwl(3KqsR^O(}5q-c?K8<D_^+7t-H zWmB1oDGwB!Hwr9H6_tM@+_LxD&V(`=^EWM&T3@w5e~2Me6$Yv(C=_*-EU9p)mZ&?U z?m7T%Bz|L}AUu!MaNEw<ZjJoPI4|aLm*HIO06uoN<r^-FK_Hx}Tx>)gEkpvM{$ru> zaFZ2i2u!J`nC3fnxPvTC!ZH_?sFtVjL1gBrOdk&b;xQKGbOe<UR}MI@^##@^1XW5N zrLa<UF*LZc@;pj`%^UErrhx&OA}bRh7MbBQ2+hGNqhePEtJFt9!Cqrl_S92ZK#njb zQrh~5j;wpNT2QD@+@R3d2SIUC7~<n8LxNs(FpxEJ<s}@jiwq5BCkl+Vlm<tc4ng<g zB5X*foH0w}Ghk581z6cp`@||Hhz^v12M6F*)<9oi5b99DXN&SJTS8J*Y7Zj;Xyi+< zyc;G}Gi+;57{X3kFfeF1&U0<<1W@G!%bWnkJrb8N8n;PN#wDZk5omzA_b9UmM&jFQ zmmB6)AOsr$glUWAMXw=3@*c=WC}9p&-@*n0D3)@*`+yUE<v(!^o0u_y^#G#GikiN# zMxI7IFgyVZ4cUfpi~KO<0s!Jy(mE0({WxKo9}vlSaHdpvR+_L_mb_%AGg|@hg@dZ{ z+dGYJg?TYcg|PvO!6YwgK4FSd#Oe<domb!>umR^FD$x5^Q=B<DzY#+Rx9;F^Bs^3r zFaz#J`XM_Pk=DwCLr{q!tw5&QLtwITcd1C=CY(hGN<iK9Jip>2j5eWX5U5TFx74A; zp~NLJJfX`lKwb@D$M_O0iRN2>P;8Ad#E7~M{X$OBJWZ&xSmq8O<89to0pSo=nz^=l zV@CUf{*gON3b!aX%D=?Im1%OVsI7Aap?yEOT(qalh%Mfxx$!ucai(7ooYo<$FCSA! zO0%kDAYYg^!#LxT5Fru|m_X(ImDzh5?kG~XDT+$GaT82J1SYzps0jk(fR<dzWsS5~ z%ru&WBTX>&DTB;Qw(WBi1&}0mAXGL~Nki0VTXDAdm)0Jo;CW$@nAnmGsK+o&0qr$@ Q^Ev_Z6Jq9V)a}#%*%N*uzW@LL literal 0 HcmV?d00001 diff --git a/p.kirilin/lambda_models/.gitignore b/p.kirilin/lambda_models/.gitignore new file mode 100644 index 0000000..e0cf6a8 --- /dev/null +++ b/p.kirilin/lambda_models/.gitignore @@ -0,0 +1,3 @@ +.idea/ +target/ +Cargo.lock \ No newline at end of file diff --git a/p.kirilin/task.1/lambdas/lambda_models/Cargo.toml b/p.kirilin/lambda_models/Cargo.toml similarity index 61% rename from p.kirilin/task.1/lambdas/lambda_models/Cargo.toml rename to p.kirilin/lambda_models/Cargo.toml index 9868fe1..f080b71 100644 --- a/p.kirilin/task.1/lambdas/lambda_models/Cargo.toml +++ b/p.kirilin/lambda_models/Cargo.toml @@ -6,12 +6,30 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +parsing_parquet = ["parquet", "tokio"] + + [dependencies] log = "0.4.8" serde_json = "1.0" rand = "0.7" + [dependencies.serde] version = "1.0" features = [ "derive" ] + +[dependencies.parquet] +version = "0.15.1" +optional = true + +[dependencies.tokio] +version = "0.2" +default_features = false +optional = true +features = [ + "fs" +] + diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/data_examples/weather_data_input.json b/p.kirilin/lambda_models/src/data_examples/weather_data_input.json similarity index 100% rename from p.kirilin/task.1/lambdas/lambda_models/src/data_examples/weather_data_input.json rename to p.kirilin/lambda_models/src/data_examples/weather_data_input.json diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/data_examples/weather_data_output.json b/p.kirilin/lambda_models/src/data_examples/weather_data_output.json similarity index 100% rename from p.kirilin/task.1/lambdas/lambda_models/src/data_examples/weather_data_output.json rename to p.kirilin/lambda_models/src/data_examples/weather_data_output.json diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/lib.rs b/p.kirilin/lambda_models/src/lib.rs similarity index 100% rename from p.kirilin/task.1/lambdas/lambda_models/src/lib.rs rename to p.kirilin/lambda_models/src/lib.rs diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/locator.rs b/p.kirilin/lambda_models/src/locator.rs similarity index 100% rename from p.kirilin/task.1/lambdas/lambda_models/src/locator.rs rename to p.kirilin/lambda_models/src/locator.rs diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/weather_data_input.rs b/p.kirilin/lambda_models/src/weather_data_input.rs similarity index 100% rename from p.kirilin/task.1/lambdas/lambda_models/src/weather_data_input.rs rename to p.kirilin/lambda_models/src/weather_data_input.rs diff --git a/p.kirilin/task.1/lambdas/lambda_models/src/weather_data_output.rs b/p.kirilin/lambda_models/src/weather_data_output.rs similarity index 54% rename from p.kirilin/task.1/lambdas/lambda_models/src/weather_data_output.rs rename to p.kirilin/lambda_models/src/weather_data_output.rs index b425bd7..9412a6b 100644 --- a/p.kirilin/task.1/lambdas/lambda_models/src/weather_data_output.rs +++ b/p.kirilin/lambda_models/src/weather_data_output.rs @@ -32,6 +32,41 @@ impl From<WeatherDataInput> for WeatherDataOutput { } } +#[cfg(feature = "parsing_parquet")] +pub mod parse_parquet { + use super::WeatherDataOutput; + use tokio::fs::File; + use std::path::Path; + use parquet::file::reader::{SerializedFileReader, FileReader}; + use parquet::record::RowAccessor; + use std::error::Error; + + impl WeatherDataOutput { + pub async fn from_parquet_file(file_name: String) -> Result<Vec<Self>, Box<dyn Error + Send + Sync + 'static>> { + let parquet_file = File::open(&Path::new(file_name.as_str())) + .await? + .into_std() + .await; + let reader = SerializedFileReader::new(parquet_file).unwrap(); + let iter = reader.get_row_iter(None)?; + let mut results = Vec::new(); + for record in iter { + results.push(Self { + timestamp: record.get_long(0)? as usize, + coords: record.get_long(1)? as usize, + temperature: record.get_long(2)?, + humidity: record.get_long(3)?, + pressure: record.get_long(4)?, + city: record.get_string(5)?.clone(), + country: record.get_string(6)?.clone(), + ip_addr: record.get_string(7)?.clone(), + }); + } + Ok(results) + } + } +} + #[must_use] pub fn get_firehose_output_example() -> String { include_str!("data_examples/weather_data_output.json").to_string() @@ -41,7 +76,7 @@ pub fn get_firehose_output_example() -> String { mod tests { use crate::{StationTypes, WeatherDataInput}; use super::WeatherDataOutput; - + #[test] pub fn test_mapping_inputs() { let input = WeatherDataInput { diff --git a/p.kirilin/task.1/aws_services/fire_lambda.tf b/p.kirilin/task.1/aws_services/fire_lambda.tf index d9b4265..ae6689f 100644 --- a/p.kirilin/task.1/aws_services/fire_lambda.tf +++ b/p.kirilin/task.1/aws_services/fire_lambda.tf @@ -1,11 +1,13 @@ # Firehose lambda declaration resource "aws_lambda_function" "firehorse_lambda" { - filename = var.firehose_lambda_file - function_name = var.firehose_lambda_name - handler = "Provided" - role = aws_iam_role.fire_lambda_role.arn - runtime = "provided" - timeout = 3 + source_code_hash = filebase64sha256(var.firehose_lambda_file) + role = aws_iam_role.fire_lambda_role.arn + function_name = var.firehose_lambda_name + filename = var.firehose_lambda_file + memory_size = var.lambda_memory_size + timeout = var.lambda_timeouts + handler = "Provided" + runtime = "provided" environment { variables = { @@ -17,7 +19,6 @@ resource "aws_lambda_function" "firehorse_lambda" { } resource "aws_iam_role" "fire_lambda_role" { - name = var.firehose_lambda_name assume_role_policy = data.aws_iam_policy_document.fire_lambda_role_policy_doc.json } diff --git a/p.kirilin/task.1/aws_services/firehose.tf b/p.kirilin/task.1/aws_services/firehose.tf index d62d074..a6fcc77 100644 --- a/p.kirilin/task.1/aws_services/firehose.tf +++ b/p.kirilin/task.1/aws_services/firehose.tf @@ -88,6 +88,7 @@ data "aws_iam_policy_document" "firehose_role_policy_doc" { } data "aws_iam_policy_document" "fire_extra_policy_doc" { + version = "2012-10-17" # allow to write logs statement { effect = "Allow" @@ -120,7 +121,6 @@ data "aws_iam_policy_document" "fire_extra_policy_doc" { statement { effect = "Allow" actions = [ - "sts:AssumeRole", "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ] diff --git a/p.kirilin/task.1/aws_services/s3.tf b/p.kirilin/task.1/aws_services/s3.tf index b1ce4c0..93f32ee 100644 --- a/p.kirilin/task.1/aws_services/s3.tf +++ b/p.kirilin/task.1/aws_services/s3.tf @@ -1,4 +1,5 @@ resource "aws_s3_bucket" "bucket" { - bucket = "s3rius-weather-bucket" - acl = "private" + bucket = var.s3_bucket_name + acl = "private" + force_destroy = true } \ No newline at end of file diff --git a/p.kirilin/task.1/aws_services/sns_lambda.tf b/p.kirilin/task.1/aws_services/sns_lambda.tf index a84b35e..d5169f6 100644 --- a/p.kirilin/task.1/aws_services/sns_lambda.tf +++ b/p.kirilin/task.1/aws_services/sns_lambda.tf @@ -1,10 +1,12 @@ resource "aws_lambda_function" "sns_lambda" { - filename = var.sns_lambda_file - function_name = var.sns_lambda_name - handler = "Provided" - role = aws_iam_role.sns_lambda_role.arn - runtime = "provided" - timeout = 3 + source_code_hash = filebase64sha256(var.firehose_lambda_file) + role = aws_iam_role.sns_lambda_role.arn + memory_size = var.lambda_memory_size + function_name = var.sns_lambda_name + filename = var.sns_lambda_file + timeout = var.lambda_timeouts + handler = "Provided" + runtime = "provided" environment { variables = { diff --git a/p.kirilin/task.1/aws_services/variables.tf b/p.kirilin/task.1/aws_services/variables.tf index 4f5593a..69282b9 100644 --- a/p.kirilin/task.1/aws_services/variables.tf +++ b/p.kirilin/task.1/aws_services/variables.tf @@ -1,3 +1,7 @@ +variable "s3_bucket_name" { + type = string +} + variable "firehose_role_name" { type = string } @@ -26,3 +30,13 @@ variable "sns_lambda_file" { variable "glue_role_name" { type = string } + +variable "lambda_timeouts" { + type = number + default = 10 +} + +variable "lambda_memory_size" { + type = number + default = 128 +} \ No newline at end of file diff --git a/p.kirilin/task.1/build.sh b/p.kirilin/task.1/build.sh index a1b52e6..83d530f 100755 --- a/p.kirilin/task.1/build.sh +++ b/p.kirilin/task.1/build.sh @@ -49,6 +49,11 @@ function main(){ terraform apply } +# Export s3 bucket name to be same as in second task. +if [[ -n "$1" ]]; then + export TF_VAR_s3_bucket_name=$1 +fi + # Remove packaged lambdas on exit trap rm_lambdas EXIT TERM main diff --git a/p.kirilin/task.1/fire_publisher/Cargo.toml b/p.kirilin/task.1/fire_publisher/Cargo.toml index dfc63ef..e6218cb 100644 --- a/p.kirilin/task.1/fire_publisher/Cargo.toml +++ b/p.kirilin/task.1/fire_publisher/Cargo.toml @@ -17,7 +17,7 @@ serde_json = "1.0" env_logger = "0.7.1" rusoto_firehose = "0.43" rusoto_signature = "0.43.0" -lambda_models = {path = "../lambdas/lambda_models"} +lambda_models = {path = "../../lambda_models"} [dependencies.tokio] version = "0.2.4" diff --git a/p.kirilin/task.1/fire_publisher/Makefile b/p.kirilin/task.1/fire_publisher/Makefile index 7ebe624..3b21789 100644 --- a/p.kirilin/task.1/fire_publisher/Makefile +++ b/p.kirilin/task.1/fire_publisher/Makefile @@ -1,4 +1,8 @@ all: run run: +ifdef num + cargo run -- ${num} +else cargo run +endif \ No newline at end of file diff --git a/p.kirilin/task.1/fire_publisher/src/main.rs b/p.kirilin/task.1/fire_publisher/src/main.rs index a04b90a..da224ee 100644 --- a/p.kirilin/task.1/fire_publisher/src/main.rs +++ b/p.kirilin/task.1/fire_publisher/src/main.rs @@ -10,14 +10,20 @@ use rusoto_firehose::{ use rusoto_signature::Region; use std::error::Error; use std::time::Duration; +use std::str::FromStr; #[tokio::main] pub async fn main() { dotenv::dotenv().ok(); + let mut messages_quantity = 10; + if let Some(quantity) = std::env::args().nth(1) { + println!("Desired messages quantity {}", quantity); + messages_quantity = i32::from_str(quantity.as_str()).expect("Not a number"); + } env_logger::init_from_env(Env::default().default_filter_or("debug")); let client = rusoto_firehose::KinesisFirehoseClient::new(Region::EuCentral1); let delivery_stream_name = String::from("kinesis-s3rius-fire-stream"); - for _ in 0..10 { + for _ in 0..messages_quantity { let message = publish_message(&client, delivery_stream_name.clone()).await; match message { Ok(out) => { @@ -26,7 +32,7 @@ pub async fn main() { debug!("Encrypted: {:#?}", out.encrypted); } Err(err) => { - error!("Message wasn't send"); + error!("Message wasn't sent"); error!("{:#?}", &err.to_string()) } } diff --git a/p.kirilin/task.1/instance.tf b/p.kirilin/task.1/instance.tf index bd96ade..5a12b50 100644 --- a/p.kirilin/task.1/instance.tf +++ b/p.kirilin/task.1/instance.tf @@ -6,6 +6,9 @@ provider "aws" { module "services" { source = "./aws_services" + // S3 variables + s3_bucket_name = var.s3_bucket_name + // Firehose variables firehose_lambda_name = "s3rius_fire_lambda" firehose_lambda_file = var.firehose_lambda_function diff --git a/p.kirilin/task.1/lambdas/firehose_lambda_function/Cargo.toml b/p.kirilin/task.1/lambdas/firehose_lambda_function/Cargo.toml index 58f7216..690194c 100644 --- a/p.kirilin/task.1/lambdas/firehose_lambda_function/Cargo.toml +++ b/p.kirilin/task.1/lambdas/firehose_lambda_function/Cargo.toml @@ -25,7 +25,9 @@ dotenv = "0.15" serde_json = "1.0" env_logger = "0.7" aws_lambda_events = "=0.2.5" -lambda_models = {path = "../lambda_models"} + +[dependencies.lambda_models] +path = "../../../lambda_models" # Use sources from git because, the version in crates is # out of date and won't be updated any soon, as i understand. diff --git a/p.kirilin/task.1/lambdas/firehose_lambda_function/src/processors.rs b/p.kirilin/task.1/lambdas/firehose_lambda_function/src/processors.rs index 75d1a94..1c657d4 100644 --- a/p.kirilin/task.1/lambdas/firehose_lambda_function/src/processors.rs +++ b/p.kirilin/task.1/lambdas/firehose_lambda_function/src/processors.rs @@ -22,10 +22,16 @@ use std::str::FromStr; /// /// Will return `Err` if any problem occur during processing. pub async fn process(event: KinesisFirehoseEvent) -> Result<KinesisFirehoseResponse, LambdaError> { - info!("Handler started"); + info!("Lambda ignition"); let mut processed_events = Vec::new(); for record in event.records { - processed_events.push(process_input(record).await?) + match process_input(record).await { + Ok(response) => { + info!("Data processed successfully."); + processed_events.push(response) + } + Err(err) => warn!("Can't process data. Cause: {}", err.to_string()), + } } Ok(KinesisFirehoseResponse { records: processed_events, @@ -55,25 +61,33 @@ pub async fn process(event: KinesisFirehoseEvent) -> Result<KinesisFirehoseRespo async fn process_input( record: KinesisFirehoseEventRecord, ) -> Result<KinesisFirehoseResponseRecord, LambdaError> { - let weather_json = String::from_utf8(record.data.to_vec())?; + let processing_failed = KinesisFirehoseResponseRecord { + record_id: record.record_id.clone(), + result: Some(String::from("ProcessingFailed")), + data: record.data.clone(), + }; + let weather_json = String::from_utf8(record.data.to_vec()); + if weather_json.is_err() { + return Ok(processing_failed); + } + let weather_json = weather_json.unwrap(); + info!("Received data: {}", weather_json); let weather_data = serde_json::from_str::<WeatherDataInput>(weather_json.as_str()); + if let Err(parse_err) = weather_data { error!( "Found error while parsing JSON data: {}", parse_err.to_string() ); - return Ok(KinesisFirehoseResponseRecord { - record_id: record.record_id, - result: Some(String::from("ProcessingFailed")), - data: record.data, - }); + return Ok(processing_failed); } let weather_data = weather_data.unwrap(); match weather_data.station_type { StationTypes::AUTHORIZED => { let authorized_output = WeatherDataOutput::from(weather_data.clone()); let json_output = serde_json::to_vec(&authorized_output)?; + debug!("Data is OK and AUTHORIZED"); Ok(KinesisFirehoseResponseRecord { record_id: record.record_id, result: Some(String::from("Ok")), @@ -82,19 +96,20 @@ async fn process_input( } StationTypes::UNAUTHORIZED => { let authorized_output = WeatherDataOutput::from(weather_data.clone()); - publish_to_sns(authorized_output.clone()).await?; + if publish_to_sns(authorized_output.clone()).await.is_err() { + warn!("Can't publish message to sns"); + return Ok(processing_failed); + } + let json_output = serde_json::to_vec(&authorized_output)?; + debug!("Data is OK but UNAUTHORIZED"); Ok(KinesisFirehoseResponseRecord { record_id: record.record_id, result: Some(String::from("Dropped")), data: Base64Data(json_output), }) } - StationTypes::UNKNOWN => Ok(KinesisFirehoseResponseRecord { - record_id: record.record_id, - result: Some(String::from("ProcessingFailed")), - data: record.data, - }), + StationTypes::UNKNOWN => Ok(processing_failed), } } @@ -117,7 +132,7 @@ pub async fn publish_to_sns(output: WeatherDataOutput) -> Result<(), LambdaError let sns_client = SnsClient::new(Region::from_str(current_region.as_str()).map_err(|err| { std::io::Error::new( ErrorKind::Other, - format!("Can't connect to sns. {}", err.to_string()), + format!("Wrong region. {}", err.to_string()), ) })?); debug!("Created SNS client"); diff --git a/p.kirilin/task.1/lambdas/sns_lambda_function/Cargo.toml b/p.kirilin/task.1/lambdas/sns_lambda_function/Cargo.toml index 1b9307c..d2f612f 100644 --- a/p.kirilin/task.1/lambdas/sns_lambda_function/Cargo.toml +++ b/p.kirilin/task.1/lambdas/sns_lambda_function/Cargo.toml @@ -16,7 +16,9 @@ dotenv = "0.15" serde_json = "1.0" env_logger = "0.7" aws_lambda_events = "=0.2.5" -lambda_models = {path = "../lambda_models"} + +[dependencies.lambda_models] +path = "../../../lambda_models" # Use sources from git because, the version in crates is # out of date and won't be updated any soon, as i understand. diff --git a/p.kirilin/task.1/lambdas/sns_lambda_function/Makefile b/p.kirilin/task.1/lambdas/sns_lambda_function/Makefile index 55c6c77..a140af2 100644 --- a/p.kirilin/task.1/lambdas/sns_lambda_function/Makefile +++ b/p.kirilin/task.1/lambdas/sns_lambda_function/Makefile @@ -19,6 +19,8 @@ test: integration_test: build_lambda cat input_event_example.json | docker run --rm \ -e LOG_LEVEL='debug' \ + -e AWS_REGION='eu-central-1' \ + -e S3_BUCKET='test' \ -v "${SRC_DIR}/target/x86_64-unknown-linux-musl/release/":/var/task:ro,delegated \ -i -e DOCKER_LAMBDA_USE_STDIN=1 lambci/lambda:provided diff --git a/p.kirilin/task.1/lambdas/sns_lambda_function/src/processors.rs b/p.kirilin/task.1/lambdas/sns_lambda_function/src/processors.rs index 26eca6b..76257e5 100644 --- a/p.kirilin/task.1/lambdas/sns_lambda_function/src/processors.rs +++ b/p.kirilin/task.1/lambdas/sns_lambda_function/src/processors.rs @@ -15,12 +15,21 @@ use std::str::FromStr; /// # Errors /// /// Will return `LambdaError` if any problem occur during processing. +/// * `S3_BUCKET` env variable was not provided; +/// * `AWS_REGION` env variable was not found; +/// * `AWS_REGION` env variable is incorrect; pub async fn process(input: SnsEvent) -> Result<(), LambdaError> { info!("Lambda ignition"); + let current_region = std::env::var("AWS_REGION")?; + let s3_bucket = std::env::var("S3_BUCKET")?; + let region = Region::from_str(current_region.as_str())?; for record in input.records { debug!("Got event from {:#?}", record.event_source); debug!("Event version: {:#?}", record.event_version); - process_record(record.sns).await? + match process_record(record.sns, ®ion, s3_bucket.as_str()).await { + Ok(_) => info!("Message processed successfully"), + Err(err) => warn!("Can't process message. Cause: {}", err.to_string()), + } } Ok(()) } @@ -31,12 +40,13 @@ pub async fn process(input: SnsEvent) -> Result<(), LambdaError> { /// # Errors /// /// Function may fail in several cases: -/// * `S3_BUCKET` env variable was not provided; -/// * `AWS_REGION` env variable was not found; -/// * `AWS_REGION` env variable is incorrect; /// * Message can't be parsed to [`WeatherDataOutput`] /// * Publishing to S3 failed for some reason. -pub async fn process_record(record: SnsEntity) -> Result<(), LambdaError> { +pub async fn process_record( + record: SnsEntity, + region: &Region, + s3_bucket: &str, +) -> Result<(), LambdaError> { debug!( "Type: {:#?}", record.type_.unwrap_or_else(|| String::from("")) @@ -47,14 +57,13 @@ pub async fn process_record(record: SnsEntity) -> Result<(), LambdaError> { Ok(()) } Some(message_json) => { + let s3_client = rusoto_s3::S3Client::new(region.clone()); let weather_data: WeatherDataOutput = serde_json::from_str(message_json.as_str())?; - let current_region = std::env::var("AWS_REGION")?; - let s3_client = rusoto_s3::S3Client::new(Region::from_str(current_region.as_str())?); let mut request = PutObjectRequest::default(); - request.bucket = std::env::var("S3_BUCKET")?; + request.bucket = String::from(s3_bucket); request.body = Some(message_json.into_bytes().into()); request.key = format!( - "UNATHORIZED/{}/{}/{}.txt", + "UNAUTHORIZED/{}/{}/{}.txt", weather_data.country, weather_data.city, uuid::Uuid::new_v4().to_string() diff --git a/p.kirilin/task.1/variables.tf b/p.kirilin/task.1/variables.tf index 7ea4470..75362c6 100644 --- a/p.kirilin/task.1/variables.tf +++ b/p.kirilin/task.1/variables.tf @@ -7,3 +7,8 @@ variable "sns_lambda_function" { type = string default = "sns_lambda_function.zip" } + +variable "s3_bucket_name" { + type = string + default = "s3rius-weather-bucket" +} \ No newline at end of file diff --git a/p.kirilin/task.2/.gitignore b/p.kirilin/task.2/.gitignore new file mode 100644 index 0000000..2f423a1 --- /dev/null +++ b/p.kirilin/task.2/.gitignore @@ -0,0 +1,4 @@ +.idea/ +.terraform +terraform.tfstate +terraform.tfstate.backup \ No newline at end of file diff --git a/p.kirilin/task.2/applications/.gitignore b/p.kirilin/task.2/applications/.gitignore new file mode 100644 index 0000000..617f798 --- /dev/null +++ b/p.kirilin/task.2/applications/.gitignore @@ -0,0 +1,3 @@ +target/ +.idea/ +Cargo.lock \ No newline at end of file diff --git a/p.kirilin/task.2/applications/ec2_sqs_listener/Cargo.toml b/p.kirilin/task.2/applications/ec2_sqs_listener/Cargo.toml new file mode 100644 index 0000000..16a46b3 --- /dev/null +++ b/p.kirilin/task.2/applications/ec2_sqs_listener/Cargo.toml @@ -0,0 +1,71 @@ +[package] +name = "ec2_sqs_listener" +version = "0.1.0" +authors = ["Pavel Kirilin <pavel.kirilin@simbirsoft.com>"] +edition = "2018" +autobins = false +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[[bin]] +name = "bootstrap" +path = "src/main.rs" + +[dependencies] +log = "0.4" +dotenv = "0.15" +serde_json = "1.0" + +[dependencies.lambda_models] +path = "../../../lambda_models" +features = [ + "parsing_parquet" +] + +[dependencies.uuid] +version = "0.8.1" +features = [ + "v4" +] + +[dependencies.tokio] +version = "0.2" +default_features = false +features = [ + "time", + "fs", + "blocking" +] + +[dependencies.rusoto_core] +version = "0.43" +default_features = false +features = [ + "rustls" +] + +[dependencies.rusoto_sqs] +version = "0.43" +default_features = false +features = [ + "rustls" +] + +[dependencies.rusoto_s3] +version = "0.43" +default_features = false +features = [ + "rustls" +] + +[dependencies.rusoto_sns] +version = "0.43" +default_features = false +features = [ + "rustls" +] + +[dependencies.fern] +version = "0.6.0" +features = [ + "colored" +] \ No newline at end of file diff --git a/p.kirilin/task.2/applications/ec2_sqs_listener/Makefile b/p.kirilin/task.2/applications/ec2_sqs_listener/Makefile new file mode 100644 index 0000000..04d68e8 --- /dev/null +++ b/p.kirilin/task.2/applications/ec2_sqs_listener/Makefile @@ -0,0 +1,32 @@ +SRC_DIR=$(shell pwd) + +# Default target +all: validate + +# Run formatting +fmt: + cargo fmt + +# Find some common vulnerabilities if any. +clippy: + cargo clippy --all-targets --all-features -- -D "clippy::pedantic" + +# Standard unit testing. +test: + cargo test + +# Run all checks +validate: fmt clippy test + +# Build binary with musl-gcc target (Required by AWS runtime) +build_lambda: + @rustup target add x86_64-unknown-linux-musl + cargo build --release --target x86_64-unknown-linux-musl + +# Package resulting binary in zip +# If zip_name variable defined then it'll pack bin in specific zip. +install: build_lambda +ifndef zip_name + $(eval zip_name=application) +endif + zip -j "${zip_name}.zip" target/x86_64-unknown-linux-musl/release/bootstrap diff --git a/p.kirilin/task.2/applications/ec2_sqs_listener/src/main.rs b/p.kirilin/task.2/applications/ec2_sqs_listener/src/main.rs new file mode 100644 index 0000000..f4a6397 --- /dev/null +++ b/p.kirilin/task.2/applications/ec2_sqs_listener/src/main.rs @@ -0,0 +1,55 @@ +#[macro_use] +extern crate log; +extern crate tokio; + +use fern::colors; +use log::LevelFilter; +use std::error::Error; +use std::str::FromStr; + +mod processor; + +type AppError = Box<dyn Error + Send + Sync + 'static>; + +/// Setting up logger at startup +fn setup_logger() -> Result<(), AppError> { + let log_level = std::env::var("LOG_LEVEL").unwrap_or_else(|_| String::from("INFO")); + let log_file = + std::env::var("LOG_FILE").unwrap_or_else(|_| String::from("/var/log/sqs_listener.log")); + + let colors = colors::ColoredLevelConfig::new() + .info(colors::Color::Green) + .warn(colors::Color::Magenta) + .debug(colors::Color::Blue) + .error(colors::Color::Red) + .trace(colors::Color::BrightRed); + fern::Dispatch::new() + .format(move |out, message, record| { + out.finish(format_args!( + "[{}] {}", + colors.color(record.level()), + message + )) + }) + .level(LevelFilter::from_str(log_level.as_str()).unwrap()) + .chain(std::io::stdout()) + .chain(fern::log_file(log_file)?) + .apply()?; + Ok(()) +} + +/// Main execution point. +/// In this function we setup connection +/// and start listening to SQS +/// +/// # Errors +/// `SQS_QUEUE_ID` env was not provided +/// `AWS_REGION` env was not provided +#[tokio::main] +async fn main() -> Result<(), AppError> { + dotenv::dotenv().ok(); + setup_logger()?; + + processor::process().await?; + Ok(()) +} diff --git a/p.kirilin/task.2/applications/ec2_sqs_listener/src/processor.rs b/p.kirilin/task.2/applications/ec2_sqs_listener/src/processor.rs new file mode 100644 index 0000000..2de088b --- /dev/null +++ b/p.kirilin/task.2/applications/ec2_sqs_listener/src/processor.rs @@ -0,0 +1,286 @@ +use crate::AppError; +use lambda_models::WeatherDataOutput; +use rusoto_core::Region; +use rusoto_s3::{GetObjectRequest, S3}; +use rusoto_sns::{PublishInput, Sns, SnsClient}; +use rusoto_sqs::{DeleteMessageRequest, Message, ReceiveMessageRequest, Sqs, SqsClient}; +use std::str::FromStr; +use std::time::Duration; +use tokio::fs::File; +use tokio::prelude::*; +use tokio::time::delay_for; + +fn build_error(description: String) -> std::io::Error { + std::io::Error::new(std::io::ErrorKind::Other, description) +} + +/// ## Main processing function +/// This function initializing `SQSClient` +/// and start pooling for new messages. +/// +/// # Errors +/// * `SQS_QUEUE_ID` env was not found. +/// * `AWS_REGION` env was not found. +/// * `S3_BUCKET` env was not found. +/// * `AWS_REGION` is incorrect (Unknown AWS region). +pub async fn process() -> Result<(), AppError> { + let sqs_queue_id = std::env::var("SQS_QUEUE_ID") + .map_err(|_| build_error(String::from("SQS_QUEUE_ID was not provided")))?; + debug!("Found SQS queue ID: {}", sqs_queue_id.as_str()); + let aws_region = std::env::var("AWS_REGION") + .map_err(|_| build_error(String::from("AWS_REGION was not provided")))?; + debug!("Found AWS region: {}", aws_region.as_str()); + let s3_bucket = std::env::var("S3_BUCKET") + .map_err(|_| build_error(String::from("S3_BUCKET was not provided")))?; + debug!("S3 BUCKET: {}", s3_bucket.as_str()); + let sns_topic = std::env::var("SNS_TOPIC") + .map_err(|_| build_error(String::from("SNS_TOPIC was not provided")))?; + debug!("SNS TOPIC: {}", s3_bucket.as_str()); + + let aws_region = Region::from_str(aws_region.as_str()) + .map_err(|_| build_error(String::from("Incorrect region provided")))?; + + pool_messages(sqs_queue_id, s3_bucket, sns_topic, aws_region).await; + Ok(()) +} + +/// Request pending message from sqs +/// and process them. +/// All errors handled here to continue execution in any case. +/// # Parameters +/// * `sqs_queue_id`: `SQS` queue to poll for messages; +/// * `s3_bucket`: `S3` bucket to get files described in incoming messages; +/// * `sns_topic`: `SNS` topic to publish matched weather data; +/// * `aws_region`: current `AWS` region. +async fn pool_messages( + sqs_queue_id: String, + s3_bucket: String, + sns_topic: String, + aws_region: Region, +) { + info!("Start pooling message from SQS"); + loop { + info!("Sleeping for 2 seconds"); + delay_for(Duration::from_secs(2)).await; + let sqs_client = SqsClient::new(aws_region.clone()); + let messages = request_messages(&sqs_client, sqs_queue_id.as_str()).await; + if messages.is_err() { + warn!( + "Can't receive messages. Cause: {}", + messages.err().unwrap().to_string() + ); + continue; + } + for message in &messages.unwrap() { + let message = message.clone(); + let message_id = message + .message_id + .clone() + .unwrap_or_else(|| String::from("with unknown ID")); + let processing_res = process_message( + s3_bucket.as_str(), + sns_topic.as_str(), + &aws_region, + message.clone(), + ) + .await; + match processing_res { + Ok(_) => { + info!("Message {} processed successfully", message_id); + if let Err(error) = + delete_message(&sqs_client, sqs_queue_id.as_str(), message.clone()).await + { + warn!("Can't delete message from queue. {}", error.to_string()); + }; + } + Err(error) => error!( + "Can't process message: {:?}. Cause: {}", + message.message_id, + error.to_string() + ), + } + } + } +} + +/// Delete message from `SQS` queue. +/// +/// # Parameters +/// * `sqs_client`: Connection to `SQS`; +/// * `queue_id`: Link to queue; +/// * `message`: Message from SQS to delete. +/// +/// # Errors +/// +/// * Message receipt empty; +/// * Can't delete message from queue. +async fn delete_message( + sqs_client: &SqsClient, + queue_id: &str, + message: Message, +) -> Result<(), AppError> { + let mut delete_request = DeleteMessageRequest::default(); + delete_request.queue_url = String::from(queue_id); + if message.receipt_handle.is_none() { + return Err(Box::new(build_error(String::from( + "Unknown receipt handle in message", + )))); + } + delete_request.receipt_handle = String::from(message.receipt_handle.unwrap().as_str()); + sqs_client.delete_message(delete_request).await?; + Ok(()) +} + +/// Request new messages from SQS queue +/// +/// # Parameters +/// * `sqs_client`: Connection to `SQS`; +/// * `queue_id`: Link to queue; +/// +/// # Errors +/// * Can't receive messages; +/// * The `Queue` is empty. +async fn request_messages( + sqs_client: &SqsClient, + queue_id: &str, +) -> Result<Vec<Message>, AppError> { + let mut request = ReceiveMessageRequest::default(); + request.queue_url = String::from(queue_id); + request.max_number_of_messages = Some(10); + let sqs_result = sqs_client.receive_message(request).await.map_err(|err| { + Box::new(build_error(format!( + "Can't request more messages. Cause: {}", + err.to_string() + ))) + })?; + if sqs_result.messages.is_none() { + return Err(Box::new(build_error(String::from("The queue is empty")))); + } + Ok(sqs_result.messages.unwrap()) +} + +/// Get message body and delete it from queue. +/// +/// # Parameters +/// * `s3_bucket`: `S3` bucket where parquet is located; +/// * `sns_topic`: `SNS` topic to publish matched weather data; +/// * `aws_region`: Current AWS region; +/// * `message`: `Message` to process. +/// +/// # Errors +/// * Can't load provided file. +async fn process_message( + s3_bucket: &str, + sns_topic: &str, + aws_region: &Region, + message: Message, +) -> Result<(), AppError> { + debug!("Processing message"); + if message.body.is_none() { + return Ok(()); + } + let body = message.body.unwrap().clone(); + debug!("Received s3 file key: {}", body.as_str()); + let uuid = uuid::Uuid::new_v4().to_string(); + let file_name = format!("/tmp/{}.parquet", uuid); + load_and_save_parquet(body, aws_region, String::from(s3_bucket), file_name.clone()).await?; + parse_and_publish_parquet(file_name, sns_topic, aws_region).await?; + Ok(()) +} + +/// Loading and saving parquet file to filesystem. +/// All saved parquet files available until scaling down. +/// +/// # Parameters +/// * `file_key`: key to file in s3 storage; +/// * `aws_region`: Current AWS region where s3 located; +/// * `s3_bucket`: bucket obviously; +/// * `file_name`: name of file on local system where to store parquet. +/// +/// # Errors +/// * Can't load object from S3; +/// * Can't read object bytes; +/// * Can't create file in filesystem; +/// * Can't write to created file. +async fn load_and_save_parquet( + file_key: String, + aws_region: &Region, + s3_bucket: String, + file_name: String, +) -> Result<(), AppError> { + debug!("Loading s3 object"); + let s3_client = rusoto_s3::S3Client::new(aws_region.clone()); + let mut object_request = GetObjectRequest::default(); + object_request.bucket = s3_bucket.clone(); + object_request.key = file_key.clone(); + let s3_object = s3_client.get_object(object_request).await?; + if s3_object.body.is_none() { + return Err(Box::new(build_error(String::from( + "S3 object body is null", + )))); + } + let body = s3_object.body.unwrap(); + let mut contents: Vec<u8> = vec![]; + body.into_async_read().read_to_end(&mut contents).await?; + let mut file = File::create(file_name).await?; + file.write_all(contents.as_slice()).await?; + Ok(()) +} + +/// Parse parquet file and publish it to SNS. +/// # Parameters: +/// * `filename`: file in local system to read parquet file; +/// * `aws_region`: current AWS region; +/// +/// # Errors +/// * The humidity is above 10; +/// * The pressure is above 100; +/// * The temperature is less than 30. +async fn parse_and_publish_parquet( + file_name: String, + sns_topic: &str, + aws_region: &Region, +) -> Result<(), AppError> { + debug!("Parsing parquet file {}", file_name.as_str()); + let records = lambda_models::WeatherDataOutput::from_parquet_file(file_name).await?; + let sns_client = rusoto_sns::SnsClient::new(aws_region.clone()); + for item in records { + debug!("{:#?}", item.clone()); + if item.humidity > 10 && item.pressure > 100 && item.temperature < 30 { + match publish_to_sns(item, sns_topic, &sns_client).await { + Ok(_) => { + info!("Weather data successfully processed"); + } + Err(err) => { + warn!("Can't send weather data to SNS. Cause {}", err.to_string()); + } + } + } else { + warn!("Weather data is ok"); + } + } + Ok(()) +} + +/// Publish valid messages to SNS +/// +/// # Parameters +/// `weather_data`: parsed parquet from `S3`; +/// `sns_topic`: topic to publish to; +/// `sns_client`: Connection to `SNS`. +/// +/// # Errors +/// * Can't serialize `WeatherData` to JSON; +/// * Can't publish to `SNS`. +async fn publish_to_sns( + weather_data: WeatherDataOutput, + sns_topic: &str, + sns_client: &SnsClient, +) -> Result<(), AppError> { + debug!("Publishing to SNS"); + let mut publish_input = PublishInput::default(); + publish_input.message = serde_json::to_string(&weather_data)?; + publish_input.topic_arn = Some(String::from(sns_topic)); + sns_client.publish(publish_input).await?; + Ok(()) +} diff --git a/p.kirilin/task.2/applications/s3_lambda_function/Cargo.toml b/p.kirilin/task.2/applications/s3_lambda_function/Cargo.toml new file mode 100644 index 0000000..6feabf5 --- /dev/null +++ b/p.kirilin/task.2/applications/s3_lambda_function/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "s3_lambda_function" +version = "0.1.0" +authors = ["Pavel Kirilin <pavel.kirilin@simbirsoft.com>"] +edition = "2018" +autobins = false +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[[bin]] +name = "bootstrap" +path = "src/main.rs" + +[dependencies] +log = "0.4" +dotenv = "0.15" +serde_json = "1.0" +env_logger = "0.7" +aws_lambda_events = "=0.2.5" + +# Use sources from git because, the version in crates is +# out of date and won't be updated any soon, as i understand. +[dependencies.lambda] +git = "https://github.com/awslabs/aws-lambda-rust-runtime" + +[dependencies.tokio] +version = "0.2.4" +features = [ + "rt-core" +] + +[dependencies.rusoto_core] +version = "0.43" +default_features = false +features = [ + "rustls" +] + +[dependencies.rusoto_sqs] +version = "0.43" +default_features = false +features = [ + "rustls" +] \ No newline at end of file diff --git a/p.kirilin/task.2/applications/s3_lambda_function/Makefile b/p.kirilin/task.2/applications/s3_lambda_function/Makefile new file mode 100644 index 0000000..53efdc7 --- /dev/null +++ b/p.kirilin/task.2/applications/s3_lambda_function/Makefile @@ -0,0 +1,32 @@ +SRC_DIR=$(shell pwd) + +# Default target +all: validate + +# Run formatting +fmt: + cargo fmt + +# Find some common vulnerabilities if any. +clippy: + cargo clippy --all-targets --all-features -- -D "clippy::pedantic" + +# Standard unit testing. +test: + cargo test + +# Run all checks +validate: fmt clippy test + +# Build binary with musl-gcc target (Required by AWS runtime) +build_lambda: + @rustup target add x86_64-unknown-linux-musl + cargo build --release --target x86_64-unknown-linux-musl + +# Package resulting binary in zip +# If zip_name variable defined then it'll pack bin in specific zip. +install: build_lambda +ifndef zip_name + $(eval zip_name=lambda) +endif + zip -j "${zip_name}.zip" target/x86_64-unknown-linux-musl/release/bootstrap diff --git a/p.kirilin/task.2/applications/s3_lambda_function/src/main.rs b/p.kirilin/task.2/applications/s3_lambda_function/src/main.rs new file mode 100644 index 0000000..ef5b9e7 --- /dev/null +++ b/p.kirilin/task.2/applications/s3_lambda_function/src/main.rs @@ -0,0 +1,31 @@ +#[macro_use] +extern crate log; + +/// Main processing module. +/// All processing function placed here +pub mod processors; + +use std::error::Error; +use tokio::runtime::Runtime; + +/// Common error type. +/// It can be used with any error that +/// implements `Send` + `Sync` traits. +type LambdaError = Box<dyn Error + Send + Sync + 'static>; + +/// This function starting point of the binary. It points the lambda to execution function. +/// Real lambda processor located in `processors` module. +fn main() -> Result<(), LambdaError> { + dotenv::dotenv().ok(); + + let env = env_logger::Env::default() + .filter_or("LOG_LEVEL", "info") + .write_style_or("LOG_STYLE", "never"); + + env_logger::init_from_env(env); + + let mut rt = Runtime::new().expect("can't start Tokio runtime"); + let handler = lambda::handler_fn(processors::process); + rt.block_on(lambda::run(handler))?; + Ok(()) +} diff --git a/p.kirilin/task.2/applications/s3_lambda_function/src/processors.rs b/p.kirilin/task.2/applications/s3_lambda_function/src/processors.rs new file mode 100644 index 0000000..d29d5fc --- /dev/null +++ b/p.kirilin/task.2/applications/s3_lambda_function/src/processors.rs @@ -0,0 +1,61 @@ +use crate::LambdaError; +use aws_lambda_events::event::s3::{S3Event, S3EventRecord}; +use rusoto_core::Region; +use rusoto_sqs::{SendMessageRequest, Sqs}; +use std::io::ErrorKind; +use std::str::FromStr; + +/// Main data processing point. +/// +/// This function proceed S3 put events. +/// After object was created in s3 this processor will send information +/// about target records in sqs. +/// +/// # Errors +/// +/// Will return `Err` if any problem occur during processing. +pub async fn process(event: S3Event) -> Result<(), Vec<LambdaError>> { + info!("Handler started"); + for record in event.records { + match process_input(record).await { + Ok(_) => info!("Information successfully sent."), + Err(err) => { + error!("Can't send information about this event"); + error!("{}", err.to_string()) + } + } + } + Ok(()) +} + +/// Main processor logic. +/// It will publish information about new object from s3 in SQS. +/// +/// `AWS_REGION` is variable provided by AWS lambda environment. +/// `SQS_QUEUE_ID` is injected by terraform. +/// +/// # Errors +/// * The `AWS_REGION` variable not found; +/// * The `AWS_REGION` env variable is incorrect; +/// * The `SQS_QUEUE_ID` env is not set; +/// * The `SQS_QUEUE_ID` env is incorrect. +pub async fn process_input(record: S3EventRecord) -> Result<(), LambdaError> { + let queue_url = std::env::var("SQS_QUEUE_ID")?; + let current_region = std::env::var("AWS_REGION")?; + let client = rusoto_sqs::SqsClient::new(Region::from_str(current_region.as_str())?); + info!("Created sqs client"); + let mut message = SendMessageRequest::default(); + info!("Resolved queue url: {}", queue_url); + message.queue_url = queue_url; + let object_key = record.s3.object.key; + info!("Event data key: {:?}", object_key); + if object_key.is_none() { + return Err(Box::new(std::io::Error::new( + ErrorKind::Other, + String::from("Object path is unknown!"), + ))); + } + message.message_body = object_key.unwrap(); + client.send_message(message).await?; + Ok(()) +} diff --git a/p.kirilin/task.2/aws_services/asg.tf b/p.kirilin/task.2/aws_services/asg.tf new file mode 100644 index 0000000..c28ea5b --- /dev/null +++ b/p.kirilin/task.2/aws_services/asg.tf @@ -0,0 +1,105 @@ +data "aws_availability_zones" "available" { + state = "available" +} + +resource "aws_autoscaling_group" "s3rius-asg-processors" { + max_size = 3 + min_size = 0 + force_delete = true + launch_configuration = aws_launch_configuration.asg-launch-config.name + availability_zones = data.aws_availability_zones.available.names + + health_check_type = "ELB" + load_balancers = [ + aws_elb.load_balancer.name + ] +} + +resource "aws_autoscaling_policy" "scale_up_policy" { + name = "sqs-asg-scale-up-policy" + scaling_adjustment = 1 + autoscaling_group_name = aws_autoscaling_group.s3rius-asg-processors.name + adjustment_type = "ChangeInCapacity" + cooldown = 300 +} + +resource "aws_autoscaling_policy" "scale_down_policy" { + name = "sqs-asg-scale-down-policy" + scaling_adjustment = -1 + autoscaling_group_name = aws_autoscaling_group.s3rius-asg-processors.name + adjustment_type = "ChangeInCapacity" + cooldown = 300 +} + + +resource "aws_elb" "load_balancer" { + name = "terraform-asg-example" + security_groups = [ + aws_security_group.outbound_traffic_security.id + ] + + availability_zones = data.aws_availability_zones.available.names + + health_check { + target = "HTTP:${var.ec2_port}/" + interval = 30 + timeout = 3 + healthy_threshold = 2 + unhealthy_threshold = 2 + } + + # This adds a listener for incoming HTTP requests. + listener { + lb_port = var.elb_port + lb_protocol = "http" + instance_port = var.ec2_port + instance_protocol = "http" + } +} + +resource "aws_security_group" "inbound_traffic_security" { + name = "inbound-ec2" + + ingress { + from_port = var.elb_port + to_port = var.elb_port + protocol = "tcp" + cidr_blocks = [ + "0.0.0.0/0" + ] + } + + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = [ + "0.0.0.0/0" + ] + } +} + +resource "aws_security_group" "outbound_traffic_security" { + name = "outbound-ec2" + + # Allow all outbound + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = [ + "0.0.0.0/0" + ] + } + + # Inbound HTTP from anywhere + ingress { + from_port = var.ec2_port + to_port = var.ec2_port + protocol = "tcp" + cidr_blocks = [ + "0.0.0.0/0" + ] + } +} + diff --git a/p.kirilin/task.2/aws_services/cloudwatch.tf b/p.kirilin/task.2/aws_services/cloudwatch.tf new file mode 100644 index 0000000..f862d9e --- /dev/null +++ b/p.kirilin/task.2/aws_services/cloudwatch.tf @@ -0,0 +1,50 @@ +resource "aws_cloudwatch_log_group" "s3_lamda_logs" { + name = "/aws/lambda/${aws_lambda_function.s3_lambda.function_name}" + retention_in_days = 1 +} + + +resource "aws_cloudwatch_log_group" "asg_ec2_logs" { + name = "ec2_logs" + retention_in_days = 1 +} + +resource "aws_cloudwatch_metric_alarm" "sqs-asg-metric-alarm" { + alarm_name = "SQS-message-alarm" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = "1" + metric_name = "NumberOfMessagesSent" + namespace = "AWS/SQS" + period = "60" + statistic = "SampleCount" + threshold = "2" + + dimensions = { + QueueName = aws_sqs_queue.s3rius_sqs_queue.name + } + + alarm_description = "This metric monitors SQS messages and fire ec2 from asg" + alarm_actions = [ + aws_autoscaling_policy.scale_up_policy.arn + ] +} + +resource "aws_cloudwatch_metric_alarm" "cpu-asg-metric-alarm" { + alarm_name = "CPU-message-alarm" + evaluation_periods = 2 + comparison_operator = "LessThanThreshold" + metric_name = "CPUUtilization" + namespace = "AWS/EC2" + period = "120" + statistic = "Average" + threshold = "5" + + dimensions = { + AutoScalingGroupName = aws_autoscaling_group.s3rius-asg-processors.name + } + + alarm_description = "This metric monitors CPU utilization for scaling down" + alarm_actions = [ + aws_autoscaling_policy.scale_down_policy.arn + ] +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/ec2.tf b/p.kirilin/task.2/aws_services/ec2.tf new file mode 100644 index 0000000..ac031dd --- /dev/null +++ b/p.kirilin/task.2/aws_services/ec2.tf @@ -0,0 +1,118 @@ +resource "aws_launch_configuration" "asg-launch-config" { + name = "s3rius-autoscaling-launch-config" + image_id = "ami-0a9e2b8a093c02922" + instance_type = "t2.micro" + security_groups = [ + aws_security_group.inbound_traffic_security.id, + aws_security_group.outbound_traffic_security.id + ] + + iam_instance_profile = aws_iam_instance_profile.s3rius_profile.id + key_name = aws_key_pair.aws_key_pair.key_name + user_data = data.template_file.asg_user_data.rendered + depends_on = [ + aws_s3_bucket_object.application_data, + ] +} + +resource "aws_key_pair" "aws_key_pair" { + key_name = "aws_key_pair" + public_key = file(var.ec2_ssh_key_file) +} + +data "template_file" "asg_user_data" { + template = file("${path.module}/utils/asg_user_data.sh") + vars = { + meta_bucket = aws_s3_bucket.asg_meta_bucket.bucket + application_key = var.ec2_application_s3_key + sqs_queue_id = aws_sqs_queue.s3rius_sqs_queue.id + aws_region = var.aws_region + cloudwatch_conf_key = var.ec2_cloudwatch_conf_key + s3_bucket = aws_s3_bucket.s3_weather_bucket.bucket + sns_topic = aws_sns_topic.asg-weather-topic.arn + } +} + + +resource "aws_iam_instance_profile" "s3rius_profile" { + name = "s3rius" + role = aws_iam_role.ec2_profile_role.name +} + +resource "aws_iam_role" "ec2_profile_role" { + name = "ec2_profile_role" + path = "/" + assume_role_policy = data.aws_iam_policy_document.ec2_role_doc.json +} + +resource "aws_iam_role_policy_attachment" "ec2_extra_role_policy" { + role = aws_iam_role.ec2_profile_role.name + policy_arn = aws_iam_policy.ec2_extra_policy.arn +} + +resource "aws_iam_policy" "ec2_extra_policy" { + path = "/" + policy = data.aws_iam_policy_document.ec2_extra_doc.json +} + + +data "aws_iam_policy_document" "ec2_role_doc" { + version = "2012-10-17" + + statement { + actions = [ + "sts:AssumeRole" + ] + + principals { + identifiers = [ + "ec2.amazonaws.com" + ] + type = "Service" + } + + effect = "Allow" + } +} + +data "aws_iam_policy_document" "ec2_extra_doc" { + version = "2012-10-17" + + statement { + effect = "Allow" + actions = [ + "s3:GetBucketLocation", + "s3:GetObject", + "s3:ListBucket", + "s3:ListBucketMultipartUploads", + ] + resources = [ + aws_s3_bucket.asg_meta_bucket.arn, + "${aws_s3_bucket.asg_meta_bucket.arn}/*", + aws_s3_bucket.s3_weather_bucket.arn, + "${aws_s3_bucket.s3_weather_bucket.arn}/*" + + ] + } + + statement { + effect = "Allow" + actions = [ + "sqs:*" + ] + resources = [ + aws_sqs_queue.s3rius_sqs_queue.arn + ] + } + + statement { + effect = "Allow" + actions = [ + "sns:Publish", + ] + resources = [ + aws_sns_topic.asg-weather-topic.arn + ] + } + +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/lambda_for_s3.tf b/p.kirilin/task.2/aws_services/lambda_for_s3.tf new file mode 100644 index 0000000..20f2073 --- /dev/null +++ b/p.kirilin/task.2/aws_services/lambda_for_s3.tf @@ -0,0 +1,82 @@ +resource "aws_lambda_function" "s3_lambda" { + source_code_hash = filebase64sha256(var.s3_lambda_zip) + role = aws_iam_role.s3_lambda_role.arn + memory_size = var.lambda_memory_size + timeout = var.lambda_timeout + function_name = var.s3_lambda_name + filename = var.s3_lambda_zip + handler = "Provided" + runtime = "provided" + + environment { + variables = { + SQS_QUEUE_ID = aws_sqs_queue.s3rius_sqs_queue.id, + LOG_LEVEL = "debug,hyper=error,rusoto_core=info", + LOG_STYLE = "none" + } + } +} + +resource "aws_lambda_permission" "allow_bucket" { + statement_id = "AllowExecutionFromS3Bucket" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.s3_lambda.arn + principal = "s3.amazonaws.com" + source_arn = aws_s3_bucket.s3_weather_bucket.arn +} + +resource "aws_iam_role" "s3_lambda_role" { + name = var.s3_lambda_name + assume_role_policy = data.aws_iam_policy_document.s3_lambda_policy_doc.json +} + +resource "aws_iam_role_policy_attachment" "s3_lambda_policy_attachment" { + role = aws_iam_role.s3_lambda_role.name + policy_arn = aws_iam_policy.s3_lambda_extra_doc.arn +} + +resource "aws_iam_policy" "s3_lambda_extra_doc" { + path = "/" + policy = data.aws_iam_policy_document.s3_lambda_extra_doc.json +} + + +data "aws_iam_policy_document" "s3_lambda_policy_doc" { + version = "2012-10-17" + statement { + effect = "Allow" + actions = [ + "sts:AssumeRole", + ] + principals { + identifiers = [ + "lambda.amazonaws.com" + ] + type = "Service" + } + } +} + +data "aws_iam_policy_document" "s3_lambda_extra_doc" { + statement { + effect = "Allow" + actions = [ + "logs:PutLogEvents", + "logs:CreateLogStream", + "logs:CreateLogGroup" + ] + resources = [ + aws_cloudwatch_log_group.s3_lamda_logs.arn + ] + } + + statement { + effect = "Allow" + actions = [ + "sqs:SendMessage", + ] + resources = [ + aws_sqs_queue.s3rius_sqs_queue.arn + ] + } +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/s3_for_asg.tf b/p.kirilin/task.2/aws_services/s3_for_asg.tf new file mode 100644 index 0000000..547e57a --- /dev/null +++ b/p.kirilin/task.2/aws_services/s3_for_asg.tf @@ -0,0 +1,11 @@ +resource "aws_s3_bucket" "asg_meta_bucket" { + bucket = "s3rius-asg-meta-bucket" + acl = "private" + force_destroy = true +} + +resource "aws_s3_bucket_object" "application_data" { + bucket = aws_s3_bucket.asg_meta_bucket.bucket + key = var.ec2_application_s3_key + source = var.ec2_application_bin +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/s3_weather_bucket.tf b/p.kirilin/task.2/aws_services/s3_weather_bucket.tf new file mode 100644 index 0000000..0acafcd --- /dev/null +++ b/p.kirilin/task.2/aws_services/s3_weather_bucket.tf @@ -0,0 +1,17 @@ +resource "aws_s3_bucket" "s3_weather_bucket" { + bucket = var.s3_weather_bucket + acl = "private" + force_destroy = true +} + +resource "aws_s3_bucket_notification" "weather_bucket_notification" { + bucket = aws_s3_bucket.s3_weather_bucket.id + + lambda_function { + lambda_function_arn = aws_lambda_function.s3_lambda.arn + events = ["s3:ObjectCreated:*"] + filter_prefix = "AUTHORIZED/" + } + + depends_on = [aws_lambda_permission.allow_bucket] +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/sns.tf b/p.kirilin/task.2/aws_services/sns.tf new file mode 100644 index 0000000..ec45b60 --- /dev/null +++ b/p.kirilin/task.2/aws_services/sns.tf @@ -0,0 +1,3 @@ +resource "aws_sns_topic" "asg-weather-topic" { + name = "s3rius-asg-weather-topic" +} diff --git a/p.kirilin/task.2/aws_services/sqs.tf b/p.kirilin/task.2/aws_services/sqs.tf new file mode 100644 index 0000000..362100c --- /dev/null +++ b/p.kirilin/task.2/aws_services/sqs.tf @@ -0,0 +1,34 @@ +resource "aws_sqs_queue" "s3rius_sqs_queue" { + name = "s3rius-sqs-autoscale" + message_retention_seconds = 1200 +} + +resource "aws_sqs_queue_policy" "sqs_publish_policy" { + queue_url = aws_sqs_queue.s3rius_sqs_queue.id + policy = data.aws_iam_policy_document.sqs_send_message_policy_doc.json +} + +data "aws_iam_policy_document" "sqs_send_message_policy_doc" { + statement { + effect = "Allow" + actions = [ + "sqs:SendMessage" + ] + principals { + type = "AWS" + identifiers = [ + "*" + ] + } + resources = [ + aws_sqs_queue.s3rius_sqs_queue.arn + ] + condition { + test = "ArnEquals" + variable = "aws:SourceArn" + values = [ + aws_lambda_function.s3_lambda.arn + ] + } + } +} \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/utils/asg_user_data.sh b/p.kirilin/task.2/aws_services/utils/asg_user_data.sh new file mode 100644 index 0000000..6cd78c5 --- /dev/null +++ b/p.kirilin/task.2/aws_services/utils/asg_user_data.sh @@ -0,0 +1,19 @@ +#!/bin/bash +LOG_FILE="/var/log/sqs_listener_logs.log" + +function main() { + aws s3 cp "s3://${meta_bucket}/${application_key}" "application.zip" + export SQS_QUEUE_ID="${sqs_queue_id}" + export AWS_REGION="${aws_region}" + export S3_BUCKET="${s3_bucket}" + export SNS_TOPIC="${sns_topic}" + export LOG_LEVEL="INFO" + export LOG_FILE="$LOG_FILE" + unzip application.zip + chmod 777 ./bootstrap + ./bootstrap +} + +exec > >(tee "$LOG_FILE" | logger -t user-data -s 2>/dev/console) 2>&1 + echo "################# INSTANCE STARTUP #################" + main \ No newline at end of file diff --git a/p.kirilin/task.2/aws_services/variables.tf b/p.kirilin/task.2/aws_services/variables.tf new file mode 100644 index 0000000..daa1b22 --- /dev/null +++ b/p.kirilin/task.2/aws_services/variables.tf @@ -0,0 +1,52 @@ +variable "s3_weather_bucket" { + type = string +} + +variable "s3_lambda_zip" { + type = string +} + +variable "s3_lambda_name" { + type = string +} + +variable "ec2_ssh_key_file" { + type = string +} + +variable "elb_port" { + type = number + default = 8100 +} + +variable "ec2_port" { + type = number + default = 80 +} + +variable "ec2_application_s3_key" { + type = string +} + +variable "ec2_cloudwatch_conf_key" { + type = string + default = "ec2_log_config.conf" +} + +variable "ec2_application_bin" { + type = string +} + +variable "aws_region" { + type = string +} + +variable "lambda_timeout" { + type = number + default = 10 +} + +variable "lambda_memory_size" { + type = number + default = 128 +} \ No newline at end of file diff --git a/p.kirilin/task.2/build.sh b/p.kirilin/task.2/build.sh new file mode 100644 index 0000000..a1f56df --- /dev/null +++ b/p.kirilin/task.2/build.sh @@ -0,0 +1,73 @@ +#!/bin/sh +ERR='\033[0;31m' +WARNING='\033[0;33m' +NC='\033[0m' # No Color + +key_name="ec2_key.pub" +applications=( "s3_lambda_function" "ec2_sqs_listener" ) + + +function build_application(){ + for application in "${applications[@]}"; do + application_path="./applications/$application/" + # Going in application directory + pushd "$application_path" || { printf "${ERR}Unknown application path:${NC}${application_path}\n"; exit 1; } + # Building application function with make + make || { printf "${ERR}Can't verify application package${NC}\n"; popd; exit 1; } + make install zip_name="$application" || { printf "${ERR}Can't pack application zip${NC}\n"; popd; exit 1; } + # Going back to start location + popd || exit 1 + mv "$application_path/$application.zip" . + # Exporting variable for terraform + eval "export TF_VAR_${application}=${application}.zip" + done +} + +# Remove application .zip package +function rm_applications() { + # Iterate over input parameters + for application in "${applications[@]}";do + # Check if application exists + if [[ -f "${application}.zip" ]];then + # Print message and delete + printf "${WARNING}Removing application zip_file: '${application}'${NC}\n" + rm "${application}.zip" + else + # Lambda was not found + printf "${ERR}Application ${application}.zip was not found${NC}\n" + fi + done +} + +function cleanup() { + rm_applications + printf "${WARNING}Removing ec2 public key${NC}\n" + rm -v "./${key_name}" +} + +function copy_ssh_key() { + cp ~/.ssh/id_rsa.pub "./${key_name}" + printf "${WARNING}ssh public key copied in build directory${NC}\n" + export TF_VAR_ec2_ssh_key_file="./${key_name}" +} + +function main(){ + copy_ssh_key + # Build and pack in zip firehose application + build_application + # Format files. + terraform fmt -recursive + # Install all modules, plugin and other stuff + terraform init + # Create plan with some variables injected + terraform apply +} + +# Export s3 bucket name to be same as in second task. +if [[ -n "$1" ]]; then + export TF_VAR_s3_bucket_name=$1 +fi + +# Remove packaged applications on exit +trap cleanup EXIT TERM +main diff --git a/p.kirilin/task.2/instance.tf b/p.kirilin/task.2/instance.tf new file mode 100644 index 0000000..ddbc864 --- /dev/null +++ b/p.kirilin/task.2/instance.tf @@ -0,0 +1,16 @@ +provider "aws" { + version = "~> 2.0" + region = var.region + profile = "main_profile" +} + +module "services" { + source = "./aws_services" + s3_weather_bucket = var.s3_weather_bucket + s3_lambda_zip = var.s3_lambda_function + s3_lambda_name = "s3rius_s3_lambda" + ec2_ssh_key_file = var.ec2_ssh_key_file + aws_region = var.region + ec2_application_bin = var.ec2_sqs_listener + ec2_application_s3_key = var.ec2_sqs_listener +} \ No newline at end of file diff --git a/p.kirilin/task.2/variables.tf b/p.kirilin/task.2/variables.tf new file mode 100644 index 0000000..be044ba --- /dev/null +++ b/p.kirilin/task.2/variables.tf @@ -0,0 +1,29 @@ +variable "s3_weather_bucket" { + type = string + default = "s3rius-weather-bucket" +} + +variable "s3_lambda_function" { + type = string + default = "s3_lambda_function.zip" +} + +variable "sqs_listener_application" { + type = string + default = "sqs_listener_application" +} + +variable "ec2_ssh_key_file" { + type = string + default = "id_rsa.pub" +} + +variable "ec2_sqs_listener" { + type = string + default = "ec2_sqs_listener.zip" +} + +variable "region" { + type = string + default = "eu-central-1" +} \ No newline at end of file -- GitLab