From 7ce8da4033e995297d3c958dd27a6d3985b8367d Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Thu, 2 Jul 2026 17:25:46 +0200 Subject: [PATCH] [ADD] mail_recipient_blocklist: block outgoing recipients by pattern TT63548 --- mail_recipient_blocklist/README.rst | 132 +++++ mail_recipient_blocklist/__init__.py | 1 + mail_recipient_blocklist/__manifest__.py | 20 + .../data/mail_recipient_block_rule_data.xml | 16 + mail_recipient_blocklist/i18n/es.po | 182 +++++++ .../i18n/mail_recipient_blocklist.pot | 176 +++++++ mail_recipient_blocklist/models/__init__.py | 3 + .../models/ir_mail_server.py | 65 +++ mail_recipient_blocklist/models/mail_mail.py | 102 ++++ .../models/mail_recipient_block_rule.py | 81 +++ mail_recipient_blocklist/pyproject.toml | 3 + .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 3 + mail_recipient_blocklist/readme/USAGE.md | 29 ++ .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 10254 bytes .../static/description/index.html | 468 ++++++++++++++++++ .../description/recipient_block_rule_form.png | Bin 0 -> 45831 bytes .../description/recipient_block_rule_menu.png | Bin 0 -> 34561 bytes .../recipient_block_rule_result.png | Bin 0 -> 74374 bytes mail_recipient_blocklist/tests/__init__.py | 1 + .../tests/test_mail_recipient_blocklist.py | 145 ++++++ .../views/mail_recipient_block_rule_views.xml | 91 ++++ 23 files changed, 1522 insertions(+) create mode 100644 mail_recipient_blocklist/README.rst create mode 100644 mail_recipient_blocklist/__init__.py create mode 100644 mail_recipient_blocklist/__manifest__.py create mode 100644 mail_recipient_blocklist/data/mail_recipient_block_rule_data.xml create mode 100644 mail_recipient_blocklist/i18n/es.po create mode 100644 mail_recipient_blocklist/i18n/mail_recipient_blocklist.pot create mode 100644 mail_recipient_blocklist/models/__init__.py create mode 100644 mail_recipient_blocklist/models/ir_mail_server.py create mode 100644 mail_recipient_blocklist/models/mail_mail.py create mode 100644 mail_recipient_blocklist/models/mail_recipient_block_rule.py create mode 100644 mail_recipient_blocklist/pyproject.toml create mode 100644 mail_recipient_blocklist/readme/CONTRIBUTORS.md create mode 100644 mail_recipient_blocklist/readme/DESCRIPTION.md create mode 100644 mail_recipient_blocklist/readme/USAGE.md create mode 100644 mail_recipient_blocklist/security/ir.model.access.csv create mode 100644 mail_recipient_blocklist/static/description/icon.png create mode 100644 mail_recipient_blocklist/static/description/index.html create mode 100644 mail_recipient_blocklist/static/description/recipient_block_rule_form.png create mode 100644 mail_recipient_blocklist/static/description/recipient_block_rule_menu.png create mode 100644 mail_recipient_blocklist/static/description/recipient_block_rule_result.png create mode 100644 mail_recipient_blocklist/tests/__init__.py create mode 100644 mail_recipient_blocklist/tests/test_mail_recipient_blocklist.py create mode 100644 mail_recipient_blocklist/views/mail_recipient_block_rule_views.xml diff --git a/mail_recipient_blocklist/README.rst b/mail_recipient_blocklist/README.rst new file mode 100644 index 000000000..2dcaca1c5 --- /dev/null +++ b/mail_recipient_blocklist/README.rst @@ -0,0 +1,132 @@ +======================== +Mail Recipient Blocklist +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:92ada95dc311d150c4053c599f2f1ab2bb8dda677eab30715d89b4bafb33d4aa + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmail-lightgray.png?logo=github + :target: https://github.com/OCA/mail/tree/18.0/mail_recipient_blocklist + :alt: OCA/mail +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_recipient_blocklist + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Blocks outgoing emails addressed to recipients matching configurable +block rules. Rules can match exact emails, domains, contained text, +wildcard patterns or regular expressions. The block is enforced both on +queued Odoo emails (``mail.mail``) and on direct SMTP deliveries +(``ir.mail_server``). + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To configure blocked recipients: + +1. Go to **Settings > Technical > Email > Recipient Block Rules**. + + |Recipient block rule menu| + +2. Create a new rule or edit an existing one. For each rule, set a name, + choose the pattern type, define the pattern, and keep the rule + active. + + |Recipient block rule form| + +3. Choose the pattern type according to the recipients you need to + block: + + - **Exact email**: matches one complete email address. + - **Domain**: matches all recipients in a domain. + - **Contains**: matches recipients containing the configured text. + - **Wildcard**: supports shell-style wildcards such as + ``*@example.com``. + - **Regular expression**: supports Python regular expressions. + +4. Save the rule. Outgoing emails are filtered before delivery. If all + recipients are blocked, the email is cancelled. If only some + recipients are blocked, Odoo sends the email to the remaining allowed + recipients. + + |Recipient block rule result| + +A default rule blocks Amazon Marketplace aliases matching +``@marketplace.amazon.``. + +Archived rules are ignored. If all matching rules are archived, Odoo +will use its standard outgoing mail flow for those recipients. + +.. |Recipient block rule menu| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_recipient_blocklist/static/description/recipient_block_rule_menu.png +.. |Recipient block rule form| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_recipient_blocklist/static/description/recipient_block_rule_form.png +.. |Recipient block rule result| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_recipient_blocklist/static/description/recipient_block_rule_result.png + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - Sergio Teruel + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-sergio-teruel| image:: https://github.com/sergio-teruel.png?size=40px + :target: https://github.com/sergio-teruel + :alt: sergio-teruel + +Current `maintainer `__: + +|maintainer-sergio-teruel| + +This module is part of the `OCA/mail `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_recipient_blocklist/__init__.py b/mail_recipient_blocklist/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/mail_recipient_blocklist/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_recipient_blocklist/__manifest__.py b/mail_recipient_blocklist/__manifest__.py new file mode 100644 index 000000000..787cf7334 --- /dev/null +++ b/mail_recipient_blocklist/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2026 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Mail Recipient Blocklist", + "summary": "Block outgoing emails by configurable recipient patterns", + "version": "18.0.1.0.0", + "license": "AGPL-3", + "author": "Tecnativa, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/mail", + "category": "Discuss", + "depends": ["mail"], + "data": [ + "security/ir.model.access.csv", + "data/mail_recipient_block_rule_data.xml", + "views/mail_recipient_block_rule_views.xml", + ], + "maintainers": ["sergio-teruel"], + "application": False, + "installable": True, +} diff --git a/mail_recipient_blocklist/data/mail_recipient_block_rule_data.xml b/mail_recipient_blocklist/data/mail_recipient_block_rule_data.xml new file mode 100644 index 000000000..6ea8033f1 --- /dev/null +++ b/mail_recipient_blocklist/data/mail_recipient_block_rule_data.xml @@ -0,0 +1,16 @@ + + + + Amazon Marketplace + 10 + contains + @marketplace.amazon. + + Blocks Amazon marketplace alias addresses such as + abc123@marketplace.amazon.es. + + + diff --git a/mail_recipient_blocklist/i18n/es.po b/mail_recipient_blocklist/i18n/es.po new file mode 100644 index 000000000..67dd3fb0e --- /dev/null +++ b/mail_recipient_blocklist/i18n/es.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_recipient_blocklist +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-02 15:47+0000\n" +"PO-Revision-Date: 2026-07-02 17:53+0200\n" +"Last-Translator: Sergio Teruel \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.4.2\n" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__active +msgid "Active" +msgstr "Activo" + +#. module: mail_recipient_blocklist +#: model:mail.recipient.block.rule,name:mail_recipient_blocklist.mail_recipient_block_rule_amazon_marketplace +msgid "Amazon Marketplace" +msgstr "Amazon Marketplace" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Archived" +msgstr "Archivado" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__contains +msgid "Contains" +msgstr "Contiene" + +#. module: mail_recipient_blocklist +#: model_terms:ir.actions.act_window,help:mail_recipient_blocklist.mail_recipient_block_rule_action +msgid "Create a recipient block rule" +msgstr "Crear una regla de bloqueo de destinatarios" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__domain +msgid "Domain" +msgstr "Dominio" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_mail.py:0 +msgid "Email delivery blocked by recipient blocklist rules." +msgstr "" +"El envío del correo electrónico ha sido bloqueado por las reglas de " +"la lista de bloqueados del destinatario." + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__exact +msgid "Exact email" +msgstr "Email exacto" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Group By" +msgstr "Agrupado por" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__id +msgid "ID" +msgstr "ID" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_recipient_block_rule.py:0 +msgid "Invalid regular expression: %s" +msgstr "Expresión regular invalida (%s)" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_mail_recipient_block_rule +msgid "Mail Recipient Block Rule" +msgstr "Regla de bloqueo de destinatarios de correo" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_ir_mail_server +msgid "Mail Server" +msgstr "Servidor de correo" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__name +msgid "Name" +msgstr "Nombre" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__notes +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +msgid "Notes" +msgstr "Notas" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_mail_mail +msgid "Outgoing Mails" +msgstr "Correos salientes" + +#. module: mail_recipient_blocklist +#: model_terms:ir.actions.act_window,help:mail_recipient_blocklist.mail_recipient_block_rule_action +msgid "" +"Outgoing emails matching these rules will not be delivered to those " +"recipients." +msgstr "" +"Los correos electrónicos salientes que cumplan estas reglas no se " +"entregarán a dichos destinatarios." + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__pattern +msgid "Pattern" +msgstr "Patrón" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__pattern_type +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Pattern Type" +msgstr "Tipo de patrón" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +msgid "Recipient Block Rule" +msgstr "Regla de bloqueo de destinatarios de correo" + +#. module: mail_recipient_blocklist +#: model:ir.actions.act_window,name:mail_recipient_blocklist.mail_recipient_block_rule_action +#: model:ir.ui.menu,name:mail_recipient_blocklist.mail_recipient_block_rule_menu +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_list +msgid "Recipient Block Rules" +msgstr "Reglas de bloqueo de destinatarios de correo" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__regex +msgid "Regular expression" +msgstr "Expresión regular" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_recipient_block_rule.py:0 +msgid "The block pattern cannot be empty." +msgstr "El patrón de bloqueo no puede estar vacío." + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__wildcard +msgid "Wildcard" +msgstr "Carácter comodín" diff --git a/mail_recipient_blocklist/i18n/mail_recipient_blocklist.pot b/mail_recipient_blocklist/i18n/mail_recipient_blocklist.pot new file mode 100644 index 000000000..07e16fac2 --- /dev/null +++ b/mail_recipient_blocklist/i18n/mail_recipient_blocklist.pot @@ -0,0 +1,176 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_recipient_blocklist +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-02 15:47+0000\n" +"PO-Revision-Date: 2026-07-02 15:47+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__active +msgid "Active" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:mail.recipient.block.rule,name:mail_recipient_blocklist.mail_recipient_block_rule_amazon_marketplace +msgid "Amazon Marketplace" +msgstr "" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Archived" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__contains +msgid "Contains" +msgstr "" + +#. module: mail_recipient_blocklist +#: model_terms:ir.actions.act_window,help:mail_recipient_blocklist.mail_recipient_block_rule_action +msgid "Create a recipient block rule" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__create_date +msgid "Created on" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__domain +msgid "Domain" +msgstr "" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_mail.py:0 +msgid "Email delivery blocked by recipient blocklist rules." +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__exact +msgid "Exact email" +msgstr "" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Group By" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__id +msgid "ID" +msgstr "" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_recipient_block_rule.py:0 +msgid "Invalid regular expression: %s" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_mail_recipient_block_rule +msgid "Mail Recipient Block Rule" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_ir_mail_server +msgid "Mail Server" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__name +msgid "Name" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__notes +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +msgid "Notes" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model,name:mail_recipient_blocklist.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail_recipient_blocklist +#: model_terms:ir.actions.act_window,help:mail_recipient_blocklist.mail_recipient_block_rule_action +msgid "" +"Outgoing emails matching these rules will not be delivered to those " +"recipients." +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__pattern +msgid "Pattern" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__pattern_type +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_search +msgid "Pattern Type" +msgstr "" + +#. module: mail_recipient_blocklist +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_form +msgid "Recipient Block Rule" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.actions.act_window,name:mail_recipient_blocklist.mail_recipient_block_rule_action +#: model:ir.ui.menu,name:mail_recipient_blocklist.mail_recipient_block_rule_menu +#: model_terms:ir.ui.view,arch_db:mail_recipient_blocklist.mail_recipient_block_rule_view_list +msgid "Recipient Block Rules" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__regex +msgid "Regular expression" +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields,field_description:mail_recipient_blocklist.field_mail_recipient_block_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: mail_recipient_blocklist +#. odoo-python +#: code:addons/mail_recipient_blocklist/models/mail_recipient_block_rule.py:0 +msgid "The block pattern cannot be empty." +msgstr "" + +#. module: mail_recipient_blocklist +#: model:ir.model.fields.selection,name:mail_recipient_blocklist.selection__mail_recipient_block_rule__pattern_type__wildcard +msgid "Wildcard" +msgstr "" diff --git a/mail_recipient_blocklist/models/__init__.py b/mail_recipient_blocklist/models/__init__.py new file mode 100644 index 000000000..6fdb32c9f --- /dev/null +++ b/mail_recipient_blocklist/models/__init__.py @@ -0,0 +1,3 @@ +from . import mail_recipient_block_rule +from . import ir_mail_server +from . import mail_mail diff --git a/mail_recipient_blocklist/models/ir_mail_server.py b/mail_recipient_blocklist/models/ir_mail_server.py new file mode 100644 index 000000000..aedfb6f3f --- /dev/null +++ b/mail_recipient_blocklist/models/ir_mail_server.py @@ -0,0 +1,65 @@ +# Copyright 2026 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import logging + +from odoo import api, models, tools +from odoo.tools import formataddr + +_logger = logging.getLogger(__name__) + + +class IrMailServer(models.Model): + _inherit = "ir.mail_server" + + @api.model + def _filter_blocked_recipient_header(self, header_value): + allowed = [] + blocked = [] + BlockRule = self.env["mail.recipient.block.rule"] + for name, email in tools.mail.email_split_tuples(str(header_value or "")): + recipient = formataddr((name, email)) + if BlockRule._is_blocked_email(email): + blocked.append(recipient) + else: + allowed.append(recipient) + return ", ".join(allowed), blocked + + @api.model + def _filter_blocked_message_recipients(self, message): + blocked_recipients = [] + for header in ("To", "Cc", "Bcc"): + header_value = message[header] + if not header_value: + continue + allowed_header_value, blocked = self._filter_blocked_recipient_header( + header_value + ) + if not blocked: + continue + del message[header] + if allowed_header_value: + message[header] = allowed_header_value + blocked_recipients += blocked + if blocked_recipients: + _logger.warning( + "Blocked SMTP recipient(s): %s", + ", ".join(blocked_recipients), + ) + has_remaining_recipients = bool( + message["To"] or message["Cc"] or message["Bcc"] + ) + return has_remaining_recipients, blocked_recipients + + def send_email(self, message, *args, **kwargs): + has_remaining_recipients, blocked_recipients = ( + self._filter_blocked_message_recipients(message) + ) + if blocked_recipients and not has_remaining_recipients: + _logger.warning( + "Cancelled direct SMTP delivery addressed only to blocked " + "recipients. Message-Id: %s", + message["Message-Id"], + ) + return message["Message-Id"] + return super().send_email(message, *args, **kwargs) diff --git a/mail_recipient_blocklist/models/mail_mail.py b/mail_recipient_blocklist/models/mail_mail.py new file mode 100644 index 000000000..c245e6f98 --- /dev/null +++ b/mail_recipient_blocklist/models/mail_mail.py @@ -0,0 +1,102 @@ +# Copyright 2026 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import logging + +from odoo import _, models, tools + +_logger = logging.getLogger(__name__) + + +class MailMail(models.Model): + _inherit = "mail.mail" + + def _blocked_recipient_emails(self): + self.ensure_one() + emails = [] + emails += tools.mail.email_normalize_all(self.email_to) + emails += tools.mail.email_normalize_all(self.email_cc) + emails += self.recipient_ids.mapped("email") + BlockRule = self.env["mail.recipient.block.rule"] + return [ + email for email in emails if email and BlockRule._is_blocked_email(email) + ] + + def _has_only_blocked_recipients(self): + self.ensure_one() + emails = [] + emails += tools.mail.email_normalize_all(self.email_to) + emails += tools.mail.email_normalize_all(self.email_cc) + emails += self.recipient_ids.mapped("email") + emails = [email for email in emails if email] + blocked_emails = self._blocked_recipient_emails() + return bool(emails) and len(emails) == len(blocked_emails) + + def _cancel_blocked_recipient_delivery(self): + reason = _("Email delivery blocked by recipient blocklist rules.") + self.write({"state": "cancel", "failure_reason": reason}) + notifications = ( + self.env["mail.notification"] + .sudo() + .search( + [ + ("notification_type", "=", "email"), + ("mail_mail_id", "in", self.ids), + ("notification_status", "not in", ("sent", "canceled")), + ] + ) + ) + if notifications: + notifications.write({"notification_status": "canceled"}) + + def _prepare_outgoing_list( + self, mail_server=False, recipients_follower_status=None + ): + email_list = super()._prepare_outgoing_list( + mail_server=mail_server, + recipients_follower_status=recipients_follower_status, + ) + BlockRule = self.env["mail.recipient.block.rule"] + filtered_email_list = [] + blocked_recipients = [] + for email_values in email_list: + email_values = dict(email_values) + email_to, blocked_to = BlockRule._filter_blocked_recipients( + email_values.get("email_to") + ) + email_cc, blocked_cc = BlockRule._filter_blocked_recipients( + email_values.get("email_cc") + ) + email_values["email_to"] = email_to + email_values["email_cc"] = email_cc + email_values["email_to_normalized"] = [ + email + for email in email_values.get("email_to_normalized", []) + if not BlockRule._is_blocked_email(email) + ] + blocked_recipients += blocked_to + blocked_cc + if email_to or email_cc: + filtered_email_list.append(email_values) + if blocked_recipients: + _logger.warning( + "Blocked recipient(s) for mail.mail %s: %s", + self.id, + ", ".join(blocked_recipients), + ) + return filtered_email_list + + def send(self, auto_commit=False, raise_exception=False, post_send_callback=None): + blocked_mails = self.filtered(lambda mail: mail._has_only_blocked_recipients()) + if blocked_mails: + blocked_mails._cancel_blocked_recipient_delivery() + _logger.warning( + "Cancelled %s outgoing email(s) addressed only to blocked " + "recipients: %s", + len(blocked_mails), + blocked_mails.ids, + ) + return super(MailMail, self - blocked_mails).send( + auto_commit=auto_commit, + raise_exception=raise_exception, + post_send_callback=post_send_callback, + ) diff --git a/mail_recipient_blocklist/models/mail_recipient_block_rule.py b/mail_recipient_blocklist/models/mail_recipient_block_rule.py new file mode 100644 index 000000000..fc4b6c934 --- /dev/null +++ b/mail_recipient_blocklist/models/mail_recipient_block_rule.py @@ -0,0 +1,81 @@ +# Copyright 2026 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import fnmatch +import re + +from odoo import _, api, fields, models, tools +from odoo.exceptions import ValidationError + + +class MailRecipientBlockRule(models.Model): + _name = "mail.recipient.block.rule" + _description = "Mail Recipient Block Rule" + _order = "sequence, id" + + name = fields.Char(required=True, translate=True) + active = fields.Boolean(default=True) + sequence = fields.Integer(default=10) + pattern_type = fields.Selection( + selection=[ + ("exact", "Exact email"), + ("domain", "Domain"), + ("contains", "Contains"), + ("wildcard", "Wildcard"), + ("regex", "Regular expression"), + ], + required=True, + default="contains", + ) + pattern = fields.Char(required=True) + notes = fields.Text() + + @api.constrains("pattern", "pattern_type") + def _check_pattern(self): + for rule in self: + if not (rule.pattern or "").strip(): + raise ValidationError(_("The block pattern cannot be empty.")) + if rule.pattern_type == "regex": + try: + re.compile(rule.pattern) + except re.error as error: + raise ValidationError( + _("Invalid regular expression: %s", error) + ) from error + + def _match_email(self, email): + self.ensure_one() + normalized_email = tools.email_normalize(email) or (email or "").lower() + pattern = (self.pattern or "").strip().lower() + if not normalized_email or not pattern: + return False + if self.pattern_type == "exact": + return normalized_email == pattern + if self.pattern_type == "domain": + domain = normalized_email.rsplit("@", 1)[-1] + pattern_domain = pattern.lstrip("@") + return domain == pattern_domain + if self.pattern_type == "contains": + return pattern in normalized_email + if self.pattern_type == "wildcard": + return fnmatch.fnmatchcase(normalized_email, pattern) + if self.pattern_type == "regex": + return bool(re.search(self.pattern, normalized_email, re.I)) + return False + + @api.model + def _is_blocked_email(self, email): + return any(rule._match_email(email) for rule in self.search([])) + + @api.model + def _filter_blocked_recipients(self, recipients): + allowed = [] + blocked = [] + for recipient in recipients or []: + normalized_emails = tools.mail.email_normalize_all(recipient) + emails_to_check = normalized_emails or [recipient] + if any(self._is_blocked_email(email) for email in emails_to_check): + blocked.append(recipient) + else: + allowed.append(recipient) + return allowed, blocked diff --git a/mail_recipient_blocklist/pyproject.toml b/mail_recipient_blocklist/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/mail_recipient_blocklist/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/mail_recipient_blocklist/readme/CONTRIBUTORS.md b/mail_recipient_blocklist/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..2bdd1eb30 --- /dev/null +++ b/mail_recipient_blocklist/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Tecnativa](https://www.tecnativa.com): + - Sergio Teruel diff --git a/mail_recipient_blocklist/readme/DESCRIPTION.md b/mail_recipient_blocklist/readme/DESCRIPTION.md new file mode 100644 index 000000000..f3d4dcad1 --- /dev/null +++ b/mail_recipient_blocklist/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +Blocks outgoing emails addressed to recipients matching configurable block rules. +Rules can match exact emails, domains, contained text, wildcard patterns or regular expressions. +The block is enforced both on queued Odoo emails (`mail.mail`) and on direct SMTP deliveries (`ir.mail_server`). diff --git a/mail_recipient_blocklist/readme/USAGE.md b/mail_recipient_blocklist/readme/USAGE.md new file mode 100644 index 000000000..95eb152e8 --- /dev/null +++ b/mail_recipient_blocklist/readme/USAGE.md @@ -0,0 +1,29 @@ +To configure blocked recipients: + +1. Go to **Settings > Technical > Email > Recipient Block Rules**. + + ![Recipient block rule menu](../static/description/recipient_block_rule_menu.png) + +2. Create a new rule or edit an existing one. For each rule, set a name, choose + the pattern type, define the pattern, and keep the rule active. + + ![Recipient block rule form](../static/description/recipient_block_rule_form.png) + +3. Choose the pattern type according to the recipients you need to block: + + - **Exact email**: matches one complete email address. + - **Domain**: matches all recipients in a domain. + - **Contains**: matches recipients containing the configured text. + - **Wildcard**: supports shell-style wildcards such as `*@example.com`. + - **Regular expression**: supports Python regular expressions. + +4. Save the rule. Outgoing emails are filtered before delivery. If all + recipients are blocked, the email is cancelled. If only some recipients are + blocked, Odoo sends the email to the remaining allowed recipients. + + ![Recipient block rule result](../static/description/recipient_block_rule_result.png) + +A default rule blocks Amazon Marketplace aliases matching `@marketplace.amazon.`. + +Archived rules are ignored. If all matching rules are archived, Odoo will use its +standard outgoing mail flow for those recipients. diff --git a/mail_recipient_blocklist/security/ir.model.access.csv b/mail_recipient_blocklist/security/ir.model.access.csv new file mode 100644 index 000000000..8a3bba051 --- /dev/null +++ b/mail_recipient_blocklist/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_mail_recipient_block_rule_system,mail.recipient.block.rule system,model_mail_recipient_block_rule,base.group_system,1,1,1,1 diff --git a/mail_recipient_blocklist/static/description/icon.png b/mail_recipient_blocklist/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 + + + + +Mail Recipient Blocklist + + + +
+

