From 7c8d1e4342a20b713706ffa87f35e263e60e71ca Mon Sep 17 00:00:00 2001 From: luis Date: Mon, 3 Mar 2025 10:16:19 +0100 Subject: [PATCH] add barcode_generator_partner from OCA/stock-logistics-barcode/pull/536 --- barcode_generator_partner/README.rst | 124 +++++ barcode_generator_partner/__init__.py | 3 + barcode_generator_partner/__manifest__.py | 27 + .../demo/barcode_rule.xml | 25 + barcode_generator_partner/demo/function.xml | 22 + .../demo/ir_sequence.xml | 16 + .../demo/res_partner.xml | 15 + .../i18n/barcodes_generator_partner.pot | 100 ++++ barcode_generator_partner/i18n/es.po | 110 ++++ barcode_generator_partner/i18n/es_ES.po | 128 +++++ barcode_generator_partner/i18n/fr.po | 127 +++++ barcode_generator_partner/i18n/hr.po | 128 +++++ barcode_generator_partner/i18n/nl_NL.po | 108 ++++ barcode_generator_partner/models/__init__.py | 4 + .../models/barcode_rule.py | 12 + .../models/res_partner.py | 11 + .../readme/CONFIGURE.rst | 1 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 21 + barcode_generator_partner/readme/USAGE.rst | 16 + .../static/description/icon.png | Bin 0 -> 22182 bytes .../static/description/index.html | 480 ++++++++++++++++++ .../res_partner_sequence_generation.png | Bin 0 -> 66801 bytes barcode_generator_partner/tests/__init__.py | 3 + .../tests/test_barcodes_generator_partner.py | 33 ++ .../views/view_res_partner.xml | 63 +++ .../views/actions.xml | 16 - 27 files changed, 1581 insertions(+), 16 deletions(-) create mode 100644 barcode_generator_partner/README.rst create mode 100644 barcode_generator_partner/__init__.py create mode 100644 barcode_generator_partner/__manifest__.py create mode 100644 barcode_generator_partner/demo/barcode_rule.xml create mode 100644 barcode_generator_partner/demo/function.xml create mode 100644 barcode_generator_partner/demo/ir_sequence.xml create mode 100644 barcode_generator_partner/demo/res_partner.xml create mode 100644 barcode_generator_partner/i18n/barcodes_generator_partner.pot create mode 100644 barcode_generator_partner/i18n/es.po create mode 100644 barcode_generator_partner/i18n/es_ES.po create mode 100644 barcode_generator_partner/i18n/fr.po create mode 100644 barcode_generator_partner/i18n/hr.po create mode 100644 barcode_generator_partner/i18n/nl_NL.po create mode 100644 barcode_generator_partner/models/__init__.py create mode 100644 barcode_generator_partner/models/barcode_rule.py create mode 100644 barcode_generator_partner/models/res_partner.py create mode 100644 barcode_generator_partner/readme/CONFIGURE.rst create mode 100644 barcode_generator_partner/readme/CONTRIBUTORS.rst create mode 100644 barcode_generator_partner/readme/DESCRIPTION.rst create mode 100644 barcode_generator_partner/readme/USAGE.rst create mode 100644 barcode_generator_partner/static/description/icon.png create mode 100644 barcode_generator_partner/static/description/index.html create mode 100644 barcode_generator_partner/static/description/res_partner_sequence_generation.png create mode 100644 barcode_generator_partner/tests/__init__.py create mode 100644 barcode_generator_partner/tests/test_barcodes_generator_partner.py create mode 100644 barcode_generator_partner/views/view_res_partner.xml diff --git a/barcode_generator_partner/README.rst b/barcode_generator_partner/README.rst new file mode 100644 index 0000000..0352349 --- /dev/null +++ b/barcode_generator_partner/README.rst @@ -0,0 +1,124 @@ +============================== +Generate Barcodes for Partners +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:0c984bdd1b103633bb285af4d69763047cc898ed9b6e3499c164a41d8e300f99 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fstock--logistics--barcode-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-barcode/tree/12.0/barcodes_generator_partner + :alt: OCA/stock-logistics-barcode +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-12-0/stock-logistics-barcode-12-0-barcodes_generator_partner + :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/stock-logistics-barcode&target_branch=12.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Partners. + +For example, a typical pattern for partners is "042........." that means +that: + +* the EAN13 code will begin by '042' +* followed by 0 digits (named Barcode Base in this module) +* a 13 digit control + +With this module, it is possible to: + +* Assign a pattern (barcode.rule) to a res.partner + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user. (typically an + internal code defined in your company) + * automaticaly by a sequence, if you want to let Odoo to increment a + sequence. (typical case of a customer number incrementation) + +* Generate a barcode, based on the defined pattern and the barcode base + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* To configure this module, see the 'Configuration' Section of the description of the module 'barcodes_generator_abstract' + +Usage +===== + +To use this module, you need to: + +* Go to a Customer/Contact form, Sales & Purchases Tab: + +1 for manual generation + * Set a Barcode Rule + * Set a Barcode Base + * click on the button 'Generate Barcode (Using Barcode Rule)' + +2 for automatic generation + * Set a Barcode Rule + * click on the button 'Generate Base (Using Sequence)' + * click on the button 'Generate Barcode (Using Barcode Rule)' + +.. image:: https://raw.githubusercontent.com/barcodes_generator_partner/static/description/res_partner_sequence_generation.png + :width: 1100px + +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 +~~~~~~~ + +* GRAP +* La Louve + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Dave Lasley +* Druidoo (https://druidoo.io) + +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. + +This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/barcode_generator_partner/__init__.py b/barcode_generator_partner/__init__.py new file mode 100644 index 0000000..83e553a --- /dev/null +++ b/barcode_generator_partner/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/barcode_generator_partner/__manifest__.py b/barcode_generator_partner/__manifest__.py new file mode 100644 index 0000000..609cd7a --- /dev/null +++ b/barcode_generator_partner/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2014-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Generate Barcodes for Partners", + "summary": "Generate Barcodes for Partners", + "version": "16.0.1.0.1", + "category": "Tools", + "author": "GRAP," "La Louve," "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-barcode", + "license": "AGPL-3", + "depends": [ + "barcodes_generator_abstract", + "point_of_sale", + ], + "data": [ + "views/view_res_partner.xml", + ], + "demo": [ + "demo/ir_sequence.xml", + "demo/barcode_rule.xml", + "demo/res_partner.xml", + "demo/function.xml", + ], +} diff --git a/barcode_generator_partner/demo/barcode_rule.xml b/barcode_generator_partner/demo/barcode_rule.xml new file mode 100644 index 0000000..b3c7ee0 --- /dev/null +++ b/barcode_generator_partner/demo/barcode_rule.xml @@ -0,0 +1,25 @@ + + + + + + Partner Rule (Generated Barcode) + + client + 998 + ean13 + 042......... + + + + + + diff --git a/barcode_generator_partner/demo/function.xml b/barcode_generator_partner/demo/function.xml new file mode 100644 index 0000000..a2469da --- /dev/null +++ b/barcode_generator_partner/demo/function.xml @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/barcode_generator_partner/demo/ir_sequence.xml b/barcode_generator_partner/demo/ir_sequence.xml new file mode 100644 index 0000000..2aa10aa --- /dev/null +++ b/barcode_generator_partner/demo/ir_sequence.xml @@ -0,0 +1,16 @@ + + + + + + Partner Sequence (Generated Barcode) + 10 + 1 + + + diff --git a/barcode_generator_partner/demo/res_partner.xml b/barcode_generator_partner/demo/res_partner.xml new file mode 100644 index 0000000..147e9ff --- /dev/null +++ b/barcode_generator_partner/demo/res_partner.xml @@ -0,0 +1,15 @@ + + + + + + Partner with Generated Barcode + + + + diff --git a/barcode_generator_partner/i18n/barcodes_generator_partner.pot b/barcode_generator_partner/i18n/barcodes_generator_partner.pot new file mode 100644 index 0000000..2f1890a --- /dev/null +++ b/barcode_generator_partner/i18n/barcodes_generator_partner.pot @@ -0,0 +1,100 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \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: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Partners" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + diff --git a/barcode_generator_partner/i18n/es.po b/barcode_generator_partner/i18n/es.po new file mode 100644 index 0000000..b061309 --- /dev/null +++ b/barcode_generator_partner/i18n/es.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +# Translators: +# enjolras , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-15 02:01+0000\n" +"PO-Revision-Date: 2018-02-15 02:01+0000\n" +"Last-Translator: enjolras , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regla de código de barras" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Partners" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#~ msgid "Barcode Base" +#~ msgstr "Base de código de barras" + +#~ msgid "barcode.rule" +#~ msgstr "barcode.rule" diff --git a/barcode_generator_partner/i18n/es_ES.po b/barcode_generator_partner/i18n/es_ES.po new file mode 100644 index 0000000..1be7bea --- /dev/null +++ b/barcode_generator_partner/i18n/es_ES.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +# Translators: +# OCA Transbot , 2017 +# Fernando Lara , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-02 00:27+0000\n" +"PO-Revision-Date: 2017-05-02 00:27+0000\n" +"Last-Translator: Fernando Lara , 2017\n" +"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/" +"es_ES/)\n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regla del codigo de barras" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +#, fuzzy +msgid "Generate Model" +msgstr "Generar Tipo" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Partners" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Permitir generar código de barras, incluyendo un número (una base) en el " +#~ "código de barras final.'U+23CE'\n" +#~ "'Base Set Manually': El usuario debe establecer manualmente el valor del " +#~ "código de barras base'U+23CE'\n" +#~ "'Base administrada por Secuencia': El usuario utilizará un botón para " +#~ "generar una nueva base. Esta base será generada por una secuencia" + +#~ msgid "Barcode Base" +#~ msgstr "Base de código de barras" + +#~ msgid "barcode.rule" +#~ msgstr "regla.barra de codigos" diff --git a/barcode_generator_partner/i18n/fr.po b/barcode_generator_partner/i18n/fr.po new file mode 100644 index 0000000..246d6ca --- /dev/null +++ b/barcode_generator_partner/i18n/fr.po @@ -0,0 +1,127 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-02 00:27+0000\n" +"PO-Revision-Date: 2017-05-02 00:27+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "Règle de code barre" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "Générer un code barre (via règle de codes barre)" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "Générer une base (via une séquence)" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +#, fuzzy +msgid "Generate Model" +msgstr "Type de génération" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +#, fuzzy +msgid "Partners" +msgstr "Partenaire" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Autorise à générer des codes barre en incluant un numéro (base du code " +#~ "barre) dans le code barre final.\n" +#~ " 'Base indiquée manuellement' : L'utilisateur devra indiquer manuellement " +#~ "la base du barcode\n" +#~ " 'Base gérée via une séquence': L'utilisateur devra utiliser un boutton " +#~ "pour générer une nouvelle base. Cette base sera générée par une séquence" + +#~ msgid "Barcode Base" +#~ msgstr "Base du code Barre" + +#~ msgid "barcode.rule" +#~ msgstr "barcode.rule" diff --git a/barcode_generator_partner/i18n/hr.po b/barcode_generator_partner/i18n/hr.po new file mode 100644 index 0000000..a3884f4 --- /dev/null +++ b/barcode_generator_partner/i18n/hr.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-15 02:01+0000\n" +"PO-Revision-Date: 2018-02-15 02:01+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "Generiraj barkod (koristeći pravilo)" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "Generiraj osnovno ( koristi br.krug)" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +#, fuzzy +msgid "Generate Model" +msgstr "Tip generatora" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +#, fuzzy +msgid "Partners" +msgstr "Partner" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Omogućuje generiranje barkodova, uključujući broj(osnova) u finalnom " +#~ "barkodu.\n" +#~ "'Osnova postavljena ručno' : korisnik treba ručno postaviti vrijednost " +#~ "osnovice barkoda.\n" +#~ "'Osnova prema sekvenci' : korisnik će koristiti guzmb za generirnje nove " +#~ "osnove. Ta osnova će biti generirana iz sekvence." + +#~ msgid "Barcode Base" +#~ msgstr "Osnova barkodova" + +#~ msgid "barcode.rule" +#~ msgstr "barcode.rule" diff --git a/barcode_generator_partner/i18n/nl_NL.po b/barcode_generator_partner/i18n/nl_NL.po new file mode 100644 index 0000000..5496f50 --- /dev/null +++ b/barcode_generator_partner/i18n/nl_NL.po @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_partner +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-07 15:18+0000\n" +"PO-Revision-Date: 2017-07-07 15:18+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Alias" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Client" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model,name:barcodes_generator_partner.model_res_partner +msgid "Contact" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Barcode (Using Barcode Rule)" +msgstr "" + +#. module: barcodes_generator_partner +#: model_terms:ir.ui.view,arch_db:barcodes_generator_partner.view_res_partner_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,help:barcodes_generator_partner.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Location" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Lot" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Package" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Partners" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Products" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,generate_model:0 +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_partner +#: model:ir.model.fields,field_description:barcodes_generator_partner.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Unit Product" +msgstr "" + +#. module: barcodes_generator_partner +#: selection:barcode.rule,type:0 +msgid "Weighted Product" +msgstr "" + +#~ msgid "barcode.rule" +#~ msgstr "barcode.rule" diff --git a/barcode_generator_partner/models/__init__.py b/barcode_generator_partner/models/__init__.py new file mode 100644 index 0000000..d04ceba --- /dev/null +++ b/barcode_generator_partner/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import barcode_rule +from . import res_partner diff --git a/barcode_generator_partner/models/barcode_rule.py b/barcode_generator_partner/models/barcode_rule.py new file mode 100644 index 0000000..5442fb5 --- /dev/null +++ b/barcode_generator_partner/models/barcode_rule.py @@ -0,0 +1,12 @@ +# Copyright (C) 2014-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class BarcodeRule(models.Model): + _inherit = "barcode.rule" + + generate_model = fields.Selection(selection_add=[("res.partner", "Partners")]) diff --git a/barcode_generator_partner/models/res_partner.py b/barcode_generator_partner/models/res_partner.py new file mode 100644 index 0000000..63490f2 --- /dev/null +++ b/barcode_generator_partner/models/res_partner.py @@ -0,0 +1,11 @@ +# Copyright (C) 2014-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models + + +class ResPartner(models.Model): + _name = "res.partner" + _inherit = ["res.partner", "barcode.generate.mixin"] diff --git a/barcode_generator_partner/readme/CONFIGURE.rst b/barcode_generator_partner/readme/CONFIGURE.rst new file mode 100644 index 0000000..f49c227 --- /dev/null +++ b/barcode_generator_partner/readme/CONFIGURE.rst @@ -0,0 +1 @@ +* To configure this module, see the 'Configuration' Section of the description of the module 'barcodes_generator_abstract' diff --git a/barcode_generator_partner/readme/CONTRIBUTORS.rst b/barcode_generator_partner/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..26d1341 --- /dev/null +++ b/barcode_generator_partner/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Dave Lasley +* Druidoo (https://druidoo.io) +* Armand POLMARD (https://github.com/ArPol-developpement) diff --git a/barcode_generator_partner/readme/DESCRIPTION.rst b/barcode_generator_partner/readme/DESCRIPTION.rst new file mode 100644 index 0000000..12c9c26 --- /dev/null +++ b/barcode_generator_partner/readme/DESCRIPTION.rst @@ -0,0 +1,21 @@ +This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Partners. + +For example, a typical pattern for partners is "042........." that means +that: + +* the EAN13 code will begin by '042' +* followed by 0 digits (named Barcode Base in this module) +* a 13 digit control + +With this module, it is possible to: + +* Assign a pattern (barcode.rule) to a res.partner + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user. (typically an + internal code defined in your company) + * automaticaly by a sequence, if you want to let Odoo to increment a + sequence. (typical case of a customer number incrementation) + +* Generate a barcode, based on the defined pattern and the barcode base diff --git a/barcode_generator_partner/readme/USAGE.rst b/barcode_generator_partner/readme/USAGE.rst new file mode 100644 index 0000000..952c993 --- /dev/null +++ b/barcode_generator_partner/readme/USAGE.rst @@ -0,0 +1,16 @@ +To use this module, you need to: + +* Go to a Customer/Contact form, Sales & Purchases Tab: + +1 for manual generation + * Set a Barcode Rule + * Set a Barcode Base + * click on the button 'Generate Barcode (Using Barcode Rule)' + +2 for automatic generation + * Set a Barcode Rule + * click on the button 'Generate Base (Using Sequence)' + * click on the button 'Generate Barcode (Using Barcode Rule)' + +.. image:: /barcodes_generator_partner/static/description/res_partner_sequence_generation.png + :width: 1100px diff --git a/barcode_generator_partner/static/description/icon.png b/barcode_generator_partner/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..00f4e894640738bce6dfc3bde4ced1340c4b15c0 GIT binary patch literal 22182 zcmce-bx<5Zzc#w~;t(VRCj?3GV8PwpVR2tr+}#Nff&_P$Ad9mQ+}+(RxVy{Ed(Qd3 ztAF3An(3aN=cnCO-PQd}gtDR(CK@ps006+0krr3|SN8np1|t7^b`(WJ{uOY}s#2nW ziZRlIe=n#G(mKun0M0xVQ=gjLN@bSM8y#MO|X=eFI`Ckwhh`>i}1!YPxdna>BPG$~f){lZ{ zl$4bGPG%Oos^XIWBmVDA;3L?@#etWF#ogVV*`1x)-pP`MjfaPah4m}T*RM?f5KPXV zb}q&qOm@!H|E=VI=@B<~Hg&RcaIvztqx_FvV-tH<7lDr-|6}NXU;pE$t;7E|Was=p zQT>aL#lzTvg^ih&<^M~_#meIUbnpKr^`9^QE%skg{kJjxf2rXWb22w}v3F9px3>|r zw6nK0XZq)(xw)M)*xrSo<^PHJKRxCDk4j!8CoA)RvHm9_K{kGt|5w}p;Q3kp6Yl>d z{Qu7Ff3^Ngt{~b!OaH5*1krGpB|`xKVStRdh`I;dNhV4FS#M&+IA(mXMS^outT=u+ z##bOKmr)+utx0XU`+M)!=C!+LLXz})ilg37C>Va@<9*`k#{oJvPH_X25g6}e>5G4H zr186pw!a-^HBCG3$r5A6Bl;F(9WLu@==&Z%yN;F2Sl~*KhJV9xq}&qj2@FTTMfr#& z{{Lgc#^2#UZNt_j4K01nPf62Xms{?|uWZ8KR#Hw_BmEbaW*&EUk`3GbR1Uoppxf%G z_%=}%(0FO76+LJb;mesN?Nd@;==y!nv)b(AVn%ZIyl5aXiCV<&Zc%|^tN6$2ygz?- z$RSbdkE>^XcVeefb(UDi3)S7ab>Lr6Q2mgL-RS73rka{53b{v)zC$MxVNAbwee|7P zmoI~4CF{}SQ6)XZM%I8lvbQ}oIT^xkd7RB>+~q;SYnHOJv!lyM$Uk>Al9r|lv-J*z z8niC0`JQE}i;0Qp-8YsLes=4QifUk+#V?TKT^*-LLg=HBDmK+-Y&o@! zha6ebe%qEeWGJ;lCH;mQOOQ%l_N4IDRQX+eQrGQYgD*wn9GU2d_>{Y0fFLpAe6f-O zDw~HN*vGx^4Z+r68?fCC=xwt`j-|a>tU&2LCMk*VEDcgoO=8#B3A0;0ykbq2U-~6Q zZgq2W1G8P`dJ~p=9$kNqLgiR3{W~{DSn0MWsr%|2^TI}7dZ2;6T33zArjXE8;kTZV>)-u98$Ym0~k&d$z06yf3i`0>N$Z(o!q2-Ku?vyxGI zmBj3~U@?|a^eAdf{Tx7v0Yv!;g8+Kk*FU{i*@N;yb%aYQBA17vx@|@pt++gTI+NnL zN8Sytw0^-po6-t-S)+D2iSc)d;^-*sC-e5PX+L21QOH4)M}Si!R7U)#kUTPJ1Dx21 zfL3Bz@>)RVc>hcFP0UnD=xU}ANy0JXT+XW?=gEP#{q?5uq%hf_=CfLnwxVJ*%W;Za zbYC8Q7*LO!4V! z_Tl=p(oK{Huht7ll-BX1(w=A1jEcd#+HTpoFQZOZZqI$h>HOYziT2*XQd!`g?ikog z%R3r545EN*AZ11C?GQT6^t#|pf|{xN56H<)o{6{-`Q#MfI{?3vhZ8>_SL3dQtEva_ z2jSaeK}7t?&uKI~?3bJNcCS%aA+M(zd&5`sDW4UY=xQwu4H|{TZEhTJU}rE&{}*?g zyB9=KFmbee+}jQ$;up2lQj_b^^RoMjqm)J6>Z`%mH_3EP+XOFu*k=Q2>JZM5X=L5A zuMllT0(2m6NZ5Ix(}ixEc&_K*N4Ua;OFSel=bt{f>Go@Lpt9dW9cy~mDE57?*{}?~ zb&3Nm2cPXQL+4TKyBIoW1EH;RYA1`)mGw$`y8CaQ0bQwbo%TFNube(WD@_d>hq{99 zB*F@$9Lma_;pAoZtL!<6v-@G@ryD>C_Y`1~J!&piH#Iu+jrL=F8F#B~oc8jr< zoo3UIlg;8y?rWY>tsYT=0sB?TV)gw^c23Nd8Xe;z^!)9(pT|A4&e0?%0LtdQ49 zty#l$MdJ1RLC!Aq#*TsL;;s!A`$re`Lc2~98#`*`lDm8X#WSw{i2)w>qbvK;5Pko<$=nhg0=8%(ht=qP)6{#KhL3eKvYyXk6WV%wP zTjGWxv5pPL!@6r$Qrn8^Ue8{k#QGQdVP>QVQMVU35&6f_L?Nk?5ruQi<9aqMYB&ZK zb!2$+J%(SrV_(<*FE!lOA;sJL;JXP^tW00+sVnfNKr4U+lZP3JstA`j@MugPZR}>g zeRB&B1Uc_1<;1jc81~rAB*mh=mx@8zCKObGH^s~BvB1OrHUy=T^+CyY}{bBnG z5q?3WRTD8L-oYsM`gNx;Hm)hqCG%?sGSN91D?6Dl>#I1QWm1!{`_(O<`{^|tCwPLA zM9`-(`+C)Vz5Z_9-#_Lo7C%Oa{_%U0YOlXpD*k5h%8LDI16hq7RHR0aX>ncWM8`bQ z(kZaKiL0n$!31KRggseGE~Ru*DR&k&l%r9k9r+G+JmZb$z@>4TU<2zHd*G!OX*r4} z;6)H>&iFlJrEzDkfBQUr=e>v5o&{=~{O9LiFdz6Fpw6`>99q}oGLyVOUqudCds>N$o9gT8+TtfQqQ^0K&kLvvQ~x@1s^s!>_$4Q7 zsF2DHfCcDp?3oWb3&fp7v0I6L|X)QN|F?CG1c3iwVR2#Gjdhd%#CI1w8;sx(mEcN6fb=)&M?WB zin*1la_nQvE^y_CvuWs3*H$MjD=WJZyx*AS@|b?Bri!{^Iz_kFMa4DxRVl$ZUTP9= zE9X-)yN9o>m?r_Ss%v`W)e(Z2yZVBez6LvOQ^-AN8;i)lVoF5=(jiC>OiAGft1rxY z=EUJBf6(bwd8Wv#y)IfeNVrV4Nz0&3!X2;e@IJLgkJr(tv$n#(2fDIxKJ2$7Tno^j z+c`m^P`fv%`}FWv!a$>ZGE({sWCzDT;p#GIAh>%{9G z^45BzhT&V?bh;Ps+w5->%S5%@{Y#V9&v?4tci@ZS6{vnr=dg;yB;oCutI%C%LnxVF z!W@P=J(!T_zrYeTD(iBYZjzGu7GMcvHhjZ<3mNTCKNAJt%u{IslK_ZUyQ8(vV?6!4 zW0^+~lnf`2AD@%5v+Yxq<@ff{2nY##L22nN-%Dz3rU=-Ix;FNvYdh{ zs_z=&rc5vyW&J?2sW?(%ze5hhMDu?+l)csW{-~_Wi&L`|z2w)u?evZNMOewrA<+Pr z>z<_nQk|l0sgS@91F{2vMrUPf95?`RWzL~uOld4ckp(Oa6r3(i5_M3J46BTvxT=&? z#EGn}JC)*O#QR>=qvQd-CT)-e$#~t`$JNd)Uji zzo!7hk7`|JI*u?9)Al=$!3Fa*p#cq8evL$Yrl`!xnUMTROdXZ;cuk|>R0fB<-k|c^ z@;HfN+p&Yn8T$DqMpI4S%AV0@#!dZY)*2>gT6i<6SzH1s3`YF9^-c$nBD>{IjPoU& zMeve^*sflC(tqHYccl;e)w^ur5pecd`S|srWq3`w0YD`(qJ?e{#J)P&;}`(I5b141 za|!^~AxOCRe2PMl$ie-soXpaZ)4NH0rnvLt-Qd(VF!aMHLxb0Mr~Z*}4L!e>Jye{C z2$W&tZIHmSu&0Z){ovfr37hjOkq(YWx3giI(!VS6^_MQYUY>&vJ2mMDb32mtU;g zsj{c@YFzvPKf_qeY#?YIqqN%SmuXw6UPjwxCW15ht~x0J>ivMqV0hU`!0f#i$ArmM zxNw|kR-z#8liO0E#RwHJ9${KTap1t{GJ@s6|{XX0HB5jya zvtF?!ep+80=b8h_780v5t^1CfjoC4v$zpHW@2`L9gWl@d_JC%a9o!b*`h(()tI(fP zw%L@Se5#;_6m}5^IXD!6A6SV42A*Cm!%^vF$Sa2^6nE%teQ?<<(V)sLmL+$9(9~IU z=+;~#v~yPKKV_YGY`SxS7frdczD6oBT@=s^_k(s`_dsJJ*|08S(-|dGE{}WGW$kL} z)l$AO0R8TFHo-t6u@Er&edoq93Wd)`!z-XOFvvSY?0h*@0gPIQnZJb);pBAb>u=r< z6SG~+J6kAN2~)Rt5cE7WHxVSL#9{?~!8dXGId}6>uFq|0F6!<;KYiwChFwkIUl*o) zmaHtTC`k+Snf5~XJ~x-Mtx73=!H}Q-9awQt>EHemGmSwe_JwOgFocx&+p12Kvd!yU zLtA2NWsShJpitRL%N(rDp%T;kjC^>#Mif@@Ls;U_^{9`+RwK*+j2FY-D`~~W!X&hd zQ)enwh)KpfW4PX7AJ9>*!EH@;&Ykj1gp6op%!rT;FVq#-6?%>hFRUmB2-hgne3(a> zqG(NK!LP5MU7Jcqw^1E?NhZ4`4{^s=AY~0~O64zkEd(Dj)d?agb)TrOi@fsy24$^j*Ja zbK6JzVTQmd%6%p)<#W|EUNMp z3HhOXq_crwH|1|_R2x{z-QO{Zn35sV0)j;_M}Mf(PAwv`@QHS_F$->o8xi-}#CB8C3po3GH-67-xh zBTyek?e!tGDzc!w!a_XBwR=*aGnPV|f(N#;d^}5+h7*R*9jtdfY@KYS{Q$srkzaLh zS0}98%It?;&eMTxM$0ZQ)Fta5<+T$yMeerJqh!VJ~ zhAO`YjJ|bl7^7+&cXdZ3Sm4oj$Zi?DgEp+qNRmYfHD6E3ZHi~Bb;q@P@x6^x&3VmR z%{3k(i5S8&h(OdUrFVX^EX_q`RUc0K8KaOrlqiB&^|U$2;L(WoKa1*~rxRv~@ZBE> z$9{;5ffz}n*t4c*d3a+ zPa{M}JeolsR-eMZoXYdcHWaw{_-{y&pRPKOpPfl_7Q>hftAE<@x2x*s{tj`2a}PQb zMIn6elxgtJT?iQb17jpugQBAA6zXsH8p+*cd9AU~;#fWJGhf`Yv}8|~(cu&=RxJU08ROwOcvLpH|&np(ep z^N!Gm54n6=2@m@IqtW;yxo9_rqV2Z{)oR=2#2BGh57t0B((2?fU6QhvU8H24=P@2w zt7a{aZd{rmtGM}>I$oA_F49*867QJ@F1?@wkn4}G-wuC}C*7PQt> ze$V2mc?L5XaE--1NWjX^iOPiT+HJ3K_X>(7caK1Im|1lvL!N8ooU>2tCSUR*vsq!&D3WkKueS{b|K%a&a_ zt+7lt$m1}(#mKkg88tx?21a^Vah9j7n^hvHM6Z44P*qarWA$!Y5>{?X`^JZzox7og zkyL@FL59lK%UDJkuj4o^!%a_Y-@ZtJn+DNNx2sDO9otE>$oJR{b9uP8o4G;_7km2l zNWH;RCW1^Kt7QM!%JOehrj4=-B9@R0W_RW)PC*3I{}Vvje;L3LHW3IBc3OO#kUUCly6x02>X3Qc7>U2Z0M_cfRyL%v(za9zQm^$WW@NkVs`a#-Xi#WVu& zQ8EaPUgh`lp3=g!lF-T7&L>;Dr;~tCSONQ`r49d)fZ&P{|xuqM^+8Cp-SLj4RXYxEYAK`qv20_)0VkNtt5#G!uzX zn$nS|+kMltes;SSg^X{%678%XXpD4#IX25hFZ%Q4xHy99Sv*|EEf&7f#875Y>*uGcO{Cpp_ce+BrmtTk zWB_<`J1DfSNvfXtkF2#HHa-bkuM;-^XQmAx4+wxM7DLb~rTFwsxe-Sh=Y7{6r5()H zQd{y6Ad;0Yg;6V$&oLz66T9lXY=5iVwbl+TtY1spsa!fogI)|klPnrVt?eVfzsxFE zbK_Ui@0^qvSf@Lco9xk(aK1PVif!26sG~L`hC?b_-OA_KpI;N=g~&(*yyQ_>DWw*k z>$XctvNL4+KQOb9)=P5I<50_T#GDj>?1WhN(QWD>Vm zlg}^Qw{eTi`z^DfB^8BqJ9xeDs4RA|^o-f3qlo(zdh17kE%jR25wYeI^@9?cfgJ3| zxwEKvva5pIzO?)E!*c#o;N8hPN)ws0hFXggLk`ZV366U&i2x92I#l z3VL=&)4!Kl9ucnIw=fK6bBwS24NXxkEQ!kWQVFyY8(n>3$5qJnLm`CzsG{kS#^@g?Y@t?Fe_n zlXk$LO{_V`2rLn{UAMqZ_}obD(vQe-fE>j_cjgBvN>p3%tq>Y(NXw=*S=Q$Cyq{y- zT}xU7$Vya}hg)9ug_hw$+p9g=`tbUmn@bxfZN!j?dQQJfLhs84>#^0=>${`*B%CI% z(o;@wakLEGcaqUAuVREwQ~t(BMWqdvgx;xZN}>57pn)y{7&7gbswMpEGdZHG;5xaZ zFRSaN;%@E}>;%{G@$b`uh9ud|RD=CbylAXtG7x0ALYiKb-sd2xofE^M8bTp@cFKCh zgg{ro&?Q(=89oEaj+CpYVlceny~6(Go+lX2uT~$k*~^rC(*XgwW6Q&>b8ozM)E+4S zfPYF4Ua&*LOq0=7qqO}6DeMi^7Lazb9rK5N44Zy6`V+T^#_euYK{m7E|*urzXf}Y5nBaggn<2y5|g9#&1)(vf`?yL!6fOQgCI9S&L^O)sbz=W0WKwsKF}<1YEr&$Lfj}1SEHWpG&ZDe zVT0+mGmratXD{1%@z#2PyymRcqfDXlp$NA4OGcf4*5vP-#_r11<=!j3!EaY+cqZqdnvx-p0gC#&_Vs>2_X&=(x5;6=MNla&yA>U>#;g$W*Rp%c?)&c&xEz+ z%*Id1ieN5bob1N2o~b!n>jx*Npx%2R5v_Cla4m>aIM~ps;}xaXK=*zLXB_g{ zWOw3Jp=Ld)#l%t%(u}jQvR$^z7i8!g{!Cq~Ug*i*R$UJLeVNyVGN(Ji6ESS z^`$mg$Th9?av}S9v|F_X?M0!->_?rtwdrOjsClY`(j(5jZ;XR12$`;lp~Uqpc_<=X%v#EsJ!?J$XQ@HiB@HH?&p^X!gH0jPhJS zGz(UFu1}dYW8S+ZkG6iHC6uFO5%@RzJF&%s1L3XT4*`H=!yz_2dG%6-$%&Yk-pSxm z9_+3f7~~lXi`033sfpi1@|#jcm_GuLV`Sy8P~!U-8ovNdh|;p3X7iRN3(HLfhKd!+ z0*^_SO+@EwPCAWQGNjYr=ibq~7i{B3*C9x>M7}rnH*ARG2;NiaxkgNo0~zOm6%;c) z(kAPYnTOQH_l%3eB=Q2lI902lR(cD9#$kLMq}J{i6ZK13SZd3dZL#c#{p z+jfx8gR68P9?6{g66pHYpCk2edx7y}K$S-3l^aUM^XFR*=Jy#Vk6tGRY@Ve8@jgZB zV_WZC&J^9Vs|x+{_gY^XrdkiDCAXamoQ5rq^eSVRav^KKr(OTLi=Ta!DSHr50-B}h zm5mul8V?DmH(O^sw43Ex+1|r2HLoh<@m)EWX7YVD-4CRL9j;ct-3Q5p#44q8jk@Q- z0WI*`f+OX8Orxzvv+N6~KfH%oC$ZOI2djqp&%M8Ivk&%v@(nHE#Fw zi4l)Py7;~RJ_s#c+a@o;K`9;~BqqIw9Yl8oiw>3P&{i2Gyf<)Ki62>7ThR%dDJ*vr zCsN_1a5T#`e68JH^X>#Bmf}9QJs6+PX3pvhpVt$ptg6Dg-ip*kMjA-@g!>|-ScRH8 z@&4J3>cLD%4~s1O1AmOS2=CZRsetbg166KQ03=#@y3F8l{ctwnJelkZD}IRvuXaNs ziyYp+*#tVrdk;=Fs}%LhV#W1D8EB34XYO=QaGw&=zIgAye@9QV-Lo5$ZoE_MGyCqn zf#n7D*u^vt`>#{A5WLRfojm~KNP_tb;vN{aSO!>vj@GipwW7+dmt^g`P__k1Gz$I{wQP zN7;7=EuGaP9(h$!*?ua*X`=|zVw}-IsT8HZ#gVRx;F3f?Rc{vuIwva1!c(r<6ma?; z6(7YvcG>0-N|5#CPBQ2im`jVvB;a^ZMJaHUxp;z|>jr-+40m3nl%3_4ci`rV&y`LZ zFvfo+@6Jbd$w=zLEgcpgEeU7y(|~V59-*g4;6;plY7tf8mISb48nl;_; zxO5bXp3d5ZsxQ0E*>(1oRrnBT)oPI|jJ{YC1`WdfL33{pE?bcTES0>p$;s_UV`W?h z;s82&UDtmCw=SNApT5uAd}6wZoh}G7#3Sk}b@l_3P~wY3 zr2hpCKjV^dju6w$0C~^S)dZ)Um}e2|Cz`LYPPs2wou%a(4*$bx8ABSvghLBS_W)aC zAtn=&vF3=ddg6dlC@s0*vSi|E9}MxQO8Y3gVeN{105nU#T+ftfF_zrJcCqJ*XCu+I zUF`KL_p{ak3$7J=v3FC}CfyiNuJ{M6P>WR>-)1ZQI5RT+qct6J062hD1CgXUrxmARrp&41L-=&2a_=i#`zzn# z<#W22s+XhFx#W686W?}TE=j*dB3DM6Si_o2H&-wa1D{}CRw};jLv`yHyED!4`X4V@ zu>A2R$*Xcn2)UXdal?3L2cN|(&Y+o`PV{a#rBNEYI6rO>u{yxwANhk)yK~pH)A!9@ znL7i9`+jLXYA8QXj|TZy7jZ}C85)15k+#OHV*9&bC!|_|LFa|oT*oK_rBCZck3Wp= z8WQA-c zFKyec?kyi`vA~tz(55B7#M4nO9F4D($^4dD`n@#&0z*dNPm0z1$vamrPP@PRu;i=t zBh7+4K@Fl>2G2=h6)8D7kJ;RXCGd*gb})cEeEQ*q;9o|()6n6$Z`K^-0d z2iKR}VJ6~W)!Mxc@_FwRLrxcx6?_jsZ~}E%5q7vv$!EaWlK|A@^#(-(lT+WM z2!2oK<3<@ekWdvZbKaA=jCQrL;)bnnvVJ=|9>HV#_FEVv8GtGrbcv`|RXwt=zf`S4 z@oAEKgu|1O=voFNX(<*4E>%Z)_7M8Fm3UtSiWIz_R4cgb;fO8zh{W$?tj$0ff&={) zu#r=YBC6M*-=1AqZ?F8VpaiO#~Bd47{JF zl7&?#vg}(bw~C%LL}sp09|dc1EZU)X%yz5uin-*JVP}RCGi&*0TO#%RhmmSK|9W5Q z#RdiRsZz0KCOV9`^+q@+W}G0!26IK`oNxu8>tY$*+NS&r{fL$>`;GOIBffxA1~1|2uXj5k@3bvyLakf^zo-E;JfEs$Ma zz5Aph2(leIZlD68Py;F=iwxcX;_S{fRU3Q=?I>l%+)^ku%<9AG>v~PF1;rkMeGVAW1GmT~ z08s5xUbz5LaqK|Uz(Egmc+`FeQq2=#GR!lw{#G{PZ1=sB;(08Kb|739?Gz6gWqd2` zi7cZ`kfW*9Z1A07EDjckOO%PjI?3&K2fXYqcEb|kgNWxe^p9QYPF)4o4`!&5>sd*^ zRhrP1u2NOc+|y17w+D|cpQ>fs=-R8Mj>$W9Y>~oapdi#qn;zG!qB;1|bl4O&aq}bU zi~~6C&Lnv8?VKcB$+Q=a636Ef0Y4xR;lG&5Zb#4tHxJBWDi5q3QL&#);3@<pB1UutU zUdzZ_1||`RfzfP>0IJnu777iGH`l?bJIhl0>`vx(PVxetuYe%5?=Fk)HQ%JdgjU>* zgmVyTKgUYCuhIZ7ojkvHZ}8*cJX^G>8wuI3M=#>XJ78SsPSzjI(LxRn31x7c4y_@a z1t~0;Y;(kT@pV_dU)o3fCR0vI13$`H!-_8%mL9yz3>Y@RklO;ce7C|U`rHtm>>}%1 z;)2hB;MyzwEMPT4X!G}++B{5S3F*xEQP(X5G!)>W`BZ^SpOz#U{lXqWKap_AXp!@{ zKm#5ny_%eU;V4+&xPP9d`lUXnOrFo$J9w6WNq34OhK!@f1*vxNO ziCv=E>ZOBcI(c6+CgKJwM5vG>WLB`h?V2$H09s^7_h=Q(EvUg)l%JxTce^exzqX?{ z*2D=u798&zO|QGJd-?ymoO|zc6WHB(RqnWlmj-nVDzt{_W_{sTz%09lfih{HlDd-0 zpV~C$ARt%YdMTFl?;Lu$(=xZWpK^a47pV`ujp@Pa0PtBKS59*@EOkG~(;<>L7!3(O zy9H48=$WB~A-pFZ3>*jydcOU~38Vn0bKBMh@5qi$JB&o|Mw7MRA zB;?vMAd{-`O=ZpvZS8V6tS^Q2+L(%y9%XR{^)Ace45?QvZUcdrxMrX;24M%+cuX9< zVek9R{)RCgpRum_b#0&hV=;?<$0p_Rz}Tj3kp*0QAS^!r)_F>0Gc_a!B>+|Q?%!He z(^44mf~KR!GosrAHJ6JLTmpr9Uv#2StmLl5c|H^lLeu9t&SvgL;tsLo6SB-B(%zDa zVk1RVzC9ZhFLks}Y~9pAh3cEgVwT1n*K3RVh*@$gA#Uz)-p*oBE$2ORP4D6MrJTxV z@%4W!;eGkK$LI~*py-3(gOKbHBh$I_wpjMe3>bhvB?gQb5O@&sASRdvn9p%Vss538 zyX^UgOXdYV_(Q+cmZv}GClFnkSQ}b4zj>$niQ8(Neu-kDq(bjl;zvxJyx7M)JGAdQ zatDZI<7Bjk;?w;kb#|`<{&hT06g5ilBKA9KT*5h2DGu3B_jpR{AYSlg#+%@?tAQrMPr7aO&s?ML5;Mf+A00i;#<`;wWP=zm9fu-id$p?{H zkiY2fncEa1h^YPwn3$(st+PHmYqpaR3?VR8GU2;#s6Im+-l$1JlK2BugdFKbk-Jz_9n@@zwZK zi&>zp2}fgMV$U^K=N?zr&vO*xCjmdpeBp^dc*sFdC&H5#+)TUw2Gd8p+$ln4uX^*B zrW=31dlqaK4aS~~yI3S;oaJiM^oA0r!d~L!{kV{}eMVnu&k`E9F)imZ6&s-2FvMK3M1CkW;ICjsBMR6d#_EVM9jw}U!0K(-_ZjEU7=c8*f%TWW{Rf~R& z7JH;wl6roZNKf6lfdlBpi+;N$@Iq5e!kliKz{9DgwHx?->9C+l4r!-mLGK03H zKCIbCbl->HA|ROcvgER|3b@2-Z$TtmXq6T%=iV6s`lN0@$0Um1g*Z->pq5?mhO|I+ zm`mSwy}bVT`ZJZ?!uOWF_{la*5WHDtq2(!!-!*RUPLAa|*{(Ej6D9pqV+g5TnX1`;Fs3*2D1_wuKJ)=59 zYYUuEH?$?0E3XlWO0TE&ir?X!UD}6t<%66w%xdV!hs_R&&M;H7<*3=!A1V&KBn5)< zBh*r+*hv5Z{=tyW+>=m_Rnb*p&yuY1yDoHB>y3-6!*YB zISwhg)lOS)D|5}?Usv2eUzr<`5Eebo`v?Pmn((;vzFkMjy%rY*Q@CtJ(DkN<4j>BI z=+3w+mna4-`-TE21K^5Pcus<9f&&MnEdX2~i7x@n;-F7iZ?KN@uE=rkCH4C#!`CgX z`4XgF_X*`XtE#|EhnKVFN3L*?QKf}nJ45~g0)G}5J6{vNr1h^ADjWpS>o8r`P>V%DF-t>Zr2?6Z^IHE^X4%A10*DHz4TDmy5+j-UAxqaKdr>5O%zhhz zDE(HS(Qb_G>5j1gKe9uEr2aID0}-g?;NRjPA`gMBEvEf$x__(--4G1RQxQi;&)S~W z^xfB8&+_4EVOU&90m6I}nLXl+vwnP>Tr=L02EVXXJd0uF6eS9?1yc zsGk_ZxFWsI--90H5!IA>a)=!eUph=@Ll1N+cLG>~l*)&?ON9Xj{ z6OuRZ+eNmP`Ot8dp%+EuuZN)LJ{wWFiE-{mCNnHJ;Rpyr&nDeiy7yG$#os-vghsvY zGbl|V4O6c~??v9$7NTK6Kb%c*PNj{Vi86xVY}F5UZ$m{6|XE; zX*W{j%Af`H+MNue@U)&Tf(8IOli7`aD)X_PlQ@@{e%G7HAZ>~_^gDb5c@F>86g10A zJbaq=^m4|cAlecym(gLjZ&ySymVJ#6VZey%`|-8RfKB9mqEV%E@6e*1!eBkwrE`EB z;5(P_eU7qoG_o>v4xBg{yu`1x%6Hc2fhagbHNi<8GYra{Xn>2YTtbHV@1r!`j5GnW zR+^IfH(0v)wv5^S_E0A6wq6*aV$CnS;s-p;57+r@pa#3lc09`bB}iRu9_dr7?_}$i ztiROQtrHm4D-{5j29K#y9z4cf;k>ToK0t*My=K4r(`qT$)kQ?)bz>zXBgaq~*DEe9 zEq#VZt#VwEi* zf(dpY*Y5jf3^T&&2CA!ntW{F2@aDmc2sJf2L7zu%oKy~XN^!W3tCl$P%l*{m<%=EQ z-pLTuo+J3K3u~<|pG(^2$XQ?Qv(n={TBM3HP2mIJjld9^2eF#$OJpm9U!}5Akiezt zE-I(+;et=n`FX?g*0IzE`OH(9PSO6a$y&#u8q2l>dJt+-kD_2!-w;m?c@krD^5)R? z$HOv^!DG1Zp&Ff8{D^o81YimVf-`%s{nFnP6 zODtEFWfI=grPVl%_D);5O{wF*Jq^%h`bBWg7#5HnufZhj-+CpNyB|N5Tbhf}>N-Ar zLjCTgI)m})@6z<|aMMyJty@1-5R<=p=&Vp9{gYUYUQ};7G{>xr0KY^^x+_K|rheNw zaksCypbf%=!mV|rcsWD9W9=K5)V{mDuU3D-pD0n3C8)bxUNNER-==0no=c?)uh2b4 zrrF?GsF^#vlvZS-yZBqfQSG*&I{Sf+Ve)72+^kT&hW+{p`ED4-K3gT~NkmdHLvkl4 zGSb1)%c#BGDbCy9ds8j&9?|qyi7PHlLci zY=%b7E*jvlo3Wjwm{c2gTkF2=QU@)ll4N>FDB6_~3~e$pexNZf8W%8}hd-HY@rs}2 zpGFd<_uKqAxa4G!VBSC{S4=uZP|F5@=~K zC##&BXOF_mp6XRBloOGMU<3*^Oo^OHL;`Bf$B4nnE`F37KNnf|@7BD}9Q?3LBx*ht|w7ixbWb%0Zs0ZDGPAvhAM>PuXYyfX5-JT$^08K)Ku}u4q4~cq9RBKl&3JJc;gdf zRV2R6qOJv$ePccKDx21k!o5Y$K+H9leXNydMcU2D#VW3QV82k+$%1c6dJS}9okvv* zFCoQvW{a4>%`q0wa5slBvEzjg&)_tG4}M9_Nc;S>(h6{>JVyMfd50%q>~Oy2vK&q1 zm-L8STUvn+O%PsO&UwItyg+Efsobx=Eg`~7N zYL0E!g)ECV^M>oW#~82XX$k>B_u!xDc1&oRp}0&rV@Z`)S=vTgDw&0sH&=r81o zLZ&>OJZg2#Aw^&g7DF&pSIgC7Ey0wfirQl2zyWhp!uVV1)Ty4&V8Rh;EIJ%QSCmyZ zKGw0%9NR>VSO)d|3LSY)PICA)7CsnNo)YAnlxzVX#7|23tv`%XsSZi)INNjg!<6?B zA5`Hb%wPUhJm5Z@AT{OXgDncrq=_0L3O)?)PX z1@(@xE`0i3io!ifKo9~GTx?SZkrj7NQhaXVyW94AxE|!1=tZ&`1)L~bnX7oun+d{x))G+{rM8P`>IfGbrnWV zp*!+n<`ph!RY21yTqZ}L58y*VjlUS!rQb!7BjFwy(->nPT-kB$*oVjZ3&$F;iRJg# zbR?5+9wmEPa69tzuI8lUX;Iw2UkiJVD%;2MJ}E^%kk@DaAHAIUJCy(T$7jrBhBO9c z9gKt|jL2>pTPlM}NtOs%QU+tmHb!2rO* zKYagz@2{^P&bjXMy6@{c=iJZdLvFs7_p)#{_rr58&CQmR!w1{fo(!CBMcw$y)5vN> zi2R<;C*L0H=E34eXm$|6<{4xL70ra&%zV+m|5F&Lub*Xz81~E`83vemF(yP?QH_g? zUmH+3sC?V0pw-j4_{OkLW7<3GlitFB>&Uf|O;--6ZZzVFy3z5FIps`R2?)sUq6vg% zMC0@VdU?wx0A?oY0KiGtzbpVhk)g%|plCn+%cav8uC=%3&k*k)^jyAwy;q78g`Ahm z;&5H;<7X-G!bQLPEb^&`fk) zOuy7nasmL*z#!W`G%0;Yuz_EwyA(U+k^GbQUoM#%mrqKsP`^bdEpgzxZk2QdY9U^)jmPh&)=xFQ!wVd(Z=1GMdARLq zHXzgQXZ#G~mR8DFZN>;K?G{JtpwTz!hRF0!Zq#c9bFb_IP28tC1MBc{lNG$cY=7qH zQpM*7+q!=*h^?~$DNL15>(#=P#|El*HRBn53P$1~K7nV(em(m%3!nv()~=?FY|fEz zUx{a{kW1lOdDcU&j4e?M{86aYkM5&~^0!YdmUoY-1!{%*r{39_*~mSNCFO3@?8;lW zjRk?(cEgj(+;2vB@e{eJ8c`-Ps~YbhClOt*TOR54R?NdNDnZ-JUCWxR$7zVa3MjNS z`4!`?wq?m7QVt#{nLRc}_#tHB%V5-WkdA(gd3BE@1s>esTrj%ACA5_NzX|Z%4>V+Q zj8(I@$WpDD)8jluOpMT2R?EC65qL!=&GYHAw=kvT@sFkW{D~B>Gj*kGsS7=hfNlB)dsrfL;)Z=*fSr<-+5c$yd~W9AGFzvj12VD%GH~sitYt% zO!=6KPOvhY0k?8V-B@pDZQY5iH zb2uHpVl>&5IosB5B{^9qB4|Jy)|Xn5E0b!j^8KoWyFm6>^I&;U*uj%-v5$!Lw>nfv z0Paz+{3iL*LHp*bw3xd5=C*aWn080fC8!7S)TlkJiO=Z3sJ zQ9c5-Bg)IBi|ZnUm43tY7I^%u4leD}xCvkAQ?7gAYs$n{K?o9X67YO+I=JLm_d0VX zq4gV@VMGzDwh~%>@TDOAN?ghEw>9P=u*Ik!j@o(`Ew-*u%XA1mqM&B7H)?71tdrkE zKwsKEsFbNxx-9mMAPtn>KVe0%^6!r<1rGtBIlVWGM1OF=p_dNX1C%Sc&AU=fumbnb zwc;5Qvm>CRH#-aY2ZI(-rQ9}D+}rFiG+4gR?r>dTZ+spt5cbaf_Jmv!zv8`RRu!DX^3E+>8;3y4hmr7pXy90?FdSa%XA!MnA$BotA&U}j_diaL@9om`0fS&s<9}0en1;Dv1gI}6VYrC?v2leWuq&1!G9(M_#FW7XU$WE%hF5mWrP-JI7ZP`*6O~D*DgehJ z*qP6VB)$LO=3yFT2j+Lape+u)r+Z5<^f7xJ9g)BSxU5`C1*hPUiw$N0idX zzqggFxx!Qce^4aB#3#Sr+|gwH!+}RnN(UylLF`}gue98P?F(R4lTmlCpLEZkTy0UY zPZm_s4w;ys(^38K16xqYesJmb-J$CMHpD|feOMASJgU1(u&(Wliz?07UKJ>YRj%~% z8W!KBAN62=(qE$C4H#WXjL+x%grj2|?p$HrXD}GKghjBr=S$$RIvyVjDo+##GE1Vd z=OU{<@5boml8BJ{%uolwyK7sJJezX0i!=S@p16M4K)Lr&y2%Q>;z%=48_?>lT#YrmP%2O2lKW zERhlnNuG>MK<|EJw6bs({wj(!n>TZ;{R8>EgdRBS0Idf?w~I4Z>IIVTm_=jh)5SI^ znlHw??sSRv^zo|qzyUN#IV_BetgG)?USZPni0x!ob`5JzwA~h8f)9|nrFVRPJq~3y ziRVyD{xy@)hc*S|;7Zc36l#tOye~#?{B<6~&7LN`@Lwq%@++4yQVLO=30QoRO4$)V znhE_tzcIP?I@VJRU^G_wVJ5@7L-uawF=ErN)7>5&ZwLk=6zYz7(q^|p#>d+(M9TY9 z{?Xt`(xuQ^GQ}l;8_h&cGd!yQT&4@uF(dsCcjkj0?xb!{(JIyzwReOvEXD%A@u7Y9_BSYG z#aB_drmbV`!0oa&u1m+wqw_7hBuc)h82UB$v&~Cv&jHu}^T-f7q=;GXaK~ zAhyyZ*y0?1rW6)cu6@~m~$&WFe6JzEvBfY0OO1c@&y?JswbcGjP*(vy^w%T2? z2pooJM+4~MPA;JUpvKjhKwsxXW%4vB=!i9`Qw>FX@9&A6Sa4vE>^zBG9(y!N{z4V|LtO2_Qf3r9ZAFWJF)%vm3a4_e@Ir8Yvfv$=W4ASEierpjNXM| z5XiK}*);b_5h7kxUcW6XGx(pd-QSDeE9S&2$(1W-sQX@wrZ>Oyx17u68t6;j!2|xU zIR@OGVFzzz#R|Qi2?2m5sEzMXX8~cP4w{PC=nuDysl)9u@zR)@3_>QmK>>cAkI5p` zkteh)HKL~-^^{n4VH61}0paXvvU*z16zVDQHP?tyyDrPtjLAzSoEM;KHJYl<@wm(M z^1D6&hjhG_Ww{Yp0wLA_Y`hPJ{q&mH@p=CEqez+f)FVp53qX;JSjcHdlmvz20v7=1LDZ-EIi7Ka0%#>*i9^Gjq-izb#;~W=X^!#5Aru`( z`7*?Y)%e%nZm&Q0vc9*WJx7Ee?nLFiZxW`c>wgh2?Ma+oAuy_@PUI$Yy^&@!h!N^@ z^MhSsI&$^sviy*ZZXEm2d<}WsHr6Y`f-0q$yae@OGCFvGjRl_iQVh*nJ$n+xfl zG~&UWX3>+gTu`zsAVTDWWGDpM1Nod31JGSD7?6TR3|-HX7@j%xR@vo+c$98KWZ_72 z4GPKp`Ld*qNcwNUjs>$j8pOoz1?8Hn5QHbOKniNBcvJdpqcflIF+8V(DxKvHn)uPW zeYYA45BdH(p*6gbswG(M2s|ZUN9t&>j?x7p(;T~f)x>nG!_+~lY~YK0efPXDdMjEZ zCEM6deXVk#LIp_(C*mRI)uJU|!kdWY4q87~1d4U9A0tBwxpLpxKL*RAv+9fdbZ(>; z%;b1EJ%r|X?;kSiD9Lf9na(j%G=&FmXQf#XJ$%{j2$cMGhV#4SRw1q)yT+5Ca z$|}3YDL>+dpqIU(dc80w`-Eq1@d|JW!}`JoJ!VA`pPi6QVwpVz%$6rU@*o3~>%{lQ z(-U=A47I5uXXArM%>dCX0206^A6C(l^8HIe?OXY)bvDNbFK>6ge;-Y-`5Tl&tIA`T zHK&j`l8+Ggm{sTv+ispsS$@sviX0u?@zlkHRcZ4183>E+4u@wnR!!;11Ww1J3o`=kkO!% zLCb%TGq2I?MUlvOCb!XgG$+iM3S7$bIZO>$Bhe{53Am+K9(TMp|6E=DHz9wmSf*Af z`M(wLLfQu0a=LTwW$Q8wJ|XwLHj}g0fG8-qrJjY&32XT0w!h8rl3)_HiD_ZY<~k7DEW60~wZO7dwe^!!o%T*6QF&WO3>pg9Az! z8e;Io*yrA*4gaI!524pyev%mGzL;G*kI4j`-glF_r?$T{R2zB__Q#;M6h6uRPj@W~ zFQUrA3qH&Wyy}=3vUqnyz4a6&SKFl;&=11;+ zaM~NzA4h!hENa4&8;6?ad613c3#l7uwN#s;bmul{E`=T$S)X7}31#<*As*Fu+w^4=9 zPk=cW@|>RXMM?N32zpBvP5%UHGud0Xb+<240iQLto#Ti$KQWx^{y%fCb(x2#T@KwF zm>m;D0e)+93RKVhsJUF&w44my|k`{$Gfk_DJvPBhbAszoR=X7 + + + + + +Generate Barcodes for Partners + + + +
+

Generate Barcodes for Partners

+ + +

Beta License: AGPL-3 OCA/stock-logistics-barcode Translate me on Weblate Try me on Runboat

+

This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Partners.

+

For example, a typical pattern for partners is “042………” that means +that:

+
    +
  • the EAN13 code will begin by ‘042’
  • +
  • followed by 0 digits (named Barcode Base in this module)
  • +
  • a 13 digit control
  • +
+

With this module, it is possible to:

+
    +
  • Assign a pattern (barcode.rule) to a res.partner
  • +
  • +
    Define a Barcode base:
    +
      +
    • manually, if the base of the barcode must be set by a user. (typically an +internal code defined in your company)
    • +
    • automaticaly by a sequence, if you want to let Odoo to increment a +sequence. (typical case of a customer number incrementation)
    • +
    +
    +
    +
  • +
  • Generate a barcode, based on the defined pattern and the barcode base
  • +
+

Table of contents

+ +
+

Configuration

+
    +
  • To configure this module, see the ‘Configuration’ Section of the description of the module ‘barcodes_generator_abstract’
  • +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  • Go to a Customer/Contact form, Sales & Purchases Tab:
  • +
+
+
1 for manual generation
+
    +
  • Set a Barcode Rule
  • +
  • Set a Barcode Base
  • +
  • click on the button ‘Generate Barcode (Using Barcode Rule)’
  • +