Mail Recipient Blocklist

+ + +

Beta License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

+

Blocks outgoing emails addressed to recipients matching configurable +block rules. Rules can match exact emails, domains, contained text, +wildcard patterns or regular expressions. The block is enforced both on +queued Odoo emails (mail.mail) and on direct SMTP deliveries +(ir.mail_server).

+

Table of contents

+ +
+

Usage

+

To configure blocked recipients:

+
    +
  1. Go to Settings > Technical > Email > Recipient Block Rules.

    +

    Recipient block rule menu

    +
  2. +
  3. Create a new rule or edit an existing one. For each rule, set a name, +choose the pattern type, define the pattern, and keep the rule +active.

    +

    Recipient block rule form

    +
  4. +
  5. Choose the pattern type according to the recipients you need to +block:

    +
      +
    • Exact email: matches one complete email address.
    • +
    • Domain: matches all recipients in a domain.
    • +
    • Contains: matches recipients containing the configured text.
    • +
    • Wildcard: supports shell-style wildcards such as +*@example.com.
    • +
    • Regular expression: supports Python regular expressions.
    • +
    +
  6. +
  7. Save the rule. Outgoing emails are filtered before delivery. If all +recipients are blocked, the email is cancelled. If only some +recipients are blocked, Odoo sends the email to the remaining allowed +recipients.

    +

    Recipient block rule result

    +
  8. +
+

A default rule blocks Amazon Marketplace aliases matching +@marketplace.amazon..

+

Archived rules are ignored. If all matching rules are archived, Odoo +will use its standard outgoing mail flow for those recipients.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

sergio-teruel

+