+
+
2 for automatic generation
+
    +
  • Set a Barcode Rule
  • +
  • click on the button ‘Generate Base (Using Sequence)’
  • +
  • click on the button ‘Generate Barcode (Using Barcode Rule)’
  • +
+
+
+https://raw.githubusercontent.com/barcodes_generator_partner/static/description/res_partner_sequence_generation.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

+
    +
  • GRAP
  • +
  • La Louve
  • +
+
+
+

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.

+

This module is part of the OCA/stock-logistics-barcode project on GitHub.

+

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

+
+
+
+ + diff --git a/barcode_generator_partner/static/description/res_partner_sequence_generation.png b/barcode_generator_partner/static/description/res_partner_sequence_generation.png new file mode 100644 index 0000000000000000000000000000000000000000..4b16e35b3d2e6b8d2318e8fb93d0606f8c8eba43 GIT binary patch literal 66801 zcmeFZWmFtp*Dab52oNklf=d!Ya1Y)%!Gi<~?ry=|f)k)|*Py}O0|eK`-QA&aYv4AJ z=S{wQp7)IN^Nw-PA4bzvwX16Hwbxp6&b2x~T2dJ08Q!x;j~=0jiU@vs^avLC=n)J9 z!c*ust*fzIj~=~xBr3=!=b*kbi}qPwe(vn{?1i5+_*uRD$d_kiq)4W%GJ}q(JU617 zhz27iLmHoc{ForG%9NZW?&)Q;ZtA*K<^w8ZfoS@2jFg{98OO7cNceL|KhX;W4#2&& zMjhLqx*~Y~{2*0jm4I7y+|`!V{8VYX0;?RdbE0--@bcwLp6labDM;h(*)9DIE)I_2 z&C$pY*)^V`#v3O$$boPO5tmR3_u_^)3`VF2?Auq55k+|ad`#U$a=CG2F`Fu1h&L&G zO-}Bga=l~Va(jKY#-mbY?h0ze=c1&b_;F*sJpb+6w~NUVosM2`CqlrMuTXmpm{@$7cS8#N^ma!_uI>&TgH|*%k#lSxzazj=KBUj z7sK=;|Cc9&4gltU+|x`FRp2#;M$&sao1O#80h`8mD) zpKtx}aMV;PvJM$t|9Y%ms;Lw#qGvM4%05E!KW6Ori)kuN#y69EeD`n17F=PXeS|4h zjvBhsh(v#1@INNLr+e%LkrCs+9^1z(rUrbPj6eH`dLr^?rTz@_S)nouED|C5Z^s-` zJoFaBy2t7*ta60^ZNZyLOPPIy<0by}*cB`_5>T#k%{4-REBt>o7G9X>r~(SWknX=8 znyuU-cKOd3j4R^EY3ImxES^>;@^(_-=!9T`6#*IgT3H|wvcjbYV}dp3m~xo z;{0{qxSn!W?3-8f_li{?J}gD;p;xw4BySmJ^)~JK@v#25ne90v;*1@>u7O5Y!gl4~ z*MNzB@236?X{omZx^Ql%W$&inGxrL>xm|V%;1}wP|FJQVg>J-qJKN|+iRTuD=~Lic zlqn;;>>0E45snE~V2%D`9{?#Z+_)Ir%FI`;u0& zB3Dzy>iq<@hXuoAfBTH4GT8e)xuW!>XiTh$1a9l%o4eaD27XRkaOYmmV2onwTumBy z`|7hE)L4`jtl?wFb~{+JdtMT$!P&TG{I!V`pFKD_s&zjOQqL^XRB(<_ zurQ`YaC7=QZeHW$zfSEyxL?#xopx1}D3A4L5Zni7w$AN{v}{1*d0N z`)W}AIUnHPGJR!Cuy*ldJ=A4G%h>3oEMbaEicdfTv_;zNPX-cUe#e|d8QKI zY8!(=^wM;yJ3+7N;CMrFuPAT9Pa_8b$z zWO3B73zj%HMd6vuyTGsg9fCIXELwqwOxd3PAA>u@sOfV&$nZDt8=Li~KG&#||wK1xxs)mq%^ zV=Z7Y?D|NT=mH!A+05iLRI5*l8xA?Ft9o~kcR8i)EzH!YcdR01={M+>O6|^xq#=e3Kj-0G{N>EW(T&IQh-3_r+|*bs9ttdb`67|b(KeStGC{}pX~purx^x2-($gC%Vb zc1p%{>UL*8WoG_4JSC@%&PXRnZtupM)gDWBb2z-oUxU%s&^fRX(9~`=Z&lhHtLf%F zH|sTjYQ76W;vLF$=_;TQe8mTJIt7)=_hyNj)#CbB-?b$L` zR6Ccp)8X`-=gAFeGcpj>o8HWZjIv>-CopN8Y3+a>bT-~G49}w@I@T|W<48mNZr%FG zTf^Ee{SyT|>yBPe*fR)>@(@KSbKA7!P~VKBjjxXLS*iIt1?4pa0U0IDj1RSq;S7C# zll&X>mBf2-ONU-NSt0*?BGxIv*+eEBB)z2UGG+J5ZerJlf#pM#ThE&9r0&aWe>4NI z5kCKp$Z~&Tij4dG?u(r%si{KQNJ|=SxA9>ULn&>Ji?8XCUPc%d`h6ByLoG_fJcGQk2 zRICWjVaqebcanm3PFp?%UBk6Emx6N=cj+Woyaw3w9X7J?h?PMHn9oN*#5!Y%mjEBd z`N5@MCUXMy zFF&ONQ|K1#_ic0+@zW8e*nxwb7Axqtvo2r0)6v~nzTk^9xmZqcUzRR;GM}n~dwC@q zgnZP248##Ly_lbHsrI+xU|cwpVt73yQqav_t%Ys@S*4PAcbkC2Vfl=tC79>Rw~WD1BA5SrBK46e$Cb;U(Qe`4V&HAC^-}M=53?On1=p>+ z*VNR4jT_50i%XyV1cKpon7ZeD>CZQbN@w<_-m$b%fAWP;-s`*A#=Hy8`TDb`vXt{! zGHVXg;ig79zGG{prJT@})lz6dTDhsV&E2os8E0~Hp4y!mU;FCFuu);6xAE0Zy47cD zk~)RhOcnMpuOv>OBzE!IiPwY>M~^!J9Q^0fT5omP{qGvm6q^<4tS`t0FY+BLEo-q93zo2Q#+i@P$vXx~d+Ngp^xCWU1( zgl-egeU0+&$vO_N<_%AM3c;JKT~iZ$wdARDkZ89!OKDDim9``zEEMGu|bDxzo=0gC6pk#aX zN&eE{AwAK>kzKOL&>dD7Q?M}ztl938O1FgDw;`j;A0c4+bz!_*IS?L z%0s9KCc&>wj=XT$YglKMJ!GsZ$;(J&iO@)1-6CNXUZ6e6#`9dj4IJXp6V=Bj60c7} z#YP4;$1>!69cdHZd|%nf-adi=glU}V`~Dt>v4(C|1=n5c`s+&*x77U+9H%SSkKHrr z-jXbKL~1J&XAQi+vh)_w6QNsTp6)6dbk>S~)o4!o=J+X$@mkR8mBT@aJS?Cj)F|v` z!dlh=GD*_faDdThq{sxg^u3L{piU4-(Oqm+K`eG}sWnK^v)^ZjSb}Brxl5B8*3KT0 z*&Sr-X;^j;3l08kkSK##0ItsUgW@}uPgNXs#Q?6s`+56$(3G*&%LOdQbISUh2+p8) z+1{N}yNNh?`7F#++SKLr-4qwI-@MPdv2af_B&V#dYaCEaZTfPBqx(f7pM=6-%1}&a48fXEk&YOSqzL=YE zrUFXsv;~X~JDh?E>lqEm8^JW|16u};rwM7)?t7?``8QnFV(q1n01XUYc0ZQ^@1&_3G%DXBF%scW_@uvI1d`CYBdr@0Kkn#eMl~!h6of zME+M8N=j*AKK}5M%7Li-q_Ur{TZ&8n8r&wq_IL`zweqhL(@%=Tt97(8y|s#-J`?^Tbwrs78~yiv!8_zHjY! zg$&ynE`IAf7k83(SUHcjE!xj!`_Ad*WdEw%>`9$LU?b`7wHE<}r8Mr;@XL0&(4#>a zmrEZ``->3>Ww*X%pjUP7A=@$?|9*=|*}MVU;f+4a2CI4WMD6D z{1q#UYx%e9Nnvtw&xOM4^F9GI4E(j35874JzsARBd|=(zqXzR3o%W<85c1H8d`#CG ziRaszR_V~UpPBXqsc{j{f&$qIm6)_BI&KvK>H9TFd#?*;DNatx9Ef`~80@Aaml0B0 z56PU+c@gVaAt=+c0{yeL*2$$6iW)B1L~5Oh8@zU`I7GO0p;HPm8&P__I>%S6hrZ~S zY|c_j?6Buo@ti<)JxY_TnJrVtwNGwU`J~pWtFFEgMMc~8a^}y_8b3ELn`9kQ9o^oB zC+jRC(R_?PNEWF+IUOY$Bo_7jVvEyzj2Tn0w4yLtw&kJsU zn*kV3f=EaJQ%cK?C?R-!KT-|`7ENkDvJj!N^~elEE)QFOjvQU>llMd*`NulN9NGWa z?oE$a>z9AQ>B;9Gd7KTogw0|aQ$o(w>IJ_NzGw!Yk`tqgE&t)SW zyusi2>3IDw;Iwy#o5#vqNDKzbiiVRUex5-%fxWZ%@SF^0OMRo9@*&r@R8(T-%bV4= z;I-}fArpP%u(d_rLU8AdnN60YgWRvMW3LQiYRhPa#ncr}|5*B1wiI{pB3| znwE4*03%G!cNp%;xc)GRY~pcEvN=PQwZ{IKE$AJk-gv2vRc#0TyYG=abp5ZvH=MXH z&YAOKQr_wt?{jcQfuxI#IH^wM7nZHpJO%pBaHvn*cMxx@j<<=Gadq(qej= z^sf86d=eX^i2|#0{W2%=>%PK!y}0=B_*;rG?&FrWzQRV_u8!I{+n-nBt=Eq!?94!G zynH@Nlp=a?Wa7$9R?%0BVZj(f^PR8A4kd}qB3k&5ns&@zj3(h1raUP#%^vTFmSi=C5S4CVvExadDTwvkSd$F@ zuK<;cmf9c3a3Kcf`m-80?Kd+PmgRLxX*wMYj1VfU5I3JjOV@%~bvtJjq1(ZUO!?-t zf`rd!UD&#-F_GK!uE1fy9 zcpiA+jQl#soq#9V=X9Q^xNxnpiKX}7(2-x1A%|OssLI>s2u;T05+$vliDs*+Yur33 zY45K#;lSa{{zT>WBS|&vUKCrXsWp>{Vn4m^Q?aRKpmVu?quM5cr}iwaN>!C zF58~tUNtWEa$=P$X&n+a6`AMlkyl<9Ti1OVqce_jx`{QiB0wj5qL*Qn3ryDbgEfm` zmL7)&ktl(BD+SmSaJq?#Bf(5oYTXg{~P{ z(>SMsvyXNUuQ{r#!JYlo0-P3&L5Ee!)RNv&LV43aiU{mY64rQrHD--$s;Lt;m>^qY5_hzOZR2kA z8aU!YnBt1vf8$P!xm+u(v__frQ%Q1uplH&4_{AKK`jP6pm>$ROG2`4(6yT1~k9ZS% znJ?`yZi*y;+$l%h$b{?WdQtZ5XYNg`88nWz^OXuDfKs}Iro`qnY8P6p^zYwh`>Rfx&>49yDOMOW+j>ncd2KvEjaig4cYMj92>Tg8CTYG@qlJp@NJ{ert zr`JuV%A7#Z(R`}(a(#{Lae-U4rEem0LZ4bZrAnPk*L!+XE=*YLQ0r@MKj1Q+`CC~D3VyFhnN7|jc!T%M zQ(|vjYIDv8Yp-@r{zjj`yB26WEs4%S8Lg$}PH(@Z>(dV2_*rm3!6CMFm~P`wEMdBe zU0=H4~Pi}nskJPq79)f`=mTCJ`|d&th89An=03qp zFINo@Ahimxp_I7A08Ex2x|-H`}8%7Amf=z58tlFWSWPPBK^T*2>0Ke_k@IE+c? zD|2?!N~}9te53BTPF2fOm1wlMp6qyB1iUf#zzp5cEtf($$lTm?3YEZ!!!lzCY+jo+XoXh5D=K*~rORoMK5w>XbygTb9H z=`#TgYma9hzbLtGi>tTP_E3sfUq)*Zv;oxGBIZ;!567aL=wnEL_B8@F#Q zfVMvyOE>^{0tfX0^@}_{RauZB)3Z~apCJ5{D!r*&hVK5ggYL!00M5*qnuM<8pMf3f z_TY1s2!zjE!R!|T4y!eu`WrTs)-+V7c8eteYMoB5M0L)9uJXF+C6h$I%0;EDYiq*@ z6kxCQUJ%nd2ZUEChEr|5gWcW{&wz+Ds3z{!H10DfHW-0CFC!>lixYNRQ_|*P{KEet zjIX_aR&p%bMo-M;74Dw5Fqc>_)43S@>_?Xjo)Ddyj6%?0oN&ydeZBb~YCAsfHyE%+ zu`oift6VLnTaUcJdf(`w;4L`Qn_6d);kC_mB5$F>sbu5=43@lh`l8V|R?cQ{Cfrxb z%o7-t#5vs!-X2Qo@Kx*Bi@e@pnoGnQ2p@?3Qj23D*<;bwbdKW$W+pc8e7&A=@HBb5 znqo~6nTdP(xXM(uAtpai;h6B+gdc5B&syQfc7Xy5f9@Pa!Jv{OgmASV--`Vc3^z9m zOx=tK&?91J&OWfz8QaZqf*5hAkw0+`6gVtb)eqksGi&q9UC!mz%e5dQ4LQ*BN)!OQk1J5*mZ zQByRi-e@~xOrO9^^HD=K?RfyXOa?;ssTo@|R<>88ok_yGz|~T_KCOmj4w$bno6H;Q zi8JLuYJObiDIw)U(eK+73GeMv$zUrnn&eZRRwVI?OwfA z^-&QuYqH$EexY?bIMds`cSM?9j#9-@C(hAQW7%Hci75yYukClRJQuz&pmCVs*Ur`t zpu7#QTBBKAwlIZ-dy2tgirmNn=0GarJnXb4A$J&@NGne?3Tx+^096(2-n4sKQr!;Z zvie1V+c?FQN`_C~F{-@MI%{PzJ1&t;-|(88GSXQ4Af$ zX``3HynnWHU(J?~gD%0qb$7izyP(Qfuc@Ibza%tndPP{3o$K& zn&}Pe;Mt(41U>3T;YB6$a?6uCa6&-D`NvqEtTx6NpG8LjIw2{74#L;LS6V+maRP%< znb)uT^7{}M8t~R9aT{-Ys|sG?{N(YHk`{i7vaK~eH^}%;EkN|znCrB%+a>q9%Gg)QG$`(9gQ1*DLoL|hPkfd1F!0DVo&pESu43AaErs9uC({yncnU4IyB1cd? z4s80Es)eLKT6%l-d37YXGkBVHQ~Zz>5@pN%v%ldyRkTVWIN}etX1H~yFnw$=E%*WS zo`UL0s-Jlm2YrHVK2-1?Ap)T+mJ`|4)NOpno>_3gvC0_DJWywVD`?LxtSEOF@VBnZ zi}LtErB;W6{unjrD0*b4S!jmbi|8Q61r+wt)gH4q&A5&h9b2q^PQ%r?bbo;$MfC^y zT+t1D9DreHcc-4shH8lUCCED1P)J^?|0fPZ*?U!y2T>aP`&bH8f{dX~1#g5SCJdvz zAY#rQRM7Y&!$SqHtU)=AzX}ElvmS;lT%+GABOQ={h2Ay7vob5;88F{+MD4FL-~Q437fO*v zP=K^o@LNyn)fci;>KndorT$q$4_I3HhY5(`cyZ~5D6;Ss`iQh58Ay20C(a4etX2IZ z-lwuZyBFnh*d>WilwcG;FBH}-3`-S({kE3t6&5O|UvW;G)MbbK&Al{HLbcpm=z-Zy~O_!e*UMb`7ie{M|x05&8*eP z|46L=xgHiE^k9KROl!tD|8hOX7nO(QG*8&(|F>yc_#bNRpMn2*$54;y2j$m#S{3^* zmHE$W0?{AJBRYa=@F@T78E3E_%0i~sYNh`e&mYD9f2z=b2L8|EE>u1k`V7ms&%aKy z&TsXdL8s97U!U>+ngVpX|F0?BZIJ(K3je<{g`-OF#_^nux+Ev!gg=foF-e_MZ*1-# zZ{76K^UaWYm!<~pb1VGecfRN=YxY}=|G1ubAk^~=j#8*_3Rt>vOId+?UvPj_LY(8a;V_bZT_lzG{i62!?iKETc4+p%XfyYUEGW*7r< zu>D;J`K1O9?-|h8rBdpu5Ww*|QBska_mhK7O}5t_-R}XP-p5$=N(Gn5)h>97d{~&N z=Y-gjKvbH8^soCN1p3o!{0&Suy=4Bc@6<+;GfgVMq3>n^_iyK0_>~um56Q}@NUkdF zn3s^V#U-sY6}dHPDoHDd--mWF6cqB4tlIm9W!I2nic|9*t@$w7L~2XvO>30Lo&|`(JKasO zryR0PI&Kmp(htkVO9E@`E$oJV9c$};H8t`|=c+Kv$WS*^3;P=IV zoFlfcQmx~BtByD)r~YYU)Al9?dV7<&GSX-b9Sh7<`MWo3EKlvwOpj>~g@XP_&I>Si zu~)I)l;##mUG3T;=!o#T7834#4l?&a;J6 z$Zed0eD!Xf-qgH7GhmBO1_he6#rBXjZX+C9N`G2Yo);8kSiK3sxlmXh;|DDx%=Mnn z)fY+eJ~DH;X|X32QZe;z6=F)$SkS|vp8fPsQel6W2GlJrhAnflG&FpBBIKk?%?RVQ zF_uZfYHRe-Fng@r%yyUk+J43T7r)}di-~k%Szl<`)1}H7>Hh1UYN_BhnV*Yc>Hg&_ z$fvl#iz)BJ4R0dvN{`_SjbiPSMs}lyIGX4%wIb+g2&SS%i1wJ{U7u5v(j4}QqB97y zo7bJ5N?_5+;=mosB}rZaSr zbvUim-)#RjNkHFm*7g|3nXZLDINJm+-_e!WFDP5Tz19d?LR2gdCB!=mSO`U z8ICCDkSFBczzPb6eQ_67#^oCoPAP3hh;;dSv5VRG?vvDP{0&6$Ay;jpy33yn9VX)s zc(*5H#tOUEHrS;`3xD;KfB04(x6wdow9Vl^B;yp=tYb%M*3KZhyQxXb`=Bp{9+8~G z9@X8|yX^uvfyO&_&!7?t;&ozOWGb{|j$2#&_4x-uhUJ?OIsL4oL!o8d1zW+Opv9_D zQcD9iS3Ko%HrAQLZrm)%-{2uWfj5Z>DD63&z9Hyln>vS?!@PXbtS zddfYRf}HQ+geeyzYzm>5NbAzjJ;?MQD;< z0hKG+H!0ap^Z){1ry4F5mg9S#!YA9)tzH?J@4$?2SrdS+gU#A=;H_CI$ zvAw~r9Yp{dM`b@|CW@~hwn2-~$t8-PqyX^uy;J#qM9{nP%UX-;XGFYUtEi;P3v}xxP+xD_Q=UVqH!Em&&21s+pcsDQ=D*L&+{^2_89!&zDLvhb;uD38MXPX`m#`6{XJ^t_K z4!Ys4V%DCRzZDD zk>q5&Ovw70a?VD&88u@+pmb12g1V(vfh%=bDJ;e$eyiajJM(P6t0uP7YayW*>x?$F zZU9Ajup9>>W~z|6L)Zj93|gXQ5R-0alq786@oU2~rp>!g)Gx@|;TzyzlrJ`rX>ZJK zA%Ae@(fKeXdL&BR&KFkbGXOVVxrW{AiurwG_Eedmqtwy*LhHySy{TbPqNa*jcz(Wj ziW(l)m)@A)qPAuZb%`yyC!r_F;PoiCO&vo^mdQT^fng~OHYU;N33QhL z6VR2yZYsB0=ttvjt!I60a-+Y-Sgi2MuyO~9Q$h;?c*K&~SnV8UXjDN}BY1SLaG9k! zD-(7y6kG10f7A56_jj38rii21gk1O^L~cVg+|sHJHe%^HCP32Q@!kB1Yp)~iyP$m$ z79P00!JNY^%yNs*qf%C8T+e4abPta& z44u5-vs>(bugx|d1jh6nO!87se*7kpA;SGb4AvZX+X&C^jE)JjIu`67UsPvbKEg*7=K6BDRKiCdv^#p9b#wULn7SsBTE_A zr-y?c<$UzpM%+agveDfx^ZUdp#$J7aRB7OPmmk7bS_l+5J3YsA^7X>!hO)SNa!}8$ zGLtl;SW-0y?mQnE`U>Elbc{^=O5Dp@c>xRid?=I2>*=fn**Gf6GDk;A(PRS?kOXdC zR=aW+I(^VYxk_4lZ%={@PFT@wY1`|!J;i)n_})yiTydN|5oPBQM6kT8%`#>4Y_YI< z&!+n#(q|2c(>M`+WC28?*e~{NqK?VWm3`j2wD)oQCHec<2K#v-UBBG$%XS~(wJDSR zdC}<$8Xvs{YzMAcZF2*W{jtd1>!6Xo4hn{;xpZtqfoXyCG5+>iTEC=CXui9GCMT!v zrI7&5cPE2A8Fpp9*i7o@n^Qj|mer|u=qid4Vkwer2p;~XOp2PIlmH+wJ^x}b_`tQA5cTG?Kn_jNF zzNP=(%XQcE)cN0gx$gRwvi^H7*Im=o|E8Dgu5anT_j27eJstk{Uaq?qwg2ABb>H;# z-+Q_4TGT#9bPdBD9v*JY)Rbl03+%@H=2@G1V9SLLN*~MH-#HTp=sMrEy8*r&kFF@g zD90M{|0g$o0aq?$6qx><O2Gn z!x77$qwvKbLmz?=N}iR+(ntksiJHG1meqLG{&f{7Ph%o^Hi(zW9$a~ON4};S-L=%H zb(L21G|)4(cPDpDOL2Gkx*#Bbd-JZIFmk1oj4J`to6+SL3{gXC>-u>X8E#c~`-uHI z1Mjzzyc^6VP_yYeh@fhEbJ-e&fkDe$qv$srID(_S#cKoIWR&#IJ-#+5dRIcpMLE|j zs}mDC>qwA?g-klZDCQ#^Eu-EX44ph!fNS3Umj3((x>Qr6NWh&HGg0lXONm3tNUvKI z?+-i@ODj1}*peN?*b$N8e1(=~n&e?57$O8tNVa7OOTZLuQ!ADR*Q~PRIGnGlGp7RE zadlhIUz4;map#6+!0VThd|~VAA!>K%a-N&UjH^xa-k98HNMFC0wtKVrI(bfJsWvZ| zdw7014o4$oU#Tm+YPjn%3l=gx$ZiF@jNz+kYGXw!B7noql{gdm-s;;m;PwerGG(#M&7&zx*Y!!|;e<-_(vqAUXF!9?6`bKrs0fs{qg3Oy(0b`S$ z$;b$fMtQkmU`gczZ7};}bad1^BJ+va$FM00SwT8Z}Hf+25&u>+Lwh7W2 zZ_<4Ix##YO-0IEY_Gh8?%^~|JVL>7iy51$RYz+Zq9R=TuZ{;vdRYWJlgiG8J7?usf zaF&A-L$b*j?DaT&R&Q)VaQQwjQVt!0_5j9)1)ok2j)Fu%Z{D~8Dru;?LSoyT1Guzq>j~?5QVLR_e`{uMPF>a1XZnxI zAJjz%$}rw^DKp2Q)bO>E7U|cAK}OD}m~J1h>ElS9%q>GqlCM$xgnzADsAzxYHd*KH z^M%m+_7io47ONmos&-{;8olsCefOF>&;#-wD_eKTKe2lV`>Ay7@gu4IVoV%v?*oD9 z5}gA|MsbJ{_FT$&+UpED_2%_et+)B=O`)m$EL`k9@{X@t`$XPOB?}FiY@WB%X%6~> zbZhoj-34I1{Dd&k89b7s%`DG)QB&Z9vRJUq5H&>eM{@4DI&k&N$zO3!aE zq5U3eSF00b}{ST0hs!}2|3RbR!n5b-@%Cw_qiHdig0(DiF5WXIbCzym` zBrpL2YnznYc&;6Z9B76oDnE`4+z9%9V0iU?3w@?7ck8NLXprDOqCDQxUKv4DlBD&TLhD!rpF=KZi;R3OsN6`Vej~u^;#L8(_jaAPD0>KGqnq~kv z;-ZZsMuSkN;Gh-rgAQ|*Q3nUIXyJ*3>S~phJe!a8_lp_MSM6g>lUL4iOZ8IB0iBLr-*IUKZaf4KuYVa z5zn2Oxsa1g+57=We}dfm+H9wJXM$lJRO0c7hl%ZSGdrbsAxEBy2TEC8u_kb9KzW%a z`MU-iwP@zRG96G72=!@WWqj9b;v-0`Zt0t>h)ez#HAfxvoGmHU;|feSSUPo<7-+qc zWTsA(bb`9zl~~dh-}W-&L4>bAl#jfhHyWdRl_hISSh4K-(&P{g z5We$uH*|0B6Vc_JO?t1VlrN>+m9@h!raJz$AQ_yKn~(I}Ae(V{$0*XanC>~ziD{0R zZA*Htdy(US-tO}}gLw4wbIh3f-Wdv8!`07O*^8=dbDt_gsqKm0nyYk8Y#Jpt`Sz_D zSGIVzjQJ_;b9vojEUP!1?A6w0;I96fpPBHPjL~rGIoNMt?HSoZ3PFCh3piXrOv}2X zRjUy^q2-1#2Ep1ac>@=rIe3he*n+flyG*`=Cc#~x?TKJdfp!&s3MHC3wq$f_t)C_8%&S)f+OQI;GMkSg=aHCvYV`^=$gK*T&!`DJK!)=>^evUw{vN!Z+1 zcz29RFR|pvkN^oI9bBXUCM9R{SG8UroOE_v*{P@=3|5Q9CANSSA^RrQKWQm9`rbzv z3oYFIt}`_?0BOWsv$DeE1sUIH$kH!lv@T5nyNvB!6T8zoJ0g_iYZwy#+~ilDMeg)` zAv7qy!d_@E`@e3diiIM^P?Csj&W zmDp5lI6gggI2n<==`ualgXC}?tvzmH`6PfKMnrXhXsl?4&n}<{mxwfyb)-^yD22Gi zB<|)|R76)!4)%42Y%deAyJZRb*Ts6gl#LYMZ+l>`nZr}cixc=JD7=ayEpo@?2I;32+x4E~vYjYU&D0Szu0a`k66BFJba7U$*Awet1Xy@_T zDCBHKSXkh17!1(*X{UKoM9Y}KyG$Y8=t&g)pL?dLHGJPTG!3Nswxpx8tY3uIKx?rq zVf6|O^psgh1sR!7;IyGDnPgG0lv0=^9HVn%9BjodXDfA|?-<^<9xGA-#DdsB$x)*9 zNy$B|q^PEA_}xo5G4vxY0!jr%%bRce)cBnm2yX{)mN3)1Qg~v@F>jFF(zX)Q@aDDX zbo-~Olv2XX8oK(lkXC&C$%R@wm{QA**4C!S)m6mxOXzmr2+?zE^H|GTZ8DjV^b0c2 zR4#Fe0+`+5=bwwDv}UeN3fRtTVql%TTE=`jFo|7?_mT(~jr6S8s%sirUU^|HAm~mc zi6bQkt~oRA%{Uk{p|jJn<3=M+G4T&TJW`-Nc~E7x&~ttsZ7>$f^d4{MBoik{WTmUw zBG#3O>aCb5HHV)#cXBN@=@Y1P851B1n7>Xvhgp>IPih86I2er*HI!Uoj`1YtV2X=$ zA?I+}*61&& zva{J%R{Qg_5FoNt=D;=I`!q}yT8nT8W7KxjM%FcQJvfody1SWNE>;=D#JYdvLk{YR zjbMe<>YgU}8Eyah$qm&&k1_I?@7engZE#fg4petC{w3i!*IQ}DrX-)Zk$c|?^$ej+ zQCQF?7W=k+bpKUq;qOY88h{!v5|b1$U&UQafMSG&BpBs%hxO`Q#k+q2q7O9+$?tcJ zOP2X~Oh`2PqW+(D!N1AK6YOdjxovDR8}dhS0U0HDEZ@}i$u;N|c@QunX?>Ty5z z0AAZshcwsy3~W9?oulI)si!7dS?vFmUO)?62JkW|LIS7m)-l!b;l~Ve96u6R>=a<> z&#~oh{r(+_rXwgwIe;+8q1}V5+6SluaHY(-hE5^s|2L;lZL+jtdB@$EbYEXL!u~sf zUtda7D8052>2uG5m1s{)LH=3YwCSz+ih@E*OK;JJOQ zZxA{DsCaR{kSWY^Sp>%k>2Wf@Y+_q9VVieb+dvJd+1P#PN$;FY8IYOtCFl;^H0f|` z;Xe7!9B2>}p?p{T*^~fxCl-Y-$}C<|NQhBnsHLz8wc51Le_qI+7qja^L6%Z)Z^1_J zh64Yi$cFOd0hYUfQ5p>7J8)avq+x1;m@BAm$|=qjqMb^j{fXpc9?Sd`=kpuQX89Xu60HgH*LIY!P^ zepRUhu10t^Y!|A6%!f`A%k2tVg(Eey(;=!6*E$uX3iU}twD~-UOzjEtD*r2_K>U?a zq$(jML`&AqkRm6<70cWF$UtSshq%n@z=_eSF^$089O0XO>&gK#!U30aqa_o0O09&)}FV%yj67t`Ju<|N-|N;*pp z@H{GzIaFY@bHZC4EE7pWUsd(X;OUPYXG9Fp=MjPh&jWOfy&Otq**^&A@gZxf-$KU{Cyb&1RmX8ifQb8%`qqT*^Z=IP056KA&?cS9u z4!GRQl~#-BFU+07De|n+)YupXWdwx;pQ8`PrEb~wy;cZGl2mqNJ1AR16xC>k6!_Q> zRYk%Hc$xSK^Fedy3|+?SD<)Sbf*V}X-j7t-w>{!<1Ytc(e#!cIx0+dGsA+1V92BA| z?C4zIG9ySjKRS72+ea=F6ZPkJ$xQG_YVY}~eqB=6IXPEhE4O+xJS>I)Oldm@^N)el z`1M6##MeHg?%tCjW!3Bb=p1zl(^q z@I?dzhh~H~ohxcOe0tmcJDCB3y0v@bw27||Nc=lhq=tM=cNS%pxGWweA0!@a-7G-2 zmF@M(=ADbI=Syt>`wM`ibJ(mXf6#e@_Z-K`QK9*L01D|~uVfORlm@4>I$q06zW`2^ z@nZq2yc?ByKbd8C=}L+Klu0{?g}-iV%M(pm42ns+O9`pfxLAz;iXG!ja5z1+7+QI7 zK3qh%9N4qQasfJ$8BG-0-5^7DzD2s z_uf=?&#CK9;=Qmo>`|VZE%(c}5c`6oqlxtPz442Hfc9Y)PQ5lzS?E_7mtPLytjxiO zH)W1=B?blHjbHWII1!0v+=D8*07feD^$UigFnk@=ZSnie`O8xv4!?vTtX7g&Zoiz> zo~G4+yB%c!muv8@Ab{sxT(8{$wHg)(%i8jD#iRG}4ADP~_zK|`!~x)`^>Z}0IQw^; z#2>LN9K%b*4-Ll+UXVQXwiZ99@vg=)k(VNxMv>Bw%cI>N=q{0vqRQ&eKa15$v6w5O ztp0l4>#oUydt+H&=>({9I0gKCQ!w7V6G*=;a37Q^JeUAqH#WOk{cxky$R^6Hxbql$ z5SfUz;h3w1ETg}@eFLLJjSE?ij`?7u`YA zOurF!W2Bypb1Wl;Pc!&O1_+<`QOD%*3Y!8H{W(syMAnVb50=TsY2|CFK2~%*Hl0gA zUz?J#Njv(sg$R5$UUyKlTIkVJ)A^$=*(&*mF6%gJzu-l9#W^(EJoD0U^Xu{zePY67 zk)#SuOtw37HSQA=;XC1$3ZH275iO^rx;Yl-SaxW%S~E&ZOzDo6`)QGcww@CfnHT}+ z3nI9P41gDIl$a7}ks&o<3fd+>h4&^4<*-25aZkvIQt5)UJJM&+&DcM2O4k0WaTKspr*t#Uik zDH}?riRf+zi(ypW#^=_q0pifAm7(z34n#KMkY5W>h<}0A>FoSQmKCS2IVsbl4JE&? z-qy)Dc&UIS&+U$v0u$WFKZQ#DeiGMRtkX#0=li+StTiS82JzjLU$K*%#V2u~?*`fk zxtC?o9y446G(8MP2(v!Q51EOpO(5N)j1N_rcB`?H86;G zq6QmmelOz$X3_eSHNTXI3zL?nZ)hL>Rl6v2Qctn$piUcSM5R=-467w88@GBD@3_WS zkR<%AgVEJwH%Zu_h1^Ft_?ls)Iln}^R{efbx1P!E0-g~kcS`F_7xf8ge!;1#uEdx= zBZHc^C*wU{bG*jIj%drJ`6cnu^_PpYQhIax>o^HqgB<`~$JbVJNFM%{xb&CjHMa8r z6L|+47uRL(Dkmtcty)kg2jp&vxk9aS)~J9v(Cwk3q-hlEPIwOV5hgI`k(E^nH_KMj zb@vstYfs@XwcB|`Li{G1R!^Zxj3_q2(?S=fj2QXN)ofILKfsd7JZc$ZSIZ?C{y(kJj zxE&^^D2v0D(1fmi61iHyPaTb{+D$i0apHseNzEBEkWfM?#L@$QAw-$IhNY(&6c0TC z&Ua(Np>aDcNcRE>4FhOH>rxu;VJ7rG)Dm0ZJS&Bza=K7haV%kQ89(d&s?XEQOB#35 z4t`j)`@ESG*5<~@z!0z2dkJKrM?MlrMJ?ag9d8Toz$l4}mTkB3meUGHnaDc9lAmRF zRC)B+MW^LgY5idqrj=Ly0gpjMM|ziG|8ur`f%H}M)0gmd>BO&ZM1+O4Ae&QpXT7{e zL#yoUyhf#|^~K`|8fBXW7z)OiAVO}onTgI zayD)S&I>Cel*?u%=7^8y92PYBu7a{!%x{XOk)1rQu&Rbqo>8HQKN!CoFB$rZCo%F1 zm>|5orP^x$eACHJtIihrXw+h=S}GJhpg=oS2!uXTTt&lXOm= zs#jQ^5q0=;PfpKx+$-AOHV!$VBq9v`B@0r*=Y``gPChy&3QrVaiY1=h!h$s2ONlFKTny786n)5?mIOy_v%Io+!@Fcc6$q5v>lOet#> zWyYL0S@%Umm-`^0PBYami1Eq+=-ajtlCj|%T58v^CjP=`I zqEH6|R^K92eI;#bTu6{oY(yOu@Tj zboSvsE7PFPZ(^Px`D25?r@p_sXW!`V48k+~<`GYffa>8UT0GGYF24q2XkG4f%S2q^ zWFo@jT0{l#UNW>1Idq5his$-|4L+t(zP|BiH+lO_!h4_GBK3{n#Z|h#}C92_wpJlK`RF9n>6jgJllt;5y4I)6Wk$6)H`STUrap1O9 zX)7##Z-3v=f&Q~B?Gq@|&~!_Cz2(!QTFxaxTJ=QuTV`Ty?iw?OLoDOK|L)C&IAWmkQ&eD z671n9W?Sls#6;s2$N4`ih(iY2ZI%~t%)l!rBv%KrF=*MX-0xeD)G7B;%~Lqt*mMYO zAP23XMYZlvoj9CIMhDEh)3RyNjHOY|xt(?K1+1vFzYWbMZTg7b8*GY&*WN)oUu z6^SVU#Z_8g#p|M5Ov7yKl@%@hll#>ZEBD(*E_q`!XPY7vC9N2#*T6<{6nrDRnX!IQ z1c}w`C3z0Hj~8P+?`HdO_KuKcdvLNM9u!pKafX?5;58 zLju-(D@^s`$bB|GVJEDz%ke~cWX(Sj;b*;EHbk1nr&Xd&O1yvfju=DQp2+=6O*7^X z!DWp1QY-&{-~dnQ0rwwt&f^o1!I6h^Fyy}R{zk3=YBNs3T(+uJ^!2j0B|$5@sm)`s zwwT5%@23L~jK&nky%;DE?fO-!wtcwHR=Aw49)sSBZ6mqx2i2e-VMI)+4)Xou|6P-&WHe;lBBijYf8kMacE!IY z(r7Jj{0Xh9>cWbV>sLU<^LwAWOwm6drzL~%4lZ#F$ym&YjU@rJPVc`_|5t!YmI4+B zC>_fjn>4BU0C8_BD68>Tt@TfL%!qg!6uV!kn)@06kq4cR*C_6vr;j!S2#5fQ2g~rj zjp`sUNEt2i6X~Dk5X5|R6UC^$Cw#}*{@wt_A+)zq{b$(ZSG--7;{Xt48^Edj9!9nQ z{JE*ew~LzoKHtxVEelMjzBby__~+8|z6FE3U>Q>JYFp20=N_PI`?InZ(e+jUSB=p*b zdyD~v*MXwnK;zG9_tP@jU$0m7e|tSFX5Njgi8p#6^B5llW7(Iu4qlk%N|FsZK^4zN z4^aEYmnrBN{Dw}VIo7hq-{_4V@Jn4gaHoo*<-4|9A1KU4yGa6^v)GOA|9t2CgBwp- zXhMfcbSmCC4WjX0D%_iMI6! zyl*T~S3emEw=}WCLQYJsxuU9W)Hx9&r|a~pwC6jT7byw1nX^*pQ%Ud*uDy*l#Fbg@ zm%afv0o+<=*D%G3^GkO@bYZe?MdrrZ{z<+bri@Giz6#ya_M(L(nfkp|Xz&}O62HO_ z+7S2mZF;RA=9jwW!3Utz0XGQ@X*kzylnJZ$Kq{@Sq(hodQH=8Ehuum zvD-?01ekr!&1j{PN(=mSkD2xzkvvStl_GlHOCSnq&=@)_hjE@|WT9OjM?8MHFGN%N z;=x3Qp-H-%Zrm4&;P60`?^CMEm8_r3@z1<~$s!?>v!H((=1utxGLFpYMh0 zO@-_fTUo2(64qF&J)_^6K9r9?2vQlVt4FzmDo`1}xG42fwNn{?H~skZ?oqX2dj2{| zxscPC{4|>Q=9nxb!S@I+5bdlWw~NGW)6pO=Nw2TBqENwBKVY!N3Q@ArcE4kq^OA5# z-VS4zyDjNL{(%vDK~|^qM-{Bx?&uTlO#?@(I84QRi18YMTa(Ru!K~~GSRt_`F-uty zN$PaG`(5ibBjKo@**PsaM=)lw%p@G?h4DkyGL4hnrrydrvge}MR%~uK3`UAr!d`tg zy*K1yj7^!t6;^H~j<=hZxZW# z6%wEh$ePOF<4ImUrRJ>|ua!D*_@@=ViTuKhvDMKKuO@%eBL$pgU5zt5V*rtBneYmd z@O~b#u>V>bx>_>4*q)j4yfSjTvLYXw!-{0oTY!Kl6^q@{La0#2sU@u=K}*THEdzHm zOIuD4+ZW&1;dv2F*@Pi75|+ft3->?nbaKB8+-^}Z|0=4mZ>0Hy>RA-BOWdBv)MyXkbK(>vrBvw#!t?Ts4})13UmF1DvR>H z8Y9}nMHycmC)~~SDWdMe`|*<{dSIlwez0@p8PW1l5x7suLB8#k-HVZ*{oh(6OmwKq zCRVY&ih@mHmAfckMMKs1ocNH@;*wMMI6e0qqWS8I zHMupb{Z%_Wvrwv^p?s+U_RQZcR@1c)Q3e&{BtR7Mf!G>d)ifh z|5`0N2>=&V$h|~QeAcrwlT)t=TvfTtg@rjCk7b6Jn``z+d`i;rT8m_gOtIA$72=-d zgz0;G#GZPI{$!kx(7Bw48XAwx{nS21JAsg{b+w#@F6_1_Q(tK3<_e`SYv& z`Hz6udjqu0%*grvQ4xqUfH8Oy14j=|IS_L!33pEdu4 z#$S}-S-M2JNjELGI^_g_Z-ghmWeWWM@!x;0<$as*cj2I_-}dDGVUsrzw=jv+SZnx} zw)&s_ck{6SeZnmq{9il#uO0q+cK-jgA0!xfxusjLcjmVr)m=TSftld3v%IlE`4a{( z61&4Zhla00(A=ARYJ2Ri7j{ma&myXiLrW{hXZO&x>Sdsqz0Ri*(?%0sE^%hNi{b7d z+}aad%SW~er#nK~1+-1o*jGe;I#tliA;R0j@j4Pbx3?dk7`HpQ@+0&2X(gdwmOkw% zk>817dohz}x96$o%5s=~M0p)o>(T@ymMUkUJjY+a?3+|JvJCRrR zOWQjOhggqcSi4(&i2)**>9#_{Albql~C%Dn{|moi~z>+gM&+FR;&H& zV8z)Ck}lf7puaZ}hRbbv1nU*t+c%?vzDca))f`iyO>wFBx2iH+&d-4{xFt=R4ou^kEQYSj^8$xRrcKj({d-K2T8@~Mv zjB@a3Qr|g}CfT*{MPjODLqB0D7OhG1DEh*O`{3{cl#P#<8AEpTKe9=$+}Ewb!Wdxw zR$MJ=%il-UeW%=Z3%?1g`U7L+0#{LF=>brx=-LUG0cJMmW0c*Y@0ofJeKZy{cl+y688H*bn7Glz26(9;jf(qRHrN3+IkTka@@ku1kMPt8KzqbzcOfP zhIZ(Hrdufo9 zrQJHOmlJ1M*n{8BPfmt7tcvbJ11alb=%n}jO)W$!6U0v_C^c~B6^UKmsx4q!^6u#` z@mpYHT%V#+YV6J7a$H@Q)kGXWk#=@)96P37oh4ivPIRlwFO4Z&HNUlfQ#wZ;~wu87PE0|rJ9$~d3+__J_?e? ztN869(UEM$oZLDaKY0} zaDnH#J8$JFQ9SWNbA{&Iqg;iGfUozF)Gi1y>aR<*-1avww#nwlC%mrboBYi8ddl`t z#% zH)?+sJ&sEl$rbqGevMkfR2Kf~$+;gVY-i=b7oGnxojKa|>F0!(-3v)`k7yG2U)ga8 zII~p=3>NZ;`6Ds%qZ?^@kcASuT~h2IU!XC#)q)1)E-M1`I?X8Q_t3`n?KG=D0p83l zo;U%gnRAq4D9vzt4pl+m(xwKNh;n6-puCpNDEbDZzA1y_J3nlqY462o#7EW#mMaT{ zyk&Gg>2hX>i^Q9?yLxpeMfwBKnv0#d25`~#bpzV$6(RZ9xGXbQe?=Q$et*FH6!c79 z9`R@)4e3>O7vwp+IHBA~$ID#f`|nBPh*!j5wXmAKyvu!ow6V(%I{{E1!S3HDweHOw zmIkn4>hTdJ(W-gjYZ{Nc#K?PS40xKKajihDmVCO|f~Qf6My@URB6kbBS{8Ff+f{6M zX0Epui39CDXxv^1;fY)Y5VKy}F@}jbL(y$<>bohg8#{}uk-K6lqtJ;Y6G-*D!mrlE zDG@+8R;kB^E_>>(HvJEULr$~4x9_tq`qgHI=eTr;olBqil)B*~e^KC#YmcB*&}wXT z$~*YHv^{$t7T-xZELn@%L_xbcUu8`ML05aF8(ZdFLFjy^l||}m-+l6QcrUU4EYK2d zQSUyhGH<9QV!~149$NjPLwb(Z^%Cv%$z>^*&Ov?DZn$%}6CL)t`KdT(R8jExv^i9a z(IBSesgVLO@DWhGJE(R}U(3uLZowd3KC<6ez304Ne_l1UZ)Ol!P8(fI>k@`c_9U+4 zv#D9n3;xZD+uP=v{NdG?h438QS<+>T*-6UN)nk6LJ!7ew%6X!@p`m1p#Ooo;*7&iQ z8g|S5kN~_$I!Zg$7oc|$2?!U?4UmB1^ag630jQpB*2-rnbf}kUH|-}iRaDqu^T#Vx#m@|=t(T4qJ?4^ zEe+I{IL$nlciZ(58uw{Wi&F!|5jNLl-Y)Z#cc7i+y;>#V1~1T_^W16(!qbSnxtTeF zWx1KlR$`cRi-yo(1A$y4_?f15>ujpm>f09Q&1Wiz{^hcFdqODfNlzpv0nzz&D|#@p z>8fXTjC1x~;?E1`0;_~%@5N8yObP_* z>=LROtk1^BujkGgygRm{W@Zd&ocy2cIN>V_*0n14BG5k|>9OUYKK`l@gYSg@!N%TG zla{}1n>s-%+Rfg&rqWNSK6KM;5tPuQJqamsa=Vgqg?_hmIRRHuj(_^J~)*oN&acK*m@A0jPyHA%eO{Yv7eauyt){6 zb*iq221?6&!A!oeqjmcIjY2AU(aIg3SzuR&>%76zB|a* zFX<`st`k`m@jFTST_)X6_F+&q%GpVa(=`ZeI`8w^2eQ4>yJ**@sL~Gxe;9ui9Xt~H zt{U2&YpyXf%UqV3etNy%OV+Y#%6nLC4((GPYy>leoKJ5-AOC=ovC)}C_va$*!WL$0 z{Vc_H{i`$iPuaT9&pb3=<5|^wuf38zdF@(7Mr?7m#kq*hj}%d@ezxXjuTKtnIeh~Q z9ct$LAta#tL<}w;SA4BlJQ^&5Y;vw}{6ca!s;u3Lhd$qcCna8Zkx7_Nm1Sd8G2rWU zz4Y8(h`{0k$W^3QbRJ_&mY21ciPyu=-}=~cp;)Fxe;5BrWSyt9K*u1Ol73tY^C8{P zLI8N@*CcX~V9LX&r$n#jF7i(I_Ut_I`FdR`Qk=c$R0ou7($Sy1%awN@?lqZ0bmE7zioI_3+}TWv#n@qcp5Zw5#DU`mQe$1Kb!knHv`8*NY@ewaD{n=cYIh!V z(E=ypyxN?xeE1WzkQiB36?;O|=%rZYiudN|=fE&c%;MWDJp$-n0Dhf_=(1hd^{SzE zV7)v*!0`mF{G{a}F`h(TEdWc^@DfDrF^OvGg!yrB^_Hq({&APzG#y;=RRS=l%9#9o zUeG5#e!AMGI|`ATi5R%|qvW@co>t)(Tqhz);{nPU*u_S*%nbf%R1q05Oxs>=rCs(C zpk};~h|Zm$5ZEoLY7nT_53|B`y5#MULz`-jFH*R8mtgj3r2`CzQt|`7Xt*I_9r(b5 z6Yr2gFI=zWP^&+hMDUrSz3A*JELJVvU;9o1+_czUTUT-0qfwKDBiVw^k%ZIG$vs;* z%y$z~n=)0aIKZ_$zNTKzmEU1ykB@_Okew_wAkeo=+myfQ&d_!{MnSEpn?C*_D)d)xK6kVBS@=K zEm=e>4!9KpP<~+{KUX~IDKZ=bqE9WFxd)$(qjKK~=`N95d}6{SW`v7xdZOe?{Pnbu z#qKJu6QcUu@HH&7kFC5)mhxi*xOW<6u>U1&-KAo9UWR#B+H~tun24bpH8KJh-zjm4 z*xysp%znB5VEDD-&L}I_XnX;2NCVj58ejMl9y*_(!wDq9ukBf35Z_6_=fw4icvu0T z1=dkdG=t;w_53=_++4gFi+_LkT!G<`uth^G6rTrAbnS{p)FYNpO2Bk`v}$S!TLsnZ zUDsP;WMX`L^u-*J-wwqh3*p^E5dDE2%oBsy()T{m%#lsPyGOe^2kj0T4h59xp_eu)%W#Uj)OGF(=0Z+sOA$mk8WFDsKvYHpUH|QyV)MJ&VAUk^q zz);6{Vq0g-nccn5I8T}8(OINbi+G6jIumCb)d8r@qp`Yd_rl|xJ;#Dyq&<<+`$#Hg zg7JJLoA+#Zk9hD*$^dn3Y=4y(M!Dzw**0h-LUZ8}{fESw@x%10$$=hVw_TJofx1?F zorF@oM)^$X_B5_K4xgY+S@9&s5iW>zGQ3V7qN|Lg15!CQ5w3&=u<9j#&gM;n><>7O zJ<&665olPfQi0*|wb1$+il+2%@!s84ogR{w`msPuPFsmWkKlp-_Q7?#W>Lg~`PK9K zMsfPMCp3h|%zv4Lf5SREvW$bHP$~ZmnIelI*9PcYqpuy_Y z6F(nmx&k2VA+c!f7V6VQew~X2Lg#JYN{8L>Yt#f*tkNx{spGGq>FYXfKK)WfAaxI#p?W_R5(%2U8;Er zE8EBXD_~19Rsb+Rns*Qx!6S-d>pfZW)PxO=&a57^A+#_&b5Gu zb>30C7wSIC=(=tTB&4gxZdWAA)QJxyrd&<37nF|>MwVRS)9GuTam@$MqnFjKk3LxE zzhokIJ>a3o)!e7MCOy{Ap5GJQiDnn5Jfs29o}A9*xTP-^U)QssbI03BjwrUfteL%- zaf}~P6v1t6*hj1t+4Fv;#Lv~6#c;fL}?Zd(0he7gTEAjAKL@&2a*;1U2?W9m z(ZARja3ei&xuvrC)%g6EJA`jod;^XDYG%OAkSu-M7wVLAS;K8FC z>Kok|QJ~UhKNQON^XJck5z|A(+tLb&`$OzL0*VGiv71!t$-P@b;dl3RijK+*U*#~g z{EA;Uuqq|rjRDj4yUP{9W7?bGU*=r<`K>?K;3F3JUY^-6dH|`KpjFsIViGoK_|`$b zW#~~oNQj`?O@8r7hQDs(*Zr$nz5vUx@C~9=H~i|{C&ItXl$=f~Qkm?l?2lSiL3hi4 z`(^>K3`w284DrH28WX(7^CwrYAgKD9Vk&SG6ykP*N!V!nc_i<}{Fyn&A>q}|>bU&n zi=SSS1XDr0unF+?7M00I-Ihd^{1@Zmb`@0P67#I%OPFX`Ag@TrhzPA=Sue|!IntrDwg&wA6x zt5!AO3^C`&)fAkby#KdWMfVD6d2LdGP(@)=alZ$6frHulXMvAzENYgbqx$ zwLfPd*PDCEK*_;I^rELvLsMEcui&ipt!zvvshv1 z9?}u!m(P>nFPw9#4T_D{aXFI*$80BOlOrv5wu+-EdWEw1fCdCsT35ziD=YJ7d4|r& zIO1<|O|jK+5tFCs0=IZ}dC#HUu%53B7#ek47Zg7Q?b?PCpJ_E!voiUWJ(ux>pGjIS z_f402Hb$N0;KcbJyp72-Tq2me4TWJ(PMHL==kTL~XE;c~~u7;F-@kcg?RlNcK_3D;A+4~0eWcI>-A zimh1|ib5hb(~=G7vx*|87OlD;09%z$=Vt=kZ7XHMPo*C)H({=?{|ZBBgnVQfJ2-Yo zRH9p4WFcN2QXvkrmMt#wtxqB7n8NpgOwHDbvsOe9UMC9N%1WQrc-QEz)^bCu z0NJE^#-T_N1RipF!#SMCgJV{|xd8v>bLujw6$NzAD=DhIswwu|*dVIH)r0JGle*ID z85`1PcE%+^spjwS;a8!hsvDJ&39`2YK zf<&W9=)C^8gEO*IApWQdLwtZ_)w-&v@}L>Bx6v4pN76^X`1%$Xprb0+4~gx1*ac!` zQq6P=_&E)C<)oq{m_+VH*;tAb5L-AUk%Ezo_q#w>(Ig1NB4VMZXpxxvtz;)7s@=V1 zWq$6&NvX^CPkWL{3+eb+N9>p)K6NP;?oDk?>9k-gV#H0z37XahR84$RyAmmhw3(A^ zPZ|psZxBPYp}V}#{MK+Rwz&_6u(erQR8SR^-NeMbxw-z_=hCO-VWtZGvSOhC13Sta4Nb zbbWDTmhY`doa&{(pe)5F`f8ix$O78*W^GkSIh??1vVo=mU~i)A2Ea+mM_9b;sSqM1 z>APUyyrmeD4!LSV@ds|0E-2Y70VXt?bpSnAshkZG(yo8sW?2`{FQ4}wvf~ALDi3r7 z8=#(6^VZ++NH`3EwWCaG?A}ptOEmsi5;Rc}d4nD>%T^LZsgoSO*`0Nep~6hoEnDOY z+k34-cEogSKA%j6_xE*d%>Q&ty!1ysU|EnRH8p)X5*zRI?tGzxV?ac5SX?931aOZFU@l5R1^gdW7(P6S3)aCUa7gSamLAJG= zI&pd|#wYv}^^YE$bF$L4?H?=1<@EG2U#7UfQN9!hl$7;q>M z1?bB;bOjU~*6HG~vTt9$Li@$p5ir*2ZO?C4uJ`@?x;~B$Gr9ZXuEi~ltmgro(@l|+UVM?h<5splQS_FCE* zRzhCunU0uk7^$q`5g>)9D2IskTFDg*TQ+~+>_q_$aOZC6Sb$Pct2R40OD21Qm0=OS za=iuRwm}C2V1oDdDVn0UO}#n~I7t*>WPm$q9NwZ;SbT+n=e~AFbhT~eFTI>i#$`K^ zo0rM)1h>=(l@J__M$CQN1!s~#UK;iQbrJI^5uQXHr%MtAeFT(cksk-A+mejzUFNd)UEqOSuS*HOJR$sp9K8d@Mc7wPpFgtfIxI1TS< z3JyK)GVcY8KM=r3(0*_}VPN8jkyzw0LPun4X0EMk6gby9INAJ#R4yxiz=rlkYKkC1pmFG)bx zy#>vOs|p;pNG1-@zup&eC$I#Jn&s&LLhP`FkG)4K51tlL)3-l&I3TApZ6se-d|$&~ z<$iJir7FX8L8MEN-=Ct78`0(tv}KMc4DSeeC-RAynwN~X19`WVRpf18Z1Owe_<+L$ zfBp9(`H}wfFH01Up48?BEnLVu^NDgYKatLLV!$`spo&z5sis2LM#?ra;j!kUxEB9> z|0n5Zlg1CkrWabmwHpOS#9fBPtHwpzBLa@%c?_73cwf?ya?FgSoRKFCy~caF@RP}A zhso;eh5lbjr?5En`>Nulg6dN6tKtC;kiOedlo8rn~u(-Mk0eCj&3>_ogxBSYF=qVq}p1QZch zSTZ-4*t|)DR~R`6h_huP;yM#RG>6dtda|f>i)Paipy87uby4!Z ze9I<9n=@~5{A9J|UeYr`Tn9`n^M{E>wx_J}i;&_le-pL(!I2l7gC(F1GEe)(P>ZF? z@wl;;nlsnChRpw%$^DxBXMm$Z82qJy0zCydTL)inYGrjFk$}T( z+c@99dpYwFf9(qX39&@yt}knw%ky?_Z$ANgmh=4~c=T)v@WUhzPsyh(;MDjG=lmgR zV9)~^^R8?c*J$t`v4z~c9;Sft?jGa@?oSF#wti>rXGfXqkrX2uKc_l%dt zBZ%gF|5F@tHW^@{zn%sxvP{L^de-Im^Q39%UhM3J_w0G~?BY)4F6!0w-rnBa_4VcK z_2tiNc7B1&)fTr&6Lwc=AhFL)1@22S_z9YOYEat%reG8^O1@nm@I?5-Edb#rFIv^j zTVA?|ChZ8hEDMa9woA{ZVFB#`0FBgq{DDRLILpSXgST0Tj>(F?$7N?5IN!c8?u_F- zjLz0ZxjoCpJ$dMKO2BrOClV0%geC5KDps)sEx@}lmu_ts4(n5Hqc#^+LPNu@UyBxG zi1O8D&l=jEPzENhC?4nPjdCb5`GC}}lO0h-``)`ouYhIhKkn%!i&vC zjrH&ZXTxl9X^zu({M^u%=Uc7zQ!9RZ*nI!nxLmaXe+bE3^Wdn^=o}7kfivrN_k!bT zR0H@Fw5Zky7TR_7CG1Vpj;(5@B!-Q2n)f*vqRfs*bgZt3!hpJO)%k<#J{O+jSs0VK z<{2>8aEfNQ-WWe6ZKnCBwY!*K^K^mcRxqk%8}qd{Oup z#7E$1n<2;nBkPK16DIS%pCz30Z@|OzI2OkWt8jc$#E-+zlL0e$<2IeTLT?e*)e~VC zrchPJfA^>g88X~IHq+b2sf4keVosGzK8s!z=~fn+nTd7QdNDTexm|JxoN7GLL1s?u zV~n?s$LRwimn~8c3)c;HZhqpWNaQdoWBHLII#l5Jc>f~JrOL27=`5AB<;WztLLhu$ z#B&J`1t()(wX)({Z&qqKRrvUPe^a#W#^&VOAx?nwb1Of5JF|^sACpm+*Vs@Lz~|wf z&bZaoU!fu)TyOS@aS4c-PMe>!3~eMMSzjm8_wXNK&Q=}6`yllG$OHXX#=Mbcl&DBq zg(LfsXcP|=aa{K6Th-KDIU+Tj!p}e>z}K$RpO2V+JKs+S9`^dj>7dm5Dk@>t3vP$D zDO-L^X1&)6O3(6kp%WrEDVldue`9<3jS#H~IiOT+APy2iiKz5y0k zTZdRtf1e0vCuVxIOT>EwWrjtjPqVKXa18%1A$BL>WT#ecF^c<9&jK)Ui$(-EoQ3N(?fNeI3c1|@;0ogDl zVi*h~4>njPu*@^7)*NpI+)Q>A6EQJ3bqWd9ziN6sqphNGL2>NN;zOyZZgzR<_Q9TY zw!nYv7^r%VCCS`MRsTBMB<{vHB(b9eQ4#DML;Rl^Q{Tyy2HEPra{Qry|7cGn0utJg zrp??DSTNe(+~eWstzeci@0BwaP>QcDr;XA0E5C3RK|I6VqYN&=nkWe$m{%7aFPPTF zb?9uOPN2!qV>Bc~al*)8R^Us;9&{vuY*0h?DW5zBg-nhWR3r2b6^k0qDvJ#^i5O{) zb#$GqZ8#CRdo@8!-gdlgdv`R*2Z9>FpjN;r$VWRi3#wUE40tKz6IE7-&W?j=8|HAW z1YiVLXovYXzt|Lj6gA~O9o!NsJ=2=W&Uq~ttn3cqS9z3LdOxF%*F zwtLk)EjI!{skH(*drV=^pSicu<<|R=*xn?3C(wttvxN^jIYuNzJH@?$bY-MMx$_TG zwg3p4BhE3PAZZkhPK2T#W@%!skYT;~j%>06xG#~0Q-=QoE!LG9!w2bIaBGB+jn$(p zPqzut;k37owBuWO`La6Bw(1C!wm$ruhLiP25e4tNl2CzzC6 z@oyFgotMFL&^zT^xQsK*TRr*Vwbk)p$~ZvR1Q`D|tL=|K_y5Ca|H@tPk2Ej!0$7`7 zWjbJyPg@SwuHP!K`KD^=Vkuug>Wgaxe=x_7HJ1(wvY1>JQ9nZ-$zFECuT6nc;SmEe zwEh3l$-3Pi$r^Ci)ql*(ybuQ!nHUdmZQGm`G4zQ%Sa@)>@?z0+@|CvV>co67C4_rz zf8)78!VLX`Dsj%wrq(?g4oiH^R+C1!kV*q8pG@V%?W}Q;<)scXCj)^O(vHs&r=yk9 ziL&fX+DnwrQPuT&$-t&ODmdaD;IsGWS&Ns}0=2#y9NT4hsOT#1AU+-&t|p4(FkmAP zJvKToFwagSEqf(<^30rK+_pNW6ntf;mFdZWNwi0;Kk4>*6Y*H)V#_5-5|XFnaKMyD zu+?(D)Wrw#paE6XitWv&TJ^3n8ZXOW@_7Q^-+*!W*uU0*hk!xpMJ`N;>G zu-*F69Qrn4(rb|WU2DHoi)@LkatPPv5+utsYFqz@8Be8@qqrsE5-sAIppnoIts}8zKoz=a>@j-kfkbitm@BZiQT39;(}jQ+Wnd;_~M!b?0REi%SKK*`Lh3B*Q$6gk;0 zHq6i6lD)Jw)zIcX4&1l>V`3Sj-+ypKmbuVUeG^igBG0`4n3`S6oTWsNdk{#DWX`IC z!Xg@1hF%%*cv~vOktiW>{GMx20Omf&Rn*?BJR9$3lTwA*!Y+=CW)6HB3e=2=1H##? zQBS{VM%S;Amg`iU}pQ$;vh{1%Di>^|6I$~ETn z{BEVfAts3m+=&6+jSlo?>qux`W-IX0<4|qB-$Q0o)6cI-n)M zxx-|m=q1X;HnoxcS3sEjYvi$iU#!VY02m?N8DmiD1#l})vDx2|PZZ@X5{5kxR#f@l zW&Xd_nn-{=red*g2hl7tf*+gjP?z&#BrD~3Euy{v4Z{;?Q5X?%tFnXtele`P0~fC} zyq}5vk_9VU{AbE)1y#G9R&4L`!3-Bt7d3ATPFhh-0@-Eb$;IB-KwQ}rg)T+!DZ8T% zEih*LeYsz8_OHk-U-yRb1w`0^eYK?&C6YOvjLLve&qaW}l|H^r;u`F;w9*L1EcAnk zq1l>$oe7jWYh6%Q9BJCgekj(8HGZrxb#*o$oLCcMI%E$US1oZLx>cFjUm0{JQB0c2 z!3i^{OaoXU_%erZDa1chB_==;!yXc(XAD$&eyL3mrNgU2C5#~o?>6iEu7ilTbHQn; zK1obKMX+jk z6LYe}4EIcJSWAvsm{CXG@T}v1PgA&i>cjIh(gm}Hj9jH@+mD7DDVuD$^BKr<;vcwzTH&gqE^JjJFHv0u7T zvzT9R9sJN(6Y)HRooFctJ=eda$jS+$5vaF(XTdR;Xx)2`?@-*02@D-5_caBv`5tuf z7BUZ5d>UVKFylEC66f^$-d1wZr!?EFq{4)P`1uh~#})PSA=gJ&wKDa$Wgi$?q{x9j zLF72O5t-=)z&QPj(Fth@7epa`<1&+Oq4OR>R+Pzh8oR{lg8_%pX3xGe2UY(T?qLLJx2q!Pu9-n`?Hgn-;QM- z_eU(HCF$-dRtgWz(i(LQ1JmK_?f=0ET_1U~T!OX{IU3pJ@WMK8)VS znE6A=l)MRFc|huMtam#VPm6{qHV@JUu1a~ZH+IQKjv2GBl3tR?>5&7DT6~XAa0%D+ zn-bqls2EHty!Ejo)N8d3eWq4p^?miR5$?MQvBsJEnf@Q7*P9{UoskcWYMOI%1*v%7 zn%&g@^J-v;3>V`fyHL9M=uF+Jo3)J5)G~aew5b z1s}aaTdWbZC!quQ&-4Dwf!p1W!;Rw&bybxSHS`fEJ1G5{U$oXnW~Lwa>vSenl#{C^ z4E;X<*T58P%s|!b`XA#R-!BwUOn%yCvp(bl&3)!lRkmVRpUhk@UCys9xi9KW z`~e~SKnW<&4INVA5E3QVf`eOfnFijf{`?W+G2yy}pY^jX-quXDDqL69#JtJn657@o zy>rJxx45fAmqjw zLJPuj1leqS<)i&lmR_x6j9hBi<=n*}G*Loa4W~WKtBQ0d*Y?4gb~6lDH$F z!^`+5g~iHFM9SIZsh@&2Uy{yhvjnPuKWXw!leuP7E0;}4iDVx2Gkv1aU&RtZ?E-Fa zx;IRp`0Z0%Nkm9+z@|!i4n=B6u%cLjrK9S}{i2Nx@PX5FYC50ppPoau$cx#Wuks(8 zK_Xku8s`T`va_vqi;Byrthp!rM~9Dj3zb6i(|N{aA>mz1KwD@VeAY%Xb3#sVYQ|1k zQjk}ZD5%0zyew`#QrxE(hll-#pXGpBiC;*LvFAC3!*3*Q@+XqkajG=|;*D3!UOrQx zkPd(el(un~u(6A@ZA|heRDx=AlILFlzCjyv81X+?_|BuIxEtSq3y70Y{cJ=cWlV<} zyi!SyeUk%dgJck@*!&uvx(!nOw7)`mKQGC~i3i1kg&i8 zjAC{W!FQ~le0>0j=5!M}y$^S-V#DcZgOiY}K=@dd?3Wr!~yi7A*M^^GXd(0oAdy0n>hg(PU_b+m2IdE-?RG z`q`NAucj5NBLI>!vf`ZRqURNFdx0wI2G_YOOJM`pwP;x7Z_+bo073fyW6w+~2Aq#N z=?`dzgp!TS-`@L&F+67)Dj6xpPt5|zTrPrw^D@L^Z|GkAb%R_2gtQWX>36xivTjVH zFsY(BDZ`-#Y9Qm7!j$|w_pU4m-b0uep?{NeJPp+OgDZF66GtUBfcf)%RXqNRpw0k# z-i;w=y9Y-VvY{Dy+Zp(|qVvJ{X5Z8Po-nD2!3lAu#@NXt=Q}`EzHQnr1FcK?|GrZD zp;6l*lumG3 zhi?M`DFIO$5dF)0Cl5U3Xl&*K9-p^Nkp1Zi_)m@O|}U~vqy)Xj((N^nk8Z;5p{`b6`kuUhATyte{g$c&Ef9~3^qihc7f z9L{bsroFtRW0bOFhGs)YLZdk(EaFSifx^BUg(kD2A1tllS~`f5NZRsfN4;-$AfhJp@y2Pn4dfMvqFp#qndZp>*-J-!WMplkLk>Cipoz*6;|A`1 zABB!lPk5V7KNkr;x>Qt%__Zs3%sweSm8<7|vRTiu!Yf5QyKwm_gYSg=#--$&D?=WFGSPtg>~a&H%H^}bjmOjKi%dmgG=_7Hak2SZ%-|{EOMxL z?B1FJY3HFWR)q$RPx7TfMwk9sX#D*&qh}1mBG)x`j}g-gsLUTbqj`^4=pZj^LZF6e z%Qf2eusjW$gr~^VVT5;J*82ER^5N*Y4^SOgN*>w&g9L!#wMquI zzm#oRE(egg_E9=}n8%OI4(qR(u#-WgEHDh%_pXuZ2o?}j!vhiynr6>5X(Nc+A4aor zMaF!d5G!5|)A!Tq72Ur-LDkvc^`+oz4CezT8XDizmS}cAb|YYea8QA=HXHN{JcD2D zlec+swiU^5lXG(i`QmdqHx9nTm=RSIj_o3wQe)LydjG-BL(uEdV;rD2tdP<}xhnI1 zmSK+juL+4+G-i}td$EKKy4$wJSFeqDVWyw;+1oR+4oF|F{X?zAs%1z(Jb^A{Kkiqs z_e?((v%MpcEwVO@t?;7}Sw!o|sfRcAQkSs*CyEKquw2o%865pluq+Fzt;TogwsQD` z?|X{y1U&LoMRWSk+N{ur-zP{|I6oSCE7FZg4)>s^vK$(>84v1=Cir|pO>QUn+S|$N5f)E$M}fxk=T|S4L6KX{Z$EzyqUok=gGWk%29kem8TN0Kl zLFOWawTU$)R~?avM_hW5H8UsygXzAo@1^?MFZ3v0mfe9eUwcGBKJ?qcm1UseCGL2} zbey2Q0DC4x+t5WnUbn}~;#=4uvRYNB)N&_HSyfYVV0Q^Dw3Y@@MfT0|I)l!L2jj4u z=SYXHJ6Uw}BS~nxwN;#??t}UcxADCPB3LurHXKoKEVRria{GAk$PLVQ zopbhhqOCw<^TTtZ)q%&wP(cbrFEL%!EV^~U5ow{jv4q>A@1yroVBySM&B5QXs>e*ggD#z|Zz@N$xJZccj8!|0xbC{YO$!Ufnu5pWT6%+zzu`>R zpWlmd^1_S=7WuHLDg6531%n6^EJQy@cllePG1X8X@5-#ddO=MJdOxZ5XGuk&lEnh@ z)y*w!d|I8(B}6*i-p43{5&d{T!|G4m(_3%%mJm|d`zVSmGw5Sg%jhZE1+kW_{SV@F zQ{=sh(|T(i%g)BT<;`3sHJh;H3h5{Bj%s~-y2|hPT9j;4qI{<{sHr$DuI9Uy$X3{t z>R7HxlxVbnQ?jVk(2si%{{tsniJ#Et8s}a#lOg#jH!QtL*U%Q{5U{Ie-@mSXRPb3}4q7TcMUT z1Rhv^9O`^y(FICYh+cT>wLin~>M@PA^Vq4jqlsDo&?nMdt@?o^h+B2c*d%Sj67`jG zB-ZQ@BJHv84i8M3UI{{@I+S0_m2dPcTr1*sg?NuCn*>yJajZ zN2@USoe8k=V~vL3b3azT2I;LT_7f2+#*gr&XM1lcbc<$`ppi092E`KrU)f5N5Yc%@ zlyLJ2zrFV^J|Z=pX(p(MyUp=+5aNiZ_@QJwlG( zfSeYL%0WHA`G8X23v9EgCX)Ns2erIp$F_PtMUzgkb7J^idNAXQj9zZ@YX&l-R+$SA z>{$y1tiI;*fa35E-XuKjQ5Yc_H!Kt0+=iWuhIz?-JI%rKhAC+tTD0Yu>^8&e18Jc6 z3rqjv_=P<#8G&M5b{Ndk&xlJA1fhg)j$)}%ZzvXrcD$qii_xi3DQ0!T=?Y-(!XI*xQ(HhJ?7(ZW6zjS&4c=QKk)(Ur3?c zx8YK~KtrCa(L9s9jy38xkqz=S}tI0Tn1JZ-J{|j zgFPg11e9$)V6%rU`@r+=gDS=wS``Op&1Wu z$rycDRO|tcQ0x)Urm#P=(DJ^};+2y)F0#rQ+*Dv{^;^(AeECpJx3{OPF+|hqn&FC- zSIolh<*RHgBE;$`Docg3oVbAqg3l11xu|W7mmlTrhTnJjPH-@{rxrcqL{hJgSoq$$ z#M)l?nkD?8>;Yji$N_I%R+~s4dm_NSuAd?C6fRi3;wWbht!$j@Y6v|b2gaJq@ zHzdB>pRy-4l(E&VHY>P9mkU|K_^^fZq+0j2v*5#^*Rx`CzZ>9B_w9jBwR;&CQ=^=5 zc1!Ec!AbOA7Z-fcj+lr`1qGE@Q%7tZ?~?h5`X+I52YkgRp&*w`x0h|->wqRru2X)+ zlT=0luJ_zgkyIwYdN;l_K`w^3gXDsbj#FfR^n}WYo*a62$PGPMQAXgM$eqB~6}Q2x zsTH?zueatGDScj@igr_M z6QWP}##m*P?(?1@GPyqse})&J!PLwNG=`u>oarn*wrH6AJky;ayb28Jfa?fJ`)iYIX7A2J(k}2r$X;kumEX`$HsO! z5aG|(xySs`YV#auU=8eSJmRD7_-|jURgwVZWn@49z3+xVn#sxDp_Ki1T=iY{){N{J z0qUUGFV;sn08&mk+I^Z#4cd4*l_T(bDk>=-IcgN>XPuEhgMVep4S?0T1ltQ=9Aay( z$_M{m)&4Uf_FDZX42rDBtK#nm`qFGD-Z(P=p53{yS1IL>a|raB{DG||a|drmllL-i zw(ZLE6#(EH26^-QK!xTHegZ(7v)C`x-~WF%P^F;z--9yC=CCt9SeLUNDk5}}J)Z;ZimD}!O1V1LWzPL)h^E*TG%(eSg zpSrPA#$5=~-Zw652b1C-7{N5G?c0(t7&3aft;7H>#y+qMEPE9Keu)*-2I zExC_u75OIdG+G`ytXl5Z7V_JF{&ZjLF%VM#)oni2Uqykh)(3j|72f|62!;E zUJMWbd4r=i)uFgQ9_3mG)PPL^+Q&LGE(0_yGj-tL?NqbH{Om{aZ#*`K_7WnMxGXrt6VZ9lJMTScU3rjF714_wg@uYe8x6; zK~|&uzBPaW^S;V(P7IVu6ZOz<`_of3wNK@|Y=S-Wnd$oUMTn87!jt5Bqr9C7tIuD5 z6bQsnwx!oUhP=~T-f!4n_LpF9+^Fq83@ek*atbiCtrgVKyknWqd-73pT zL(&th<&>F?T|O(9q3XAOrn-jiv5%5b7EITN9$A{0JC+~26T;GJ+v>3Ax3?uv-*zit zGTk-x=S@pYy1stN(?8|&VwrYS;^SAxE3AZxs>Df(WQAot=jf`?N-`du#_$&a!mdxq3EAwZdH=*1s7aAq>YzEwrEHSm8KE zI;&UW*HdIU62Dhz{%tYG+5RgTc_yusD+0u3?+jTxoNpR>6PA;}grD4yd7VtS!hQBI zk@-v;Z=b}Upu&Bwut(9(ig+=Q&1?v<8}A~84WjH;A^`w_no0xYXotWd526RNJ>S#i z8Ba#}N^(K=wo>Hl?pSBS#>f|egpKx&&laWCS2BgP5x`K(L2Qt;O&s5KGg2a+fbk@H z+hdbuJ}|%4xwRlvr$)BQLpi~tbT`*ZMu^3!&OKGKuAv$nC#wl73@RR7Ht2c9{Varl zwdk^m(K^vFeht{f22FLGf;2e@M9uVhAzbC^gTNDSp9#=l9{T`7@ z|53LXd@%JoX6)oY#`C9XR7tpHHXX`xM-Ddn+Y33qe%iKl>!U91H^@I<I z(^sDq)04Y$TR=OZH@G01E?P?jonFw=)Qk|I*ENhM5@}sK&{^7s?SsvpxF^gsO`6}) zaB}B3S<&j8?UODiCU4I3SN%uXe~!o0jK zbhdadHHjRO+FKm5#jiT*5JiXDQ*JcEs5~AS8R+=jM*$zwY((VQC z`uhXR(Y=i8XZ21-=+U#1A7I=eeDP>OZha?~nwKv}!+0TtvF%UZYfMweLtlY5?uYXH zu3-Y`!6cOXVi0A^en5tcBgMH*TP9}NN}EWKtEuR?@N#}nZy<%aE8&>ZsY#5-r6l|) zOvOb?nGKT(PIq}w8;PfWj8tBOyMzk$&u7`z=*v(snUQU{N5b2(_S8GkIfx>zvEANR z+ROu-2$Jb)iyA`2U}0f_Z*SwT&Qm>ic8rhA|o5%IEmXau?>{!js~|)aP?KU zm>}MKZdbh790K6e;==a!M{FwX#tfMU#xG6KDkb`dSdOt%b4XTW(zCby76Lb0G2ME! z(Hw}m-}QK4rCoCbA*xL8zQ$jK?k=wOnNB-%x7CR+l49)|SkeG2287kW?MdhF1AA`6jeRNCg@FG}T)Wn>=;lj}E&#bZ&$!K0_ZsZkvgF~n> zN@KVN+`lS@l!hvRKNw6?A2HiuSVWHi9iSjK!C55t5*=Q2Jk4cMrO z9}P2o<|}Qh9iJ`jL}Dg7(Rn^<{hJE(msPbSW>s zwK1m88YnM5A1(GywWVp~nu?0ud~M?i7VKCtinORzLhqTCZBRi`5M|r{HcC`;(MTHO zC9vNeP8rQbk)%2mgE>iq`~A6YuBd~mQSH})0!1p056yNo_1;f8jFbw3QO=UdpFe#Q#1#EnmrqM)1$7&nj1_^3Yy>Wz;G&WhHjT~>OQ@oVj_cIEu zoh!PwtJ%sY?b%`Q!Atkmi%K)%1U2z>^XYnEG#NR(|m)mq3dQy;G zH0=ScF7_@3N4BF9RS;)+0zhJ{X8gn0C&+l2V86>&lCQ?tcP^~A;&&Z*=pDmZk{izr zQWDGEuly7#i75Is1H`%b$uL=VTYqt!wbNk#0%d4tvgL?Ch1NMxE?3BT^R1$3Iqk@a}@?*XfcEPTNDeUUjLOAFFzOdx!47l271ggUT%$ zI5ARY>LNJa>#4=qUnzJeM^_oNw~5H-gmdA`7LrhgO*|vi*n=6^oEpFzT3*3Vv{)0T z-(>>N41c*A4F=X@1%0wH4q5SjN!%TsIF7??ni##jrAACyqNZdD8%lwq;R}JT1cCrt zX`Hiq`*8g-#G* ze5P6DrZ|=h*B8rW=|3 zKD??w67WqV7T<<}qipwxM|p{sGkh7{QiX#i>^5p627t@nPrS);N!wg>&`#)(y?rDCT9WD7lM9lpY5o>{5oljjw@lsVikkdK*P-$=Yjz zow8x+>ukdw4#wC8wDP@`{8Q4|(#N{Mzn~YHjEXS^&8?0@ z+5tDhqHdQ^9bg%e!zH9{>0vI}jy+qqmoYOTnX9i*-Dj93c}+&3?O$B%FOnmVE3MEl zy=fj7k8^l9R&ZI>>^i}Bdm3SUnZ{_q?Hq?1{~-LU1-L#DlmEBTNwVSt+p$mI&(-)dd@TWJE`;3Q*^%?b(;f zI+O(n!Z+nkS&zkMRZKzAG%p^a=*tna5KXtlwOgFEWGw8H^wCLQhh+%_h3<049uasI zZ_nx+Yi+B_Ms)m?F_zfU1Kc(=%2}N-v?^HoU9^&zpngTM zokuCi{iFbXxpe*RNuQ6ITN8z8TSP3b+#!Wu>kD%%fKdjL{@4 z3fn@+tGmNKI-1Md~v-fT$0o)Acy9Il>sydy@p z58yBy@!+iuSx=RoD({!-uR8+9!qYN&-(3(_QdzkNs%^fVP_`o8ur`r<;acjE8knAI z$FY;S&MayJEuPJ_3)t{tTm~EoVssC9&hD&0su}d3zFFx8EKVDYjX3ylI zx60jTF1yi+Gfz{1L=T;fr7{JbH`GCpf9F_&-{k+KL8S7hUDy&z2GgFjD>Ep^ZGV{g zZs8#pM5KScSx-9ptz~s{@$&?+bs$r2mEi{`lPHQV7o6q~u)?eL!Fc;`F?;|8(LaNv z^ykGV1ERO|$#j)*ZlsY{+5}%il{-iAjbBGjq}}}a&bQ3v8J1TdX|s-f8O~kJo5suZ zNKCG;+lyUQkk?L@ap&Kb#T?8ZQ9IwTlhL`!!lmYFNJ^;wGa0wEPs0@g5OqpJm#$-T z@kEl?0IBgtZ*_X*pG-)t;!jSo_KbC4`o;V;pjDf831WWx$D@)=Z?QDMQJT&^Q;N7h zEpV&r*z#EUlM(vP_KU?SR|aoJyg9igDAh~@{^}i-1jyveN_WtMa=;M01zub_Ny%-X zjmq zGEKTm&a{i9Dtgz1LgPNTEMJ1YVJdbP?YnvLgzA#jV`5eED4y4UIGPIgACxW;F&qX%@4#3bc0<;^! z?TjVW1Dx9i9apaP?~hB8M*$YXrV~D>YTL-Q`~BlP@!Pv&8w60Mt*{B%%?8znp8f?} zt;&I^8hlZno0`@{a{Z6Xg|cnF>f$YxxrXP;wR?Zjr5kqCbBZtfyWr>ckx0MZBp@b7 z67fdgsUG7%ftI8p+kaPXL}nyC7&6hP&1cjY(!6mUUmqHrx__QO8A2oI}2XDhOlsa_f!}IN*R_akNdLjlQfF^9}=XS z1{~V8ovgV6Fkcxd;RZ^@4ZpAQ$IGTJXvx(!&RNzv7ERpd2R>HybGGQ8=MX5Y&d0e; zUlX%kKyYfjAw>V4-PbpqfP7T32 z0l+L9tOtA3#?0UzO2ZBxQxPAEG|)=mRzun+jf)nlD@X3#in}7M0WTOpte{{jTVfM#33L_ z=r4yZH|{2Xjwj?3GN5nvF8iL&^1cR&AC1VbG&M>^G$It>uUO!dns+ZE zF4tJ@E6nuytCCQEyzW<}gt zj5PthLrR3=XXSF(=i0-lcx7>+CJH$L0x9u(Tu&vroHULRrbhAEWuo|wVGpwiVu?a| zT%~%{qFNNXE1SsZDD+L9)h#!w3LXvR80Ca?D?XL&n||>^0gJU_C3$K{6=1$AyCn>W z|2`J;61OITd#r3F2gE54Wrh!UQU%3D2(V~>7_S;;56gI~`(cxG+y*~KmT){)Qep=& zkIA3^B{yU_1S5<|os)=o@XdM=UQV8`mW|GfN-l3k7wIhYahvqS`^gl!S-we0u$KN_ ziuCnA4aw~=?0peo*4MXW6E5Qg$uLIs;=x=_hz9wu2GVA$Q14e%tBB2KEA0DsNn08dFT`8{7 zciJLw+zBbrm#l^&w#IjU)Y3Pnm0BT0xe>FPgmiHK9kD3og*)sdNGc($vF%$kVJ4() zNFRw$Gb}ou-VO%ennNWajxwvHjUhzq$1|T8dW*3mRw!qoc&?8+G+7y@3{SW<y<{EYfgy6*miIcG{q zv8s*dbvb{hV}BZzo!fkQE+AtxrMeceZ)A|TBOgQp)>>*9(&|+|IJexDvio+HPlJ7f zVY#!%adquO#R@vXyfLe>V+!KEe0y2dKg9v```&pn2L0P}0gI&a^)@svFUy@kFTOsj z*F*rB;I=kZ>>kcM`IL;<(Q_WYnCEhgYfd0aT!G#XJK>#qJ4rz;ST?LJ%L|B&_H9PS z{`Ts(F2m%`(Bx$_ z47Q`Uz4M?UEQE;y>oA$RYDy&nJVTd<`FHpaJi6lDFCmS)>Dg8(kx`b>gF5hcY^iDZ z8aLO~F5>CMf_aVWgUip(3$Mp6Y>rpA=P?qm2tZy3#R9x5ddWKLEs-_l7t%bJThtr) zF&r!n1UH*r78j?ncuoP4exnisvm|zlO!CiIATKY}rrLQROk`1$ zCxHh+boDFb38&}k0tQRs{?&GS>l^9l5#U3?L=F8xKC1fD7-?d8Ej$Ld&aisPH;~G3 z1_Unf3CYs-Nubu%0XbT_#;4r~6{qGCpUZWO%EnzQq+rETC-%0B{d_C-|Ou*x2e#b_i@nBZdSs*Dc$prDVZ5Ps!a%?_B(B<62k|xJMOt^ zsPrqC9j88x_siCw)wDQ#Q2&!N`>|9F0k_Gg&DlMqy3Cg^YUkP0PtluqYhw{jSewE) zZS-rzC(H}{>wWH+-UQSqe!Os|73hcU-zusrecDOT+jd)c?VOxAA_Q@;=NfGbDAPA$ z2#t-QjzQ)=wD9h7LdPRKlrnsL&rzf+w+jfZv#B=mf-oP@{eQFkd?EZ56xQ zq&kc;O$8y>TT{Jr+p=l@C7?*B3pgQzYKiMi z+U9P-q$P%MhlEoGO~D646rcn8yHS{In1@6Eu-iwux!tszgU_wdcttDYW4Yn6SG$Kz zn_wc>(N7JrQRb%fV`$7-amPjL*3^PK%bJxwc7nJz$ne3Zo>O*b%@lj3^xWpmWP}`p z!svC!=&{uGZQ5qfm_or=pX1&0uY7t1TO++m7FXV38QzzpteZc|!N@dPYqU&xy?#6v z`9IG2ZEX*rfg>i~r}G`HY4#Sh(5j5~#JCB*lej}V!;b3Ez#^v3j34xs$Y^p5Rer8z zG3fr{Mdw9|DJws&B)`7c(kzK;qffFrQ2iHo@O|N9w=AkviLaAzWAScbztoqdnljA$ zKudaYR{85GsrbX@DC8DTG=n22++)>MJ5WL_0 z8)yP(Vt)1)3#1oEXSG*K)JKI2R!7gxkIw9DgDRYPR zoIx}1IBNy_W?>f*a`yEYBEhLtDsj+Sm+WYGc>_Bxvw=%ZS;GALUAnL3=aw)62UfXI z%T!wDM-P2tIMl9i1kslrl<)ibKg?i-4}J=<4Q4#r7_Ck@maJCX%NJQo=&a}n` zU|tHQP0Q7=Ek~y_zJ~R^t?+H?oWLjCE<0+EI}PHUmS%a+V&eY`HzbAqTO!mJHlp^D zv5%Y44aQYzUtY|gp88_jN=Ung#Pw!}cVCYsH$q6zZ_G#XcyDSfw@sL zLCg;8GCWrH4Uz*Od8b5nNeLd-Vw( zDar<~J~Gx>Y4s-x(-m>l-MDvRN3+;Bv?kiM2xp0&eAqi?*x=-Zo-#77w6{!e-BaIM zJUbc*WUaKUcf@0Jag2Ri#brmiq5VJXLIt4s1nfe2ZYeL<8X`6rE?*Vtgf^#n`n}q& zVgGyakSrH(6v)@L`s9OMQEw%vSN+3YO*VJ0?MvJCnYIo{&E66XBBUJPpt`tUrBg>v z$`hA5RZVdmUjnyypvVz#>usAPe^@t)0H-TY#4#C4w+_P%A%W$wk`^WBxFd-pAFf)> zuQgc`aPI$9qxHlQ_z5cPrV zpZf|W>vZjN3Jc7>Za<$)@E$&Xv{$-d68XXO{uSa9Ps%89Hl(Do|g7fRvIW;C* z4GG`G193$klD5iCQ*)xjlS-w&Nsv=Owo6M5m>(%Atc-VPSGta(8@L<}E31jx+ zZQfa4{G@NK5f%Fe&l#b^07XVDPV zT(}f1*J${@Gtud+88wDDMpJ)Cl9QjYB*#QxWjW!jG2z-3B`XPYA8S?UfCE{@svZfb zJ~P$836F#rF(}*gIXpz;?lgR7l<ttAPAuLojXP;ylF@mx)nGo81}*fH)rGG(kPV9o{zyg8iS zu#~wJC9nN+kwri_!Y4nc0Z+#^)ol4hHxW`EiIFP~MJ4X4s4#m_=Tx`Xf%~m*@Cwnc z`uocpb`wzLHW%vN4KbTXfQHJ_NV;;(>y4gdSn4>3l6i3X3E?t{dQ~1b^cgQMrqGh4 zdqv)|k3n7#8%gd$Z<8d4!Bvd(y}YFjOkS;pcPOQ?s)!EdT#gsYMu~(=xhFTmM}ztC zUqXOL@2VcGF&>0#+dk4apRsJcAUZpB^@_y#m@bg*k|5~L?5VmfZFx|=PXXjHVP$(z znckmCm|F^m9(096VQF$|ycDUky7+|3! zfNHzVU=3TxrcnP6=ljex;kMlD!<3Sw@t3y0nXVs$Q3ZJFTg`CZ6uIi3O)-DKtvkry z!vQM~)GOP6L}AJMFTZvRZa8mG86e=Ep;+(wpQB9wrGu7M&M^NU5GMG|*e`|uCabXg z@1pGg%qKT+3ko!)tTbVgKY;p=N&Lm^R!Q7uzk$3#xp0-m3DU1r47a=CWuQ;q!qfqU#xoD3-w*Qqc8o zt=vm6j@Y6p!~}7KKBLR%IYkf^ag2&P!`hz#;Ydrl0v4+57Xv$Ln~Naq?R>wo0w zl~qfavEPJ+<-1(eLx=SRg=cnR&tUr+5`AJu-{=2LV*5I1T;@G^EpFexe&so(-UZht zTbzd0flyv`NB+j*f9*HdogWUcu8f6id7Vj!x)__$fhao-)!4ddM}<$Yk`8+z3>VT5 zho1>B3+66Gq`Yrv>uY7|;2~^t6VH5SulTCB^LhRjJxjnm6Zy|F8qZ#ge*LKsSoedl z0z3!n&cc-g{1C8sxP4OAp49~6Fq+!DX2C3u*6XJ1f6^Hf zxnQU~JQNL7f7_u?5Qt`iv{YOGR===E;O2$c&PhgdC5qchJCRjAl2o&*J|2 zIjtyxIH4e}r;uSsERb!8{0Gn8c77elhr%K0Cxu)lm&F0*!0|Uv#SXtt^KjQ(jI#8` z=qR8U&f{D=@)r%!;Y3WvVTJD+qM&85`4sb*lvGI&ugftDRK*nx03`oPPl5+cY&fYY zyBEZ^XzU`?ZGV9PA{6*IPvc zl?~Pqe{I2veuyd@?5IZt58x7(>|1UKMy3&p;a@XD2{=29iqzK?dIw@kzG5$9@}6cS zXe=Hp(({cE5S*7;d}}srq~%WC(Mglsrcd7pHy1#yAQT~#O4-5qY-sP%*zv@!{N>K*yb-wdLz{Z@Yv)%z3`Ch$8w|x3o6D95qzY2TZ zh=9(r>;NHaqIIVBerAu>PN*ugm)HwZ8+H}}#U)uNLnE$BheYV=$_L$OF%f>;h)P2v zuC4Z^9<-J-nIaBjBnUNwBFKzebM@L}a4dxj-Gik(YbI%xGax9_GTFgowjZ^0!O* z&hmrMf+$ako?mspBJ*8V4#Tz1BdXMZhWF%bQF-}COKgol^72MC9kTgZk_%&(pHjl% zC|;4)A!v5X74>1}5A@P{(%-Sv5S*Fg@G4Xb3?0TYkmYDjAtNO>QW7Xh1ky{EoyCEq zsT!|HTm7O#?EVp*<{WKPO8SxZvt$RF9W8zoN(kwNYqnYICzR>}Yd1LSf1#+h(CHD8 zA8hbg6^>s&$&pCPaZ+5<hlJ+&eTt6uwqM$xx zFQ+?a_>y=P5mBAL#8+B>R5~|!TNw6xH0etG^p<$NXi6Rem_4>s&b}Fr&CR=TsT6q} zE+)ot6*Y0yVsiu%uYl;bCQoUkgAH8b%IgW!yV-2yT1&L^4-0`(>9a1KV|-01Rnepo ztS17&9}0raj2=_;KP&ITBUU_EWnjz4-?KtM9hja*B}Fz;LNa73%6zEYFgh#*CQxi2 zJ8MpUAm4y3G+kASJMlP|wD(b(US4CU_Wd`;bEZuEZ(p3@aXcn2_%OEi$-JkS2`**j zX{kzjSYFTtX!`cn=}D1e6>!vckb)-jazWf)C5)o6mB-Wl@AR9KpV~NjdV{+``3Btd z4mHUOtG9ut26&wzFtO_HqBiAboz|Nrc6n$?{PUnGJFPC+K9o32;s_}==jSK0<5R3d}f|oDOa!0Uz5^3aky;)he=Fm9pKHY>HjA zWxX?Bc9Ev1c+H>1DzF?k+*XnQtgi-J1ES}Hj4-&A&_1J{j+{nxRZRFAYmnFBf#yqH z{rfaepAt6$T{v=pBO#?~B!k;ew-d^!vSt9HDPTmj_e5 z!1tiki}}nY$gs)4X`_9?w2&qQ}g84fS^z_OO>lG=PyZchk3Mj>$R}FYYIld-VWtrBDpog~cb}}67 zz8)>esN7|KHJ4OgEolX2G6Lz%$&IAgQCKGCWxO0}Y6?xs$fX?pppU2tTkMA&n|pdi z2j~MJy*ryQ!G&Trcg1c|1N3N-Z{ObsF6##?-;wHOqyI9EjW)OXJFzpgj^OGrVkV+Gr2}=Vj&wd_gQXS zMSxe)f`BfA(X!pfhw-#Vlvx-BXQlO)jNc_zB=LLnr#L;pBR7$&YFBIweu9?n>E3UJS-5L~MNMsNi6k8=)0{CvMGu;q4B zVeQiDvb2g_6q$7|^cdP@Hul>`E*{sAmKOr=;}Zm>0x+;YsB7A5 zKkyq8WpC1GBhS?qX`L4!4lR+Mzn*?O2x&1!ctW%B`W6rObbwFRTikpXx)^1L8G56QJ2uhd3+$ z(0@UZa-gH|ZDp(Sb~c42GJuX=-w{{;v-lMNH9Wv+y@ftJF8SZj5U4;Khsrq!e~Td+ zUffFL()QM{z8~R~W4(ti$xVIf{0;T|{2BXGaM3GnBQpdH(i0phmQMHgv)+*0cJUAg zI$G6R-bGMj8J`lk;DHLQNZ~o$~?$KwoLmEIt_i*8&J7wf_`;4lg=nBCDjm z(QhJ~a&Xc6g*u!gIn-9`X8!|&I_k#@SDYjy65jO$ah`08p2-}hJ3!%1E?5h0xI$!! z5!V3#xv|(?r6*wrU38gwZ$je2l$?K972aL$oNnWSLurb%P_?Tzs{8%FQ2v_M&o!~$ zmsmegeLW9@hivcW%$d3Qbdpt~8(goDJKFw}pqe42TH!Zy2S^OvJFY)RHywWPhhWISK^V0p7c^(>zD4&jU8%S6ueh z8hK{(c{*P$Lhg()?$3t!@1452<?$~_lXod*w@E+0wsYqWS;ZH4qRf=U2itF91D)ke``~-?ExZ%^=XalVY%I_3eHuf_b+p@1X17LgH^t@ak#WgVck+%$jNRX>4JDwM?W`rM)01pe z>&l94TvXm8>Qa>kV?8lL=*4l-UFK15J7Y83Gazdx0O4_Pcr->JPS}2jY)GgHx7_1h zK_~0@n3w$3fW+l`3$jR^+u)*CD?a+ke_j?NeqwH9+H?vew5g{?lZ$(}>a8QTy8V zq=&$dVnEF ziVwng^yr+>>#Xu1&+C;hne$ZE^Ae9Q0Lpa?KQ_Jool?ah&epK(WyI_{Qxwm!a+h3u zd)#&oXd_v7)wwI5r?+W19hvdF`Fi(T$4O={Pg74Uvkm%eYWvTs%wbXHWCjzpk&+VE zp&kMZViW!r~(DomWe|=qvJJfCWk3@(lo=`?L)~sdUk|g^UvWF~V8#`kx5m6*- z7_w9&B16bF)>24jM3ymQO=ieWGi00htEb=fd-A;3`~3s%>-wJizRx+I^SRIGT=B6G zvWR(Sd8c*7ZNPpLn3f=kLa5`&E1leI<~z}F>aP8dC7i*FUYSe*2K2DM-qAsgfHCf* z0sASREZ)s0k(%NC0s3-eV+(7{#B<0+SpQK8vIR)oYUf8pT+D=|3RARaWbxh=u+Wq8 ze!R|te;WA>jvlvHPbjDDBT>l zdpfkH>OGSWn2BC|vU0!t86!7*{Bj|!nz)L8FE<*w=7!3kY+7U!Z1nC9+HuNYYa*3v zgBd!`GRV%e_Q@#5$=_lPG$+2Xc_nfusvGH9%xWt2bZvGVU`y=Nh`#0mgeMPz8TIWpapNn72sua%w|sOLan*d3KOqh>UMg zumrE-^@hPQ-OV0jL;gtZ-qy?m7iaR;-v^>dgSbemCaZ#`81T-EZhK=@lwi4Eq15wo z5c(Ia(-ApjRQ zmARa~n#K#Mpg6t?X}TqLqH`h_{y1YxMo@!K z+#dA2Nf8nIP-9d&nI3SbsjnJ0OzyyMQy2I*&LB&r@AC5}!+KSC*gzxSS*uYq7Cm}? zy$b%ZF81L@Y45;3RP&*&Ki&Ru=8&@e9Pj=_B1nFLHijkn^7xm?=8;F7Jg*A{FTv6p z&lj(CKs{+JPk>U7om1v%=K^XcFR@~7P^)VhZvEaqe{$F;5#tGRHd z!AT%JU{Y{vv4<%yiz*T!7s=FYf2?NY%<@XG||1a7!X|_4-Q#VaBfc*Iekbf6e|C|R{l34`Gm8MYXxe4**gd$A6vy8S$#7I?^`0>V5J7thYWX0sLgT}}VhLanSs(a} zHK}=@Sn>L2i2Xa-E^(|_0_+QzSJLMc06-RfjOPz-%-v^fzZR-_7NQzT^aW4@k0CVT z&tV3DQ9~a7-n~zv!%EA5PLDR^PiegUo%Ah^0{T;GP;(*hM!*0*kulbPsATO!kz=v@ z3&n}6DA`;KUApBprTDm&dVX)%99`Cwg^mmTA~y8cb-k?k4bRXjVPt1zo*dp=*e@YDCCZdJHfb zOpA4G6+}36*WMxgJfMim&cBCWrg28Qm(Dvc3{)nDMzx|^|BXDkJZO>us}I)(-%b0V zXjU7WZnJm!;_jSDR*(RWux-ChwDwDHwYL)mjb3(`-~;IKCcIQ1ySTuA38 zE7>Y+wm=QH;A(2~d+ z4;Gb7KYB7Sf($B&WwE@pCN-S-x~`8N*{<{H6WH;&WT5Qp2#iv#yaKf`R#9@RvbxOm z%1r8`xJAv!3uVO(hj(bB84a-fVM!l21#^W%@^*3@ZdCOQWSU94&XJnup6l$SdLTro1g?C@wFtcBOL+# zjs*J=Y+B+ae7^l#A`H1wH+&-nosiS#?q#WVzdY^3x0}IiIknL}pKsQdUnsh)@Q{U% z-=V6dbKdj2W1ujjd%$a392U)6TzQ{pyrq5&r8y@yL3jiQ<~ku4%(6I5#}*s{BQ;Iu zDFR|5o-Tobg3KrMZA&gV20VI{l1MHyU@dYSn-{C7o!)pHYxS|uQcUs$yUGe;=Ss+c zx!&6+uU`7yOG}ewU?zv(wADeLOWI-4i*M`hPLvIY9u)#BGn%$TI4o|RJ?kQV`V?+V z+;8kzAxayJv(|q*eiOJ?4$#~fJVw;YeC)bghsPzP;E7R7Um$D2H6OY6K85l`82u^% zw-dxbe8W;!5b#N`d2QpJ^c4F5bhNi`^`dk0i3d}7&05Z(DQ$h{I|xYw<>1PipNzK* z3a-~nvng40-p`;X0u?(YT-_3zPz+Fh+@sUSDVkFRwhIt%t1LjpE*p2cZKB~|)yIDH z%Hoa3P439v6L3E%m9NzEJ>fS70YtEB+zvY35QQTE*pMrmVz+o1x^0kPgS0fs*9vJ@ zy0MO;Q`Sgxwuy{7VQ>cyVsG(%#-Ep~dy@OfaN6hD^0tctsAn=?6uIZ-Mc$>wnsGW>{qu3t{NsAI<|Kl!42(Z&J2zn zE`9DDxw>&Y8C|xViZ06U6N&Y*oy@NctmV%e)ji!?v6=hA?v=K9nb78S2d8N-D43VV z^<9CiV_nd+)TZMa44V5RR~J3K_A}g_4(mIMsgipR$TxcD!3R{kniU^lC53t!!)ovS z7}Z51*ME)U|5!(#ZoWmsSY*xQsw@g? zo7`)K`6~FbwUrG<@_z~5PMNLdctNT?`=alLg@ms>Z#=co zjjj8L8`XBZsW>vWJhn=b@6C90Qea-VQttE6)M)kgwEWAJm++LZb#RFuv&BF z2E?CVcAXyYo6uNol)VR@Y^gi$+3GOd4VGEaOO$Wf4hszfp4TP` zRLw}eLK&ryZyr_GxQm1w$gEP@z@h-IshMI;o^7>TylTe8{z&;Xy?tv0N-cLTNe}|% z$=uuN;(U(im?WrelZY%%hue|$%0SuMf_AKWt&76hY9#qB@O7gL)($Rn)}dkAP4&u* ziHTA}*s?i1F!rQ5`AzoKka1(3n|Ea6NC8$lL4!HZZsw+{t4_%GG*b|Oo@NEo? zPHtRYAp;bSK6l1@$Bx!XSv_F(LE;qG9~k#nk=Sonyy#I}@ACQUmAtdl++M=QxLD!% ziVC-0I`@~?gR<2kXJ4d{d%a0ybJ@)}NGkR8$znB8$FPXgl+Q9lM1d)Y-BPJT=mm+a z1%BppC{0)a9B_a@9oL|nzpWc$UxbfIr;xU7S=5P zq5=do_6it(BC$NK^>Zd(Og|#$?BT%tZDw-_t&TQmIUioQ;wDT*4OIULTNqWU_7lU? zdq8WY5R*2h;u%2_FT35Pi0mR)*4-8td0tkOTI+3V(I*6PmF~QaM&Uc)Y9npkNU!`w zrMG-HIZfgCxMkC+9l?=nE~~c?HF5o3q{KpkH~(qX)Rn?xRcQquMx5m~S7s$3*oE?2 zJd0@PqO=Fkn0%3{OT6PPSDuUV-Zlgsztvz5yWwV4P3=+I4X7uD*^HCJ_$HM%*i@J? zJKNI3!o(N~R&WuYKPmCrAAZrk?(M9VD9)h-O@(@@y^)XAg2Cg*az{+`X0kzvG}ng> zJSFL5tAmV$h=p!NGQ8*-=ptV8g4|%=XXym@b+AKcb33>_iZB#P!$-YR^b4d&ma2q0 zQ(1;P4w&dz!>?%UV{_V{C*mzqPzsT)m7Eh#`S+`--+8g%|ICZcLVi#|=N|Z5-i`=7 P1bjN0hS$okIz;~m@6HXc literal 0 HcmV?d00001 diff --git a/barcode_generator_partner/tests/__init__.py b/barcode_generator_partner/tests/__init__.py new file mode 100644 index 0000000..22d1a55 --- /dev/null +++ b/barcode_generator_partner/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_barcodes_generator_partner diff --git a/barcode_generator_partner/tests/test_barcodes_generator_partner.py b/barcode_generator_partner/tests/test_barcodes_generator_partner.py new file mode 100644 index 0000000..2c72523 --- /dev/null +++ b/barcode_generator_partner/tests/test_barcodes_generator_partner.py @@ -0,0 +1,33 @@ +# Copyright (C) 2016-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import TransactionCase + + +class Tests(TransactionCase): + """Tests for 'Barcodes Generate""" + + def setUp(self): + super().setUp() + self.partner_obj = self.env["res.partner"] + + # Test Section + def test_01_sequence_generation_partner(self): + self.partner = self.partner_obj.browse( + self.ref("barcodes_generator_partner.res_partner_barcode") + ) + self.partner.generate_barcode() + self.assertEqual( + self.partner.barcode_base, + 1, + "Incorrect base Generation (by sequence) for Partner.", + ) + self.assertEqual( + self.partner.barcode, + "0420000000013", + "Barcode Generation (by sequence) for Partner." + "Incorrect EAN13 Generated. Pattern : %s - Base : %s" + % (self.partner.barcode_rule_id.pattern, self.partner.barcode_base), + ) diff --git a/barcode_generator_partner/views/view_res_partner.xml b/barcode_generator_partner/views/view_res_partner.xml new file mode 100644 index 0000000..4050f09 --- /dev/null +++ b/barcode_generator_partner/views/view_res_partner.xml @@ -0,0 +1,63 @@ + + + + + + res.partner + + + + + + +