This module is part of the OCA/mail project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/mail_recipient_blocklist/static/description/recipient_block_rule_form.png b/mail_recipient_blocklist/static/description/recipient_block_rule_form.png new file mode 100644 index 0000000000000000000000000000000000000000..18fd438134d8a34614dd383153a2eea12cd9fa8c GIT binary patch literal 45831 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 Lds!y??$iGOLr{SJ literal 0 HcmV?d00001 diff --git a/mail_recipient_blocklist/static/description/recipient_block_rule_result.png b/mail_recipient_blocklist/static/description/recipient_block_rule_result.png new file mode 100644 index 0000000000000000000000000000000000000000..44cad767d02455a4127088f6846de409cb410c95 GIT binary patch literal 74374 zcmbsQRaBhI^9GC}2?PivgaCm-0>Rx~5+u002X_V-bkKyLL4wO5!DW!(E(z{BFnF-R z-EHP%|Mvc$t8;F?udZtKdRJF>Rdsju)6W~Jt}2I*OOA_%hK8>oFQbWu_EZ-Q4O8kG7pw<-V@obNS?^iguHyF@D^R+yV3VA!NyX_b+|gG<*>5) z28a7=xI-(fVPV-}HTg()(V-D$5_j34TOoJ)+c2J_Ui|~^Gui=m9E=aoKEF&4M%w!Z;(btIDhT`BVzktqJK5C9rW-2jOriRA^d-@KL3Ih z!}xD^agaV46BZVh1`f8mc1^lL9Ya$ncSTvgi+YPh7=GB3KcC5P!`mr01Eu3DoSLqq zEKtFuJv#IB7wvlQ#0Dd91TKB&pnEFf4B*9?q@)sH{1|Efg87V6+u5*=p#1ggR=jYA z|12%)C|qqJ2L1mNFffu5zBIc=_D*T7MLoz@SCj~9iXaF7oR~@rZGx> z)p+`X`#=HhIeVe@=R)oHe%z?%DnbY^ipr9WkT-s95>9Uh;g=?X*5`Q=l^wOkX$&q= zDr}_@q6t0B#gVzq*Fv_hQj;{Nj#QsV-)G=LncU4N6hGOogiA-vc8yFW^*1{{WdP@} zf>_nyEozghnLrDU1}827y5!4iF~tB-b?b}2Y4MMo2u+50+8=EX_e2rsag`~Z+`_6S zM(MqO{9?z%P)j!QBraenh8-6mb*0%WDk`DoNErWw@}KeD(cI@TcW>0glLKMak`hU;#4xg|lL{SsG3g24MhHfK)+=VQ@Y zSSt1qqY%x?w4GM$rILX|uBV^mPvv!Nc-V1{7{`W~Ekj)OUgQn1y}IJI!3doGA>8pB z4&P{2#_X5~QcN=nkd~Di`mA4=ThV=@ZY!#UnFoznglOB#&wnNG6>R$KIuKJHJrHth ztt{PM&9p-d3^Ho)e(!18HyCo;yP5qwlxiHJ_mJ^@cMm}ER#75vM(_#%_wfrC<9wCD zXXl9j^=td~eG|BoyU>i9ee^3L*_R%dlD>|wvAU>iT8n@}Q=90#$ikM)Z#*I9Cp}EW zLYW+QBZ1a3`Ev7vm^yBk{?6l*X z3(mdV$Q6M*yRd)hFVD>4^UFGw)#N2E5`4(o;jxB$Q^b-qb#b5zg|)J2vQ)*hH*@1- z`sq-5oAKLN-wqnDIW+?ZS|5&2XLxry_{=7z3&`U$R{YTr8|-=doJGHqFlJZ**_exS z%ZoQ}Ky|zKX~yqEa_i3v$SSFJhm!U;(f@H|&k`^ESEY4b_hndSUYTf$6$xyqnvOlU z;O^Jd>wnkG4DXJmxr?>S4`>-nt7@YRR%nCXktu8hJcLTrUoGRzuZ4OPF|ZRFhnNTC zIyc-Wf7nDPdqz<~KU-v>WT~m6rE98@rt|sjR<0uzYMk%DOc$Ziw`7!gcejF{6mOnm ziclexBwCr9`|I2NNxo&Js?Yey`DB+G)STOKKrDLr!~%;oxW=n4T;7<|oq?XQ*5L^i zei#EK0Tm%!vAj%i>~*~$+|(!@R6�tn(cI;GP@+y2H<5GIybo&PuuEY$hE#5;hM2 zM@cE|eS2-MgH9FO*PKf3BsNmNtDyWaUNSo+VzL;smkvnq5|~`w*Wo9w$FcxnPOUuq za(5P0Qx>S3f~B0K(n5fV{y(4mS<5|WTYk(*6`Ch+%;2v0U{WBDV&6WHwWjZU7-Me= zJZ=)%vZi1;y!NkZT~EgS!0h`nDXa7Pr^X{4gEQ%VUFe`aW1KO&H0>W6%P$X88D}DS z(0o>pdJ%>J#)F$!Q!Fg3cE4*EgY6=!#Ag$`9)kP(Pm^{*c}SJhP9%)rMHlxcAc={z z!7MClTU_qix#WhwqrBsnzMK$ZM5!WgOVk25H8I(1J8UOK?roHj>HeSzRsJm7PegPk z<5Gzb$P5-nKLCb_X;~5trYq@P*1lL`wW|U$%LQO2+Hf5)O}gIe6rddykApgZZ5AeA zx+_;j{Lifh*8pmk5wWy{LV7fDv@O1&xqPt=R}11@gXc~U;^LmSj9OGHk=O8+r)a?q zY;+s8*gl3!l!I?hobI2h9ePh+_r(7e{UUPovUoCKzm=5HO~Re4N%X0@b6K9SXVO@N zM|SRnpToqPIE2Pf!3Vv?_d>732NhhS4>2%ogbk=ylaox(T(`qRq5wLc_=d~)CYFvt zmK&0jj2QADv*13V9EFz`$E>c^)tY*jy8*R&N)O`?#og@?^~}CcrWFw=6`tSKwA}4s z&Xseoq*bAI&Dpv{icU*)1vMoFUk23-%v75DqXRB=gy+aVN*+6;rs~33)EyFq?2=b` zKuP+^1W9)|t=i-+ zv&oTBBO2NS<{P89v`LqTpv6$g+>vq5C18wI+=I3<>OSE^>n}x4&0n0gx(f+od6|7r z`T9^T`%%0aWP_<0Mf%5F!HrKP*un<`8uC_6Cux;%^eyvb#y5`FI5cW?5+G=&eljicI!N#mda)C1hRPNA1!Z_v`yqkwq>N2;xC9 zYjz`EM^n#K-*4*#g;@>H(oWXwq@6Lj`I_QWa|0+=6RDVv@yi=JyM^=_fLd4bExYS&`i!W#!W|jm6 zb^ap|>~`KB;m4&)c=(*%U_qn5+|4&183Y~ zg$?GYgZc_u+RB>Rq#l`&9OObO6vFIXH)Fl@21av*#F9geU#kZsm)emLJbKF)f*XXo zQvGZcHV?45qcPiY0js0C-LArLZJw4pu&jMDiCGjH+7H&}PNuHc4ISf{4_{xSV(A4) zkm&y7G>I=zG2MLltK>W`x0mp$*oMPqXV+T1@uvspncF*PS_o_tjoFn7l@Ec`i-Esl z=^h)Q+>1$}8&-*5Mulg`-kCDZgY&d%%NGa2MxRwiKB!6Qo;O<5Ze!TQ1)4;oE|${hr?CwsMiI1`8Z0I72ruz4lzm!5Dxlf zBtNH(-n1His9Z)+W!0d_t5t!7@Tak;Z^bH1Dkox1|KK^eT>nOk+ zg5RCle6g^VK&~u9Nl6ejQL`DF(|Ulj|MZjH5#rrU5u*&1CZC*K6r+IEv97X@iCF3oQnrqm6|rJX3DEG)Rz)z~=gw=_ z#j-?{gr42Hm~R=>)?GpL#WVibSff<0Eb^4a2y@bPG@NPcK*VlBn+oay%v)XbXYzcT zR3gZEnkz<#MmNK}>2f`Dae^2jl{vk~0T@|neS7diZ1AQzn~nu>LZ2aK>~R$N)%fpS zW`e%&mC^Zq;J00%O;CTrI@BztL*K+m-+THZG)M(PhqAxT&VvMCo!}dFkgw9VIneB~ zX*C81iXnnL=^0GAAJ+*9v+{Nc zcFCmypuioAytHjuK@R!?Z|Mir=HDg~z4n7!H)u1`n6D>G=( zy#O0sx0H#v*hoye*BP6vg@@sA1f_JW?};cU_I{8qW9I#FF8Ob6E-!pAurM%Q)%Rev zdY2))cKbrh-+Rx8WK>`<*8SRzSb;4%Mp#BqM<*>AgpdhzJKz42TW{r40!_>ph6GOA zvwlkw?zHYPwqPWD>2n`T1{?2N3eL}GJ*&)?NSjJmi}K_0@Sr|Ynde?b98At;w!Zp%vN)+9NK}OFg836I(X~>roAb(~OO2@fzf%6m) zVxmWfScYmJSl|tAcB)teSu8q%p7ra~0vfbGk{dCyar1LIL8>ydC6;@iwKPSVH+ha zjWI!$rj#x+@xjM8|oEaL?vS-wS6E9RWx^(b05WM@?EV7tE4k8~~ zU-zccFpL2RBr7Z?Vj;485HcI=GcBqPxYM99ior=#yX}2#^a{6=i$IwYC?sE4i^0?Vp&@`+c|n7M&1lHqVsGJfO~`LRt7`mUor2N4+yeQtY!Ee4 zO7byD)nn`zygicN>(KZq8d|Wbn*hkpmU(sLEAZppiBJ(%`~4eod@gP$7@v)%qm9fp zO_mjn2gs`Rc@n)%p*J7AwS)FnFI4ipa6o3$-Z2xFZt8hp2ihj%u`RZ`as-^qPOcjJ zf;ksMemovKIjyfe_Wepryu+U4Uj1bgKG{E4_9h;oO!w$fIDU1F3*{Zlf(0eZ>hxqY*JA+nPAkow+BSJ74F2b zy0doJ+v6{fryOE~&u1%6w%do6p^h-vh&Lk4$P=p(T(3+tF^QaeSp0Uu^$nS!*mCrD zw^cWbPdDA5JP?4}LnCWOW(Yne>W7xPW^h#Q$15LbF? zT6vBWMT|~&M^}Gzx@XUW$RRDhN9(Db8X`eC(50+bC`KHeL-I`1|jaW!@0Idq0?&#J& ziqi+iHi!C$%p6eQQ!X1eav#T%W!o6ow|11j9eL#Cu;UZ<7V7joDiJI@ruKL<6EEhNJVvUsG{tR`L zUiX%yw}H(7w8FfRZdHmao^%?Ee=By2vJy9!DE|2z4Oy<7~>Zt}6=7?}xFY3ysr|ek{WXp@{p<818UGa9qiVhL^x9xg0e6OB2 zf{`A(z{57LcSqFRolEKySYFNyr^k%m3|X`Nnshcs^z~8Ye)vDzH42!@54Y{5BD0k7 zIXxYMy$qy2g5Q5Xc)I`F3_mQ?NDoCa9Eg6jBWfh)XWlW~jLWK;xzOWJELiY7vJ{ng z=gieyu!p6_)IisJFehdCIrM|4ZmO-mARkxKv%8ellJdfR$2!j~mdj%W-@UyIWNbq_ zaIextFH0=vXt~pD3^q0Vw0Djb%Bllvrni0_{_29K6ejQk?|tKrN;VsQDB~Dq1hg8! zznL}OH=4e+e+cKHN^{4(^x9xnJ5rG!EMplS67CSpAL&_`o=p?uLKJnH#``J6dooKR z)%~rcV$u_PqLy<$FXJ7#WF~C1uB-JSY^zzBphjTqG`wC4XI-a{y73JyGU>^AH`8h_ zbMH==oOM+0#c|TS?K?A?h=iNz7xrjnm#P${86yi$3moeY;7fNIzc(L@D@wEKxs8;N zvzbffa3x~cUdGbbXsh~WqiIHO1Fco}R{1n>Y+zpT^={Zl4R#;lt)w;a^q7 z12)VFo(WnlTqu>n^95m=wvLyT_=}%d%D!Jfe!dqNd2rb5c&KT8F~Us(;W{kg_eRBY zfeyBNtemfk3bwfwR+9!oaHZ!0y~G|JmCK+}^98vg#}4kgDwq7S3x#D4p0YL;3jCld zfl6s|4-obej*nL%W@0XU`Hc!i|vouUGN|H$uo&n`S^3=@jb@fYrPk5ABVc(c10G3-EUJ(Wn<60BeN z?TqZ@~~q)ZntO{ zCd^R@8iBu9U;M$&o~42E>_gWf>G0V?x)N-ng?hT9zb!ll=U!VOp*K*-%avncsp;#| z6VM!&-h7Wam4QOM-0Ow0q%tLk`aN(|mfJ*+_P}(?)-o*o0jyx5*hyG5Fj7-#!?0;9 z-XqtbZH+Wsr=a5NZlGhQXAB*6A@{D-Jzn`qY&rQ;ZzXJv0BlXtoCRB-a z9oxH-Y<;Rc$7{c4F&d7IG1q32mOY8~>MrmJVEtd028I>d5TX_?-$7@v%_p*_l+=Je zDU{pF2P%XZL%fF4bI&M=>$aSG{cm3{i3jI00OyzWdm|69wtP;t;h3!J3E&@z!%kKR zFx$^xx#9I0ayb1O19AowP^Z6*Urkr_Th^I6&B0o}gmxaZ@C_j9Yk#wE z20q`z$2KKjf+|&{UE+`E(O9Z(nAKrfSUB0T)>$HLxXqAC4lZhL)>349A**0#Qsl?g zrX;TgOSn}|*ro~D9hEC(kS*)+fke&{Fl3=@1bSho2deEMcQ(uYuHBpLom)vR?TzR} zmxxUv->4H4?&YSCfS-G~A7LMlHtw^|z+hz8f3GVZhNeX|Bsf_2J}u2c!b%m>oVGb7 z9Y+UF0jw!m-*;zKJf7UtX4f%d@J;Jl_tIO_Z~AodSSgoy%bO}IH-F|9ZIJxao{a9S z+cxX`B5P_FUK~;*D_|q>E<#tX5tU_N7(3AD>NzY)gCCP@t=vn_1Y^x5CRsbPCMo)BXzXmG*(nwqQy}| z%(I%RMArE#0|7I7)>-lccQA0zQt+Vp!f{oD8H=>ine9)7C#o9;OOLc!e(Os?K}5dc zEpfj6u=7t&*zZV1pxJNU)Dm$tTpa!I8Ij9IHYKMfcv+{5JZ*ZB^NJ)h`KP0q%C^Jh z5x$YjbIevQAhjy8@}1tWe59B0#12`<<{Xxw(yKY}>quQA4aZO0b`EK0!KL&Fs>;rQ zFHUR@aAfoTDILwmotx&X4q*-VZgn9im+xOaG($u<3$vK-M8qD$dnYD6zmC+M{3%sQ zb%@{>wb?xK+?x*%-b1C?v%cySO}1H7BiR#|Mo|1yJx(6NoG{v??_ik^YEEDUOwoLx zkS|(T!J`*ufLA#L_{XdMx{~kb{!#;F;mLy03gS4xw(_6!(-*9nx;o%@p>Pgl%xd5g z-r6J#T^Izd4OgP7j+%q49~iZk*B)vEs^*)`$Ygd!#PQx+q7Nloi(pgr>#sYwq!pIy zvBm-&Y;VBSMv;Ma=q4$Pg;nMYzdZ_Ds0VkKUP~UTJoW5HW^V#R>ee-TW87W=Oce_2 zo84|<_uoFY|u|`8xW3XZEEP|J;sdSX!kRId*b! z(g5OPoFlJm!SZzfT@(=2D%!`F^-K4N8?u*beyvz!jfUa9)bKcr4ln~o?%P~!YVphFeMWc$sCnSAzRqbdB z70SXMl?N?On!)u#^u^I)C3obq#BQE^g5RJHZ9QQDp#owpd5ViQQZB|{)?1DNMECQj z2_ibsL#GmX;GGrUj-}HN=+s_NJ}8bZGgHXw_w(r*IJ`l+=r8W=C}lN9;o-kL+oC=qqN=FfjV2pmG-?ZZrv>>1)f)YYR*JmUiLn{w2`WP~2pB9$TDGn~#{G z`0Qx>@k$M4&RxsJ-)5Sy1mF14klTSo61(T`>gY7Q7yyeROIlE~FaM=j{B@H# zFUD7=R^0xhAS7z(dT};Hc6aN+ow9g$Jbe=1@Q1QK z7oNgpGIab<3CzSA-(2%`C1y5m&}h?K|2tP^$arI4-GK%pJX_ zL8$clM*?|0ia#HYI!cKTXrn9p`^4DD&FL?JD)#9k?_Z6*Cj4AqN_MNYcV44fOw?E^ z-8W3GJ4`K(!{$XY)0~6 zFZ_Ot!5l;Z4L^p@9E7N{yK^i-pTkI`Xo_?1MA)s4sv89D+@wB68S+_toZtdFa;pWE zZ>Jf3(JrzrgjR&dCH!oc{EIsNE{AHl^N6Bm$YQIr;*k1%QgLoaUOKo}%20>0$WjRO zClolkSN_0OaT%c}X5t)ke=>4t3;-7RWg@%tbR75DWn3ObE^m~j@f`ISipL(T%sIFP z-#Q%!V-+PSKXLp>UIybkKVA2b!wXGOASU~%WBY4qGeH3JRZZ)Re6juGlXFo=Xh)0u0WN3t2g)Y_)PD=9fJHOG&b3hN^s39RYM@Xcs%8Ji=|AXFJm5>yINQ z-i~V=9E)T%u$knl_1f1G^z|#_zY%!n^yL0cT+~H~PUxJdvf3=EwJa51HW&XVtoz`e zu&9f=fu*u_(c{64O(HUZs+*2;gN>4?u&5^um)S|I)90DtDmY9J4JuHgY>P6O? zHQozq&6bQhqHR@%n$-M9%~Imi&MU~N;)Ezq9_vsXo2CuDRpI>;6`x}2Nqb(kOjb79 z>uGfgi0k{msH5W5FKtYdiUwvq2bVn(5-tO?=gxz$M89*?X2|+qphuRffT8UbpAm{q z!C7Ohy8WQ8q-R3^U}Mn#pyq>N1yB2FWZa(Wj6*9x0IIAkJUi#tGZUZVN?u1lG-9UJ zK;`5LA%FeKrb1}SAwl0OZBY1$>y1ry}h+_7Zp*lk)rVjYKMU;r2LLN_37&s>dpOyfE)G(E|^( z5rVj5O@fPq1=mVf^UIq6aw7nEIi{&Yh)x}qY)%q@Gw%g4Ox&#BqGIc4uI zJ#m$f8bGghSNmg4{qfgM6^Et7N~V3R`;-!exUtjB4e{;}XOf6})pUQqpt}`{swXN_ zz`W7n$R!A^!0o_w#4(F`DYwsx1X7#8gR-_mmRVFuT`-=&L z^hp$4>MW#i%G!`iOn!H9d&f$D_H{Q}gEqF}eDejp@SyM@Gkxz|U5~Nd_QE)$eqIiF z@U3XZE8jge)M(l9jwm3@la|>g^FHDQqYC0@?KLxpb;bQfQ)huHzv7XvJL%R*R``{RvnnW}+#s zJTLbJZv4bmqDh5athRDYJYn}fZJ$a8MJoz^e=EH42ZATM{~n(2^aCaAAecM@pC z+rVO9Y>im05y8VW#j8p+$lOQtlj_yCz(gBSCa>PU)R#W*`)2dE!GP>2VgKDVaRtJ^ zl$k#t$TC{P{9;cU5rkX2DhJZL^4IwXUjq8$57L%VJ6 zGakK;T=i_M=7>?VaJ=BP16p!ajU>^)w;KwOR#|E@@!A{0W&Es<0r|R?%5LCGo+cQy zu@Y%xZ5{e_uBk}#d{XjCM|<`sFZzxjQPY!Ar)wrhNxg2AfJPsqOnSqC8FO|})>WDHd|!~PeUY*W-$arEwpC!G_d8$abx(l% z?M0qS#%@k*VtNwtq>6evOx09iDer6qNpDL@D{*1zC(P@2TCF#d1ZajO3NW4xjdnM^ z$sg}QOIt{eM`4P5MbFXXHfXjcQEtA9LZqUW(cCN4YRmQeV1y|exd}D*YQ*}>mWDD- zOZj+#b~HPaT}t`P8N2No#HnE&nS4k7>tOJ}m@BODl9H5d;c*6GL_;ni6` z#bk%K>(~$RSRy)zr`sywwGBvx9J{Ld#5c=pFf zZn3lI37%zeSDvO9;1e6%_7m8=UVrzu=12Q8uWP1t^ZhT4sqUoL-pE_PwO5$ zv7a?fAn3+34}kOFX%I^0pM(g8xo&`U%;WAXR`FM{9H$x|(^RR{_ixNltoI=IJ=ojh z!0~i)Ei5c$+^&Hisl_2M6?^eo)vA?t{O90Rr>6A4TL%jV(*Ws^!0w{JC)Z-y#b9*x z6e&4(nkx$(^$3lXO&ukx{_Oh33>BK1mh^g8Ez6O4% zEZKkN@Hd2NO|sy6vDZJCNnQ7Cq#r9P{DN|9XBK^flcvM>3eBn;(TN_fZ4B?yZ#wl& zeIKmcHBK)PNYsH>J9t$z_)wb@?e`(6#E8W%N+A(Gi-q8EN`05K<^Iy%vKX_uS zx9IxPcNY9?YRkCI{b5`VLTi$f87+XCunF3zgOS> zwGb>iAl zD9W_6C1KXjMW3$w<86n4oLm%K2h_t@h6&i8J{>t7{vb*Rr2)SF+eue#?qWYmQnQ_^ z;Nb-i! zF)XhvdXxHvXl9{o+T);0#{W!|l}KXj!#jUKZ7IU~iu`e`EQ>Y_JS>c12{dEytQh2{-h?RmopDG~+$rnfB9CJ$ntpuZ){q zHA-hYKOHRo>R`@wS}ECg3^F}W#UsJ=Hx1bL1wyD`Isdxi56*j5&K@iE&o!Sh&Pwby zaXRUUs?5$YXD(>0VV!Q@}Rye-4k+RY8_6GuGOl4cKkk#!-r=R+YY6 zE>+d?;W+D=r^WZ(p_0P=drHG4y#g=dnno7KccFR|Vh@wQa}tLK-)UE|Cz&a-%a4CT zSzEJ0McmA|oKYeTj_<{5ef`wX_%>blDoM*66-+c7Tuj}vA_o>e^jtB#{Wr5FV(fZL z$4S}Y2^!O<XF+ooO-#^OknmGv=D1pNyh~vmifC8{Nz_Mh*hk`5>9O;*8fjs@ zo}*Z9qn{GSb1w9j`{f&9C-{Ua^dCh^3b0sGgdxAkAl zDXR*Zqt)hwRjUP^Yt;!+(__y4HA?n=Q&}$ksQfT5zqkMfJT4nH^DAoKFJjS;t5*{r ze*yrGL>t$wxVD{Lovb+O#W(D`@JML$mdwGL*g7$AyklY0Q|>CM3AqIfykd}n_#q)d zsW(AFU>`|oO+ROpq^dRe`TeJ`nKTdbxxl-|psc{_GkYM?&u~L6EEd>ydt6lbu@X4y zayQ?L;)FgP!v`L&bdBfS5<4i0QIp;+(f>~6y*G4ZK8Q&}Da(iHHQX6K_L=XaOx9#p&>5i9v3DrTU&%L=_Ojy^n{txIF7z5V%uk30zd zO({_=`GzIE~ug_^vzJwFWr--J6K@71vLi86vk@uF{dSTH!dLVZrO;w%l!`^!0 z(@DixwXV9-@uy;vuD|!k*2@w$#SC{A)XJelY&%`O> z|69DlHXf(FR#}!mzI_+du2@F}hm)fO_uk?AG#Lbk-!O?v6Mg$Whl$%6E$P|={-SU` zwU9AY7PglFM=3=+n_7L+l_k=1v>i^WD`%--9c0cG`!Y%_OHW*%w^zT~a(I-o%R>~CTj>K7-} zPraqHU2k@pc|N1MGYI~y6`?)jevS1c+N}^&n~}5e$%UnwucTw;tw(Z;?@v^w$-N@{ zV;~WLI^M0B_DC;u_V>b=?xvGzqCX33?GSu)u}w6G<%h=L`8U>9DwSDn7DtCc%n}W{ zK1Nb+y&JTJH5o;%q21+*${$n4BIyFw(O$2x}6O)mWaJFJ8rb-lU#w$PK~2 zO$(|T%WnSEn~_gOJTCK&hyJDTRU;ATn7jFDe_7`@$DnxTU6z)MILt*=gxCSLhJ=)d z#>gFgPPt^V4x5@@4W4#ydej#@>`uc5n#yNc|JFg-s(-_-U`=|l^AVlT2EE6L1|j?D0n_+gxF1=CnnZ9ek2**I`w(J6llG zYDP6-MGCR&t1)P~Th;plJw?0n3sWhPjJVgFMlCsyYrk14?Y5q$Rx&F7 z&(D8OE#%O(MZSV1E;P_8xDA52EeEUfBjXtdzG^H}6!M-**4hdnsV})Ug3i=6(I~!g z=X7uvjnclm*Xs*9RfL*#hjHSy`YFA;FD2?sTWEs>VoJifzCYL(VZ@id7ogz+t9)?7 zuLc6nxDQt*TVKfboBgG?Tz`+8E_&f?nENriDQIpDzM08G8Q;<5v(fYcdg`P}>JK+J$U8o^5y?i~BP){|s~7W~hX{yl)82`!+@m zZxEEIcwf2(k2Y-aUwa!UJ6n3#8rx$w`AqB!<9HegV!~%xhcrm!=e@phMqWx<)A+5E zy$~aKekl4R;)Rv5^}{T1HfyBR%Fhsv|NMEDge;;@;!X;*wrJh@^tdv^T&+6bUW?Y7 zGU6^@o$(4cOT-!cTWLm3l;JU6A4sMrl$K1TM~Gochdgs7lq$=j?`RL}gRE!|>VKhE<2vf{h0ZRwr*Wt% z=?cd-Z8M=&vsq+CdwBaA)}YBL2sXe3B|ZME^`kZ?FED%#?0g+OYWf^{vS_HYsM~EW z(ZM?q!t+eWgzNIfpN7)1Y`B|5Dt$*VNFoITyW#ced+y?o(#nw>Rc=HoA7;X`(g~(% z!?>&KSOU8nTNQS`=$!X@T&>|7(Q2RTb!@qm4Z<71pp^baRsk>$U#P8D#cD-MzD zIq8rX0(if$oHW7Dr;`}u16$B;B>N@^b{!t0)~^MN8{E01CB5z~H}jMyy_-Fwm$;J3 zDhiX1uSp3g;jn>$ISgApN_9KtZ$3J| zoUx@I=&4Ye`jFKKf+drVGxiMwM0Z_{`$uv_XR}!278}gBj};&32gV2JI9#T}A4&dq z8U-K8u=1?y2&`4op1s+rMf=!Em*`^MQxAAWi}y3&$*;lg9K1hnlgvS8tv}sFf^qOV zW44BhUc}cqv(Ij3ePh4$0qr`aL$ucgy^vG!45XHtN;sthQ7W`ZycJvklMM&D^#adH zwl2e=A$2cVqm?Pw^qKN7QU00iMsZkkWV2N1^=7202bh+~UALgW$nDGa$TP23T*J%K zVZwL|fZ?uO<%|15WoDI?K_L;>h0XVVGne|HzUa`SFYT>u|%sGV{Ep%Tka~0 z*=Vxd!^&{+h~;iuWq0;(F+)IJwnExRZE{AB*=Il_^tqvT7qIt?VteX|1WFS`>IC8@2wdhgM4p$K;XWc}?xv_fQ}CuNe0~2u+KU=VeC| zAKjY#qq5F|n`wc{FG)XU0ncBD#qK@0@b6;lR?PdZCm`EoY7DeOmV5jcKdgZmTWa<4 z1uRh+$=_!CEI$5QI27ZWBn9Sb{`PNYjKk3*=dy9~4%;6gVEihX@b~x|ZbuW!`-PXv zNzIVQA2lMWnIA`KT5nkA?h8M>a&8ge?3^9yH<);>2P%}{n4z98%y{e4@r5MZXxaCv zhcEa39L|?inXkgTW_dcHvQJ4nvPCcVQ*>@V@bitvvqpIMlNzS(8aB5H?N8O{y;wFy zkeB504=E={=40mUji}y?1+Fi^Sy>k9trefQXqskvGY1|eWwATD1vngM>gTNE-W1d* zOA{p$c#kE~b)Kxwoqqp6EZ{oAce0UmUVld#JsgvEZ=xkI`H>5WOZZI@d7bV{p`IPJ!ZJ#Qb7xSPCsMv;O}Ff+t@4LtV-_8f+KL~A>HvBC;PAv zMdI2`l;6frB1KvwLhjY7QMT6}m4R{vj)j}8W2S8mwwd_l>in=f!SLR==8reo@NZBdgczTdr=Qf98WBH zj})AkBO9`Ys{WS`XkvKT%b(G_E%WYYC+Vzdi9w2qAQni=7st)P`8xP~lr&DktGt1M z)_wFdWBZ-F-oz%x&PaH&Mz`wNv4t!t9rMvnm?};Wtzovw>@A}#7k#`d%QPPA@lMhh zaq}sZr;14wre{(-Qeky9-7<^@qNUZG9gFnPCJ-R)nweVe--x1kTGr;JD7D>3(Zuw3 zv;6-s_ts%ib#L1+ih_!O5`yGSNW(}sqf*kPprn8>G!g?0H6TbyNOyORbeD7v-Q68S zGcfawdjFp1_>S-W-ap>s{o~mO2eV<;-fQi(S6u5nuj^dLEZ19u-R|e$x}q8xBC4HM zfq4z8NZ?bW$r#eHN7u6z1m~i8C+Di}%!FixIj3)|XC_QwO=93*bGDh3%(!bu)c*Hy zg~iJJ1O9zLPq_OduM$@F8kh5<1Y5$`Gs2T-Ro^y4ijtEltmIt*(*|SIvi0V4cNG)6 z>+Hu+E2EdA92}<)@Yg#%8eL_rV#+cU!xLc^1Rlasd@il^t#zpawn$0oz{XC(k>u$z zUN$|obTv{FleHZmmvq?=PXcwyUnrv+-fCwK4_|B(w}2@HdUtxg!AK$pc79Tm`|%$i zF?GCR!Sw6FY&R{KaDw`~e70Ud&FY;fzG8V%XS&#rd1~zk*Ahzq;9Z!F$^%Xx#M)^H z*aX!5qc#4Hjc2r6;V@o#Nq(;e@!{ODw+vuf`RJ0>ZJPXIL^4sZ^K+~PU-s2>{IwkJ z*3Fg@Gq|i&zpA7)5;s4?se^1-F^Y?av;IdE`V(Q_SkGu?e5>P%U3SOK zFJIu+cz4G#+!2VTN1c(6{fof__7~u@Ap*YL)0WTWml4^;8%~ zS-WfqW-^J1nSK`BA36p8uyLKU7~H`tSfpQVbu8k9xN~s?ITU%wLjNW8?AT4yjZli? zQnSR!;E3vJZzIT3X#Gjm=XCq=nQ^@7Z7jts$sA6HA93pK7F)9l?{~Fq^n{(+-JUI% zFD5TIjo>L=duPL7AbQhKkFAj~$>al}N0TPkE7g{oFoUKa$po*43$)ez|FFw}qwQHXTyXQ94w|l2LvLrNI+SFi+LQ@x`%&}vs z0~9ZGgv@UG(|0F1-7GbXS9}gPXL~SG6umqGToCq*n0%azc-m&l&X^ec$4A6P^G{3R zHUp25=erGhD@)P}(S-t8BFa?Em+P}iJ^jkoGMuh$tcII5wUbGKTrMpC{AtgpER8nv zb>rFinw+Ai8#jg%0xGJ6I}t|Xp=aC*^h^;n(vgkU9oGr0Pw{ZYc{P^Jx!mims+Z>9 z^X}EV`AQ_aId=Ri7WSpBuo`fCeUT{px0ATujjqcnd}$znE&&*LIK>#N`E(ft?9e3g5)Z9Gjjnc&@#8L=oe#MLcP?D>7-;`KCf3r!<9;B?-?of}_2KQm z>vpWu2mf^gDEmZ#h4}|}JVfEi>G4S{#hAAi>UdSt~hnzfv z{5n0DFANJ0e?B?Y(&F{I3R~K8iwg_YC&j!MAJe{&l*A5<&Z}tnngbTJ6<2!S%Fq2Q zAu*bbeTR}Fr6dCQScW7QHkDCR(a=Owd7MYOt`8)QXZpERMjBRkcyEL2?BUPYkfW^; z%|@HCVZ9lzKy)-|0rL$*irl>bU-!>{UJi}-E*n^ntXW+mGHz>Fn~|d~rvY-p1S!C@ z)L@nZDM<1w2j#3S?dRUI2ftttB2fiPN(pb}x5&(w$JKi#22C^B#dTs&(zG)@5E>1N z56Af{|G;xJclcs<#)s<=@|Eqq5n|SuR&P6BXTmBq*D*3?VQEq6(edmajc_v=72pL~ z0UQ54kzCEu^;64O4J^T(o$k@JP#HFg-&I1B-}$>-j4Fv`yQCytKR}%?(%^x7a}9w> z-NxKj4PEi6fN_hI(7Y4#v2~J`QJ&sH|1g=~hO<}Ko5c)ej(Zzx`M;uSr9QR_^6nc; zJ^f@)zaHHkDE6!o-!&vXn;v##JDqRjukwO z+kCV2T|;^;+=WLSD`6$7riPtOtP{fNn|NLhHO;uVQ*Qok$rP-4haN}Lt5}DV@w2SmxTLp$H#DxwS=!;r z8Z47#K#AV^ib!oTIh}+^JyqS=Xp$D6_nwCfpZ6?%29ulI8;cUeYHe5mXvdc#%4*JC z@Z`+FKyjM*jGALJ8eg-wb<}z{C)H0A0q;tI4vJC&g9~M9tCEfF)GB@%tYXK_XZa{v zx3f*-rr!jP7mbvbE2boYS0)z4gK;2}7t~9p1KGG7p-JcPWg z#!N1nPI?xc8DRX165`5iuFI?Lp5RBf37ws9(v$0Ly<)`=y#eYvVW$z53P80CljIV8 zjl%u*ot;QXUpnyg@TIH^n-wVQ%Xro&7jG%{o!IR^=Yy>;e! zxhH;A+`4#sv6uC{HK$>4BWowhZV`GmegTR=^af^U+P>Y2nlx2DhFo{9J2w0OxciS| zaam9Rj$as_eR=^8kuh|>c1Qg<0_`^YUFG+i#Yz}^CUqzt@v$%Rly(ikKN_?4+4Sbx zxXI|ULJgb7!kAr_&CR$eSnQ4B_d4Ie>}}VObI;*Ske)+mtjD3XdfmQ1KQV1U^`EVr4Rjg2NMVgzTOVMq;5i%f_E8J`M$vR~l9{7S z;9%a1x7C}edDG0YfqRnHT&%s75sX5$Y)9?AG2wiAzmb2E+i5&3Nsu9?fiXRfM6z{R z1x;gpqTl`ti;?tq-KMBl-rw{bD5`vvB4DR#JepUJ{HHnC*ezpqP(&fFMvXaa9{g^Z z#}1*&PB5F}`WgLE@2Elxhn(1n2nyJe@Q(?P!o z*RRe8nVB9ESWK=Qto4Hxbi2Jfhw~XF8f4v-om`on4Qszr%%INjSy(dM7{zBxC`(Fv4qf+#DV)!s zi#zAsNYDPJBGvk%xJAqLSa>psO{4GW%#{S~(ztG<64~3B-^7@(Pe4ROO2SX=m>uY;jM)VZoI&R?4zx>~5Mjj7b}D=p{$Lbf ze!-{XHl)#%ayxqnT`P0;9h^da`-uwD;I@F9Yux2H)d5k>L1T#ByKX;qZyR%lzttgo zQ1f8nLT6Dn4+vdO;I`kFQGi4MeBWMY2~5~ z@WzeCju2wJ@e6&SZXAA!J72RYRW>)*Gpku#6d57A_O$>0r(c`Asl63`S8CC9t0(+O zJgZ*|Nyr3RW)l~j9}@q;0yaSgGNgP;SS{QaP~+j;KH$}BqR_6vA zaB^C)mI-UGkP@NFpWOGg-~T9Hn|k~cI;8xECO?`Qk6B+U457xU40LzllHd|6zCqmL zlsd#snf7M|0#qo-S~^>I`ntlB2J>Dzg@;hl?wG5GL%4GjLds#e)If?vwE+jH#8gMk ziqWYG5Hwe7Y;A68;jMgq6Ck(xroqJ|e;D{8dPnj!^!zFfV=u*Rm10aK=fi~yFVFpE2j~+jN#!}Mke%%t-S6uj2&f#c>y`-BmHh=v-sV@lB!G|zS5_^)U zz}VXM`OdSQiZ=g@le6@;v+v9dPk+a_)GM`TLY6`NPJlQD zp7IIKw^9G)dn{V;AcJR2e=!FBbehm*FnP8nJ1AME<>1@V&?cp9G%(Gv;mwQEvIf`UqPDJnoyX)9s^<>BN{gr8u;(XF{=*bx ztfEo;wr}E*hwQiO(rhwH%|ooi9=P z@p{nip4s&;w^Y;FfjY=GkMmAO=!JO=Y9u1M_WpUK+!7Btaz*%(7n{*T3ms3$9Ss zgH)A;GM`mh14a!GButf!#c?UJ!>%>~vC+1CPOvBV4`RMuQhdAA?uEva-YS&Xf6Y6H z6$cgEMSGgHDH3LG?5}S+Q$>oxkv8KT&P>futg^^aJ^4ace4FRrGnyQaJ|zvu+0si; zb+lK~DT7(dooVWInO38dg=1_;t~IuaU+K&Ax`pk<;}WvoPb;kZX){Qv)ErkI zcJl@G<)O3zD@#d1A9>mWV}=05SfYOR_Ug@Kdu;HI@KzH zcKm2NcD6I$Hx=NJS&}KBW}JW6J>4`DvDZh2ev7(NO&4?QSKw-x33^mqwK8`A-qhAy zdtV5)cGFzsf?gDsco=y%Z?XqEe|2a;30?kxPbKX7B(g=-05&wCl|}s_b)qbz zG=?<`bvOR%LxsHh)>yVhaTTBIW^<-a%*V=jrxXUqpMnYltVKi94s4IsrG$p`-#QAv zut=^toyzH}p5!$YC@f}CBTgwFPu;#ZT#}$&+%nhiWjv(1ICNFK16Dd&UPSZh?2fQT z)_3-tFshfg2mj(>@<}UZnXqps_*Fk)E>4Ekr3geYF>g%zT1iWf4ls^^g*>ITZUfjC z-F~($&p$*->az5v&65Ue-(D#1ocb7`93&le^=q5fQyyvZngXe&w_E?&(mx;Bej zd$P)PlfZ3LQKs4fK7Iza;Qc-PxJ=az5zGY9sk97}#%R8L3MoAIWJ=1Lu=h2^kQ0;6 zrfjZEKUc`BFDk2=lD)PTzO9fi*rq~5E2lE#i?@YPwuV;wJl!)L(>qHk2A)b^!hOrY z?WGh{6dcz1oW=t0EJf>=_7TniNo?%WZ?8P}n?~<^@x^}QhyPO3AoP2!uI)O9IfMo) zQsw#iR|kbWlWyWfzL>^jyw6tXn=in^7_#7Riu5_B=X6E7Nsw4x-Z<0kuWzW~K1!oo z^~onVkD+!g``8FyG4;j3E4;cAEtviU{r3?>FINZJYRNz|ou5RT+~L$?<r4*V@~)QxZz&jES}zyyO><c@9t9j*U z-4<3qsN!z@MfMojHzNHxYp_u_i^N&E$kcO-+Q?% z3f$c9xNzEFi$$-tPrN-;$*FhfI2YKcdqdiFAbcT!kES3vp@WUiIp`}j^>x3jzg!(2 zcGu%x^hm;Ey89bPa7l;{z!f^;f!)|$)!nAWY-5d0_e@(DZ=YOm-ld?VB<2(yn5Q#5n)t|LaQ6VC?zB{YB>WB55Zx6K%=2 zC}X8*kP_=z`*Y9;12q`@lMw{S(dF75SYK%Hyt)Cz@(Z6AL&B@Zicja^~km7KX5z z2E{cI{*%&@)iQ*Rh0YcJx70-^_@5bS-5z_^Ej(|(#UFI%%>n-$zVs) z4*6fi@e*IyGGWms#hx-P$RaJR6ubN%Z^h?}g9E%v^K1_bV?U^<(07_r}F)Thy`mQ*iOxn1Q z3qNmJ6 z^;PeHOiYg7vY{uGh-$@K1*fK4Kf0&B#~;Y%l3{fdu##|Os+Jm6)dKG$@&^oT*`f#> zVB%*Ujs@B*8{=$vqfp`Ku_eJ{Qrd;exLaHWs$50LLZ>SFr7!IYMG6%BHFr!#)n%`F z*BKq7W%vQQe*=)SuoQI8^^CUDX`V$ZaBYvO+HY4Ic&a^UxWs?X1(~rA@x6=aYNbX-u(?dk&HSoJ4W)(ixq4pT zv;EG+KOC!9$kzYfFO+5~I)rA&(JSQgfH>#=ixRP053BCnWv)ozhdiXI8m*B?h~S*BV5I}wZz63o?X{?^qc=QHOG3mxe>XAAjtHB*Drf?U;gp*TFM6*(TadG z#%m3Tc|1jvUr%Luc`U^ldJl|FIuzlAQOJ2JC4Pey?t>VQ56h++TtWKS7!7zRk0 zia+P(5nO%tEOxPhn(rgIRzA2i3B7baysF9aj!4%` zSk_Vr^)h)DRCW5EvTbNh$$^WO*niY|dk!L?KuCniWw@>;crqAz-A4W>HR$cGfj zAkOuUZ2W4Pi~c~pcBuwk;?=IJTeRG-H9L-PH-#P9Yphx9N4WkoCys^%9VRuEq< zlztXRF^#~8&ntFwC`l*EeftF6w2)m);|cIONMq|}QO)N{o+2%@^8`%M!2ft;c+Fa{ zuaREAK0e#IIk9`Lz3`+bH56TMo{EXnDDHUnqIXwC?*?{Q`)MXV1yB4=WY<%jM?pcf zy(G?rk;+Ud&ZTtoB|ZsO+0%%zO&zKL`(Zlg(}h~FCZq3<-k(JdD`enl)9bgR zANwp=(d5?bxwZ|Iz#+#j+r8@0Tkia?yI>A48`EBXfdk`qzARpD%yl0=K8g#drg#dYiR?18 zr%!gd_m5+_PIY%6c0QdUJU)K)_2K;Ee=j{4>k24aItfyUUNaw^a=7! z7t+OB>Oe&7@}Ms1?$$hVd#mrXBI?h^94XH+QtJooRV?-T`GvOssE|rE6hEh+_z>tD zG_qTrQYSSydU#z)@g5T5uL8VFD2pNNWJsh_a8wk8e-nyJ@rIm4n(rsgY{$ZL!4X=O&}&79^&4z3ObnzVu^wuHsqJmxf%7^dHHMAv@U$1LZ>?&F_C}DF2-i0 zaHn|m{d>!9jqLo*yTr!=|E!pN{LVSXUsfZ!De*i0x`QGo#WK^uluvlII7#M-%|V+(oX z3s2$_!Tfkb>m;u#b0*T9Z8zTjR~p!$SOocMgX*s2|bE*2&~-AIZ5`kI*O<>bV8 zIM?s5Fy+`n{~`M@F}38}-dEU)aDV21<5d1fQ~m!}oe=!)9cUWViu0go;|nNnnhrxw z(S_yawExxvCZ?~z^$rWX!~g}Y2Nd?SnRX|>WI9ER*v;&?iL^j)6R@@5bQ!%p{L5J@O>{a1>XesS=$YL+}61B*imK z@V+WD5OvjWN2h-~PmRPSNN!mAt`Q_M0tRQ5DCCbqHyMJUW}OLV zz*SkI{MWg|D|c~q53^2J=w_*=D!1RSrfm>&TA}PiHLlK@hstDetriB_08pG&r8>=s zJ%0dB=z>eFuwWX>WB=FCCtKOYA#(*M6xSp`Gxc^&`fv!EBT$m5IDOHhli4VC*S`r> zU0h9hwYvs#^1Qq@^9aK}45ZXJ!^YZ*8izgp6dN4+)?Adnonsm|HEY&+YJ5iFPW8=8htdXSMSfYHjI9H9zBycyL zX2V^_SjIOdp+&b_x_1(u^YKO({vRPcr3j$*5$`4*Zu2$hpBIHkb^BG|K z;g7G$BPh>YO#jVYjDg1T(WjQYFp0O9YlYwFx~Lnl{Tr%|lI5^nE~fp;+|8GBPbA~U z{g6k!vgnhp4_Eh?)%yB&*2IxKQW{k-UB0-FFIsp2U_&cMl$$rfbANhXsm!MNvg_=a z=(EPhQlZ$mxCAw#=r58l49+w{FBsWv-GcrdZNzSAY$>bFj{3pFqftG>;j;oZC^JOu zNuhv;z)YFLEJYwrja*M)lo-Ex;LdKZ!%6RUgC6W^-{K=&{iD7XD8}uh;o4;t@|Nc@ z=kw2m zgx{Bmv7sLk8~DWRPx+tA9a7@L4`gB_uo>6vYwJn|13;!(gK(2yPQ&7F&PA@S-U*kw zOZQqf5?|bjIXyO7+2XI+-@AJd8c|msSlb($T`h~RDkCGMr#wmb2PMPYSG;9a5!1Ka zQOgT;KZe_q^AN%1;fsd@xp#9e16)SDmJdF!`$18%BA^Gb8{LvRus;^~V0yGvCI%d< z;$C`A4_Hezo(4UrXy`qOKbKiLj;0;>-~t)EXPaqXJ7RTI5$oZyXP>%?jzd~pWeLi1 z_eIM{=7c#tcH|Rr**XC*YT!K4=5zd|p#1jlY>U;xyIZP^+wDNYioWPT0*Cf&ql~wZ zvuN&b_-)BK?pI()drltV;(}toRaOL6eCCVtn!ypvpVjLJ)X>yQpEzNHsDYcEM&WA$ zbg}w98SI72^JXw@6Z))51zt*w!d3i2am%yJ-Iwc*G&rk2gx=mZ4|=EsteJGl5#u)S zZSMQ*MSM3ULd%7=>09u_{`p(^Exb9CAtH4Olq9h+qEqKDR7lphox1>o$u*lpxY$FX z{|@5fuRVwPDGQaA^A^|4p*tSQ2>YGGF6Yjelh67w0qB37xI_?9xmaWIvoZa1Kjf&| z&{z5o>W=@0OJO-~#s4+1F!>I(iM71)TKLb@;fj^@w=h^(uJ``WPJMHE?yKf%c1K%` z6pzV&Ye;l{C@z_-&ZRZ+TTBCES253P#NGWNJK(`>H8V42^LT0;gnD*;)2@<1nx&Hu zhs9s6Y!Sj)dNMVbffX)!w%rvWdik{AUu2QkjWVeHJgRUjvhj6m4{?q)K)ro9@K1;K zVy3~lD<)-SdtVwnpNU@>4Y>;1LCp27>j_z5%q@LzrI^Y`rMmaY2*mVMUl`9{`vMD# znuk#(xNeSiG5PpHW1SO^g;zl#JabZEbRk916)Wr&i2RCU&V{XFuG`Kl?}Re&SF_mO z4;|3IF9~Q4^rc>8^%A|1Otmw_=2mj!pr^3Dalc6g z#lt@~Ia>-{8nSbcnDaaztUcKwX+FGi->7*aSoPRjk{NKh(skpeNR-<|b=G098SKg3 z-si&_R-bv;uAR9LY z$qjbP{o{e-{UY9(pNSMQ>+DUE!_`DZ--Gt9mgcF~%c5tSleeZW>kwl=rY7S2AD7KM z`>PP5v#V7k0m{%8l976C>AC4lt4ZHYkot z#aDYYz|fNYUsyo;a^#zVQ@n1hd=&24`kAc~l4soP)s}CVXfpC%I=wTq;P(Br%=IY`c37~Ds$IU zi@!F_O1*puI6b}o?7Z6RVg#vd?x4OuFgh49z%>ij3bGD{pr;e@ij#sv;U;Bg_ypvdB}~yb8+w7 z)EsWXv$=dF2Ni3hUcoPlTfVJ|_t|(NGn-Rl6RrkI#*MQH^}*Mt?fsKZYdWqW38xp; z)Z_VGp20VW-@n~eOhU!+QJQiJh1(6(ph#)$8|tKSC{*Uon91JNEVJ4= z_QG7v?V)6%rnC{Xj2R@SfMaqD`NN)E6k%bfUEjAEj**@?FxwrRN`MDHM-f02>=+l}>pEHAe9 zBQ{{gr_+(|7b4{A=QFsegET`T9H#2n?9Fm7ywOwT9@@rt^i%lkHv4l@78|TCc;f&nS&iDq!`3D+UOPpUkq$HmdqS?a;LJ^xhe)%IsrXP% z|0=5MPFbieSFs5H%DDOLSZ32zy6_T+_bHU}R(b4V7y_tVD6o9rRn(HjjNoi*78#3r z1c8iH90h2BY-Ve0Cx$le{f!iDSv~T_zn3PrkTZMRiTgNFz!n@lXV)2vcByTv-5HO^ zz0l91&gIY%I(3Th68v1u#~2z1QRuJNrCe zm03l|rD=}ibEhS?_O~g?+-{CSC@|%pLl@XVraxgCNpmhs-PramYP|1Y)^Z`pxgk3I zse$xu!#1tX3F9alHMkTCcmcNy2n&eGbrgHzv-xDjL~?9>M-y&Ef=|9;BeR(^XL;G# zSf~vAXZ_S<#&D#ct{Ol9->uBY&hH<^sF{`;|7q-A{s)1Hcr83Pqt^9R&}K_y)qsJ= zarFhLQLMeu9i!AD3w3Gm86Mkd(0x(ri1)>U@(G1p1CD}RrI<#(X{uXlc!WxpzC?su zd;j?JSu$mJw6EE+R`o3UBN#E(Z@)tRY|52x`J=1cfSHND@uPouC0}z;H%dX9LbT#j zBV-e~OU)9M31gH)W2Ewb6vk)fuRn}mkCN=hQa~(89nfJ91kh`#d0be6A%V}wqmZgF zfiT3XT*HfZm0||-cI18Kj!&Ks?=&Dvvam$d8bcHs;yK{2*28G~XQNn?&&>rpU`L}sQh&hDNEukYt)?uu{)hIfZgOM(+0Eq#=SC~BuQ9OyHDffbA{nm?jHCbV0t z6n}Q&1}V8q{C8>5vU=Js{?v;ZOgT4VE9QHJM$3-n8#G{GM(>F5%Cy^RF&8#bTI?iz=?-vEFEfGJ`1Y$}O&-cksPMvOU%f!- zJFUt2%*T3KU4yEx3NnEY_Ry_*0E&EbC(_CU*0A+dF$#D@7lG}h;Mc`chAQ)baL?ex&V2D#1oW>=k{JreRIDK34cn1eeJ0uQm)rvs`tJySv3)Dp{? zKd_h;c-1|x6W8nQ4_ZaV1v!`v}JJ3V9y-P+ZX9lkLPu_UeSc=LIq=Y^Q ztNLR_dUdV$q!Oquf@Wt;+ZJv}q~{f!?_<^kRM+~*%&f$8*97w z&Em~y$Kj(s?OQ@D7v_&I;(hl%p4mId+Az?B(YG&0LpeM;j!QCi>H<&Eqn^*}2D`h1 zr=#O9kOqUtEAw`I47|)$Sc;JTDXCXyjmjHMr*;zMg-&Jk*T;BKrvp$A64yzRV6i|q z!7$T9sWSm}Ciil8%;@vuNyL}EQFt3pkjL(rwW!-%|_Sqzv5Vp$F{}wT_C}=I1!0Rx&2%>myZ7?j9OsTTA zZ(6l#l$<@g)IyNM__=rKZL*wrayk_kaX9eX<`x%S^W;Ww4amd_5~5 z{i>bNk~uuDmKQ~H3}Z=!QI7I~dmC;ndhNYVhZQTGVFkt!&knGy-qH+EK6&{e$mMUa zND7C_oGzBL+9u8Q_4h3cOtZJzyR~lbjNCzNFgY{GPD?@AYz^9H%ByMb!7xHth3Kpy z0YC^%9w9pfGfKVP`o4H$X@KxB{k)2=Uvoa2PXGa;tPf^ zJofJ98D!Z3H*1BX2;ela*XDU|1)WTOVzcnra^zaJ{<05ep^8W4#w!~Tp{CY+jGGUed}v5H3!}Kp;mcq`yUb1{_uo} z%LiBtxq;~GbHp#_3$7#=NL&%CRx1fg7ZQuy;jOPt#V#b)~wY*k&WJq^6=^gkmSs%5* z{83o!tZkk^MDQ(AixnDwvc5a2E<;#5Ut_a&-kTI#|MH2K97vJc<&+wqd_%i))h2+z;Rrln4;!Z_GM2|oE_zx7v!^dNkU`^Y@= zJVC(>*_vwxO-U_GBsf2ShZ65WpSRao=pKfrazwjVT!zFZ1-mTRy4TW!XGRE_*p!?3 zmd@Wk>KPI=^%wgB!~Z*P*&N-=#tP<`@AM@Ui~Hg_OHc=ik8dBa>`ziFUwC|B9)JJ$ ztlz5wXg&!up1t_iD3(NRXT2u0z34yJc5Xe@bhs5tUZvvF9Sm4-ceDDm8;>pJ1Dtv) z&SyUxN(+@}+KuvbdL?^EN4GC9PJthX3WFx6mVTKX;im)sBrF82)a?U>_7+NaKRK?M z+`c=C%Jxyoo3!NgmRwMgnJgaU{kHaD%!_$mHR{6nIJ^p zcBku6HI)bQ)5uS>sHc&TPD(j*)poAPXSSUeZ=5R>dab7vGH#|C>nXIN8?WFHhd8$V zn#UPlCOYT$4yG&jFSoJdJNBmIrXL?M(dk)EZ(Q~3Hij2XAFb9}gZid9WG-j-2mPGk zJH>rM6{gj5cIUkht7T=#g+p(Vvx_RI>qMo8Wu%gjkt2B3*m2BnK;s#Wm2PW)=dfMc zUg$?`+V0zeP{B(dsE2yfW%c%EcdPVPd1dMeeqq5TnUrqkx62P=<}Y0!;cDN{pv|_n$`=oBbUDmnKUH?4;%>!bHl9_cmcJARy-8DBIQdkMsBX6jikAak6ir42sb z3eDrd_a4ma7dq3B-^Ok(M6GT7xidzNtcVpWnT>b(jcImh%j#>g+taHg6#~#s=II=e zh?o7a)>R7@EAs*lDEaIor)T16n6mO3z*pQOmg=fD-ZP++`i@YFELrp?ur@|@&HJWj z!23sn!g^2!4k9j3ok7s{sut^t=XYLai=($vUKy#H9GLClfksWKY36brw284cs!HfR z?D)8wkI~P=b(+I&7;=kZ7=F|so5)2VS8%VM84y$Y*akaJh z7pBIae!Em6Zm79*BBqyskSq7rnX!qdG?O4y-8xTUj&+n=58L*4E=_7HWw!E6r~RvC zcbWLXxnXAa4V}!J_Tpc+F$3n~-!et3XzPFE(yyRAVS}E$bJ2@6@*TAPllwvPYhAww z0quv{&D?&|>D><9dE30da36`h2U?|u`y@_M%SZ1jQi=bTb76EaL&ua{8q2o(tsKGQ z1b;O;Pu<7ow-ZJ#s*`g)N;*f^gsrwkYnt9XOSCu?JbUq{l?{dFir)W3DP(h0dWM9v zzYi&*=rtS__=5`4#;vyCx|WHLHSpbObF8RRKi-%XUlk((cp2yo8eOpv9&$ z(5!d??w|aQCl95tC?0KrI8X_tzuO!DD%1sKm`3n<=0dHL4jmP2! zc#)_TWJ}P%@GwoS9bMrtTe_z{gK83GOwI{I8vxh}83eK{qsUMvS2I&aw~0gTbAt=F zS86cdt64GWt3PrVF4|%nBv?v?5$7HfAnSBp4fHYof__hG zakYxngAJ}qnvV|l?;pUFD-7(nx-sY*!z*b-csI|*M?5_irlU&+*NgP6OLlqr6&fD9 znbY)h#a$z%iHkmgF=h0gHL%1JUa#q19A6P(?mkg%D8mHmdoNM~*RhPb-rS#w+&G#^ z=-?^r4CrVD&ZXD(BiiSY1YIeBqP5xk_|!m;AfS#iez`xk8uarftEDjgW?Fh{XmtMY zChwZmny}+o(sM&)U5~bnzXC#xzHQZ%cSO%!p}EbS61>29{HH^f$!yAGO(o}5Txu1{E7{) zqdVOzIXW$;5ifOqIo%U#I4y4LC#1T#nB*iR<^{VL&8BZ5HHXM6WcL^EqP zfxk{i*=|yjOE~!T=W{EjlO7|__d?}3SElZV#PL}cRljGRRoVVJNwHh}kZ}NG~bIk4+^lTua57o*%KowgK1H{f~xC z&LbD2YqR(p?MD|_B7*^6JZJ&}|8HMZX(l?wvv%h2Ha#Ax0iG{Ex=T?!-*U@6H9`vz+< z@g49YtM!;!jJhI!#|GXwXk+fi`NA(8SPE(~NLD*K2x`Xp{%5*GS` zfyVsPvzoB5635hfi}i%+IezY4t^K|d^SzxLf3DBR33(nm69YftqIJyLoBW{hnL|w_ zhklWt2f24|16;;CinQU#admz8QWnn3FUdF9occNw<;&Ze8m6sVW8_+9O zD-yC%;sh<3zl^rRm%43fM=MgNe5e&jFeRd2+z+0qHdRZLc(s1y0fOBaE)LSt=Rjhp zFI{bA@awbx$WO61J}a8}X??|5xW@Uko+5V9U?6&mafNJTap6QdHo-bIv$Ttab&MuVA-WoXKX$YY918D@E8dG8?f zrc-CA{aE;EvcZRG3(~s1H){|g5&o@nJ$d#~qNov!#-p;;AkCZXjM|Nyed`5^Vs-Ne zS}p58!-XR?b`M7!rAh`~Jq$Nco3|_0*^lXAZC^K!3TJ;73I(4hsZ7Y4%%2I6)WB~q zeYCKxXPU-^bT__Klw3J|l6WykU3>kShDbDDJkIcOtk1cXw;tr3vot)_CKMyG(~X?|k!qGxKX^ z)~s1;`VXwC?y7Z9-MV#ZpMCbO3p8@1sV#=CY901sf`oFy0Did>e0eWxQD7s}8RKNc zu$U6U^YHL?t?x=gPNQjt1^s@U?XFZNb+K#uv3^|Xl2CG6P+p!mHQQinnCAEkRVZc# zCXs#J*)rQV2V*CT*?Q^#wB#O4=*0g-(h9DGi`g;Jg$fKb-2uNR=L+aqFjqDZrQW)M zYTu~;`rb}^P<2jlH3rK}G#bg2E^2o-a+_-zmPZX={iP#Ft4(u?Mn*LPqy?J-v|HC% z8?vQ4_LteH>S8*?)^{LLNq~UCZUz&nZjKNq$pNmG^EAs$zoh z0Xd&ZGg~`&!eP@h7xB)C64KJoDzR-Ocxk;k*w}`Dz`p1YlifdYM2%ge=u*p(TxsP7rFKjJYWTvqe((Saq z$ikGO--MOq0y*-4(*+cY1SRdCvc&b-FYv4SS1wZToI`f z)&2%o7YtWbXRv*xn2Au+UO3BlG*tJeGnpBk|7R3DF^HgvYapmspy~3MBNuHJhzjmr_^F+ktUi4a zs)&bcc5${(9?bYB_ut$i^*hg_a@oLoYc92Nud`p)+#8M5mu2X>@nojVrf5Behcio|AzKs$c3G0wrxl zkwbm=nxI>~>GAq@7eKJVLC|0{%ZN*KZ&qaf{JV53{@E4V~0GW+jJm?SP5Wn%L0v z4Ap-0KMN$DTSTwFP>aVj#itk2+Qc6&c>|_51$InBflU#h5Q$wL-OWv8&+hv~!M&e4Ge5YX&o*Ln-{bFCyI^+BFUTSI3mph+-hcl1n&stH$+1Rvs1?HAIV7IX%=C`1Tp|YwmyNCdyd<3^e$$p8HTQE! z$4$a!x_VBw(s~i3=n=?YG26MF_P!jiIHhmczgfFTHGwqIp7OMRo~zkPtvyUOVTEz* zK5xtHyTIvd82c`Aee&^&ywie7j)f`)XJiJ}k*SO!Uixm`fNGXlN?cZ1;$kY)45DoM zT(a=p{?%!|o26EKndPbM<*yE@&e_Cjh|B6L!(HErYlqcX#uyGc{1#o12A!jp^ewU` zW#pq*T(B3j3yf~N8-1-TWe80;UeM}DAltQGen3!c8Av!dcRe?zc>2v=sr@%$spWm! zZ|*hW$EqPoLrl@BfnTwAX!fO-=9V#cBw%q*+0>9mxrtjg?!P6ZJhKs2b=bO!j?CT? zr0I+LF+PF6K7P$hG~ZMw8(X&ieX552uC)wZ^I+)MTD6^Yk z^{d1*6|WL%ymT5jD4UyElM=%Q+tE}oD&R{$t<0b)X;)!5wegsqF+!@rO4>B)+}aYa zwvTu-OW0P_3H89#kKVo*lwS&uT7l%-ie0z-J3As8sTOMhh$+NX-gGURml35&RSZHOK zcBM-!C3hc$V?2 zkdA?+rNH%0(7?Gw$z5rBwxa~snW+s;MMX@INP5ds%77Bnun$~}Lt2&OAhoZ7lF&5{JzlglxnZ_j7m0?OL1 zM~ol6*V8JLn-CxdX`A0eTn4ze_gj5oTpWg{dsKMb#EHXoUK;hAmTKCVEO0oC$@ETs zdHThD->95`=HdywP2%yzp2c9!8~A6i|HAhaHrhK5&Rpqug*0py6rqRSZzNI>nzt$T zgvm*A4F^hY^?oqyii6)XDdI^JO)szOTgi85c6-~E)4&>*Rgz;YYu+JWEe^Gjxj{Pv zobU0UeP1Y5Vw{$U14#0UbYp87Lvm*c)dbqu|{$7M$jj< z%tKoeMP{=%>b8OPiGJ5L8bE_JK_xr6;a8#VF-ciNvm8!$D}ODns)1KIyxIWul=T2oafp_ylY&i+5A5Eogqm~D54#PEQ`0o&=^-kH6(FI)rgmf=D3%AR}MEn3d)kG zX=V}MU31!zZSmAK4&fh8lWp-$tFmXd>dw#JLmXLCd0hz*^u~}3Fw%6inPTGDiHZ=$ z9sC@9UD&qEixa>SkRosUds+Am-tJ?H4DvCVZ(8=Iq2R(b)qUa|1s6*2mtEKl-=U{? z;#3ydqDRNZ1nr`eLFoQ;Qk3Sjqx2T9gL@+Epsd2$7oZ{rH-@V9ZxLT4JO6YmRW1F# zV22v|tg2VA@fr)y?FuGqaAc^P?9xvf3#XcVPZCn!vgpw7gGp^_;hx>^TY!!_Rl?I7 zieG1Z`-{*;a%~%LXLQeqGyB8l=rNRy3k2TyP1iU!&CufGQy%WIzo~6#V!q5DLHpU7 z;y6?Qbm_>nzv#)_RAy5Sn#gB#!-)fA_V4WtIM7jsa|^=u7cWX6Yhbi5h?QdeaL+P< z=rU315jn)hOKSZmj%^u%a)ys{_uD^-!>=yBm)>n;n`Y%!1FZ)fAy_>`cx7KEU)gt2=GUm{L`J14 z1dlt@=%g{7j(E0Tjlqjhs>{&UA>W4!N|_l`R;QL;6!%6$n+1OM0OM*yU7Ti~ac1ne z=Q{kO(ATDSJ)BME2Phl6t&>Y#uCZ%dd2UXmiv2TmY2J<6=?kW2Jc$FlKsR-Fu|uID z;{x|HA4;3&L_4ELXk9;q``{+5Yp62B1WkH<8Fd=mBrm3fKvF>|^Ymsg8mmQjX%wiIAkx$&k@WS0( z0#V`?wPxXH`(c1C;7O4e`J6)Xl>mI8F}hIOORZ~}*Kg3%$yMq=+WhDXz^7KZ#!B7g zuyK?wO_}TNj4PKOuOmA!*nj45U?=_ugJ#9JxKq~#M>L9^=rX+T1S?=1C+uspRZ2rX zxAX7DUH^$)-k>I$pxiBSFZC_4fW{{2nwt|<&r%*g| zw9cQk^2(CY0d9Fkf*MT8;0tMk%FAQUdMWC&&VpSnbVE1PVJdQ_{9gYM=2EOG7)bMz z;aQm*By3|^CebqN#h>|!^m24ZOmoT?Nbr{^8iu6#vd#`P5{HG4xe{sooyu)4@RUP| z93S&)OuKVVMONl2G@HoGc#(sU%=OuWPAWGfJE$!iYjo;b&g#yhkGWo~UUY!j^qMR2 zr*&D)HmHlflKe`$&oSII^`5claM?eB9_n@0gAL%*>yRb@)2()UHP0mWVg~7sn!mFi z^r9Eay4owmYL-}^J}?i8$94hoGuYLk1fQ;*hS5lcjw-Sev5VHqd)ZGGA*&& z94-2^!ZL_)=q0BdpF%_6Ht&P>U5CR&Sp1xcNMhz8W%9Zr=Ki7-!{+|$q-4_y`i}E%hB}8?AZ%l4G)b;iS zwu>RsJD<>y$l!khAs3GN`k6N_LaWX%r5m?J_(zx%Vyky<_v0)i(qrLA|8PH-M*hdb zh5u=5nlPe6C=IKJ)S>*(!TE8T4;~@ecehXbpS-5>a2@XX^P+zu{ioT&{<%6Jh2*dk~+0s~x4IVmzVgk%;$VIL;+BEA@j-QD`<^|EozMB@^`&xwP78 zp<3stDt`awTQG^;L;VVIn3MPXh{Ro3U*H|riyn;DvQGpLM@O7im(-luyS{IytB&`~ z`qp~os?T9FYHr9V>fNs6KU$PBzDS=q6=0=3xx%F)B1+4r`L!D??C&TQ8G zJ$>DF4wEWIV7W<}eMX@ngGuGpW;lDiI7E#oQ%IHOVGNsPSWnVuO5Q*%7VmDEZXslM zJd-2-d<+;UJZg}{dN2OzS6COWMPJGa37DoM!d>h;`Y9DelV6C?DNQy*OxD#XaST-r zD7CsFPQhS$nP!`^v@zR8a5ar!Lmtcf$-K48j%X}G(g~VZtC2yx4X1mN+ul_Ad*6PV z4-&L{4vv3ytm&{wSh+aP&#spR4**L<(K)leymaQ=q&r4G#!YUz`4f%<2A7-1kDSR% ze!qK^F^9fw7j_Q|+EajNGl6p$h3~3uSNk8mKR=nQy1%}&$QkWc;B@VDL)UhMvCz|b zF5abDb`2RC#HcE9`efz?+kQ#9I&6pAQRMzoIL3#tO$JPz$v^dA*jpqTohqgd@pNWY z_|bMJ=+|}w@${kdJS}&KUR7bjs<508{LU1ldD-)5%!Qr+W91dNdtgG8g7aM#=iYQm z-W?p%eo0`vnYi+3d|PfZx<|$1EP*K2{`(yD#Jj+@5!;h{VcYK2-(}nI6@-_pquvA} z88|81oIVL=5M^AB3nH0s%WdS;{q?NL>R}F~Jdx93FB;?~b)g$tuEJV8H4>HVjmnV?yzG!Q-(_Wc5MtrE@ShusJ};K#y(-y&cFIn(Gi9UC=8f?nr&j zjA5~rkzVh-*#eggDJh5vh<;A_Jdq1x%i|(#BC1#U&018OI~s4FGmp1EVqPF0(?eF1@2BNci#H! z_E!TGiL{|B1v#znf&BGxl{scvo8-Pm@c8jMxBFyeEYV}<^?VQUV+*Zo_}S1Wkss2p zce#ycbCLyNnDK*W#Azan%ld7N!P~^+Be3S>fv;!3`xF&nS=?NE@}I!2fsuKqWtFr9 zicr-$S1HZi5$q+~6?K;T~x5BE&r2_4tl5q zwMeXk$;=O7Kn~;V2(|N3umr2Aep?e2*G9{ka2Wx8ot4k3(ZDkhj(z!bLVq0kxPJ{n z_~RYV9`NfmW(&`BDnYCB#Wv#zbn{wAs}*&OvZ++>?baUtYq=Z)x&nJD@}ZXDw;w;= z%#5?+b&XIsAMKj5(u!K8;^uDN_$-JsXKB)c-xs4vA1)x@_)pLGwlVt;LBw%o*aqOR zLZEnW5_fN2wA3UeTgU>3S=6*oCecH04>Y#-)Fm z(YY&OxYBD#J&(_vyd)%f@4x6l1Go!}m@)2dHy!hvWpfh!w`$z|-)fv)N)0WDyx~mb zKk9M5Guvpgdkdfopje7zR~cC@Jo95sgWM?aj?a)$e2ti$eY%X55{odUd!x zzV2|<^F;K4eDAP8!iG)=`Cue{x8r|LCRo^VV517oXLoLue@^raQ6KRSnEPeJrED=C z-TCMyp+B-L`?k$MF;rH~4ffhO5YFRfxEAJysKRug5e^&dYBlks&}&p$NsWi`PBpG) zV@dLizB}gftYNcT?HcQtnd20JmAj??DFp-a(KQ>5&g(mtzwGu-DAXk<2fwAb3Y72< zOV-yZtz}>;E^?`((x2NNF#UE&&uKM-e`xeFm3>bx_g@wlVZ0Cxfq=wj<8!j8-35O* zrzc-ZYQ3eo`yB0Khin*gceb^~jjr_^@-b@Y3o@FtI6`!grPuDq5WaQ438@@rb*}vj zr-Jmz<%qco8BIiJ*w>1qTiv7!j6$wth^jc2dL&8WU_9|};7(HmL7xS!@=eUdT!}vw zvu5A?t7}0bcsC`t*!gX~~qHd~_y`Cvg6v^ZfS&Ov8E4u!qpex;u^ zvCiB{?6%f$;M1D`HL@~h4Q-iE;DSZjkq`>yYbry{0^FX1R_DB({x>H&l6 zF0FS?9nw?O@_YAv;-;Yjiey(YZ|sTk0_+hdvOKrAA$)`zi8(vF;rbHCyI+y^>{U^v zhmKzWcz{VMx|Pw&jm7X!qAC`z4z&+driEB=W)yPEgl|Ypx9APTd$s@_7S0@?#$*J#*$tTLkHyMr(**a0To2b^Mnmkm_Hb)Ub=F<@d zYuHZlg%SgJ)tvZ^6ZKW`1Uk;|^1R_y)ufNuO^^#)59n)90&9#Cu% zU!39(kv|z!3&qJAmp@U!Q|^QDcv`emDRM_lq4jk{tEY=hFU3Ls@PwH?F=mI8yMj>_ zD?k9+$3>qIP-841y~%(%GQJ4fx1);tGQ46_7z%@B){;LGS1K664q;`396b1tXjhhH z@Un0Kia!H#?TD8%;My%tBr6#+1hHKGiy=~~y?7!3E!WhUM?64mKPHo2!w>7re|$*t zuJPjRr#0&TusQHX#!G8dt<3hfp`Vp(%%%o!VHN9iq26+4wZAKydzvE5;f@eRMPw$? z!UW7dF}ErXgwQ>*_}k^tExI#4b_DZ;B=UL~f#LYnr0v<#P^nW|Fly9Y@$Lr=Fk~(e zo2|!w`3BpS-kOCTn-{w$C9*vQ=7*u5iaX|uZF~m&PBi*SXKR-9{a>Y~@o(d)?gLIW8keZ;eG zZhL;A!|4oXs#8m0q_{qEKJz_RzU$8`3*TW5i)CZou?oGK63wQi`8=yc?FU(ieHiT~ z4l~KsAOk!e%5dwqzVcjl0@i#rFBC|A;W)0(FS^t1Ba<_adw<|!XktOdU zdsv>4r^tk(Vzzl*g~O_g0!v}8X_U0x>txmzI1iOQJ$G|`Tl|?nIwdlC9^mvA5Y4e@ zDZd)paOGZgEwd}W;Dn(^cZh}6KkapP?NGTr5s>~-W|?2p-Vt`jF!D`V>U;Z_j>}W2 zbI!edkW6t>b#|?G$EK=vbY5C5GS#RO3yZ-{_@aHbWLtY@|0^H2Uu!n@^{hakTUqc9 zkFV)ExPGU!pVVO>dm>zA*`%vusWOso%O-VTR;B!I26s6 zB|p#lL%6W$lazOacnc@pyv?v@f>-l{Ca;M1f6EefF*VcI>&!)2GiN+ee6C=yrtG*P z1PspT`xkB|}Ax5eDG34IM`iAiK#iJD!gs~va6TfBWu3k(zJ>YomN){N?H(i0RI})6hIhhLwjzi zDl&_vemH1$S?(a6w&$VHc6RUZy>9vRdYdGUU+$Ih%GaJrHj5aV$D!WNKKyM zW>07%7NbzzRC+A!mMs=P1<0AgO_7l2xtgvq>s|+3)&8PCjE@%C#Ksp{nY0L?AH}kr zGO@Q;y?%1@JgS9qw>XT;QlmoWS%9GZ`{D?SUkCIh?F->A)3ffgjfH9Z@+?QZNU)iiqMeI#oT_WXiBIzDU=;K>K@? zn^TEL;JLWN&`ZCXWMg{Bzs!D0i#@H7wSCBsz7}|na%*ObO?ifQc&fG3$xGv%H>Ms*Xq^Vl;IXIoDLPsQQ2OXLBj@mukCmfKTqet$$?HLEP?g6QapHl3 z9!PSrDfgc1zSBUAo|38imXigQLJ8 zmJvpk_`$=?>91?&?ukYHL$%58VE7kko#G%KqhJA;`_b-jM99F+0Ai^^b8 zuSS;%2Y;vp*yK4eit~fQ?nP3iLAtiMUpe8`nc~D%w0Ugu*S;U0$f2}wCR-bpY>|&` zyZYzgMH;ob;Wqy9)%Kj|9g->cVeZ;GDnTX*eXb@!$f>8a=IwlU%qBe@MCe?N3}Re$ zF4X?bdY#TOHHG5S%+?&KF1fcnIi&3PwsYHyl+)7g>dLSpmy(S*ui_TW($%a2Pf-o4e+j7(+-zVd9 zIwbl?vR4slBC|MBVq{sY$Eq|+0M+6YO@-Ky2!b}R9Qqb#$G=v%3qr3e-9QUk_EU_! zzmsppR!jW}UBnb!Eos8bh=#uMf!ekm`tVEit>650Eh<>S5{)E)VmRp->m4MrS}v78 z4&U-bpM#_&XG;i{o}8XaGYpksX1C{F@<=q~2&j-U6^mMHp5>_~4?sWQ$M_ z0-G26bY!n%R(m{05+W)<*JxIE2>l`LvNxf-f0Y&s9@&(xb9(BB2b&U4s??}tpFjJ} zTO}w`$!GSD{Uq`cb(zxBBH3_8PdO^8FrWW`&0FQ&5bKP$vC^Nm1NuHD%Wql;43zQ0 z)0$D6;5C`s{&)iA4jX!ubYaz7ox6lELlqhNVRo63z-bvbbcxcLc6$Pte;dd`5R%(loVM^f)Mnw1;A&xx}mV?Jv0$-Gtx}cnNp< z`xWmRL}mWlp9K%;;C+kG!#{su;GxGao;VYdqCL2&U1$M1d%o?%X>yi{BK*Z7w_Q+jcQ$ULEP+GJjqhe6hpeX7}C7T^980vj^l zwS1Ao>z8(I-s40EGCU8g55&%W*x@O1Uf&#GX08l!oqXSU%bW?uNt~M6?zjo}hAf)buuG99=#C$vGSNn-4Z*f0!KhEag>uVp`^;!s#nmY%?-4`pZ z9R=qBxKdlZHQ6H&r}vX{_-1c>GNYXORB{y8B~fIa+lWU1;bY zOTG&oi64TMOoN{KdYgLRLP#!FbGo|5+4Vm6Ey}@LgkAVVAyyDn>oUeoDG3-)Qe{4b z1!L>A-w2g_z5x9f79g<91|`fcp|3x=@o{L-WB!A#ZG?XBWR9ES91$vH9TF8yks6R@ zW*D=rB@drVJ7hENP9imC{l;{=+ETr?n^j>G{jM2K5 zD10m3imdsn27YcJtBpMjKt-tYU2)f+Pn`*iWl$b&2@`be&TDSmdbZ!>2z^<4_1;1E zu7+yo+K|XB*XyjBY))DRwy%CzWi;CBvX~S7M$lr~ox83!!kz&e_s&)6Bc99& zt#@y`OktQwCxa$OaH5OdP(34p{Z8%?%2Sn%?s@6BFsp=Z@iZM2J+?2gu>N(kmP!4X_C!ZWx%C)>TTIflV{KW0v z;Nz1%mfJo5#OY)|4TJ^$dZHN`8u!`5V9Z!9QX>D1{@2`ownY=Q;dn3QPK0^<@gXs% zsjPnLGj)gMwUk?GCDxfc+<(KB!)GMMmS^dO)pjFLcE;47(%Z}v6sZw1QD%FIzy)wg zyhJ4==7p(b69vXoZqr6TM0bvhIU?M0)kxX(6#Ga<3!DQlJlq_+vhZzpEgRY|H)+M?j>2Zz6o|WV#;nn`vpyzk` zPH@0WdRU)P<3KaRfqJPGOpyw008;AKwjpy97K@3;0j7JFRBcj*t{Po`JvV@@AwAi+ z!~DMBg0ZlMzHx&=lc?Q*o}I9@Jp*`NN7lghd!=IyvrsrwaRf*-R^5@`19=%eXq#-A zITXOs6NE$1u}bb6AgQlX0+8$+3i`V7aj*zTqRr{K70mTrU;_vzZewtnA%wFrs)o`Z zcJb9{!d_s8pu&uwpjZj$4=7dp_#`ps4IeEjciiQ@tg9ndY9OooLX3K_#4 zM6GqW2pUI&!|_x@{|s@YY&>q{Z<6D~{cuium7DsB9Vd`s#bU@;@)63tE5|t%x0-BL z`hq4_f5Sr0Ut2@KHw}&*oa!62Ih!|m9EDiJ!qDJ27%;NYc)@pqkWNqGZ7Tl?*?ad( zUz?3d$*{Rv-D5`>uu^B%uivaln?aLU@mgc$OhazQ$RLY53~NiU>~Y7wI|N(9N& z?O_-g&&ukfWh+57Ka4J@Y?BJW7q%i=H;+3)^wDV$%;#8g;7ALB;o}a@cNC3DPk{7c zOY*3iDL_%2|DiK+K_>}_2FJr*v^6N**=* zo4LR3Jv<^KCm+eN{M}+TGI;o%^P~pr7`?5jbflBoc0T>aDy-=pXuV?2rY;$6l}?FV zj?RO6k@R@zNfI0aIGqsPIVMKbwFF)&COSzN5-nLFNL^mEj!9Q%g}W_o1zSIA9h<=- zV0j0y9e|Ja6H7zJiJJ*st!!kO+g?g90aP=CELc9=lP&}YVE)8yMTIoIj&5q=jn`^OZO+f_n&+`hMzHy_3n~uq8gesKNE#H?#8$=#!**fv%A3br1%$s z0F4c*=!=kKh<#R1N8I@6hU6Ihd-3vf(xk?`-(%=G|;%Zx*%w)u8o`ncPX2s3~` zoK}nX9MXd5s!?v38i*Y!E5v7Tzn@bg==<>Nfq1tM@7Y0ViR6~(hUdrk)<4>Pj2z`+ z%rtd~Oe~u0ERDoR$(?0R(?!t6&$X*|=VG>5Iy@|N?P!OZup%8Dpy8#U^g%L!&!ayR z{NXU#Bay`RQhLtbP|4nue2LYvrs_w|+R;jpRG${Vy_?LG5QdC2fF`V2_@cQWZ3b>h zw83P7SIhQpzPi|LFpB^|uX>al^Fj~CRZCII6L_!DQS9!huSi5*Vf{Xkxn4;+ZBb^I!w6pi}Q)j6uRffP%TgjNTd>1=-V zE5j%W8@K`fg?&0+%hgK0Ic*!_C3A&nuBuS#pWuPMlBy$HE2}t|qz4dDEtKLYuWr)f zMt&YEt6C)hD5hhet35#I7->VnA!&pOgb43ixqv3>#vKx^80;#;+w${O<6?Ed$H4uE zr-u!*oDN!x`DE)sCcNavhB2O?rH}vQa-`nd5ajFsjE|n1su~E`3oJLHfi#680jguY z=3+c02^$aCAftjAHGAr1*P9pqVO_it*A4e<+ccxN?F#NwGeN2$Rn|m;4kuA=y}c9+ z?3XR^9=wyZU2II#QRfQY58^lFGXONknvS- zez(E7nor0(F7aJ9uZg1#%zK$lay!UlsB(EiQQHnCtp@@4()DF3f{IYL@?{L&Nmb`M zwtQk_Xn#J1QoYp7^jBN~H^g&m@tP`&`<(W1vHya@C$`Pv9@6;+PO}_y>vE}EfD@4D z!M6H-u!j)EY4Lu*LufOw2;C2hBvg{xO4u;vHRj(Z^YI$SleZ$c)%L4_?|S#VQcurX zhhDvhd)y9f$!GxT3h)lM=aEEp5rHpBmVS=N+Q?Hr)#ppWxX}+G^mRo>Q zy$Z$*Fr1=>^Ej~FR7yQQ21vPSJ(geg6v0+*&6j2_+O?N6Q&OF29h$V#5a=o1Js7P+ zCnypi9>SH#>{qgV8hTJ}*v5wG2lcd2Q;K2C6;*sR^%t*;GzU0*R)5oAE}qk-0S~K! z+)F3`eS}nd$0-cih9}Pjr7RxT^4h)G1`o`BUVQjyj<=;%vWZ#|GXEaT1 zdEvh5f;Ts!MMrM<#wFURxcf2x>h!>$mu?+Y<4H;c8*M-oP6(f^S=KD>j%tsq}JMbMIUK-g%;(RSE`xPb^}u2 zoOL=&-NI`6D$~Sq-`mD7v#x5)QRZgxGYQiubMp6#Qu4w~cD8Sxz5Zsa;~)R=I`vJX z_cy(rs$U_AUh>G1HvV-X6!9IPuF+s^1ulGM=rqNzsJY~XgFv6qV{o3qyg z&Z8aRNzrD!=n8#NJX8H{AqF!Jt=ZMO@SXk1&>_{(*xS2U)x=EU`BjqUgDE$GeLHeN69z*Z7LnVrxf-rrXNR~?hWxR^ zCo6yU32@5;H8YuM=!&g)zvuDZ^<43#j_9{)Fuk?T?;c<(jXjU)?XPsWX5ep6*EwW{ zwYW{-xnahBUHeUu>RFwtdn+Xu62}L}QOZqV1m!UHz}a+rUk*8HC06rJpvAkb)y`lQ zBBa2g6-;g6*aVsVz%stQ(m{D+h>Q%i!qpY6!yD5ssY3eWu#H(oqM!~Ni=k!Yxndmg zaj4)1K8`VwLTu04r;tIFp+0^Nrf5G%oq>qreRR^`qWGgw9x$MObcHc zsJUaA*K=jlm){a@%g-DG?OpN{e}eB(e&$_l?ohX7?$oCzb_O3kJFUhwWN^7&@Q7Z4 z30jC)?|>)ZGfbg9^5ly^w_i4wFsP!7$t}!Kt4;fBgP!Lo{K_%?0u{l_yPo&NLKZ@c z(xe{p_-%e#P(=$;;j}!!2=N#dtgZ2KU%}xp=N!7ZZ6!>P3 z5}(9gipa#VE~=0r+!8=TyQ0TbCD`-(9tLMcV1A0!1kDNtmklMUjxkg66c1fJ`v%CB z7U>5A#|+QAh@Sz~#@)$Pk2?pRA2^t5hcGzp0M_yee5bvf5nTaHoW1tcRd=;k<@y_qC5FztTmffBL7>3an0SBkxZ~v6KlmllU9F;$FYpb$K$;@0c6|$0_B`cI)ycgACx^~FGCpmSsTrVAFq<~Hd_ov>L(6n zH97%#`;24vi!0N?>^mm;&2|cU^BFl!?xa!@Df9eB8w_JNQSBF^)p8aVD@BL=;1eo* zrMt4nmrTONBPnKO;*l}TK!9<~g=x5{1-i!5IyG~q>zlrx??Bole3G1M%NwPbmpTVj*I2>EIk2DZ~Fe^ zQs9pYJ?8>iq*M0KDv-Rjsbam~fnZJxHOBB}hmw*3{`^9Mu3xvLQYpN3ywRM9AG}o% zL26-+P4qgkITZhMek32%zhux_oZDd3M^;_TD1Y&;DU!cht4I+-e>Zr)fBE;DZ=e6o zSpTMtC<@C)WomY2wP+>q?@~w-cK)U^Xn$L?K+-f-l zJXm+z!P;c@`Yo|=xeg7x@SMDrW8dB|o@D=vKh4uPSv}F||9T{O)L=UG4*3JVk%b&@ z1{XS4VAS#89h(q#q^+;zSPE-gPzu`pZ5GpO_JTl&Ld& zG@Sz|yi+-v&9kT zKiRy1-KW&=uYX?N6rT$U-oP>Uv`#e{)YaFM# zI3}YCC&R++%!@^s`8AuM?A_}0^xaC?@?$bLPM7NdbUC6;Hm;_VabaD4a#SsgX+vsu zqvFf4Zcly-IMMYu`Sp#LOo`uBzHF9eM{H1y`Cw*uBfrTE&s4|2uppgI!@Q>fv4xeeE$0ArY}+$i1JfBud_%F zTJNd4cK~5ZTGiz{I4t0(xGy-6xs|Hzjk_E&m21)uPU1H9^uFs;w!X17+uFtekq$}kc3|lr=)dh2f4THE{h1t3UGU>26o0_M-saU0-_E%sm4|_Oezbzr zD-kb4OT{;1qv~Dt@;<#LBf5c&FgHWq8Q(N|5}(UBK@_N51IQ+3;JWQmeCPAm_8EQ;;cW?VBpO66y$4p8U2@KS@nWIRYpRub zcOG!LgC2%DYjlMA^NHDR=HU#HmV|803ppS+wTM+e@N_gHwPwTXIPW9z9@*`7knQZT z1}^FEguaBrXYsYm70q*tnm3)_+TTe%eeYFj;4VKF`F!Qh?r#({mJw0-()_Wx^{$Ax ziKkt~bO+rj`9t9qhw>?m2I#>-m#M{UghaquSo!X8Mr)#68P~RK)N>yksxTtrf|n|!!j35DD#xGv|V zz5ET#W}~YloS1<8eWCRxTH*{wYNev?v`h>?f>D0@B&hs5W~wIsdLSMkH0DkwBUI~G zdZrU1IF*z5$N|o|zp?ljW<-%&luf&QIsvqbw#4xQgB~?!e zxmfJndbO$Er^FGGf%8VUG&4K-XLm+9o)6SBb2Vw_J$rtFjpjr!PWNfg5Yl|`OZLD6 zXz|brfmG9q5MFCC`aBxwvatoa2e@Rvbw0U0UYY7dtt#rpYgYK~4xKGO_7~W%u{1&o zM7aCjQ|@$d-KAWFzpcG`YSMOX2GsC?G(Qi(B6e}vDU>j6*0oKTew1#R%wn)IcmLtu zrE{f<8IJv=&Kh!&=0}RhgqV-YYT8BfWsNE~3l#3VeIU{!JREO|Ijn7t@0srLe=~qu zj(xM*PRgTRx&q{SdweU7;{dNvcZ=xlON{(TWb6BaSzxK@?B-O65|>3B{-?iPmKRXG zXm|LkgC*Ml?=vSV(a$#^tU6M)%RvIba&_*|*UO>Xg4!S9=(*~7JF#hr+ zmnU_iC)0Jl#`)`%4fWq_2{=Q-gWfU+xt=v9yY^JftLMJfO#UnOjid?^A4Gmh%v*qx z{#(K1rGb|8-`}K>Slu!pRopEl2!@bMQ}dN-m`sK4x3RrUxqpPfxqiJzoGA+K#-%j+qr%-R)O<3PEMeW&M|MC<8) zMA{IHy@`dLK;_>twLA>JG1-{C$5oQ|6piGE~Ee{U8cw}oEoC-TluOz^5u;A7Wg~JAi_f*@rdMv-n@qG9c(bKC(JU~b!sUkuAk{izG7rRqWKhQwwif_( zXj4Bk6TP@P!o7;6Za+{o^jdHdo$|baH(m}QLm#o6UryY>nv@G6-C!PlaBmOyf%f?? z@IK$!AGQdRck=JAunXlq!Tooy{q2S?h zu(z|fu|pt|z2l*OgX8o|gYZ!t`qVuOXQ@WsUat6Bi+E0RRK121Mc1KdrzZ26xoa1` zVE7nhyar|?d|1}A<#5>6>b3fQiPMO7=JsxO!By(NaQB{3O?^?kpo)l!fJhS%P*Le1 zT}nVvMCk&d7Xj(L*AS&DRi$_7y+i0hdIu>9C4|s>2)!hbO!WWWoB2HJy$>__l(mwq z+ikfx!AT08I`b^5WDc));{-*S}cT2$8KZ zGupy!Yb3V4`2E^BDy{BQ8G1B+RNi*h2;?|K$gURb)eo}l27 z7k0wJWrrDKkb>RNJo#xw!@$Bh;%(Goc0N^RDIAZM`VKU8Sf5|IOgY~<7_z@iG3J27s|5!AqmQkFut4Y(L6O2VD>R{uhLZ0 zWcE8u>q)YQR4kZ{*`BS5iut7Lh}4EurO!0vf7Swe64oa$_`}OZl66+;dc8I`eL~-l zA`bo$KK1jH@EwMy_~0|nmD>*QQ1=m;rmwi$4J+MdGJC=?_vgSXwNo-9V#f3OWSE8B z8o!1j(hIefz@ZbiWaWz(P>?CAqibIPkRgbTet>HfUHkGl>@!-rGmJ&b8HpT-PV)J*oZbBo?`KFG~EoNj| zKoes#&9L_9!Z;Jkgw6u-oR~d)%W-uUI#{ulN_tcFfEp0_^nNg7Z z?%rX4oUN63R82(c?6780Ttr@7U4D=HA+l|XZ8MeD=g~*O2gqulw)x3kbpiN5;GEaH zjtLb+h(VWzFK4S3+Ct*O!qLzfvrT>7Xh)0r(}<&^ZKK9!zIL;XBk=mKJFIy3J>Y5e z#%Y-WWa%rful3MMmfCf!q`@6*hm%(>e{!O*rS|x9aO2-lv_RhsczmTsuVPfxn zLjGV+&}_3@33U`A^J39NK$hh(J;t=S!v#Da@J^injUB>(j+lB6Jp>MYZx1p~6|ou2 z7r1>RvQ4+BM2_qRkFiuk+oZjenq`79-2=u#A?D+^IOQuLa(Nnc_ik=b+0SZk9G=N) zn6Ny_;E~~W-fD=)%#1vkv|qom46kTAm-belyh4?5?Tn4H)%Pey+b(XPGRZjLq{>1w z1n6cWt2Y8^ecHOzG#w!yvHORkS4tkqQ&J?TcRlL=QG4m0y3-4P(p^D)x+TJC15IL@ z+@u6G?8Zj2bMTY}p5XPkCSH@ar!-rrUeK33+@_r_A(+#=?Y53T@e-%=uaodl>KS9Q za9&}L<+yXp)6S|!MZ$z7fht`{bGqe7_8iuVYsv&?5wSjOROXJPYq9Dk!;YTQy$dwU z^9OkU&ah0YwYUt3q}^^rWRxe*e7)3m(kuGu9D=!8bi~*|NJRS2_y^N10f-|SITs4WTMGT)(aIE)5J>-FjnJJWE$_* zzgX>|$lU4Y7tyuA#|(jw_dn+4!Q5`IBTNb_5^Z+Bu};fYKI6H32~qtsC%)HSL=!q) z4pdp24JoM)D5$?3nCfJmnH3Ys#2bLKN5c+O{Z=PO={rUmVxpl&3xu&=wo$k4 z*d0^&@V5?V7!2K5v0N2*)+(0w2Y);drxS=g9WrT_ZvE{^uhg$IxCVBN zO0ToN9M^L>h>Q!dAw?TSK9mBC`lt)E{qDnO#QVhnGf<8L#?8(!!FuXL?NZ~^i#N6U zFT7+*@TnEm@l# zbL-u4l^RuipTDndS%|`s3aUU)C)woD;jN=MgYa<%zB$8emLDyg7Cj`@ph1RmY3ICe ztn``zJuWlm{Y$O$4FTH942`C!t&k$0l-{2SU)jDEL?pGF|)<2{h1< znRQCZFJRJWUf6U${1mNpIuk&zMyqg)c%8+v=lu1&F9AS`?H~zR`}M_?No8-Pn+INA zeOdZ$2eH)zwp_dcrn_4H+e}Dr#rUe}{*P)Whz0N_#8(R4Anoa$q@7c%tE^K_TkIwb zrN+wOCckH7m|5_6eaK)o*7C)AbFI3H6J%bSH{GvxBmrqkEcx}_j){ZK=>Ih04DNCFDj%#d zin7YIm6_!|-J)Iux>a}NQtqznBznEGA}oavQ%h}!LTwxFx!4b5%inT2%meG7)Sa2C zOl$r}JUFX`+bh*>AX-AR(Dq=9D*L@>J?`};0E6XnZ`H<{!~*@f3Z+l>_Me|Qza-o& zn>AvlKmA<6RZ+V8Q^qqUSww8k^&y}jf3ss21uWWRWXusw8x9mOJEYdcE}S>}%EQKtT7X@|ih%CvPu0QGVvQ>K3&}CbZrY845Ze>!tc5 z!ZI;H;eaYo;%A6cv_i<<9{tmBE2l}vGPll9p=LP2(79EhLh0qu(76(PBnrr?3-FlT ziHi|Zy7~7w;+Snfc=%b7hF;YAm!*1AvHRR|Q3Wqs5;pN&yx5cJ&YyXSWD0eLg>4qe zj_}OBv0E}RWZ^TPmzD;@e=n-tF_tl(z#%%LlY%&?j(|7Af9-vFrDGc+M|1C&(AuX2 zCUD7znb9;0sTv5Vhyp5_e2Cf!?Mfh;L#E9-s zMcu+9N;7M$u6aEwmc`HYNMmIRHYV{a!AB7SSZ}@ADv_qVqf|iX?<^zqA^9Yd%w5!B z*5K?jxN=-0hlj3~y>@_yO+eH3Q^Jy)Ug$Jyo+#oZ?826Uem0HI$m;@`d^o;JrTkvc zC!iQiqq(2BJ&)Ua2_1Rprb+HGfTzcO_lp{rJ+m!~Yvx*|?`*8E1Nt3%=;)uRudS8T zJ`kVAno2qVvEOFGit>$}$-V5(Wn8QD>Fjl8O8ij2RTw4W6Ba)EBE4?Z`&}CH9^)dm zT78jjGJ@*1ejf4QR1?$iTeP$CJ1MGrQFi$6!FkZiC^v}z+Uw11TIFZkjbh<>)$b#- zgO#)a?il)fIvELVn{a0uS4f$D6<>+EiGYq*weDnlBFLG4?uE}w-P-kNkWayKZ92DW zjY@{#urPxlEhm>ui}&nwH-i|l=?^dDseqwxWES}SY#kT_Kqo;83HNVMct zKt2awitLR2tp2nae`R{%qP0geXr(NqnsVm+)exMmc(~EExXwCQF-zE$N*yNA0!q#M zqQ5`$Y*$Ge|3?Pq4F2bBdqWmF3Je?qo~pYIrS4X7U4>&9Yn_ zY0GXh*shP=s|3%LpNo&slJo?2+>5rF2;~P~cbTUgda(|SPxC@?J;6Txt8|K0r6PLe zVyc`8bk#gi|3zTqxKr0$;{<=Q7PyWM&zGlX!YZ5Wm+RyC>s-j|jWZ^n#$@}n#K^%^ z_8fS6*U%r=BX0?Az+L9icW(Ts8e1RmQ|jM6)o>FX9Z?HEiPK@zO{m?UOP&><w#lTuXs6L`-Oef=M6l-hXA_OkSLj5asMPxry93}^-s zZdIG%R0g!xj)oxb=<$4bpSmtxu__M%i_4dset^60HqEIeIF6mZH>_=_pVdhIA%q#! zK52DUZOm88eTIG+(EVB6CL^ydyX(&5A#3OA-VDivEf>91{%i4_^wW1l$_!wQ&_|ty&G% zqdS?CrB|ga!n&^Vj1He|8*GNDY8m_4iVXl20`8X@x$kyquF;CNf2ukIr9MoXpPLinSC# zU>$7IKbCQdH5`9!9j&p+XgO?5Ua^%G(9|8T#0>Xj z<;VZ31w{G^LM4pMxsj*m#!9Eoes8ljg+(S^pOmO4R>UGFGX|E$>;rOb! z!L$lUQu^HBN#*bPoV;!Y9@rQ_WcV~O!T~}H*7Q9O>(SVQt>r*zVyytyGbi)##|V4yHg#25jn|o3(a!oy0 z`Vun~MEKgQZew@j669sPmhc|Z?iJ#>mqtZJyJis~tCv}JG1$#5qOog6B`DyT{oF`ok5oQXtmJJYc&Iar&Op2DjJvJlQ!(ejsEx0P{xfLQdmY=D8(sT~ zvCv8%6(`BM?O%^76TvlK3@tuZl*`RS)0o;@d%s(oVzOa=N;@$Psmj`ebtAXV*!qx7 zls;P_@pcRVsh89BtEgVvPma*7l$O@S>yKR>P}93uDx#^w+>yJl)H7{E1L4}mFYwZ% zY(b#-U%gP5urkcJ}pEi@i?v zYY{Sfe!o5Uw_PWub`!cIcTn9>u~%&M<7JtaGYnBR@TAf*@fl&WH@Tt?i`7(=v^rB8 zAd-xjD80t#6(QU?Q-kRBiDCq;#B~q#DPu}ZJqee55Kovr1!_gcKbfO zohJ8I>i%-7nP5em)Roxr_6V}8e`!3sKW-bF^+de+x3L;A@74)$jACSk=lKzOeVNDM zXr8LtfY%5Fb;ROyM(2`Lc!*a|(`ig&ch|AH7--JUy`byVKIbVzsxMN&sk@#qk4?A# z>Hrv7C+_bBe;Gp!{f?PrSIcSKHh++WV8>Y?$rrKnQDzSa(I2Txn%ySKy030$biOt8 z@0TI}wR&&$fS;td`(pk0TzG;sdGuGXUOSb0ROYe!aEHZVtmjQ3m5(chGvBBkTH~jF zbG;9>;8I%K(S4jCmm*`HKT5f=^?2%y>_TRh%i?WRTo-Fr6~MDpS&zP9<2*ksbvyhd z!2Ez2rGmVW=0~yzhQKy`LcjL?=@*b*uXAxbsBzl9196)d7lA|k5h{1CU2lA5b~ZuX ziEfj9zFW0CxF$_B3cid#jjmCv*6w}stiRp??`+&LH|~p=dV0hJTa_GvYR}WiYQ@%K zk#|r9=Dv5{(}HK`CIoyxyIwMBUi7)SEw9cdCD$k)YTjFB_=Z0CrjjNKRhTFa#qWPp zn=GA?K0GD23s#-ILXe@d)8`S6r>3z~5#=*X`5DLk!q0PC)&btN0U4Q5rPo}9kj74> z(Z_P3FE!U9tJWEi3d&3k_M2%1+G0j}9&a*BBK>%RFjRFTGgY4bcp+}LPGFhmi?m*#e|JfGl-lQM=f^wEwd{1*Y<(TGtb*}@I<=K9B*i63BwSI z{SMRN*#?;$TD~H0o=02bA9b8VKZ0xkW%GqJ%C@XWQC>5+c z=jxw*Wx-NYL0Z(yW(67vFyT*WWR3{wIWjit#3YR^so7QNxr&b}W4*He6pdms z!D1SG7lFyuIzvhIuLZnM{A@?g<^LiDpAqdWCl85lh_AZ=@SrR86N%UU)%`y+hyH&B zB{BSBLBJceYRqFA9y%Q0Z~upFHUuHLs6Pw(4Q_*tD>Vf!czbA4P5kzw1e7XjmDchT z*PvcqoQAz_#vDED%=nXaIx?^&iokKOw+F>#uz5Vut^A@!JJ9FoU2Sx30gkzMyND<7VRE=L6A5e}J?J(8vB(cJdn zfk&>cTN^7I3oG8*&T&O7{}8F)>D%zPS1geyQyc&x&Qb&GkM(_DVgNjp#i+e-Y)_LO zK!~B7U~c~lZ6rtHcPAWVzm>_5YhlvZAg*J<>%E`nRa4G&?Ji?@jEZVS1RFh``9JK` zdA%u*q`4`*zoHCbv3tHZ$@u!3ov;^r5{O*9^?P{x$4ns)jX&GFBqoOJVwlA)-o5jX zssN)0-NLlNZcoAfLrk(QQ4{}ZpXT}-_pM!e^X?}VBUwvL*Z?fw1^o0 zqy1#m4X&Ma&f#}PNAMm%vakHRh8U<~Wn$0T4(ak+M=Im}c9eNn&T%tA8hgG|Rb-G) zYCJ9mTFb9bXsJiPjOX^>TPYfiWLqh*K1@SzekkD(VXz0Umr+QaTG0c)rH9*(6$PS8 z=HICd_7!W8hS@0Eh3pMhWX`caaXe^vfw)Q)<>R`OZkvyvoyj9o^>OWnAE z@~bbE7avJ!8y)N~a;!CZ(x^o2+0?vV;V+qP7uxN-)ZB5v2EGSIKh$jCOb1AVYFSk& z6AdG3jtin0?n^hH>_PW_0y9%JH#SgGeL%Q+{IOAdlYw{}Il!iLSk~Bn>;`IktVPgD z#o`>5Ao(?Mat#~c-elb0wT!!x_)izZWkUr`e$5_2z{RQoq2 z-IiyXAEX(<^kvH`ct-zGYrG;2&L4i3W2gVp6G*g*^SOrdUTWP0E6-ToQGKVk*ApSk z7IRdUn0LE9$4PGB=PDOX;E}=lkZzi(0o$ly<>I-En^y`uF|Pa21SyI?RrXmWCw2p( zsLAJ>V?Rng=((^mljfZg!6E;nTR}|(y+F>oggcIxw-(X!S=u^4@NTXZb1}Cq3qaD(U4u~U)_Vh#*Y4`5wrvAS2A-FU z3`Cb_=uc%9L&Yz=A)E0%k|1EZ++j&`JZm~8A(ea3mU)zA;v=tc+VNg1qV8Owc|Wq- zHNU*2v>I<;6IDlmF*0=}mZ}WDFt?GOu;vvgcMP~y3d>uCX}e?!CmLPbPh*)Q!LUrW zO?|E`NBYA8v(6AZ2NNn35(sOF?FZf_6*yd&JaQX@c_f@RFw83n3R(*m(JzaFPju(i z!6OhOcwM975<6NGNyILQ|M`?ZxO#kPPU3mC*J$A%{`qp(UP_h`5iN!cp)`;EU21p@ zSXcd*f1o)0WdcR zEC;T3f72YJ)t2;%B#4$oz*CX^lhaJmVU$VLnG>Yw_F6#4x7SXFtuw{H_O47($cF&m zzA71i6YV284mqxGmpj?;@}y%@n6cvJ6fyk}gcVgWe$KGt1NL&5G$F`XQuBtt$RJs0KCvkIV;P*=g7h3(b z&E*dtbPe??;KUdMkB?_sO}RpaD6H$4(9ulLEH43ip;x@~q4^D4r3wp3$RbwN7+;*y zGS0-NqtZ(mC5lR9rZWae)!iSLaf8op6uKws4R9-GTwM=s2A7r>(i*Zeayc)HxU;*kJbaaq~;6vRF;R$)Bu2ca?gxJ`x3WoO<%n>7_lNTmenq8_7ltTZ13i69kIVS=M%UT)V@I%8R&{PM#CCr@_EA2iCC1GX1dHqpNDUlop(PBx_#rS{GTEr{+# zjzLC*J7{qyxu-^mK`knxu6W0N;+;=U)j`;e^=3f4m#A2VgdfaNLekGyQqR_QOFx4A zK^jbkUzU-3yL{r!XUb@nbi*_$$ys0D{Qby>Iw*9RHRnWTs(~rJ(q&D#%hpbuYFoXrb_A)pzqg=0G=wvsw!k?Pobdsg72zdR5FJ~m#JTV(!9d1Y- zB)h?B>jf3`vx{IcNP~O)DQ#1u^a9ksT4bX2rf@nxlxVVUE-X<^NE0Ey5!USIodG^G z+4wVNgew`CTUsJW60ARX?6(;NEZ(0%LS?ovimLRJ`pO3;q|KScZ#t{bqcM7J7i~{{ zDD&TXfzcLf1(|f@XOxs9#myjY@`2(lK%+$6KnbO)qMmu(jLb7s zi%Y^*2gZ{QG7anB?uf|mFjvrrZY9bWaIdU|AjtzHL78&Mr^^@GPm5WX`cQ%pl7e6+Sq%8c-ysdOV zmB0mP1=O+f-_9WUy9jqV>xVUrZ^sxvf_8l4&iQql;z$%DqxB1{ zdJDra+u|;Y4e#AWfwaWAo)lWVFHvvgwqHKCeC4KB#sfz|4yOMxRa=#B-ia9Jo^=~3 zIW2_I+;)&o`B>5ku=T=7KQ{j2DS&a3sWLx55sK+c7Ss>f|MsFIz^4_}CV#}l3Zlm)7 zZavywgXz*OQd{o6IR#!p4#!_!)?JhrQ_AJEzL8;1Xg8z4Ec`lXLTtVP<`u>Il|fZq zync-@+M|sEH-~0wv_SzQ`)u})qUMklr+|?%k8OLYpMeRIeMk}k1IoRnh=JdOi6kvM zD$L#aQZL+hRu&i4wX~7Hwh9Hrr3eGa{;{1uiyRS`ufjZcCbEG-;%o$&3<~T)H6de& z%j=Zu!?|0{exLndEz6XnK0C|3ni{L|3;;}e zUY$8$sLvU!!aAjva~qGGt{et~L0H4Z#;|L&Kr)Y>{2xvs5Y&SDBa3r8jCBE}IuOnE zJi~xPEzgzCHYOl0;JK|~oAL6qw~lJ(gTY-in#E zzKl=Rs=69J`=Ir{*R<#9&D)36^yP}izr0`ku|Hvvw*5mA%Z9b;X#N%(smaQ=Vh3MM zBI%7}Tk_M)zxwr)tyi8~dXUv%-iACxvd-Lstgd7t4`vY-&0QDKv9z@7zd4SLW&ub^ z0FzSj40 zgeN`MA)p6olQR5RLIUB>-ZEo+1={qCjYTRAzysxWquQchotnI>*Gox}c)Vf19Fy>t zjDus}1jsXbEzRb+o)jl-^i=C78NZ&#(R*GEO3v;lC+?EQdLPQ4-`e80t$I-(jycIG zYjGNtNpy1`wP1D9HVt6AP3sN{J*| zq_#%{fAb!)lMgCBA9o@rb$X_6Ouz1FxujY?VvIl$a2cnh?WbeEKRC!=F?%n2fZ-Vu zPz9rdbf^LzYBw&%_+B{XzW7~nGrjgx&{lfA*o7N5PH6w4{0qswYv>7NP|pQwsd$Cx z-<(mc=zKheJ&Cwg8zpLY1OLeMtMrh>wNVqOc}m6$c+sAxbEW;?e1WY^?VSn^u-=0KA)Q7Zw9#C-n!6BD-}2DMEZe z@t&1&y4H!t7SAna(#GlD-<9e_AL(}+eO5hAYKFL7o@PUm8!8mcGMqd0qZR(07Z*xw z0{Fq+rRM8*-upYpIZr(P%-k>YlyJdjMQl0hA4Un01GYS1jYi??$NRTgaoj;xEDqaO zX2W)w%ho-&emS4+YNZ+J&yVrUK}$c9Rk=FW4%0b1Yq__0!w2UlHE<}5it28wkVLDL`n$>6Q8td;a zdL7>lF@9OI(%r5n-BkTbnf@Qc^|MsB5ryTTD2w|4(9KP9Cx5G!cJtiLD-@2)Itb&z_nUR-%*WGQ$TGluu zz(9MdYcH^;l&tRXsm1NN_lfP|9Jv| z^K@?`mv*S2XXYNUE|AWI$Q8t! zD<0`7Wa1)@a{93cuLpvnFyY93HPJDlWn9t z$no9W$;GS7koXHpcdhd?kKw=JHH9u zu#+A3G@C+EZK-0WQBP?LM6{Eu=@~yR^7k=2ts+NYzN}JH2oPli}z_r4^ zFxqFSTQz@|F|jCqcoC_0MY{VR<@^7j5bwW#`#-LPBnkl`-dT5vy401Y%ZmY~xi|Y_1UUI!ww&rX#t=3VbnU_yLGsU0j{o)Sb{)mz#~X8;3#duR87z96cdI@A2Y1|Ap&{NJLvLr^E7cf4&n)2i z>c1bVI`ddvy*QdsW9j;FB$Y6ImbqK_^uOLQ8a?9wiiubL-zh;Kw%+{xJvrrQZECfH z<@XV&C-imWjl~4pQppyp!Fk(~y}=JA{_YcP5o-U2^&#KA$SbapfD;d&AZN0|ihjvb z+#)>#$||5w<`~(JHDJ4%R2;(w2kP-(AiX8q7QCzU8a$5+R6&Wr!yNgB{eS@WzZ~&} zrsn0xpO+@RG0iD2e8|G6l)Miqi`E4+GcyHGzr_=#?P#5gdVaDn6GSZB-s&xfs1UnK z6tJl~5wr$@n3*+2e1q1+|ah$~EQwgj2O1F)L~Y!RnU%HPC!*`z#u z)>!UeOFHnRCzpwCN+(?vH-CYRHseM$kNSHRY=IcDzJD+0iZkfNZ7*I9C&HeoIYGq! zJa@<}=F2>(&!`Y{3z#PJ`%!%`%3Es2lMj_?i^`Z-U}If1a#W9@V+z;o zr9`~2--ZW&MDSB2b9FwW;{ZYYlj@y?bq8;sY)QqW(H|jGUME|eQXI;H+3%pN{ErBp zyEte^@t^q|5xA7X%_txvf*w7tnu(k;;J`&*aU@f_OJ>KNcLX}`p zrktFARX&_~23ow$r0qzt@MF=aK|OxPV+j@hHJOI+XCkf2dIF~~9HdlE_Wr=z!MzHd;3#6+rsO{z2}YSI!MMR>G?`yC!!zkjn`qCi+u)AwJ8v zB^OT})WTeIC=|1`E#(s?`{LtK(5$M;@SrSqzo#>qW4QRcV`mTL2BzX}x$}&G%?dy? zvuyr+W-Nt`6jiN?!zMYmC63ym2e0t@RtV4KEDtFe(d$v*&34BvY>N@&_Tb3Z)56$H zZHqs28M~`x)R;s)uWYEM^}4F-E6>r-xs&Z9u5Lc?tYZv%=Y^ejWK83h^Q&)aLrQKJ z=@eKDzV$E&rqF72ihk_GJ9=gYYa4x|_CPeRpl8MwGVp*j)^YG>BwMz5zS^G`39Fz= zUxcseWbRE15FQUMA34M$olKI6M#psiO=|??Wc(p-&rqZ-CdtIBQDI{0JOad_g6tfz zxFXc%s5Tl+F6$Mmyz08{Nb^<&tj;dwm0Jy7Vl#`2*6uv@n*#l4`XIW^1-5FBYji~P zT70If|M)*^0Rb^1{@G4C@gIfA6<_T{*PuX}mVb$50un9Y%dK>l*e<1YT`;$J$pCJj z)VyghvXL-fWuF7ZRhp=Q6^Xs>`XMc)U3$FE0fSixMW=ON-*_oB_tyVgqKXIfWKWp0KXEnnAkg3n98zTmkm04Nd6Ahp9VOJzWrJFtg z#B54I58HGjNhWU<4H86nr)6#J6}M8`xQJ6pWEz4wRrNk}>I`g!&9`^SH7eGn)+G{nm zjq8=&ilIa=?L2f$w2>t1i$bMWS8!VittCiUW2&O`$z4NQL$$oafDv1iL_lbC}1(_n^OM%*hOI5hr%15wM-8lOZ)Ra0p zBy3QPeC;QwpfszEm8IlZog2{P8AJJ@KRC5lKf&*;_L<}xu0CW(b~^cl8n6!c>Q?eN zy-ojQI*xM79^g?t_r!Qy)9)~yOqOw?t)z^>tQQS(ad-DT-B{t&EWVcGhb$3Wix(}M zwnFXlI(lJP-AsOk8R*)pGa$M*8POaY1IpU_OFKg~Z{JYR2;`ur3-5ajFJ8FWJ%zZ= z2w>7TBXjg83G2qyHpC>rn zBGN8QhVRPFzVT7Nf=^`WnPvawk4z?`|(u_0ci4qKhu{-G=lmM9mxs z$5V+}uBR8*OG*uvT3yRwE(?5pxcq5EF@EkMXftxb(8yZd`WGKB;f(TqLpJnCJa@jY3+p>t*$9y zmeQt;t~Evk|1RU*M?GXCd@%sW$!#z$-a=!sY6q`eOGuWT(8 zo-H^NLQVIX+xRm?wC~R9(^f{Iw-(M&g@jtsnhWvvWE@4ixf9&{N`5woR9<1*B>jlM zZ|_=5pQv!8_3deibABCcna=2OZFN+EqH=n=THK&qc1yP_EEjjwy2EB3M!0Mr8KJ)% zIY&U7FJ2_`Q8zft=?#8<>Fza(8d1J|Yz^%nIsS68|r+nS0=MqJM=!Wct}jgw5}RQP(?5 z(@+PcbNr}lS|DMi?1b`EJl8To{NgQW^I@B$|F|wDxD4kOiWZ<^r4MkUzeanf>2<-J zf`IoyM;`k+owaT!Vbo9OFL6#se3SJ=~A>_)Kznb*GKRPQQ4a* z8(&8tSFIa6KJZFasBcI%dwoc4lhQLs`(}B1Xq`9QV(gZDU8r!l^SZpjVA&b_Nd;7j z8)nNXmyJ&?h)lX1y~=QVc_M6r9xqk#$$6bWP_D9;bJ9Yn-M4B)M$=;;_x87~{HoD1 zXHV;`eC3ImPWLAjLvuOX$4MRnI^MV!_lZauncZw-q{-l0F_)v8+s9YLAI~9&;B%L_MDGsj&2> z+6UW$1=HB<0hIC?!m67>B}~*XiEe@Rfo#95n~$PxG@+6cyqI4&Fv3Gk?i&*!4=s&7 zF|ONJ*N$3PmMyfq91$g88s<;#H^M#@x2XfTMHi_lQ4SYiJ#7aQS%Wc7H|?U}lp%Xi z^V^+ON9v$f@EIqchk{FEyO!|W8Brg*T45F9OBiqYazWX2Q_i~X{s5}&YyBd z;i5m$Gna&WG+IQZ`_uNsl7@uRml0bwuzt0kt9yd3>BMpeRpmBdj|fL}kxSj1KBxTv zOhBB0+4D^Jw%cJz#aUfQqR6;^Q^N}#Cj+mS(kEow0#CpEtuZ=>H7wiS<>27x%y+q( z+B1XSyUolbYjbWDo074lqj1S5`qXCUc|C(Fc_8X*H?wB%Y`tHv0AXlzxGk>>Cz}L( zL?3U;j$Z=@%pq{%u^q9YAbO}vV;eCajPz+f8ZrGaKivC$wb+kcD-+Gb&o)<&sr8<* z!pW+fum8jhLn=zQ8COBOf^NP1)JP2eG+-tOIm%LU;^&@*Du!)m8jaNkaZAFh&^}k9 zSue@dBrdy)Jq%2YIox+jSw!~Rf0(9+ar9g?tdu+*MXgbwK~Jlm&nG77$1ZT=<*G^v+dBh*8R|A>Q?c0 zW6gU~UNLx&uJW=H<01M_j?`+DnIfE)x+e^Sc<)>;l8yTZb~v9nKo2FGQJceM_AwiI zcr)e}Q~KFw?X&Yw_}2U9|IZu3Q^#1p?{|<)#zY-n)_jLbv z%c#G9x~?AE>S3fG{k{RI%YDkPcZMHBWSfTOAm&vDTcIjdS`W@Xp?5VRJ~LO8Q8ng? zpwSiv5#{G2+Tdo}la9#Sj;zEhbLNOOyZ%v-4kPs)uqp%UP?WK-+b&gPvCww#u^$2HRZHk`*i zC}sHPQIN?`{K;TM?x}GuK+uKcUxPDW2Vqo{BF2JJlP~FI?HLG&)^e zMD0URMWslUTHry9^m{hLmYn@Ygfb;sZ30wylvyHWVQ^EJ|8?B#4)+)l&Fy7?UM zQ*aaFR@kuYPE~Nhax+gVn{hhMf++353<@_MZxE(~U0z>{gS;Oj6RSYEp6Pzj zi-PGPc%GFfI=hc9Ivw2MM|PMg$Oy`4u-~}r(Thr#unJSXJ9okUR@wV8wBEtITZeqj zpH9qb_ilxD>TJ2To+2dg$$EGG&=!V&I`dRj&-)DD=tfq&?b>G8gs=H~3u0*p}*ql7wxlW$Y6b`hfLe++z$Hm0(UQ)T*JI2XS~GXR{s&ICct z(^O?d9gs7UgHb_MTb~qtS)-93mOQ(qKQ@2NJaNJz3)B-ZCdz!sn&2#`W+ePpR^Qr;KP;64wE}4X zI9P$XbQ!6MgDUc;OYK|62j_h&w_XP#cl=Vq+vXY;V*xWEH%f*GKh7&;c0Cv7F41NK zhRx2$aLkeRKFI>}tknkla#*O}H=+pce=!qRJ?tvcdY?577)Fefy@*oTDYut%xmAL% z1_ot~%1|NNzApPo;{pu%{)G<`)Bc!DyFu;XM1_9p1aw$nY-%v|GPSy>f4*t$vJ4e2 zJ~^Z5Z?n?SPXcl}Py6eW@iOHJ)73s$)^dSb4CYx$Kcd;}yjW|rQ8*Q*DyIU+^353a zjHC_B5m3bI5)yNzuQ-DoY|o`)!uPt9=tk*Wy2{Ir<@GJ(5$*wyZJRyl@< z`H(?RF7wQELamj>+pPnOLsE}{>w=nn#%<0p@vAwO{GhCY0%iNkhz2L-bYVI)QfKCP zCeMw1rGU!GhsVdrcXW|v{b_JhT)u!W4oO9_rn;Tg(lI=4!%^-nYG|x^F`NM8Nhq*e zkFKoyrvYv3@4OUf<YEzTkAhTV#kZBtBp%A-2{8@dHA*^#tq42 zzfLdVxK>)O_!^F_*LhmuX)MxO;TOR(-D7mO{15rWn986A54+_MS|F5xj-g3AHgmu1 zuDDlYnO!e&nh4Q>EBDIOg7KQ`GHggA?S|cBc``MC*qk#*LkI@VIB%W6U8)89lwrdA>82d$bL;mGzN_z($V{C z^5=Atf6SZNNX9yj8f(UU&ChU&Jy^K26n6IOrzR6Z0(0HP==>9_7A@XYfjYdAE2cf^B2 zd)x&-t!o=wB+E6P$q4C9G!O7u;GpAVF^qIHzdT(IV;C73tfz4*Me>D1SfPrEufg90 zk!TJbWBAp^A*f0VlVEI5sQ7WyIbCxGg*LYP&P~ixzB|>1?0M1s#Fo}x{qk$ma3kwx z25qEHNkTwLvZS41Fk%(s1+^Q-s{q$`--!pyN^Rf56{Yz89jS$c9~-=%Er}`w#X*-U zLt1`q4oB0RuwA33=kg4UG*Ti>R)_uQ1mE;>-qU7@oO;7KIAHt<{ra#Pw--&xo1lJM z*`l)G;)QxdxQTe<; zC&Ptvp>e>&$LeP*x)$jMAO33eN>~n=`O$?MWwgqo>jz|3;(19nljQV1&5j8g%g=;? zNu_eQZ;2)UL%Nsh-@*%*)P$<;=;Cf0ojRK88&s%JGh{SauNQ33GVd%g7t@I`Xs4L* z%OJ<#MwQnM3@{-@)`!^|nGJdZU4|B010i5dNPXp5kB8U4&Tw;-M0Q4C_lXJLAeY77 z-Z}#X=Y0KYtGuw-sdAE(+po2y2v?6&j{mE@YYj>=jl$afvRySxGi!6x^@dw&W|*j{ zYhEi0L8f}(_}kw#cqYNF+W%r+^sy3+HNlW_LnS_1Mc{7y`ly^&*MiwC5-wq&C!=*AB-E+noHZ(N>z1SAKDnPiX zyrctR4q_as2rLJeZm;4qO>&6gu2}T-fG^ta!VJVaeMx5#KPo4^ZYW5Kbi_t$LQQ}# zE0(eDGV4z?MBSfolxXugvKJ4}YCl(xd<4k~$^TlAYcW6XsekVs`3`&F6VWW9*v(C^ z+(u4p&k)l9v3xldq*b~2pBdNG1YeR|7vrczv8rY@sxqVbLCokxNGKV7QhHypDU zMfc!`@A$rQZQ1R!RR#%Nlt*!QqkTA$+7E7nnr*)8QY(DgmYeJmOWn`hGQLiFN|+Li z;0!Xy@!i9)@vFE88h)9F^N+_R!T-QKf906rT|p6gN=@*=oB34z5 z;-coZ*TKKG^8y*P3>3ti*Blmw)H(>o4QPy%u~)94mbVL_mVPV=4(lK5&A%mK!^vvU9F!l$LVlWs68RC#5Q_tL6$JZ15QCY|oy|BV| zO>NRPzQV|clX3|&99vyKILdnV6#WvQU5qaHq{(8$A9~{ z(no#_4QKCaIItc2@zUgOq^aLGq*rE%7a=ccU^Y#RZ@^45);+YEukp}3^_HB*?XxYQ zqr2D6>^XxL1yKxKtmo?N;v28_UY1Y0YZ(ajdd~6JZm~9OWWh2%)#9><>vI?h;Mv^L z1}pkOe>?L5ZJj;@hl@v^&nV80tZxB_kcpm__j)Yf(|1vpqC5#>B>k#EH9F}-c`W4H z8@#U$*OK&cC6C<9t78h2;t3~tZ;U|D26Sh-Z6Awo^p$Lgt&UqFD#7-Dc?oT8t+dlD zT%2ZifQA(pBZ>>y!H?dF!z&WoV6@0e4FuZ{zML?oFZsoWCayXo%=fVx^m>ccOX#xm zv>)3Jl9uJ;S;?SM_?d%KX_Tkhp+q_LoeoGknvZLf7|PcB>u#}evqcfW^?W-)T;(uq zSysmMQ|TvE>FPa1hn1D7%(DR35vvHd+>=mlu8o451fYq#d8p+vm<{-Ukoh!9(x4u= zJ}nP;w9xoT)s**53xgN0TP%I4nw(Fu_go8WKKEM(dU@;Vp#9SVsh5))L5QKIO%IJO zKj^Dj4H?6s#D~0tcbUaoCpPwEBGr|C{3V(yDm+*a5t-Z?l@Bh!NFE|w|;^T+-j1e6hQpn^B&7t#G zo7Ec4c4|q2;sF8VFvYxx{YD-WYgCb2NVMbK7*O(+(*_4OKRz z0N09D9km|MCZZ@r98tI?AGT|`1fG2Y3fqkyii9d=Lr0V", + "subject": "Blocked", + "body_html": "Blocked", + } + ) + with mock.patch( + "odoo.addons.base.models.ir_mail_server.IrMailServer.connect" + ) as connect_mock: + mail.send() + connect_mock.assert_not_called() + self.assertEqual(mail.state, "cancel") + self.assertIn("blocklist", mail.failure_reason) + + def test_prepare_outgoing_list_removes_blocked_recipient(self): + mail = self.env["mail.mail"].create( + { + "email_to": ( + "Customer , " + "Regular " + ), + "email_cc": "copy@marketplace.amazon.fr", + "subject": "Partially blocked", + "body_html": "Partially blocked", + } + ) + email_list = mail._prepare_outgoing_list() + self.assertEqual(len(email_list), 1) + self.assertEqual(email_list[0]["email_to"], ['"Regular" ']) + self.assertEqual(email_list[0]["email_cc"], []) + self.assertEqual(email_list[0]["email_to_normalized"], ["regular@example.com"]) + + def test_prepare_outgoing_list_removes_blocked_partner_recipient(self): + amazon_partner = self.env["res.partner"].create( + {"name": "Amazon", "email": "abc123@marketplace.amazon.it"} + ) + regular_partner = self.env["res.partner"].create( + {"name": "Regular", "email": "regular@example.com"} + ) + mail = self.env["mail.mail"].create( + { + "recipient_ids": [(6, 0, (amazon_partner | regular_partner).ids)], + "subject": "Partner recipients", + "body_html": "Partner recipients", + } + ) + email_list = mail._prepare_outgoing_list() + self.assertEqual(len(email_list), 1) + self.assertEqual(email_list[0]["partner_id"], regular_partner) + self.assertEqual(email_list[0]["email_to_normalized"], ["regular@example.com"]) + + def test_send_email_cancels_direct_smtp_to_blocked_recipient(self): + message = EmailMessage() + message["Message-Id"] = "" + message["From"] = "sender@example.com" + message["To"] = "Customer " + with mock.patch( + "odoo.addons.base.models.ir_mail_server.IrMailServer.connect" + ) as connect_mock: + result = self.env["ir.mail_server"].send_email(message) + connect_mock.assert_not_called() + self.assertEqual(result, "") + + def test_filter_direct_smtp_message_removes_blocked_recipient(self): + message = EmailMessage() + message["Message-Id"] = "" + message["From"] = "sender@example.com" + message["To"] = ( + "Customer , " "Regular " + ) + message["Cc"] = "copy@marketplace.amazon.fr" + has_remaining_recipients, blocked_recipients = self.env[ + "ir.mail_server" + ]._filter_blocked_message_recipients(message) + self.assertTrue(has_remaining_recipients) + self.assertEqual( + blocked_recipients, + [ + '"Customer" ', + "copy@marketplace.amazon.fr", + ], + ) + self.assertEqual(message["To"], "Regular ") + self.assertFalse(message["Cc"]) diff --git a/mail_recipient_blocklist/views/mail_recipient_block_rule_views.xml b/mail_recipient_blocklist/views/mail_recipient_block_rule_views.xml new file mode 100644 index 000000000..bc988ee66 --- /dev/null +++ b/mail_recipient_blocklist/views/mail_recipient_block_rule_views.xml @@ -0,0 +1,91 @@ + + + + mail.recipient.block.rule.list + mail.recipient.block.rule + + + + + + + + + + + + + mail.recipient.block.rule.form + mail.recipient.block.rule + +
+ + + + + + + + + + + + + + + + + +
+
+
+ + + mail.recipient.block.rule.search + mail.recipient.block.rule + + + + + + + + + + + + + + Recipient Block Rules + mail.recipient.block.rule + list,form + + +

Create a recipient block rule

+

Outgoing emails matching these rules will not be delivered to those recipients.

+
+
+ + +