From 61e48b09fb8d9896ecea230f0d1b7de1d47cae67 Mon Sep 17 00:00:00 2001 From: qsm-odoo <qsm@odoo.com> Date: Mon, 5 Sep 2016 13:33:17 +0100 Subject: [PATCH] [REF] mass_mailing: convert templates to themes and clean code * Remove mass mailing template switching system (lemon, airmail, ...) and replace it with a theme selector which only toggle a different class on the body. * Lint JS files. * Change the way the editor is overridden by mass_mailing in a more odoo way (put the JS in assets and check on runtime if it must be applied. + fix editor style + remove useless code + remove odoo template --- addons/mass_mailing/__manifest__.py | 4 - .../static/src/css/airmail_template.css | 77 ---------- .../static/src/css/lemon_template.css | 75 --------- .../static/src/css/odoo_template.css | 52 ------- .../static/src/css/snippet_styles.css | 6 - .../static/src/css/tech_template.css | 75 --------- .../static/src/css/themes/airmail.css | 77 ++++++++++ .../static/src/css/themes/lemon.css | 75 +++++++++ .../static/src/css/themes/tech.css | 75 +++++++++ .../static/src/js/mass_mailing_editor.js | 140 ++++++++++------- .../static/src/less/mass_mailing.ui.less | 17 +++ .../static/src/xml/mass_mailing.xml | 17 +++ .../mass_mailing/views/airmail_template.xml | 135 ----------------- .../mass_mailing/views/editor_field_html.xml | 21 ++- addons/mass_mailing/views/lemon_template.xml | 112 -------------- .../views/mass_mailing_template.xml | 9 ++ addons/mass_mailing/views/odoo_template.xml | 94 ------------ addons/mass_mailing/views/snippets_themes.xml | 33 +--- .../views/snippets_themes_options.xml | 12 +- addons/mass_mailing/views/tech_template.xml | 143 ------------------ .../static/src/less/web_editor.ui.less | 7 +- .../static/src/img/thumbnail/odoo.png | Bin 35742 -> 0 bytes 22 files changed, 373 insertions(+), 883 deletions(-) delete mode 100644 addons/mass_mailing/static/src/css/airmail_template.css delete mode 100644 addons/mass_mailing/static/src/css/lemon_template.css delete mode 100644 addons/mass_mailing/static/src/css/odoo_template.css delete mode 100644 addons/mass_mailing/static/src/css/tech_template.css create mode 100644 addons/mass_mailing/static/src/css/themes/airmail.css create mode 100644 addons/mass_mailing/static/src/css/themes/lemon.css create mode 100644 addons/mass_mailing/static/src/css/themes/tech.css create mode 100644 addons/mass_mailing/static/src/less/mass_mailing.ui.less create mode 100644 addons/mass_mailing/static/src/xml/mass_mailing.xml delete mode 100644 addons/mass_mailing/views/airmail_template.xml delete mode 100644 addons/mass_mailing/views/lemon_template.xml delete mode 100644 addons/mass_mailing/views/odoo_template.xml delete mode 100644 addons/mass_mailing/views/tech_template.xml delete mode 100644 addons/website_mail/static/src/img/thumbnail/odoo.png diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 595e2c1c82a9..3adda9bc4346 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -36,10 +36,6 @@ professional emails and reuse templates in a few clicks. 'views/editor_field_html.xml', 'views/snippets_themes.xml', 'views/snippets_themes_options.xml', - 'views/odoo_template.xml', - 'views/airmail_template.xml', - 'views/lemon_template.xml', - 'views/tech_template.xml', ], 'demo': [ 'data/mass_mailing_demo.xml', diff --git a/addons/mass_mailing/static/src/css/airmail_template.css b/addons/mass_mailing/static/src/css/airmail_template.css deleted file mode 100644 index 00c32beeaced..000000000000 --- a/addons/mass_mailing/static/src/css/airmail_template.css +++ /dev/null @@ -1,77 +0,0 @@ -/*Airmail Template*/ - -.airmail_template_header, .airmail_template_footer { - background-color: #d05d68; -} -.airmail_template { - background-color: #ededed; -} -.airmail_template_container { - background-color: white; - box-shadow: none; -} - -/*Colors*/ - -.airmail_template .bg-alpha { - background-color: #fff; -} -.airmail_template .bg-alpha p, .airmail_template .bg-alpha .display-1, .airmail_template .bg-alpha .display-2, .airmail_template .bg-alpha .display-3 { - color: #000; -} -.airmail_template .bg-beta { - background-color: #6077a8; -} -.airmail_template .bg-beta p, .airmail_template .bg-beta .display-1, .airmail_template .bg-beta .display-2, .airmail_template .bg-beta .display-3 { - color: #fff; -} -.airmail_template .bg-beta .link-color { - color: #dab4a8; -} -.airmail_template .bg-gamma { - background-color: #a17e92; -} -.airmail_template .bg-gamma .link-color { - color: #dab4a8; -} -.airmail_template .bg-gamma p, .airmail_template .bg-gamma .display-1, .airmail_template .bg-gamma .display-2, .airmail_template .bg-gamma .display-3 { - color: #fff; -} -.airmail_template .bg-delta { - background-color: #dab4a8; -} -.airmail_template .bg-delta p, .airmail_template .bg-delta .display-1, .airmail_template .bg-delta .display-2, .airmail_template .bg-delta .display-3 { - color: #000; -} -.airmail_template .bg-epsilon { - background-color: #d05d68; -} -.airmail_template .bg-epsilon p, .airmail_template .bg-epsilon .display-1, .airmail_template .bg-epsilon .display-2, .airmail_template .bg-epsilon .display-3 { - color: #fff; -} -.airmail_template .bg-epsilon .link-color { - color: #fff; -} - -/*Link color*/ - -.airmail_template .link-color { - color: #d05d68; -} - -/*BTN styles*/ - -.airmail_template .newsletter-btn { - color: #d05d68; - border: 1px solid #d05d68; - border-radius: 4px; - background-color: transparent; -} -.airmail_template .bg-gamma .newsletter-btn { - color: #fff; - border: 1px solid #fff; -} -.airmail_template .bg-epsilon .newsletter-btn { - color: #fff; - border: 1px solid #fff; -} \ No newline at end of file diff --git a/addons/mass_mailing/static/src/css/lemon_template.css b/addons/mass_mailing/static/src/css/lemon_template.css deleted file mode 100644 index 21b97f34fadf..000000000000 --- a/addons/mass_mailing/static/src/css/lemon_template.css +++ /dev/null @@ -1,75 +0,0 @@ -/* ======================== COLORS ====================== */ - -.lemon_template { - background-color: #fff; -} -.lemon_template_header { - background-color: #fe4e1e; -} -.lemon_template_container { - background-color: #f4ea00; -} - -.lemon_template p { - color: #000; -} -.lemon_template .bg-alpha { - background-color: #fff; -} -.lemon_template .bg-alpha .display-1, .lemon_template .bg-alpha p, .lemon_template .bg-alpha .display-2, .lemon_template .bg-alpha .display-3{ - color: #000; -} -.lemon_template .bg-beta { - background-color: #f4ea00; -} -.lemon_template .bg-beta p, .lemon_template .bg-beta .display-1, .lemon_template .bg-beta .display-2, .lemon_template .bg-beta .display-3 { - color: #000; -} -.lemon_template .bg-gamma { - background-color: #d6d5b6; -} -.lemon_template .bg-gamma p, .lemon_template .bg-gamma .display-1, .lemon_template .bg-gamma .display-2, .lemon_template .bg-gamma .display-3 { - color: #000; -} -.lemon_template .bg-gamma .link-color { - color: #fe4e1e; -} -.lemon_template .bg-delta { - background-color: #000; -} -.lemon_template .bg-delta p, .lemon_template .bg-delta .display-1, .lemon_template .bg-delta .display-2, .lemon_template .bg-delta .display-3 { - color: #fff; -} -.lemon_template .bg-delta .link-color { - color: #fe4e1e; -} -.lemon_template .bg-epsilon { - background-color: #fe4e1e; -} -.lemon_template .bg-epsilon p, .lemon_template .bg-epsilon .display-1, .lemon_template .bg-epsilon .display-2, .lemon_template .bg-epsilon .display-3 { - color: #fff; -} -.lemon_template .bg-epsilon .link-color { - color: #f4ea00; -} - -.lemon_template .link-color { - color: #fe4e1e; -} - -/*BTN styles*/ - -.lemon_template .newsletter-btn { - color: #fff; - background-color: #fe4e1e; - font-size: 12px; -} - -/*Snippet styles*/ - -.lemon_template .separator { - background-color: #fff; -} -.lemon_template .snippet-general { - margin:0 auto; -} \ No newline at end of file diff --git a/addons/mass_mailing/static/src/css/odoo_template.css b/addons/mass_mailing/static/src/css/odoo_template.css deleted file mode 100644 index 43d6486ac7af..000000000000 --- a/addons/mass_mailing/static/src/css/odoo_template.css +++ /dev/null @@ -1,52 +0,0 @@ -/* ======================== COLORS ====================== */ - -.odoo_template { - background-color: #ededed; -} -.odoo_template_container { - background-color: #fff; - -webkit-box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.3); - -moz-box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.3); - box-shadow: 0px 0px 12px 1px rgba(0,0,0,0.3); -} -.odoo_template .bg-alpha { - background-color: #fff; -} -.odoo_template .bg-alpha .display-1, .odoo_template .bg-alpha p, .odoo_template .bg-alpha .display-2, .odoo_template .bg-alpha .display-3{ - color: #000; -} -.odoo_template .bg-beta { - background-color: #875a7b; -} -.odoo_template .bg-beta p, .odoo_template .bg-beta .display-1, .odoo_template .bg-beta .display-2, .odoo_template .bg-beta .display-3 { - color: #fff; -} -.odoo_template .bg-gamma { - background-color: #e46f78; -} -.odoo_template .bg-gamma p, .odoo_template .bg-gamma .display-1, .odoo_template .bg-gamma .display-2, .odoo_template .bg-gamma .display-3 { - color: #fff; -} -.odoo_template .bg-gamma .link-color { - color: #3d5d6b; -} -.odoo_template .bg-delta { - background-color: #34c9a4; -} -.odoo_template .bg-delta p, .odoo_template .bg-delta .display-1, .odoo_template .bg-delta .display-2, .odoo_template .bg-delta .display-3 { - color: #fff; -} -.odoo_template .bg-delta .link-color { - color: #3d5d6b; -} -.odoo_template .bg-epsilon { - background-color: #3d5d6b; -} -.odoo_template .bg-epsilon p, .odoo_template .bg-epsilon .display-1, .odoo_template .bg-epsilon .display-2, .odoo_template .bg-epsilon .display-3 { - color: #fff; -} - -.odoo_template .link-color { - color: #34c9a4; -} - diff --git a/addons/mass_mailing/static/src/css/snippet_styles.css b/addons/mass_mailing/static/src/css/snippet_styles.css index fc7d7d15ab9d..2035ea37ea10 100644 --- a/addons/mass_mailing/static/src/css/snippet_styles.css +++ b/addons/mass_mailing/static/src/css/snippet_styles.css @@ -3,12 +3,6 @@ width: 600px; } } -#oe_snippets #snippets_menu li { - width: 20%; -} -#email_designer_layout .o_panel_body .oe_snippet_thumbnail_img { - cursor: crosshair; -} /* ======================== TYPO ====================== */ diff --git a/addons/mass_mailing/static/src/css/tech_template.css b/addons/mass_mailing/static/src/css/tech_template.css deleted file mode 100644 index 3d63a88ad946..000000000000 --- a/addons/mass_mailing/static/src/css/tech_template.css +++ /dev/null @@ -1,75 +0,0 @@ -/* ======================== COLORS ====================== */ - -.tech_template { - background-color: #fff; -} -.tech_template_header { - background-color: #e3e3e3; -} - -.tech_template p { - color: #494949; -} -.tech_template .bg-alpha { - background-color: #fff; -} -.tech_template .bg-alpha .display-1, .tech_template .bg-alpha p, .tech_template .bg-alpha .display-2, .tech_template .bg-alpha .display-3{ - color: #000; -} -.tech_template .bg-beta { - background-color: #dadada; -} -.tech_template .bg-beta p, .tech_template .bg-beta .display-1, .tech_template .bg-beta .display-2, .tech_template .bg-beta .display-3 { - color: #000; -} -.tech_template .bg-beta .link-color { - color: #de5745; -} -.tech_template .bg-gamma { - background-color: #de5745; -} -.tech_template .bg-gamma p, .tech_template .bg-gamma .display-1, .tech_template .bg-gamma .display-2, .tech_template .bg-gamma .display-3 { - color: #fff; -} -.tech_template .bg-gamma .link-color { - color: #ccda3f; -} -.tech_template .bg-delta { - background-color: #4a9fba; -} -.tech_template .bg-delta p, .tech_template .bg-delta .display-1, .tech_template .bg-delta .display-2, .tech_template .bg-delta .display-3 { - color: #fff; -} -.tech_template .bg-delta .link-color { - color: #ccda3f; -} -.tech_template .bg-epsilon { - background-color: #ccda3f; -} -.tech_template .bg-epsilon p, .tech_template .bg-epsilon .display-1, .tech_template .bg-epsilon .display-2, .tech_template .bg-epsilon .display-3 { - color: #000; -} -.tech_template .bg-epsilon .link-color { - color: #de5745; -} - -.tech_template .link-color { - color: #ccda3f; -} - -/*BTN styles*/ - -.tech_template .newsletter-btn { - color: #fff; - background-color: #ccda3f; - font-size: 12px; -} -.tech_template .bg-epsilon .newsletter-btn { - background-color: #de5745; -} - -/*Snippet styles*/ - -.tech_template .snippet-general { - margin:0 auto; -} \ No newline at end of file diff --git a/addons/mass_mailing/static/src/css/themes/airmail.css b/addons/mass_mailing/static/src/css/themes/airmail.css new file mode 100644 index 000000000000..655d4bd19ee5 --- /dev/null +++ b/addons/mass_mailing/static/src/css/themes/airmail.css @@ -0,0 +1,77 @@ +/*Airmail Template*/ + +.o_airmail_theme_header, .o_airmail_theme_footer { + background-color: #d05d68; +} +.o_airmail_theme { + background-color: #ededed; +} +.o_airmail_theme_container { + background-color: white; + box-shadow: none; +} + +/*Colors*/ + +.o_airmail_theme .bg-alpha { + background-color: #fff; +} +.o_airmail_theme .bg-alpha p, .o_airmail_theme .bg-alpha .display-1, .o_airmail_theme .bg-alpha .display-2, .o_airmail_theme .bg-alpha .display-3 { + color: #000; +} +.o_airmail_theme .bg-beta { + background-color: #6077a8; +} +.o_airmail_theme .bg-beta p, .o_airmail_theme .bg-beta .display-1, .o_airmail_theme .bg-beta .display-2, .o_airmail_theme .bg-beta .display-3 { + color: #fff; +} +.o_airmail_theme .bg-beta .link-color { + color: #dab4a8; +} +.o_airmail_theme .bg-gamma { + background-color: #a17e92; +} +.o_airmail_theme .bg-gamma .link-color { + color: #dab4a8; +} +.o_airmail_theme .bg-gamma p, .o_airmail_theme .bg-gamma .display-1, .o_airmail_theme .bg-gamma .display-2, .o_airmail_theme .bg-gamma .display-3 { + color: #fff; +} +.o_airmail_theme .bg-delta { + background-color: #dab4a8; +} +.o_airmail_theme .bg-delta p, .o_airmail_theme .bg-delta .display-1, .o_airmail_theme .bg-delta .display-2, .o_airmail_theme .bg-delta .display-3 { + color: #000; +} +.o_airmail_theme .bg-epsilon { + background-color: #d05d68; +} +.o_airmail_theme .bg-epsilon p, .o_airmail_theme .bg-epsilon .display-1, .o_airmail_theme .bg-epsilon .display-2, .o_airmail_theme .bg-epsilon .display-3 { + color: #fff; +} +.o_airmail_theme .bg-epsilon .link-color { + color: #fff; +} + +/*Link color*/ + +.o_airmail_theme .link-color { + color: #d05d68; +} + +/*BTN styles*/ + +.o_airmail_theme .newsletter-btn { + color: #d05d68; + border: 1px solid #d05d68; + border-radius: 4px; + background-color: transparent; +} +.o_airmail_theme .bg-gamma .newsletter-btn { + color: #fff; + border: 1px solid #fff; +} +.o_airmail_theme .bg-epsilon .newsletter-btn { + color: #fff; + border: 1px solid #fff; +} diff --git a/addons/mass_mailing/static/src/css/themes/lemon.css b/addons/mass_mailing/static/src/css/themes/lemon.css new file mode 100644 index 000000000000..df6a83f9e172 --- /dev/null +++ b/addons/mass_mailing/static/src/css/themes/lemon.css @@ -0,0 +1,75 @@ +/* ======================== COLORS ====================== */ + +.o_lemon_theme { + background-color: #fff; +} +.o_lemon_theme_header { + background-color: #fe4e1e; +} +.o_lemon_theme_container { + background-color: #f4ea00; +} + +.o_lemon_theme p { + color: #000; +} +.o_lemon_theme .bg-alpha { + background-color: #fff; +} +.o_lemon_theme .bg-alpha .display-1, .o_lemon_theme .bg-alpha p, .o_lemon_theme .bg-alpha .display-2, .o_lemon_theme .bg-alpha .display-3{ + color: #000; +} +.o_lemon_theme .bg-beta { + background-color: #f4ea00; +} +.o_lemon_theme .bg-beta p, .o_lemon_theme .bg-beta .display-1, .o_lemon_theme .bg-beta .display-2, .o_lemon_theme .bg-beta .display-3 { + color: #000; +} +.o_lemon_theme .bg-gamma { + background-color: #d6d5b6; +} +.o_lemon_theme .bg-gamma p, .o_lemon_theme .bg-gamma .display-1, .o_lemon_theme .bg-gamma .display-2, .o_lemon_theme .bg-gamma .display-3 { + color: #000; +} +.o_lemon_theme .bg-gamma .link-color { + color: #fe4e1e; +} +.o_lemon_theme .bg-delta { + background-color: #000; +} +.o_lemon_theme .bg-delta p, .o_lemon_theme .bg-delta .display-1, .o_lemon_theme .bg-delta .display-2, .o_lemon_theme .bg-delta .display-3 { + color: #fff; +} +.o_lemon_theme .bg-delta .link-color { + color: #fe4e1e; +} +.o_lemon_theme .bg-epsilon { + background-color: #fe4e1e; +} +.o_lemon_theme .bg-epsilon p, .o_lemon_theme .bg-epsilon .display-1, .o_lemon_theme .bg-epsilon .display-2, .o_lemon_theme .bg-epsilon .display-3 { + color: #fff; +} +.o_lemon_theme .bg-epsilon .link-color { + color: #f4ea00; +} + +.o_lemon_theme .link-color { + color: #fe4e1e; +} + +/*BTN styles*/ + +.o_lemon_theme .newsletter-btn { + color: #fff; + background-color: #fe4e1e; + font-size: 12px; +} + +/*Snippet styles*/ + +.o_lemon_theme .separator { + background-color: #fff; +} +.o_lemon_theme .snippet-general { + margin:0 auto; +} diff --git a/addons/mass_mailing/static/src/css/themes/tech.css b/addons/mass_mailing/static/src/css/themes/tech.css new file mode 100644 index 000000000000..00ea206cd489 --- /dev/null +++ b/addons/mass_mailing/static/src/css/themes/tech.css @@ -0,0 +1,75 @@ +/* ======================== COLORS ====================== */ + +.o_tech_theme { + background-color: #fff; +} +.o_tech_theme_header { + background-color: #e3e3e3; +} + +.o_tech_theme p { + color: #494949; +} +.o_tech_theme .bg-alpha { + background-color: #fff; +} +.o_tech_theme .bg-alpha .display-1, .o_tech_theme .bg-alpha p, .o_tech_theme .bg-alpha .display-2, .o_tech_theme .bg-alpha .display-3{ + color: #000; +} +.o_tech_theme .bg-beta { + background-color: #dadada; +} +.o_tech_theme .bg-beta p, .o_tech_theme .bg-beta .display-1, .o_tech_theme .bg-beta .display-2, .o_tech_theme .bg-beta .display-3 { + color: #000; +} +.o_tech_theme .bg-beta .link-color { + color: #de5745; +} +.o_tech_theme .bg-gamma { + background-color: #de5745; +} +.o_tech_theme .bg-gamma p, .o_tech_theme .bg-gamma .display-1, .o_tech_theme .bg-gamma .display-2, .o_tech_theme .bg-gamma .display-3 { + color: #fff; +} +.o_tech_theme .bg-gamma .link-color { + color: #ccda3f; +} +.o_tech_theme .bg-delta { + background-color: #4a9fba; +} +.o_tech_theme .bg-delta p, .o_tech_theme .bg-delta .display-1, .o_tech_theme .bg-delta .display-2, .o_tech_theme .bg-delta .display-3 { + color: #fff; +} +.o_tech_theme .bg-delta .link-color { + color: #ccda3f; +} +.o_tech_theme .bg-epsilon { + background-color: #ccda3f; +} +.o_tech_theme .bg-epsilon p, .o_tech_theme .bg-epsilon .display-1, .o_tech_theme .bg-epsilon .display-2, .o_tech_theme .bg-epsilon .display-3 { + color: #000; +} +.o_tech_theme .bg-epsilon .link-color { + color: #de5745; +} + +.o_tech_theme .link-color { + color: #ccda3f; +} + +/*BTN styles*/ + +.o_tech_theme .newsletter-btn { + color: #fff; + background-color: #ccda3f; + font-size: 12px; +} +.o_tech_theme .bg-epsilon .newsletter-btn { + background-color: #de5745; +} + +/*Snippet styles*/ + +.o_tech_theme .snippet-general { + margin:0 auto; +} diff --git a/addons/mass_mailing/static/src/js/mass_mailing_editor.js b/addons/mass_mailing/static/src/js/mass_mailing_editor.js index 6d2f025a438f..23e8a84f155f 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing_editor.js +++ b/addons/mass_mailing/static/src/js/mass_mailing_editor.js @@ -1,33 +1,41 @@ odoo.define('mass_mailing.editor', function (require) { "use strict"; -var Model = require('web.Model'); +var ajax = require("web.ajax"); +var core = require("web.core"); var rte = require('web_editor.rte'); var web_editor = require('web_editor.editor'); var options = require('web_editor.snippets.options'); var snippets_editor = require('web_editor.snippet.editor'); +var _t = core._t; + +var $editable_area = $("#editable_area"); +if ($editable_area.length === 0 || !$editable_area.is(".o_mail_area")) { + return; +} + // Snippet option for resizing image and column width inline like excel options.registry["width-x"] = options.Class.extend({ start: function () { this.container_width = 600; var parent = this.$target.closest('[data-max-width]'); - if( parent.length ){ + if (parent.length) { this.container_width = parseInt(parent.attr('data-max-width')); - } + } var self = this; var offset, sib_offset, target_width, sib_width; this.is_image = false; this._super(); this.$overlay.find(".oe_handle.e, .oe_handle.w").removeClass("readonly"); - if( this.$target.is('img')){ + if (this.$target.is('img')) { this.$overlay.find(".oe_handle.w").addClass("readonly"); this.$overlay.find(".oe_snippet_remove, .oe_snippet_move, .oe_snippet_clone").addClass("hidden"); this.is_image=true; } - this.$overlay.find(".oe_handle").on('mousedown', function (event){ + this.$overlay.find(".oe_handle").on('mousedown', function (event) { event.preventDefault(); var $handle = $(this); var compass = false; @@ -35,12 +43,12 @@ options.registry["width-x"] = options.Class.extend({ _.each(['n', 's', 'e', 'w' ], function(handler) { if ($handle.hasClass(handler)) { compass = handler; } }); - if(self.is_image){ compass = "image"; } + if (self.is_image) { compass = "image"; } self.buildingBlock.editor_busy = true; var $body = $(document.body); - var body_mousemove = function (event){ + var body_mousemove = function (event) { event.preventDefault(); offset = self.$target.offset().left; target_width = self.get_max_width(self.$target); @@ -56,11 +64,11 @@ options.registry["width-x"] = options.Class.extend({ self.change_width(event, self.$target, target_width, offset ,'minus'); self.change_width(event, self.$target.prev(), sib_width, sib_offset, 'plus'); } - if (compass === 'image'){ + if (compass === 'image') { self.change_width(event, self.$target, target_width, offset ,'plus'); } - } - var body_mouseup = function(){ + }; + var body_mouseup = function () { $body.unbind('mousemove', body_mousemove); $body.unbind('mouseup', body_mouseup); self.buildingBlock.editor_busy = false; @@ -70,12 +78,13 @@ options.registry["width-x"] = options.Class.extend({ $body.mouseup(body_mouseup); }); }, - change_width:function(event, target ,target_width, offset, type){ + change_width: function (event, target ,target_width, offset, type) { var self = this; - if(type == 'plus'){ - var width = event.pageX-offset; - }else{ - var width = offset + target_width - event.pageX; + var width; + if (type === 'plus') { + width = event.pageX-offset; + } else { + width = offset + target_width - event.pageX; } target.css("width", width + "px"); self.buildingBlock.cover_target(self.$overlay, self.$target); @@ -90,17 +99,17 @@ options.registry["width-x"] = options.Class.extend({ var self = this; _.each($el.siblings(),function(sib){ max_width += self.get_int_width($(sib)); - }) + }); return this.container_width - max_width; }, on_clone: function ($clone) { var clone_index = $(this.$target).index(); var $table = this.$target.parents('table[data-max-width]'); - if($table.length == 1){ + if ($table.length === 1){ _.each($table.find('tbody>tr'),function(row){ var clone_selector = 'td:eq(' + clone_index + ')'; var $col_to_clone = $(row).find(clone_selector); - if($col_to_clone.length != 0){ + if ($col_to_clone.length !== 0){ $col_to_clone.after($col_to_clone.clone()); } }); @@ -111,63 +120,86 @@ options.registry["width-x"] = options.Class.extend({ on_remove: function () { var remove_index = $(this.$target).index(); var $table = this.$target.parents('table[data-max-width]'); - if($table.length == 1){ + if ($table.length === 1){ _.each($table.find('tbody>tr'),function(row){ var remove_selector = 'td:eq(' + remove_index + ')'; $(row).find(remove_selector).remove(); }); } - this._super(); + this._super.apply(this, arguments); this.buildingBlock.cover_target(this.$overlay, this.$target); }, }); - var fn_popover_update = $.summernote.eventHandler.modules.popover.update; $.summernote.eventHandler.modules.popover.update = function ($popover, oStyle, isAirMode) { fn_popover_update.call(this, $popover, oStyle, isAirMode); $("span.o_table_handler, div.note-table").remove(); }; +ajax.loadXML("/mass_mailing/static/src/xml/mass_mailing.xml", core.qweb); + snippets_editor.Class.include({ _get_snippet_url: function () { - return snippets_url; + var url = (typeof snippets_url !== "undefined" ? window["snippets_url"] : this._super.apply(this, arguments)); + return url; }, compute_snippet_templates: function (html) { - this._super(html); - var self = this; - var $layouts = this.$('#email_designer_layout .o_panel_body > *'); - $layouts.removeClass("oe_snippet_body"); - $layouts.find('*').add($layouts).off(); - $layouts.on('click', function (event) { - event.preventDefault(); - var $editable = $('#editable_area'); - var $o_layout = $editable.find('.o_layout'); - var $html = ($o_layout.length ? $o_layout.find('.oe_structure').first() : $editable).contents(); - var $layout = $(".o_layout", this).clone().removeClass('oe_snippet_body'); - - if ($o_layout.length) { - $('body').removeClass($o_layout.attr('class')); - } - $('body').addClass($layout.attr('class')).removeClass('odoo o_layout oe_snippet_body'); - - var $structure = $layout.find('.oe_structure'); - if ($structure.length) { - $structure.html($html); - $('#editable_area').html($layout); + var ret = this._super.apply(this, arguments); + + var $themes = this.$("#email_designer_themes").children().addClass("oe_snippet_body"); + if ($themes.length === 0) return ret; + + var all_classes = ""; + var $dropdown = $(core.qweb.render("mass_mailing.theme_selector", { + themes: _.map($themes, function (theme) { + var $theme = $(theme); + var classname = $theme.data("class"); + all_classes += " " + classname; + return { + className: classname, + imgSource: $theme.data("img"), + }; + }), + })); + + var $body = $(document.body); + $dropdown.on("mouseenter click", "li > a", function (e) { + e.preventDefault(); + var classname = $(e.currentTarget).data("class"); + $body.removeClass(all_classes).addClass(classname); + var $layout = $editable_area.find(".o_layout"); + var $contents; + if ($layout.length) { + $contents = ($layout.hasClass("oe_structure") ? $layout : $layout.find(".oe_structure").first()).contents(); } else { - $('#editable_area').html($html); + $contents = $editable_area.contents(); } + var $div = $("<div/>", {"class": "o_layout oe_structure " + classname}); + $editable_area.append($div); + $div.append($contents); + $layout.remove(); + }); + + var $snippets_menu = this.$el.find("#snippets_menu"); + var old_title = $snippets_menu.text(); + $dropdown.on("shown.bs.dropdown", function () { + $snippets_menu.text(_t("Choose a Theme")); + }); + $dropdown.on("hidden.bs.dropdown", function () { + $snippets_menu.text(old_title); }); - }, + $dropdown.insertAfter($snippets_menu); + + return ret; + }, }); var odoo_top = window.top.odoo; -var _set_value = odoo_top[callback+"_updown"]; -window.top.odoo[callback+"_updown"] = function (value, fields_values, field_name) { +window.top.odoo[window["callback"]+"_updown"] = function (value, fields_values, field_name) { if (!window) { - delete odoo_top[callback+"_updown"]; + delete odoo_top[window["callback"]+"_updown"]; return; } @@ -175,7 +207,7 @@ window.top.odoo[callback+"_updown"] = function (value, fields_values, field_name var _val = $editable.prop("innerHTML"); var editor_enable = $('body').hasClass('editor_enable'); value = value || ""; - + if(value !==_val) { if (editor_enable) { if (value !== fields_values[field_name]) { @@ -183,7 +215,7 @@ window.top.odoo[callback+"_updown"] = function (value, fields_values, field_name } snippets_editor.instance.make_active(false); } - + if (value.indexOf('on_change_model_and_list') === -1) { $editable.html(value); @@ -198,14 +230,12 @@ window.top.odoo[callback+"_updown"] = function (value, fields_values, field_name if (fields_values.mailing_model && web_editor.editor_bar) { if (value.indexOf('on_change_model_and_list') !== -1) { - odoo_top[callback+"_downup"](_val); + odoo_top[window["callback"]+"_downup"](_val); } } }; - -if ($("#editable_area").html().indexOf('on_change_model_and_list') !== -1) { - $("#editable_area").empty(); +if ($editable_area.html().indexOf('on_change_model_and_list') !== -1) { + $editable_area.empty(); } - }); diff --git a/addons/mass_mailing/static/src/less/mass_mailing.ui.less b/addons/mass_mailing/static/src/less/mass_mailing.ui.less new file mode 100644 index 000000000000..9b72a72adc7b --- /dev/null +++ b/addons/mass_mailing/static/src/less/mass_mailing.ui.less @@ -0,0 +1,17 @@ +.o_mail_theme_selector { + > a { + .o-position-absolute(6px, 6px); + } + + .dropdown-menu { + .o-position-absolute(@odoo-navbar-height - 1, -1px, -1px, -1px); + margin: 0; + border-radius: 0; + overflow: auto; + background-color: @o-we-color-dark; + + > li:hover > a { + background-color: @o-we-color-darker; + } + } +} diff --git a/addons/mass_mailing/static/src/xml/mass_mailing.xml b/addons/mass_mailing/static/src/xml/mass_mailing.xml new file mode 100644 index 000000000000..e82f4dbf88e8 --- /dev/null +++ b/addons/mass_mailing/static/src/xml/mass_mailing.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates id="template" xml:space="preserve"> + <t t-name="mass_mailing.theme_selector"> + <div class="o_mail_theme_selector"> + <a href="#" class="btn btn-xs btn-primary dropdown-toggle" data-toggle="dropdown"> + <i class="fa fa-paint-brush"/> + </a> + <div class="dropdown-menu"> + <li t-foreach="themes" t-as="theme"> + <a href="#" t-att-data-class="theme.className"> + <img class="img img-responsive" t-att-src="theme.imgSource"/> + </a> + </li> + </div> + </div> + </t> +</templates> diff --git a/addons/mass_mailing/views/airmail_template.xml b/addons/mass_mailing/views/airmail_template.xml deleted file mode 100644 index 71924ec9900b..000000000000 --- a/addons/mass_mailing/views/airmail_template.xml +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <!-- Airmail Template --> - <template name="Airmail Template" id="airmail_email_template"> - <div class="o_mail_block_airmail_template"> - <table class="o_layout airmail_template" style="width:100%;background-color: #ededed;"> - <tbody> - <tr> - <td> - <!-- Template Header --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles bg-epsilon airmail_template_header"> - <tbody> - <tr> - <td> - <!-- Logo --> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="60%" align="left" style="padding:5px 0"> - &nbsp; - <a t-att-href="(company_id.website) or '#'"> - <img border="0" src="http://www.odoocdn.com/openerp_website/static/src/img/2016/logos/odoo_logo_small.png" style="height:auto;max-width:600px;width:70px;margin-left:-6px;" alt="Your Logo" /> - </a> - &nbsp; - </td> - <td t-if="website" width="40%" align="right" style="padding:8px 0"> - &nbsp; - <t t-if="website.social_facebook"> - <a t-att-href="website.social_facebook" style="padding-left:5px;float:right;color:#fff;"> - <span class="odoo fa fa-facebook fa-2x" style="font-size:15px;"></span> - </a> - </t> - <t t-if="website.social_googleplus"> - <a t-att-href="website.social_googleplus" style="padding-left:5px;float:right;color:#fff;"> - <span class="odoo fa fa-google-plus fa-2x" style="font-size:15px;"></span> - </a> - </t> - <t t-if="website.social_linkedin"> - <a t-att-href="website.social_linkedin" style="padding-left:5px;float:right;color:#fff;"> - <span class="odoo fa fa-linkedin fa-2x" style="font-size:15px;"></span> - </a> - </t> - <t t-if="website.social_twitter"> - <a t-att-href="website.social_twitter" style="padding-left:5px;float:right;color:#fff;"> - <span class="odoo fa fa-twitter fa-2x" style="font-size:15px;"></span> - </a> - </t> - &nbsp; - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Template Body --> - <table style="margin:30px auto;" align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles airmail_template_container bg-alpha"> - <tbody> - <tr> - <td> - <div class="snippet_row" style="width:600px;"> - <div class="snippetbanner"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="100%" valign="top"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/2016/home/laptop_sale_desktop.jpg" style="height:auto;max-width:600px;width:600px;" alt="Your Logo" /> - </td> - </tr> - </tbody> - </table> - </div> - </div> - <div class="oe_structure"></div> - <div class="snippet_row" t-if="website"> - <div class="snippet-general"> - <table width="600" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td valign="middle" align="right" style="font-size:12px;padding:10px;text-align:center"> - &nbsp; - <t t-if="website"> - <a href="/page/contactus" style="padding-right:3px;" class="link-color">Contact Us</a> | - <t t-if="website.social_facebook"> - <a t-att-href="website.social_facebook" style="padding-right:3px;" class="link-color">Facebook</a> | - </t> - <t t-if="website.social_twitter"> - <a t-att-href="website.social_twitter" style="padding-right:3px;" class="link-color">Twitter</a> | - </t> - </t> - <a href="https://apps.odoo.com/unsubscribe_from_list" class="link-color">Unsubscribe</a> - &nbsp; - </td> - </tr> - </tbody> - </table> - </div> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Template Footer --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles bg-epsilon airmail_template_footer bg-epsilon"> - <tbody> - <tr> - <td> - <!-- Logo --> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="100%" align="left" style="padding:8px 0"> - <p class="text-center" style="color:#fff;">Your company here, all rights reserved 2013 © </p> - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </div> - </template> - </data> -</odoo> \ No newline at end of file diff --git a/addons/mass_mailing/views/editor_field_html.xml b/addons/mass_mailing/views/editor_field_html.xml index 24007eb78655..c93cee8d3533 100644 --- a/addons/mass_mailing/views/editor_field_html.xml +++ b/addons/mass_mailing/views/editor_field_html.xml @@ -1,36 +1,33 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> -<!-- Template Choice page --> <template id="FieldTextHtmlInline" name="Editor layout"> <t t-set="head"> <t t-if="enable_editor"> <link rel="stylesheet" href="/mass_mailing/static/src/css/snippet_styles.css" type="text/css"/> - <!-- <link rel="stylesheet" href="/mass_mailing/static/src/css/odoo_template.css" type="text/css"/> - <link rel="stylesheet" href="/mass_mailing/static/src/css/airmail_template.css" type="text/css"/> - <link rel="stylesheet" href="/mass_mailing/static/src/css/lemon_template.css" type="text/css"/> - <link rel="stylesheet" href="/mass_mailing/static/src/css/tech_template.css" type="text/css"/> --> - <script type="text/javascript" src="/mass_mailing/static/src/js/mass_mailing_editor.js"></script> + + <link rel="stylesheet" href="/mass_mailing/static/src/css/themes/airmail.css" type="text/css"/> + <link rel="stylesheet" href="/mass_mailing/static/src/css/themes/lemon.css" type="text/css"/> + <link rel="stylesheet" href="/mass_mailing/static/src/css/themes/tech.css" type="text/css"/> </t> </t> <t t-call="web_editor.layout"> - <div t-if="not edit_translations" id="editable_area" class="o_editable" t-att-data-oe-model="model" t-att-data-oe-field="field" t-att-data-oe-id="res_id" data-oe-type="html"><t t-raw="content"/></div> - <div t-if="edit_translations" id="editable_area"><t t-raw="content"/></div> + <div t-if="not edit_translations" id="editable_area" class="o_editable o_mail_area" t-att-data-oe-model="model" t-att-data-oe-field="field" t-att-data-oe-id="res_id" data-oe-type="html"><t t-raw="content"/></div> + <div t-if="edit_translations" id="editable_area" class="o_mail_area"><t t-raw="content"/></div> </t> </template> <template id="FieldTextHtmlPopupContent" name="Editor layout"> <t t-set="head"> <link rel="stylesheet" href="/mass_mailing/static/src/css/mass_mailing_popup.css" type="text/css"/> - </t> + </t> <t t-call="web_editor.layout"> <div class="modal-dialog modal-md show" id="o_newsletter_popup"> <div class="modal-content o_popup_modal_content"> <div class="o_popup_modal_body text-center"> <div class="o_popup_content_dev"> - <div id="editable_area" class="o_editable" t-att-data-oe-model="model" t-att-data-oe-field="field" t-att-data-oe-id="res_id" data-oe-type="html"> + <div id="editable_area" class="o_editable o_mail_area" t-att-data-oe-model="model" t-att-data-oe-field="field" t-att-data-oe-id="res_id" data-oe-type="html"> <!-- Can be removed once default values are ok for the editor --> - <t t-raw="content"> - </t> + <t t-raw="content"/> </div> </div> </div> diff --git a/addons/mass_mailing/views/lemon_template.xml b/addons/mass_mailing/views/lemon_template.xml deleted file mode 100644 index a1dfea12ee49..000000000000 --- a/addons/mass_mailing/views/lemon_template.xml +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <!-- Lemon Template --> - <template name="Lemon Template" id="lemon_email_template"> - <div class="o_mail_block_lemon_template"> - <div class="o_layout lemon_template" style="width:100%;"> - <!-- Template Header --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles bg-epsilon lemon_template_header"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td class="horizontal-padding vertical-padding"> - <p class="display-1 text-center" style="margin:0;color:#000;">The offer of the month!</p> - <p class="display-3 no-margin text-center" style="color:#fff;">Apps That Help You Grow Your Business!</p> - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Logo Bar --> - <table style="margin:50px auto 0;" align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tr> - <td width="80%" class="horizontal-padding vertical-padding"> - &nbsp; - <a t-att-href="(company_id.website) or '#'" style="text-decoration:none;float:none;"> - <img border="0" src="http://www.odoocdn.com/openerp_website/static/src/img/2016/logos/odoo_logo_small.png" style="height:auto;max-width:400px;width:100px;margin-left:-6px;" alt="Your Logo" /> - </a> - &nbsp; - </td> - <td width="20%"> - <table t-if="website" border="0" cellpadding="0" cellspacing="0" align="right" style="border-collapse:separate; margin-right:20px;"> - <tr> - <t t-if="website.social_facebook"> - <td align="right"> - <a t-att-href="website.social_facebook"> - <span class="odoo fa fa-facebook fa-2x"></span> - </a> - </td> - </t> - <t t-if="website.social_googleplus"> - <td align="right" style="padding-left:5px"> - <a t-att-href="website.social_googleplus"> - <span class="odoo fa fa-google-plus fa-2x"></span> - </a> - </td> - </t> - <t t-if="website.social_linkedin"> - <td align="right" style="padding-left:5px"> - <a t-att-href="website.social_linkedin"> - <span class="odoo fa fa-linkedin fa-2x"></span> - </a> - </td> - </t> - <t t-if="website.social_twitter"> - <td align="right" style="padding-left:5px"> - <a t-att-href="website.social_twitter"> - <span class="odoo fa fa-twitter fa-2x"></span> - </a> - </td> - </t> - </tr> - </table> - </td> - </tr> - </table> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Template Body --> - <table style="margin:0 auto;" align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles lemon_template_container"> - <tbody> - <tr> - <td> - <div class="snippet_row" style="width:600px;"> - <div class="snippetbanner"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="100%" valign="top"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/content/hr_holidays_01.jpg" style="height:auto;max-width:600px;width:600px;" alt="Your Logo" /> - </td> - </tr> - </tbody> - </table> - </div> - </div> - <div class="oe_structure"></div> - </td> - </tr> - </tbody> - </table> - </div> - </div> - </template> - </data> -</odoo> \ No newline at end of file diff --git a/addons/mass_mailing/views/mass_mailing_template.xml b/addons/mass_mailing/views/mass_mailing_template.xml index 0645abcd18cf..5e7037c805b6 100644 --- a/addons/mass_mailing/views/mass_mailing_template.xml +++ b/addons/mass_mailing/views/mass_mailing_template.xml @@ -7,4 +7,13 @@ <script type="text/javascript" src="/mass_mailing/static/src/js/mass_mailing.js"></script> </xpath> </template> + + <template id="assets_editor" inherit_id="web_editor.assets_editor"> + <xpath expr="//link[last()]" position="after"> + <link type="text/less" rel="stylesheet" href="/mass_mailing/static/src/less/mass_mailing.ui.less"/> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/mass_mailing/static/src/js/mass_mailing_editor.js"></script> + </xpath> + </template> </odoo> diff --git a/addons/mass_mailing/views/odoo_template.xml b/addons/mass_mailing/views/odoo_template.xml deleted file mode 100644 index 80a5f90971b5..000000000000 --- a/addons/mass_mailing/views/odoo_template.xml +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <!-- Odoo Template --> - <template name="Odoo Template" id="odoo_email_template"> - <div class="o_mail_block_odoo_template"> - <table class="o_layout odoo_template table-styles" align="center" width="100%" cellspacing="0" cellpadding="0"> - <tbody> - <tr> - <td> - <!-- Logo --> - <table style="margin:0 auto 20px;" align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="100%" valign="top" class="vertical-padding"> - &nbsp; - <a t-att-href="(company_id.website) or '#'"> - <img border="0" src="http://www.odoocdn.com/openerp_website/static/src/img/2016/logos/odoo_logo_small.png" style="height:auto;max-width:600px;width:100px;margin-left:-6px;" alt="Your Logo" /> - </a> - &nbsp; - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Banner & Template Body --> - <table style="margin:20px auto;" align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles odoo_template_container"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <div class="snippetbanner"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <td width="100%" valign="top"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/2016/home/laptop_sale_desktop.jpg" style="height:auto;max-width:600px;width:600px;" alt="Your Logo" /> - </td> - </tr> - </tbody> - </table> - </div> - </div> - <div class="oe_structure"></div> - </td> - </tr> - </tbody> - </table> - <!-- Footer --> - <table style="margin:20px auto 0;" align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" class="table-styles" width="600"> - <tbody> - <tr> - <td class="horizontal-padding text-center" style="padding-top:10px;"> - &nbsp; - <a href="https://apps.odoo.com/unsubscribe_from_list" class="link-color text-center">Unsubscribe</a> - <t t-if="website"> | <a href="/page/contactus" class="link-color text-center">Contact</a> </t> - &nbsp; - </td> - </tr> - <tr> - <td class="horizontal-padding vertical-padding"> - <p style="margin:0;font-size:12px;text-align:center;">© 2014 All Rights Reserved</p> - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - <!-- Template Body --> - </table> - </div> - </template> - </data> -</odoo> \ No newline at end of file diff --git a/addons/mass_mailing/views/snippets_themes.xml b/addons/mass_mailing/views/snippets_themes.xml index e66151e89256..44c477a92bb5 100644 --- a/addons/mass_mailing/views/snippets_themes.xml +++ b/addons/mass_mailing/views/snippets_themes.xml @@ -1,39 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> +<!-- Snippets & Themes Menu --> <template id="email_designer_snippets" inherit_id="web_editor.snippets" primary="True"> <xpath expr="//div[@id='o_scroll']" position="replace"> <div id="o_scroll"> - <div id="email_designer_layout" class="o_panel"> - <!-- <div class="o_panel_header o_snippet_section"> - <span class="fa-stack"> - <i class="fa fa-paint-brush fa-stack-1x"></i> - </span> Choose Template - </div> --> - - <!-- Templates --> - + <div id="email_designer_themes"> + <div data-class="o_default_theme" data-img="/mass_mailing/static/src/img/theme_imgs/default_template_thumb.png"/> + <div data-class="o_airmail_theme" data-img="/mass_mailing/static/src/img/theme_imgs/airmail_template_thumb.png"/> + <div data-class="o_tech_theme" data-img="/mass_mailing/static/src/img/theme_imgs/tech_template_thumb.png"/> + <div data-class="o_lemon_theme" data-img="/mass_mailing/static/src/img/theme_imgs/lemon_template_thumb.png"/> + </div> <div id="email_designer_default_headers" class="o_panel"> <div class="o_panel_header"> <i class="fa fa-angle-double-up"/> Headers </div> <div class="o_panel_body"> - <!-- Default Template --> - <!-- <div name="Default" class="o_mail_block_default_template"> - <div class="o_layout"></div> - </div> --> - - <!-- Odoo Template --> - <!-- <t t-call="mass_mailing.odoo_email_template"></t> --> - - <!-- Lemon Template --> - <!-- <t t-call="mass_mailing.lemon_email_template"></t> --> - - <!-- Tech Template --> - <!-- <t t-call="mass_mailing.tech_email_template"></t> --> - - <!-- Airmail Template --> - <!-- <t t-call="mass_mailing.airmail_email_template"></t> --> - <t t-snippet="mass_mailing.s_mail_block_header_social" t-thumbnail="/mass_mailing/static/src/img/blocks/block_header_social.png"/> <t t-snippet="mass_mailing.s_mail_block_header_text_social" t-thumbnail="/mass_mailing/static/src/img/blocks/block_header_text_social.png"/> <t t-snippet="mass_mailing.s_mail_block_banner" t-thumbnail="/mass_mailing/static/src/img/blocks/block_banner.png"/> diff --git a/addons/mass_mailing/views/snippets_themes_options.xml b/addons/mass_mailing/views/snippets_themes_options.xml index 2b9c434a782c..d64cedab1404 100644 --- a/addons/mass_mailing/views/snippets_themes_options.xml +++ b/addons/mass_mailing/views/snippets_themes_options.xml @@ -2,7 +2,6 @@ <odoo> <template id="snippet_options"> - <t t-raw="0"/> <div data-js='width-x' @@ -34,7 +33,7 @@ data-selector="div.snippet_row" data-drop-in=".oe_structure, [data-oe-type=html]:not(:has(.o_layout))"> </div> - + <!-- <div data-js='background' data-selector="div.snippet_row"> <li data-choose_image="choose_image" data-background=""><a>Choose a background image</a></li> @@ -123,15 +122,6 @@ </ul> </li> </div> - - <div class="odoo o_theme_palette odoo"> - <div class="odoo note-palette-title mt8"> Mail Theme Colors</div> - <div class="odoomail-colorpicker note-color-row"> - <t t-set="colors" t-value="['#E56054', '#4D6BBB', '#1F1F1F', '#464646', '#808080', '#E5E5E5', '#f9f8f8', '#41C534']"/> - <t t-foreach="colors" t-as="c"><button type="button" class="odoonote-color-btn" t-attf-style="background-color:#{c};" t-attf-data-value="#{c}" t-attf-title="#{c}" data-toggle="button" tabindex="-1"></button></t> - </div> - </div> - </template> </odoo> diff --git a/addons/mass_mailing/views/tech_template.xml b/addons/mass_mailing/views/tech_template.xml deleted file mode 100644 index 6ae8393d85af..000000000000 --- a/addons/mass_mailing/views/tech_template.xml +++ /dev/null @@ -1,143 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<odoo> - <data> - <!-- Tech Template --> - <template name="Tech Template" id="tech_email_template"> - <div class="o_mail_block_tech_template"> - <table class="o_layout tech_template" style="width:100%;"> - <tbody> - <tr> - <td> - <!-- Template Header --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles tech_template_header"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" width="600" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td class="horizontal-padding vertical-padding text-center"> - <a t-att-href="(company_id.website) or '#'"> - <img border="0" src="http://www.odoocdn.com/openerp_website/static/src/img/2016/logos/odoo_logo_small.png" style="margin:0 auto;height:auto;max-width:600px;width:100px;" alt="Your Logo" /> - </a> - </td> - </tr> - </tbody> - </table> - </div> - <div class="snippet_row" style="width:600px;margin:0 auto;"> - <div class="snippetbanner" style="padding:20px 0;"> - <table align="center" cellspacing="0" cellpadding="0" border="0" class="table-styles" width="600"> - <tbody> - <tr> - <p class="display-1 text-center">The Future of Emails</p> - <td width="100%" valign="top"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/content/website_blog_01.png" style="height:auto;max-width:600px;width:600px;" alt="Your Logo" /> - </td> - </tr> - </tbody> - </table> - </div> - </div> - </td> - </tr> - </tbody> - </table> - <!-- Template Body --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles tech_template_container"> - <tbody> - <tr> - <td> - <div class="snippet_row vertical-padding"> - <div class="snippet-general"> - <table align="center" cellspacing="0" cellpadding="0" class="table-styles" width="600"> - <tbody> - <tr> - <td style="vertical-align:top;width:270px;padding:20px 10px 20px 20px;" class="odoo col_mv"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/2016/project/case_study_inspiral.jpg" style="height:auto;max-width:270px;width:270px;" alt="Your Logo" /> - <p class="display-2 text-center" style="margin-top:20px;">Step 1</p> - <p style="margin:0;" class="text-center"> - We need you to update your account information. If there is ever a problem with your account, this information will make it easier for you to log back in. - </p> - <div class="text-center" style="margin-top:15px;"> - <a href="#" class="link-color">Read More...</a> - </div> - </td> - - <td style="vertical-align:top;width:270px;padding:20px 20px 20px 10px;" class="odoo col_mv"> - <img src="http://www.odoocdn.com/openerp_website/static/src/img/2016/project/case_study_universem.jpg" style="height:auto;max-width:270px;width:270px;" alt="Your Logo" /> - <p class="display-2 text-center" style="margin-top:20px;">Step 2</p> - <p style="margin:0;" class="text-center"> - We need you to update your account information. If there is ever a problem with your account, this information will make it easier for you to log back in. - </p> - <div class="text-center" style="margin-top:15px;"> - <a href="#" class="link-color">Read More...</a> - </div> - </td> - </tr> - </tbody> - </table> - </div> - </div> - <div class="oe_structure"></div> - </td> - </tr> - </tbody> - </table> - <!-- Template Foooter --> - <table align="center" width="100%" cellspacing="0" cellpadding="0" class="table-styles"> - <tbody> - <tr> - <td> - <div class="snippet_row"> - <table align="center" cellspacing="0" cellpadding="0" class="table-styles" width="600"> - <tbody> - <tr t-if="website"> - <td style="text-align:center"> - &nbsp; - <t t-if="website.social_facebook"> - <a t-att-href="website.social_facebook" class="link-color"> - <span class="odoo fa fa-facebook-square fa-2x"></span> - </a> - </t> - <t t-if="website.social_googleplus"> - <a t-att-href="website.social_googleplus" style="padding-left:5px;" class="link-color"> - <span class="odoo fa fa-google-plus-square fa-2x"></span> - </a> - </t> - <t t-if="website.social_linkedin"> - <a t-att-href="website.social_linkedin" style="padding-left:5px;" class="link-color"> - <span class="odoo fa fa-linkedin-square fa-2x"></span> - </a> - </t> - <t t-if="website.social_twitter"> - <a t-att-href="website.social_twitter" style="padding-left:5px;" class="link-color"> - <span class="odoo fa fa-twitter-square fa-2x"></span> - </a> - </t> - &nbsp; - </td> - </tr> - <tr> - <td style="font-size:12px;text-align:center;padding:10px"> - &nbsp; - <a href="/unsubscribe_from_list" class="link-color">Unsubscribe</a> | <a href="/page/contactus" class="link-color">Contact</a> - &nbsp; - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </div> - </template> - </data> -</odoo> \ No newline at end of file diff --git a/addons/web_editor/static/src/less/web_editor.ui.less b/addons/web_editor/static/src/less/web_editor.ui.less index c6513472fcbf..bbf8b6ce7649 100644 --- a/addons/web_editor/static/src/less/web_editor.ui.less +++ b/addons/web_editor/static/src/less/web_editor.ui.less @@ -125,10 +125,6 @@ html[lang] > body.editor_enable{ margin-right: 5px; } } - .o_snippet_section { - background-color: @o-we-color-darker; - text-transform: uppercase; - } .o_panel_body { &:after { content: " "; @@ -1063,14 +1059,13 @@ body.editor_enable { &.editor_enable #wrapwrap { height: 100%; - padding-top: @odoo-navbar-height; > main { height: 100%; #editable_area { position: relative; overflow: hidden; min-height: 100%; - margin: 0 auto 50px auto; + margin: 0 auto; background-color: white; } diff --git a/addons/website_mail/static/src/img/thumbnail/odoo.png b/addons/website_mail/static/src/img/thumbnail/odoo.png deleted file mode 100644 index 95a72e0f2f168abd2db00a167f51025674e403c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35742 zcmeFZcT`i`_V^n}AwYmo1f+&0C@u6NC80?Z0jVModN0zX2_zInq*xGa5K!q|1Vmcs zDpHgVQbdY$>75tPIrrXkx%cb)zW07(ynoCXK-QXT&b8NP%{BKbdlRd#cY%t6g#rKo zP-$tZ83F(#AmaB?D1`X?A>H@^@ejGTrnxTwKuQ1ehXnBWDKh{dKkZ^<=4W<MSKiLc zL&V13%ho|8(8HTp8URpG4)nIMb93-R*g815cq($QyshU(xY#Rln@U|oUi4OVaCXrQ z_HnoztY>5w>}Drt&#kOPp%5rfG~nUjXM+gzaQF0;4^-s-!>&B>`_F7qZp0r&{M;0| z(LXChm|fIIsCxN0Af!a3gzb=Gk_Z_&5iuz-Nm(%=gg8=6LKG<>DkdQ;CN7VZlNXah z{Pp2hq9A@#@UeH4H&oO3t2$yzk=xnN&s$zp^!oMdBG)BEynLKQ#pLAVM3Lg6;^M-@ z62iVgo_;og!k)f7e;WCR9W@7EJ0BNsKNl}g#8106wqE{zirm~kEBfc>uXcHO|Fa@b z-@n)qDT)T#c#DdOAVvS1lD*wOb-ew3-2b>Vdpl7FcLxs#Pd{Ixp4flY^LF;~^YV4} z`X8$Nr}%%YnAj&5FaERc|9ZV19{;s!UqAH#B7(n={#Q+3qabewQ9}n`FMl692lW7A zQ+WPc>-}6D|J6DFX6dKof4p{wK$rhP?Wg2VwLe_p&mK}BwpCu$$HB(W%g4ye%U$VD zFVp`ALWHU+Lg1o}or~vBq-PaGPnQ2zXaCETgPM(>gA&mhrG=4FL{BslL&{4a<;9VL zNTOFF|7PURk|%6j^s;wx4Emc5X<>26pEe|k+LC{_@wbvEZ4d{Ky^WvE|H{hW%l^%d zy`8+Hmyd^ypOTA*jgy0@x2KbW=)W@mR`Q=NC9mq`?&U+gEC(eC1=0VO{a>}zyzKmc z`ZU_p&cT=16TW}zA!0xMF=|z8oc=xc9|Ct5C1R(D*t^)vt4XViOQBWOWX09R)g{El zWF^E^R3s$PNLdLn4M`al1<{}5l&J8ptN6<e{>uM{Aq^QB4KXnpNu-Q8Qd;(>AvG}- z4LPKSjHHH~l$6YWH}q%jzhCIzDg3ILKfUMTMR_exUq2fn1ueBd8s$Q4l(?fKQrcd| zL0ASUAuBBDNc?7FgOm`Kv=NuIlX4Vyl#-VE!=?UR{a;P|%k)2L|I74GUN$l^6817; z4#Ey{c8<c5wzl@dwi1#K!nR_vHj+pi2S*!8>3^91oBDs4zU1RV4Ei?ie=GA3lK)St z_%CMuqbg08pAHiA?>+d3gIspF_V2m>a*#j5v$u_pufxyaqsaY_==0Bb{-+oG<qLlV zF?k!ipMhP;?q_UpuvZZMx7>eS);~2B{w(0~pB?zWL+~H!|8pJJogF-X6<+={^+&1y z*@&-~qu+HK9|yD(ap3*mhP^*c{=3de+y8w~{2%EBUz>pcZ+-B;8$|!_`ryBY=l`Gj z;3w@rtG08t@pN*qR}%e)>;5C-f7fk)cILm2segom{~Ut~Kkv!%#PLh?C7VCSjhKSy zf8_nE=0D4u{Tzqx{(qDw23q1rRP5*Pzf}J&KB;Q{Yt_GtPpbY))7aC+Pf7f*+D>Hu zP3z~x;m;e}W#SyyK}lLlN`e@1PiCLg(02)Ra5qzPA>P=0e?}5<X=20vP&z63ubSq6 z(-i+V&A&<h()_ct{x%=|BM|<XOPuWzC)%R_oN50@jQnQ=`#<^RUrqWyY4wDy-<6yI z^6TVpT)*aXLi!um2_U~t{>JrdJ}0EVah(A2>*Q}-zvgp7`Wx2?Aiqxj#`SAHC#1h| zodELd<ZoQR=5s>&8`lXSzfS(f^=m#Sq`z^U0P^ePZ(P6Tb3*zX*9joMPX5OAYd$BW zzj2)a^6TVpT)*aXLi!um2_U~t{>JrdJ}0EVah(A2>*Q}-zvgp7`Wx2?Aiqxj#`SAH zC#1h|odELd<ZoQR=5s>&8`lXSzfS(f^=m#Sq`z^U0P^ePZ(P6Tb3*zX*9joMPX5OA zYd$BWzj2)a^6TVpT)*aXLi!um2_U~t{>JrdJ}0EVah(A2>*Q}-zvgp7`Wx2?Aiqxj z5*Nk4-d%O@B)+hEo%m*|SLp-d+phqGou=VM03etT0EmbL0Ctawf4>6&{zw2|9z%Q~ zHWdJ1^15f;q5%NtOK7Q~jRJ=kpIuL7Yw6p(wE6AP7h^qv4BgJ5Z_ZJ-&O~a`)$rP} zAuE*c5L$<3UdP9iw_<P?A$AR^Lib=$EN>=?jzS;;Wz)3yqG%;?Xy{qDv44Jb_4Vn2 zb%oa9M`>eeL%HKmeU}T*1$0hkUjv2O86OwEy?hYZq}Z`=%#yI7K)GIBf51#{^=kXR z+Q1cG(dRWB^NLjbS&IDMSWOihbGs(X?W*>+eI_qE)ISOt?=l`}Wj$`;OMF+9OmD3N zx07;4491XrX3M-2O-`x<$9%d@cyHajf|OB?+}4zi0nSchu{zdww>Ld)^`Q(<LSsYG zIVdA23j6VZ6afu%ruO+f>r*>U3t=wEi@pe@z>*M@VP=OrXPQtJr;r-qRCI9U7xa6h zVs)j}eVj3p_Tbah8;;N_M&@SVZQo;8ECf7c9>Ph11rS(Z<!hv8_R1=<D4Y=`R3uq4 zJC6z@tCCd(#^a<XFko1<D|+{1ap$Q$7KQ>K8UobV6ESXz@TA=^LSqo!H~=l+&e4@f zQ_xjP1_o671YDBYuNOD0lB$ZHkS2{*0id9qkN_iWIJ~_#LKIq3hurW-qa&j@*o^WB zFxXYN?OcAecLp3pS3rt2FC!0IC+&&I$Ro8zAo58xKoQ52#nuHI^sIErpaFfh;XDF} zctr%qB8(@eyDEVN-WZJ)5XI+{ewPy4TzQC%cqBmLm=G}*fBFqAvWk>?USW)exhkh> zQn6XG7Z*^}-G;}2p&3mm9?_C)iUTaF&%3!CqAan?v&+67b`eN*cGO5JhX9Ydf}f#y zLctIUwD}x~)jXB6gyn#y@|xmRBVd3miLFD^(^b+)XHN6eY_jh@-D*Ho()PMfDzj76 zMKtiHtJNb{?=$HO<5JG)<6;4%k618aZm>_-@sNjTPKNnJQ5k(ID-2=?%KjQr4p(Z@ z7}sA-1lb`rlwb$bVBG<Z)QE^2$P2jshArqjTNR(a_cZx5r~PYJBpL9c@L>BXX(|C` zl8mm#2n=mbUW6x2GXmrIBePd!mve6GZo@@@4U9~l`Hn{vN_eLX{shVZ!{P_rx>=F% zd{Td-c2Y12n6$%NbGyy~uZk0#Y&a`H4<j_3?fNQ7*>heWnsouq3cW!E$zntYQ$0i@ zjDUBBOEJ=`=77+NQ5eH06C1BDya0<XVAK_E&Vqu45$?B<Nfw~=yao_R*W<Jw0Ixh3 zsY5GUNdookEm{CW++49C>ED%UDeMt*Gm!a!ZwL(Di#D}wj)DTD>(-vn5FP%Zp#T(n z`=OmD1=%Cl5-3EZAId;E*_Y`-NwFdA6cR*A4xK^f95M(#2`y-9C{|ysAk)pBX!q*{ zeAWll)(6uKghu(Q3<|K$JoP+N<vj+h^yG3!V+HGXr=KxP<53`7+G4T=_${*g17))b zE{j6#rQRd%?yCyX(1^OLf!|sq5F!W_BUp`R$>l!M78QNS3uA#f6AoBmBpr0}8)T9| z99x=;SUD&&fg%-vx-8`!2w4WQyinJxYGmCfjU3j{?^W5+hbmu6A|+^eVyGbB%DCAf zM@A%6pkP-N8ENLx?NvqKb~Mehs#IVkdKjr@NXeKH(OPETt-or=&VZWZLFx+twfWGL z5JTe$dQb<ZR(*0|De@t9p*7|np(_#q+^*6K*Iy;RBqa!@WiZl&lM;kvx+Adz*TQV@ z=}g^5B=@P^aadb>U<OpVFH#Y97iGzKk+J`*ZWKytZpVWlBaIezo~C$+N2J5~VsIZ7 z2=q|ye9S{u5Da*xHA>40bKz7D8ifNauttub<E@&xLPmkyF`?}D0T-9qBlTC)`ET7t z0C2+js6qh{4Uj$#VFIp3=;xA9fZPk8zHmBSQ2gKp37Jju7&GkNy^K?oHsloj=V<o& zGf1HFCIl1DhMKxcU=*5Xm7%Q{=Iuxh+TubzlKQ@$KhA{Ioy1T>mQNe`v_xdH*>O^E zeIp0;8394oCN}pYuvqogT#60!gx%x=C9%qP7%m16<c=xj3}a@o3L(Ki2Z*!G$7I)N z(!dWJBW!7LBv=;GGP;rjxhx-oA0tn>j%DV{(Ip(ZNo6nsccFVwcH+>K!`<ShCt~mw zg_4R|E5kgOCbPaVIuL<T14LEEJ~6nXDG~xEfzZFk&{O0|JDp;1kGaFJ(9kJ&AnECN z>fjrs76d#~dbTw$VpYT?A|mLR<Uzp8mC>qm0s5I}GT3}aL>6Pz+OusE0kgB}p9)l& z;IKkc7s&I%(FO>tm*hDG#K^coL0HLVlED$q%rbp5cwd~^oGkgw1VbN!G&11|G8#94 zuOtEQ2jK>I1?U$V9NEHHnDT-9Z?K%qy~@jEkg>INSK18}>M=u02Lk`J7IRrmz(jvK z%UeGO^2SzQmn+K*`c5nikMQ!PhElZlXM`$0xwi9N0h!;BYU0@~h%CvZ@RLdS5en3T z!}V}$r^NS+NUu)+@SjAHMTXijTz=hsULQYAPB15<76IZs@-g}b@Q#b!SP~v|JT>s~ zxo#jyp+_tvLaCGk=d;bNGJ^*~ikt<?0MUCTcOl@-D1nh6T!nv5NC_GAg}ScL6)+zx z>T$-*wS6T13dqYC@$AgSQN7Of>tbIBUBN)`C$AgtUu`zviy6N$HgYid1vB*Omw2!@ zpUZ%OJ|YYz%ai#u#<^@U(pYL>^*PLo5|gava`DKB?uqa|;Cq=Ag#+%T$c9tCbfGHf zHl;y|)5b3~KgaMDZ&yK}1W@eE8*Ei3oDC)rL~`*|HyUpU?4V!_HWl>d=_6ivq=+&H zf<e|)GdMj+1x3R1L~PSf58ldk1#En)y<8luj6@oMt+pbD_X>&4jyEsR0)39RnDa&~ zc{iy0q~$T<qH$FgclSH!56sDKYtKP&$p`}jW9M>;@==u1#KJz5nH=(UHOZ0oAcvF| zdVr3I7JrR(!>LeGL+DI*#RkgYI1-^KT%Zbru)WbYa^3}u48~p}E3Gq<oKDyxS_uX$ zJ-13jssTcIZ3+1h|7!;ZqwfdYA`#fIT+k1(J_SDj$I6><-GYlDnf3cU5c#A-h%-4P zGubY3NxNMjlzyXz2skqLN;iiBBOb2So@2*;0J-Dtcs&OGR9@c#?C*&;wd(x{3vFmH z&6iQ9LOvVg0V#eaULsELL1Y<;`DNk3D4fvcq>HyQWA1!YKs&Gt<wc1g=5iyE1*B4H z<usA45k1Y^IZGrwxg_&-T{oJ<y}8+(G58_q4N9)dq-Yf3ygjT*el9->f^g0Up82tf zH$7GE3slc)NIebf4Z;re`!QBL<&SLO2jIrDqw5^GvmcSYH(9dcll%^!x`)362Kyw< zb;-{ev1<~Ykgw#?<!s-_@^d35T$0Srj$p|UR4JI{L$278lQS%!2u!I*8VTdEWwmkS z!o@UZVc47X3rTQk^3LV-(l|Bx{BCCM7#g5<Y`<@Vg#S3V!=`_KTo%ENQ=PpJVF>H3 zr4ABBWo$`(R%yi)0Ba-fX3{mIpjzzR1vqn0xCrc99*PMxe`?Tt+=?T5As-^eoa4#` z6WDo2A8K|p!dOKH-e^cRMy1K<1B_qGgt@yi6DJ0!Q#+(sCD4IrvBucFmi<RhEl7as z!Z{(dRou=S9L~KyFUA$nqa_S!+N%&1(Hx*eK0cjw5QjbT^B#(D{6uALo-QCe{{k3X zp+W(PzM^k_3xS`Ixr8jGw#fxa`_B7u6v^ug-o*O=FEgip14|lD(132Zd8o4>{0InB zO2``(fIhN|{+l+Qkzz6@N&~TDOr{j6cHRV=#JUqr;vlL;Z`@$yCOWU$FfdaRtPU1u zQ^Vl%z}6wct|)?68or$RA*qJNxeN*@Iwul?Q@d-t%CWiz?>PhO)#=&?layZ6D*af) z3GQZYzT1I2g-lA}-KGQ^w$I(=CkD9nh@LFs;AnjF#TasI85=ww!NL1}DI&o*r&z$* zk<*BI&J09}fO~K<J-n!If3p>{>czDo4z}WtRU7|Ou7GxAmn79#IESW=7eNfJXqPkb z?!BV;O2WwoBTk3JeBnq=rH0V)GnvK{N(~KKg51u!hntk(X9{Q=c80A6UQGE=Z4O9f zB?ovpAH%^NLk)~Qm&C{?^#HX}kdyPA&7SqOb51l0Kf!Nb?!=BWA-9^erGW<<u<IA# zV&gHq%z?&~W*8(qmy`v1u-MN$y5aQxxdsNmc*7Y67Fn{xN8PF3Lb<R98}s=ACt-Tz z^tm_4u=zk@@MPrPizKl;wL?NeX}`K3395uaZeJ+@gKLv|dgVcQI>|jcql%xA&hWX` zIF{2NpAE1#LDSnq-oJyuHqhNq_8RsDB#<B&*!amSaS46pnG5K-Tu^)+D4vd&1S<WO zF4BaI7yyKr1s*yTbC%zc|0cD8MjBs8_nv6{#5XX11;#>=)z1}}j2W&KxJ;ggDxp0S z^PIY)K*i1z|L82-W+IuX-IzGdnG1UU5=<*=NtM%pf5{k%!ag`H!11|)y7mQ~Zj*Yz zGOd&MXQWuDKc-Ei-8a(P24xDq*Jhq-jw@d=dn7cM8;#7sd$Au-9UzTxb-{*!jLJT& z%cGu~#z~fyqRgpzr0j4Iy@YEYb0`k$n;DJ7;WXSz9{QIU#K27XpjhuQVg>LeTu^RL zntZn@V9$i$+$KPYL>#I`pwe^2ppyt|5k9DZ{yM1IA1`<dX^ac2GTZk(1vgq}l%xy( z9!$n%Po`9$(v5_hgQhR(nqG*yJ_SO~sSp<ACQ$?;?fZPUU=iNo+Cx$UV2ITPEiAmo zvZRpO9-XOIkFD3T{Ay<u`6!d(Krfg&AlbM`lfxzcofS}*jG|mi>C7SdMnn%zdk#FJ z4+I70i_Z5;t-3JX>BI7|PD;oiqp@_9b!bf8S)pxmaz&&-mXw<cK_d<0O7p@&Gg`ZZ zN#s+tNNrIaCG>`*E=-+$r<_8!?8$w!RYNEi5y(oABH;o8sVK(Ykn+Dqk~y&BjL01) zZJV#b<67adY7@w8NRnq?xXw#D?V`9)F0vGv%uZ6cdsM9AaYZ3D3z_1NU@c^lC-OoB zR!FdWbk3NJ^kLTd`OP!I+41s>DpcTQE)B_t=-IM(^T57_ihR0nK<gqpHh!F%0yc-9 zHYTnQl~XsPQhMtu6EjN$#={Y@&U)s(YAe2vBuFJiof#Qxy81f6aK{76A_XlfhX>&C zHteK^<a;;B%e}=;$MG=6Q@X1zbrq4p&$an~J8vL#>Ksb;@|$*7uc+9pWUx3M%Jp2& zbHdWafE(pZD{wm^8caeZtKaWD!@{WY>}+5`g*%4bnM!ADY_$CA1pigt*88{A?Y?=J zUf~M_7e?EXJloatLPR+-`OOL$eJL)c?#Q-xYih82F@nW%!n=iUdFo+EA=dg6w?CSf zXJA;6?~QRr{+f7v8C7l|X^-<AI3mwOb#p<4fs**Yu5v{JL!XaO(r@ll3(QBb@b0~) zaAk%EM8qt=;M;%Fa4*1lVq@0Zun1ws+H=ppn}#{p9B0P2L(XK^BYW?MY%YBn2cyb} zzW>K~6kIDLnNy~W($OZ<(tl#$+=di$3H<!2pz#=-=mJKIZ;*mX?n3jmBt1vevX*l@ z?YxKTlyw$0wBmid?OTkZZaJR19mP8h39vx{Nfv<5Za;;_ATm&u)JLQm^vM_w5tE}Q zS}!JLX~8wla=3PBO)SP~8JA|+eOBtWaRj?R;uS?1U6ymzXPXJBrm_`m0|+*+n5M1| ze`@)943G6+&8FMXNn#j*$G0Zk<_qoe@HR&6q!;NMJmcKRw1h{;-Y!y8^hXsJrJ6+_ z`!R2DFmx0~Ubm1y^Er23gQw{<NlU(bTzx!trLd!S&2FIH6^nZCAu9lDV%a^XYaiC& zV8G6N1uVh5aS@)>fCqy^`Uz>;`rCXt?y8$B217CLd!&X)25R(j-Y2RcKn9+RApr!v z07QPx0TZN_6m0HQUo4cd?V&23rl!Dhzbm5LD2#y=`;;^3L;ToB&2w+z+NsQV`4V8{ zMM{u1awkTm`y5w+_g(t;_fTgZsWit1TJgJZF~+lDL7?Xc_<<#yOKMIAwX_(syYw~5 zt@A(NFxK;=fbO~sD&MrH@iOUQOUiT<XU-8cs+>op%U?Wk?P`hqKpPwZ_YUi}2;d6! zM=YE1CNlzYgpyJo@A*>_Nt*nu98V70g*vKdbCm$#7V&fMsaw2_R0b<D%%PxtITa@O zURW5uf>OG%d9@GCjKtiT{I>EezSJU~iNklcPsXmL@#PI_iW`^t0>k&u<x?qPC!V<t zexxk`5^_cb1ZW`+Oq%g#Eb}N1-YpRr05frmAiK?!5+Rqcnwr8HOf5Qgtjqb1q3WSF zJe>Z6F)mmtW5PXhdla&=X6IXdy6l}E7KjxO=NddfDO~3gdJ8X*&oMnqfZXCabEol< zvVwJR$6|d~V?ju|ikS>8LzSdCRE00ffwf~+S`vUw<w@;uLjVY<+ZLTPMhyn$O!Wci z3+&Do;4^(xCZ0`giOuH9)u`YOK^o;mrsWX%Z}XAv$&SkX=nT4o5lEtI<m4zs6hTDE zI@x%*d9fXfQPeL_;uNT+zcB)KNfo$E9XyYhDO4FJ!^Qfq7SpkW(0n^b$nwzl7tV{o zr|`^?#XUwL$r(-^l95c41qTpx*>7>m7?2S*SvHIjIfao|`P%uVhYZPQDhS~T`czS^ zZsn(h`bj2*I85+!K_YRxSXYBn_bgXw&+HkHp({8x9T1YimKNs-LRTLQL)JziadM=y zMCYRwk_KSMGMF{+&N9k~kMq41l)dj&s?cAvz@VlGgIA(hch>ekNQfLx$jn_!O3=h0 z&n<wiPQ<@0lL0C%&(O4_jOesPm@tuECgZB)+xADKnv;!8a=#wNchb6V^OV1M>{fV7 z<0V?gtQ-V-dn%^x38#LeTJ0j@jyc5>Qn*?_x>z*h$K0@2i&7d7Gmv2Qk_&*y5rl>D zOGc+~4pPvo520o6Ka^%i1nz+et#*!+nM2xbGjh22SiMaYvPd#10=Xo_arNEZu?%NV zDiF}x`^Fu)IhiU>2sP`SBUK3E^QR~??gYcqD0jE>{oxhV)&*8^{^^ClDQK^VzIT!? ze^2-vYJ*b=dhzgaQadl9LBE5kyJtAT->t5p_4PvOk98_4j?#gM2If7g<wT-I{CLul zri>H(Vzd6a2T2|a4SQYvHecquN^O?*Vr~ovHdLT{Up&y{>+#YIhp{O^KLYo-lC>h` zP)-;4ho#FW<D}ev?9RWQbN1Ng@YWz?R`b3iA##Flwdj2}077j{nH4&{m<8nTLR&rL zI4%c_u{`loBmv%}(%?>pho!~slJ*xJz~Y!fZ*5zLunH<&)d1nFQUyp=KH$SrOPUyT z2W`Y-;zwW~fmdEk6(@bLJ9Jto3I4%vrm&(Kda%W9KO(OJ#?i-OI!vaJF4@9J*Y{>W zud`I`YUsyZQYGu%(@J3>v`T?X>;+fKRY*XtRhnJ2KO3)g-V;kca*1&38c&aSN&2kP zvt)~rJ(JL~K)JE-LysDnS&#A}uRaRK%`C-jwl6{?xI%4J8F*)U0ON&jREdEN63TEt zmp4EjBeUq&u*^IrH9hdHV&h9o;AXn$RHWPrGjYS>4E0DTC_u^YlJ1y;4zI-7sRa*< zf!o)ey4s#})x`McE4OuvHC^kxBuWi}=FUh~j9lk;e><+ntl*RLLn{2Ble^|ev%ApK zeWkNkd*9K{*Na`y<A}4Q9s^n|mc5=`y!5{ChAQh!tpd|4&Tx|SVske>GX_$wFW=Y^ z5dC0DAZaOY4k=EHIC&8epTVT4ZZ#-fV84ZJf|##Y=`e;yIW32g<}($SxH5?!J}KG0 zMrQl=FhGNsr8J=SO@iLReh*XW*Ta{xoBI+k#>1*n-rUpyvfieP*S;w^pY9zWmJ$ti z<8u76&CnlO^C`t+^*t?wn)A+Koe#2ND1_{LNQUo+it7{87n~+rE~Ke*nc}Ytxf-!V zp%BT^sw65a$!x|bX6azrtY_<|?u<LyA_%5p)(vqqN^vR2M>RBvjnT@M<&lYo&(s%) z-hhqvUs@PRT23j2L}l2;Om)9XXwErn2YfT8QWrstTNK5LM`f?sYzCU@q7E;~Hm9uJ z`(hGW4x<_O6IC*=Q9vTv1*!IGq1p)j$M<l{=+(<Mg8{|t-Wx&uh-59Yv|IJt^CN*9 zt^0SoX6`IChVirG6cdMOZcJ)`8>K^5B2+u&4IdK*t84e)hbkOp-_)P$U>%83laJ+b zWQ!}@9#&di_~>x{M>o|rX6%FS4O5l_QnciPLElqeP-9kaWCI}7W%wvHct$LPI&+#+ zs0BDM7Q59iEsWs3N6x0S&g}kXHegOrh5{atUO_`GJ6)n*yf9VCG>LUvQK^&2ri${@ zq1QX;Kg}%VqU${HL9R_zW-M|bJ&j!)ek&QG{$0!uk-CA%(M|~2CWTeM{Mz_(XQazh zy>7um7YyR3BbbUPo}#}#OnT#c7O9F?1D=Iq`*@G~n=iO~k5=}R@ad-qORq|Yq6}(% zKGIx0mZ>>fbT=H#$y0J~M0GoBe@dMe0Fm1LBzEonK-Xd)VdH3FWdb{XaH=4K22TsU znHI!Lbaa}H*H2*3k;PX$S<jA>t!nG8TczEsKc2KQOn}E~c&}A<HCB1>Zw+r&^D$K( zeS?I`uG~;W_$dpKsdU*K)T46Pl>K_WudaSB=DC}hk{~;4_QqN6;f+<Xej$tKEh>-c z7xmWkG4ZFd2J~&1<{g7ut(jLiBW9P6m>iYGbts|=w}z=NSo__xx@9h4+d`&Oy78=K z$8Xow-eP33n(dtt9WaKbF;!TmZDvGQEl-Xe3Xe%Ro$%fC8UNDR)!;-^;XTj?<sIg9 zVT<^Lerlx2!&Oxcnx^*H=VGA;noGCe-wzLB@IBhRO$WXCGz=7=Z0l9%d%e8EZfIYp z#C_5*v~*8`!3V51B?e=bhx72?X`Orb<oR(D$(31m%Sze-%cBoIp9jOSC~Gppi?i=+ zs2#0t(6)N0?=yN^GErKE(HATJ5dZ15We=yhcy8M49|p8`k}c`!z0`^3_B=e=-0>T7 zm8^3^eQsdv*m>8YS!v&nNZlS~tJ&RfGuwZc{mD*(IFgs@&f9GBY-!}3^`L_4@!~!g zD=<B|$fkZ^B4k5|^O`JlvTDj}N!Ltd7Y}Bx7;?I>=si*NEut(*aH8vYg=QyoI=hk0 zX0e~%d+(IQyW;(I<Mhe#<52RI!w?c;)TeMe{9!~#U-9hL7wUbwGw$afg&u)ljW=4> z?@5%(#gay~E{uS%2v-Z~6~ocph%eU;)U)p$3AjBhY<ym+aO>rYXwTy&BxVr77SJlG zI~FAPX~leP>%z{+C9kDDcwbuhe1~1>A<5gM&R4EK_ygA}!u_tV7<e7tgf$SH^qQL4 zv&~2v6UdfgnmXlfZyfY-7B_zm57G^pp26}!rY62$77Gg*M(odh+`hIV>a`70;iV%G z=Q!{tnejV*MMH_T5#}@s@tp}m*Ys3(>(4J%Qc^2VIlp+~;$6SlCNpvPW<{mgqLc;t zv3V#3P0Cdg1UnjeXcsFha=1CoEE`&~mRP#_ar;Mu|Mg^xAS!+-_Q18toliac_m6h2 zA0J2yrB#;92>tXMIpsG{JvHIG%7KTL3IR>P_Ukhp<;r%lI~%!!(;q_iNL9F#8}6iA ztIQ|vOl)5Nv2&4zd!WZ9@EwfoV)|`M>gSg0*5N*s#5<S)5MD9j#LpH)Aa|8A6`H)u zy3%yOG}}+5vRBY%^Zdd@xmS8Twy8IraEVd0ZKZzQt?K1HgZ(mN1ip^RhMojh;1Sez z7|;@Ht!Vj7uf7smdHn5?z|0!eK*sqGKk%2S+pMC}u!-a5QT0bV4<El`3+OZ${66s| zxyzDxr&aJ?dM0p6r%ts{wexA#DXV^<%}rncA;l?AP)27a{MLS$KmX{xV>hLpJ3N~D zW*hw~qw8@at`QSz%$-M*>dZ=>62=YKn??26tdJ}eKs5h}Z(TUaS&OQrY?;YgIZD^g zHEV<!Y2zEy@KaNjX*n=I&z<FC+bJg2!iynFyJZq$#9RAxy39aJ`tdktiQ{)y<O3(c zwC#mrp3lWvdo}Ut#cdv@2ej<0BZV(UJFa=JUGHohENpWFV#Q*JgZt*kGYQn&k54yg zrKHDxJk>{1`R(h&6|0+FCI#P*@QFjVzPj~m3Y!ZDZ9)n+2Bu;@<K3_g1Tn|=vK>2w z==bowS~;(&iuAD^Ys4U=F^N{y`}=X2=_CE|@Gq9B+h19`zl54VqQWBgCTr5I^I$Aa z%Hot=Uk-VhBVy0%5y(@XWgOs@4o2!H4+q9duk5iP-Qk@_@6>PcPhCMVE4T_c9&Fft zZxumX`X1W=uWcoY8bablM~@|~f>(!@Y4$RlbeoE-$8`3dz7|w&x;VZoe0vusg#a{g zW$U&awXtVH)z)|V_y#bC!~Vx$+(pD<a5u-!dvLbq_(5`<=|t<wA*5*G3YZjFGEROI zlRia#kIY?1iI85r!^1o)JJBm@m*}$Jt~hh^gLhk>j7$L)W~$;?>!xku^Q}J8#?G5d zSk=zdGm2rvg-+G_{1e({kK@bKm+PDa8AV!_Ouv|ol@4A*uJbe5&81F$npN1i`L=YT zMW%Kw%o?TXXt*<cY?bhkWUXd;dHe|MRfn9dN0pFAO^GUi-?9m8x6+IUijD=&jDK1{ zf>r7Xhu4mZ>$uVv(mzbacpX7Jtlb;ljmuF^RXpLX9c%Lpg;QFkvbImSp6=z82)`C< z$Y%tc%!$)$HVJt*lE-;Cbr`t+vXb=83`rBjrnRg7T=FDwE;G6s@77aMN_7|mYuK%? zVdx3e4Lpc>z2JQ)6CSTpgkgsQya&I3E?MbW6TNMk9(tN)EO0v<i+T0ln~*5lGI(|> z$}3nYrER6|$k*NMtq7b*KX?2Y_Q!2>*lgla)bxrlA*lXH9ug1d?|I`+Efc;V<7_d0 z8}G><>L!0iK>KbVN_L@b?UQBEb9x!eE!Og4FUrNomuhVxt?qJq!5u`55z~|@Hlr2v z*XFNx-Q_sHJv6X7cabKLnwAyCEEOcwSwG|U>GVsTF^ec=s~=A;mcQ@5un!lhKhlOV zpR=06^tGi=?0qOMyf?muE!i$5vpuG#Ne%;W?h=WtB=1)3Y>z*L+!j>6k}wkP&4a61 zlJ@sv3mi_-Lfzu0m)$nCzF+jIeC_$EszWjvQ1Hi)@M*;2jZqRGzQ8YE0-d%(7rh&b zWWSEuy=*(0YTaL*@%0rV%?L<pp%V)|tQ=QWem4xaE-;Tvw+xh`h2AKn$w&-1XBD(? z=>-+nN>>o;^`oy{!TG{&B1Q5+vxVMYE5D&9FIOtZ?7kXnFg;#n&%GM%wH11BxV;UL zuR60V3vLT{lP4!GIIbY4m{JgD&9&xg!$lj$i{J8hyN%f<dR*%;y<}L^miYBGzZD_v z!g3t&(p})n7U$Tl#BobDIQ;#w()N7Z%V)3HJ=m+}J3jECb`qD39*jh4He;KZ)qGE1 zWttfEsCp>qwSW54y{*wVUG*_!#q}ezYYRSzJ5OaHPRDa9-^slDZ(N#;=eKS#4L|m9 z8C#wCTs&!AsYEw7!6N4Z%d+<8Acr2_q;Br8zRJD1vhGxiZSx8i7<5ZhVEi2JU9^#! zy%Gp3K3aEJ4FAft^GVD{>e|S5aohX6fcbeeaUboiLpdkn>Bj5tgJCPr$Wc4WvMF3& z)!^5-y;DC+?R+?nLqZy8FM0Z~6vw<}V`Jm1jQZeJcjd}f$U?MS)$w+?hY|A?)M{95 za=OeDB+Kko-@6;Yodd;7w#%Q3&tj1)yE3a?Pa@f`+EuXKyj+~hrI=O59$L=@M6MI5 zo*|!OtU)p*e%Zm`2Wp01h{>vwlsYX3viYVR$ZRPdAr^zmYg`t`+&r7+`2>^Gs`by2 zP6$-<RgJ3W8mYV!CQM(Io6tL$|2}AAeJv!oq7bOOQxAx`MUU={MbP=fZ4A_^=Lh;I z2)S}`JQZXd#9hdTI^oBP-#hBmDH*@^bACYqaACKu>;`?MzU;j=?WCg|aa_GbTeCUJ zTJ?=)9G#~HD@mNGOWY5?;Z*!##e7>SdMG?STKD)&$H6Y&CoMyptLxvsR5V_*zTaj1 zXmcQYb!*+rc0ckuVT_+cpbH)rLi4c0`UME*Ovaz$`(Tv&w&!Vhi!CkRa=(IGYci8I zztU?j_ohClaHivH3tVd4(_Y7ck}<dF3t412fN!Xw)0~?T`W}2ovrZ|tc;46JB?0V3 z^@~^R&zD&~RF$k94yCMAOdMq*dnRvuI<WS92#LtSN130i@N3=WuEIxtyDJk9iKoK@ zN^P7`qU?exy~*OXk{nHM>JM0mtI*=AnT3LK!8p|xVCnX?HS|%}0%zmbN~Pupij}Pd zCr&QKt(W_0Eu;KLg=C-}nLzW3#%X~jf-r!%r5nEK0ZTe4RNl9z3JZECHOOnKo5#sp zstN1S1eIzsB+%z_if52amahoBH+VW#<aTt&IL@@eU#FdkQh*^&F(}G*(oFj$)-a%E z>AkY;^aVlh;ZqXG0KsefB^EwEQUs50NpTiaxO+c4iu4t8Eel2Wo-e8<PY<nv0g#7z z>qx`0#nhh#SB`1j9uC*fm`TPs^TyEEoo9b?@m{%}@5C7AF_<`!j{JBgzPU8z*%`%^ zvg;2gCf$x_u)s~+i?MrSg>S-}qk5)Y2JV$j-CQ4Q`>1>Xlzt?2YT+(C_JJ`<h%WN8 zgkijiWfmz3iix2H>pe#d(d%4mtuNkOs=e)Wyr=e2PUj`}T8qNk%gkc!rUsix@3AgX zbs^gO!7Z$H*M!SF*ol)Zo|2JXQLW<bzBa2y-|!pUaAp|01e=qkFW1vsRa9~#!&uh( z&H6d_52OI<^q@OFd0X|IK_p${>o1bs?#R;e+LAYCiXmIO!<!LL16xje^DccS&NQwK zY#&F3R?t5>x+uGJbC&x|?hL~^cyu#T*`_IbLC9lvrXN-nsrMxB;A-dIzC_^S*3Hs) z1=TR5>>VzaSZ<DZ;%{xTTb*^Viinav&yjPc?DOs`&4s21B<x?}C5%b<^dYKTG%3Cw z2)5u>$;Gg$P^q-E(}@i)o>erH-@a$v)*3Ln_H3cr)T=D${2FembaU*yW}^Ae*_Y|- z)`o!nrKsFlcK#cB`!Ui7-`B>uMuu(tEboXlbBpm#Y03Kgp4n17)OUZKSaaEDXe91O z;`kTqqd4)2oe$Y|gMqucZIx-kRHCDY<;htuToLwrGLug^tqYz``RsRjwvH5cwVf#y zjcj6Tw!7BMQ_2CxT$?>3ihw@3&x>-NAIBZ<?he2&z2~p*2=Sy&t2-2<;p<*s2_+su z)X^7ZKXZmL-b~<#IX!Sy$m1?J!f82_tyt-Z4uE*1H+kSzpK<l<_rlqkiCASt_frtN zN{+<)^&u5Lm+ys-9l&Q4k2SWte%{L8)K{tP%Fil@v0fVgk=idM*Ma6vLn*Lq*Ax-# zVkQSaTr$?P$_L#BkX^-8+HDbvK7YIa<n}K2@|&41;&RD}^eqaEv#^t=mh)u^kj0qF zp=2tiTD`2}`uhXEQ9f&Dilb_JeQ9yjk8pQ()m|vUS(2gw%hL`&SYDb#-atq`tzS@X z3tuwYl(g^svAVL{`n8hroFLWi&-0AV$1+7@4C+$`Pp`EEX^UEQFnND=s3+`o1z*Xg zNe_YrD0rJrV}f?7LspOKnar^0tZ@3Q;|T>9ytx6tjP=&Y<5~pC#ETDIMx6w29g*ez z=_RwW2_8D=y&t?^#YzhjTkT}`%I=HVcObvNp?DTF>OY-ceI@$?idiyPKyUBJ9FxEn zmalXLOBOctY6kSOu|biv<$XQ>BJy-w*pd;S-|WZ7kr%vza`qQr-izy0p^mn#^IBTk zDWn%I8eTMpfL08j>g|_Z_7%BMv;Qh{L)K;gtn3l%=VZ>t&Ml$k<34t?^&hT=FEjMd zWxl#1W~3Of5zTMAf8)BzQRj85N5oZsT}7PN;NVB^ipDnJw3Y$Q(Ttaw__3-rQd8>X zk7Td3tSBb^v^>Ryv}~5;^s)sL*)79OI{zisVehUk&-^PohMb_}5rRav&DWy&>F?tq zE=p;&hp`-Oiw}?eJ1X^BbA)?~cWX^&rruc`P3AW?kibSlC7uQjoz~88uw<&Vya6;3 z*?r-(Q$6ilJ*qA}9;=euEfWxa)KAW|K2Ks84;uM$J1m$skIbhzcH)j;SJUb>p5*X@ zg!rYv#Tc^E#ag}>jE;czQ)}&~d;p@N0|Cu<>`K^4AfE49h*M`^zmR2LiE>k^wc=@u z<u`?EY`dKbX;srJf!oPJ8c1g1(mFx*Sn!2E`20v&)$ZDOu%4k0H|<mZkKp%bTTns1 zLpO`x61P0fuB<!UyTzAuC*QO=fq!andqY(VNnCAJ&0eUq`I6VQ0AWHpKKUU#|A}66 z<#R}}P{XV1N(m}X1Oa`v+G$zcw-bT(R~|p8cbjBg`Fb=yX1srXbeM3(k8-YKR$nNY z#a&G&&pZd?{*VoeikPVXgeS!TV}6WWY$YFms<$_la+|MaZ!RuyDt2i4dvR2Pddgeo znq4HD->}h|Bd3?*wmiqeynF#u67T|ya3}q$P@$gD_)OR1I8%<`qW8f9@BM!;2go{` z66cE8Z|w2uZ>Fx*95o9zw(+l&ol4l3_uv|_&A64q5z6RA9Ht!(ntX;YsEjY@osLwz zG{_lw;d4Mj+VLW5;E!deV5LdVKD>iS!qMJY=GwlQ7ruq&WpuBW!zcumuj+Nu*b-~n zT}vCBYQLfNp*`ic`siMy^4HJP`7cp9AndLo$xvuT-nSuW6h0U(M2f!Z0?pho3)(VZ zdU{KEdyuhrgh_C~c5L0ZWUi2=r#hgPpUyT`RzsIL)?@1n?frl+_iA*!7pmi{rbCjo zvD;b2A?&rBTgu<{*ERzx9DXb>?gn1p3JtCH^KWX*@3@BaZbs;i+T7j>So|<%fqNSs zoL|N@FE}nsbw6Ota6vKbdcQ)bLOAVk-Jn1Rg@!I$tnl^__0;vJFu07Z=V2(%^4l5F z_6jG~MV0BB=;twCqgI~9IzO!_hRm{Y)*W&DoR|@3>pia@8}h)fK(^bW*t0SFhu2&2 zA7hfn6HPfDMbEB;m-R2aU89JM6Ja$Ff@2ZO=n@K$ONk~3*Qc%8x6A%O##C-SZ@ouB z-)r_;s1wJ}jjh*$N=qV}>ULr<HZdr1n?kidBbe0((4bgf!_N8f#-+L+`BM`QR-Q(G ztbByOarAR>UEODm_qZXb-9jfWe7YRAoJibgaq|lNL_Bu8e$}78KYTBGZSW!b(0e9P zM8Al9XqCgs*X-@V<<L?e;WF0Yx9INh9Tbd3kwG|8>iXN6hUfKfX>`WTzZOz=U#1xS z(fuX4u*0fyGrg#3c-n1sH}AE;%m)+h&&A}C7igM@TjW|gJ;vioyUudUd*6ix7%8+7 zy^!0UDe(dsJSpmz#h)Aayx2q}VY@5OQGLaflBV=nxF_5fIZuDrnW5JIiU0BEz#mvA zO^YTO8fSvbczP_hiEQ)zYewSjdOQDo32~3`+w7f@0B*f1cX^l7yLiu6oT<?=$D6K8 z7wYxcjc9H+bt+Qazdl|)P*myvMPoGR<43dYA*OiMN6@G;|Cb*d%ME-MNgLH`0sv2d zXiJw>D5I34V*e~OdF0_+uQ-=u-x~22ny=Ec?}h?1UH8Q8to$Ec5rCbRV#p3%VUyhS zqGp0bb8{Sh`Lg4@yg%IaQc@7?|73fEttNEkRs55;)$#NAwufrSrLXkJ;QVVD)?Q8_ zjN4WrWG2MfSel1w5gunSu=?%X<E-9YtkpZ(2od<AG0Ouv9FKrjFaV3SiThGX=zY|7 z?um>0m{rJE2Zh~~aLKy!6v++Mc_eL?!Fhg}5Bq3bEEp57hKn+GNr<|5R*rYdE<Sx; zE_^$E#NtwIg6VQdkpZ(#FWNz%nYd#uzb<fR+{Vy(V1(!cG*;U(1v}okv(l?I`#$RI zw>^cwx?c?GCsncZs1r3}$&pjpe0}GOk3wB&XV09BJqjPbK|I7V<p|^`K3sS33*c`Y zL&0-F5PT4ZGGQlu3h6n5Q7*|(DQLEnQHUUJ)BLzm6iYm;N$FCATm<5bWnQY#ijE&E zjD>l6e!*k|GMpmBZrY^Zr*5PsTVa%inF#NKj;nrzh1ShWT+=D#);A*IYNr6wLUSx= zQ1zcCM9qw5p?%vjn_jIX{G2hw=pd4$yqB$GI`uLnt(BiLB}KWaC~m7$`l7(bXd4?@ z2*+#DEd^I=hw~N7ABEqft{0oGegbxJk3ZVJQAeEk`f<n4V1)-4nt{l$?049jHn)cb zjXK*3ky3G{EDiX82;-QR7nT*xDGAE(!<dcAuv+3h<SD;3L5D{1=2ejaBp`kr`0gtB zi+RGPi3%kY4T;N3Q2)%95%yt+7^)kWFDynHTyDLx``qj5TM{qDLwQC8Wu})ZrJgQQ z2^H?=wTmpa$8wBSrlkXW^%wm&js|@aJqn_(bJp&XScT2WEm7I2SE>nNjWR2Eyw;ca zF>RtNSevN}W+92Q%8F!O^{b4dc}t7L9XkVacy8pL&0TkGn>N*eri%R~UQ7E6vlYaU zx%!^xRf$i}+GF0P4<d8ZWJx09jB0phD7;_>ir?gEFZj5#bjIe%jR4}-TkGA*fR(VR zt4wZ;#mynFm@t!WE8OFE^C@Y}KaN;af!P=I4`Zl_NB1L3l@e!&cM6y1ee)I-uYqwh z!p${KvzT2nPK$krF8`;-e!EuYR(A>N%Ui<`p6okl?)$wViE(@d=4BL=);E|qKL*v? zG?}r^1N@b$T~HEPi*;0IRw_=#B(Uo(OXZHrOIO(S)I^)De!W_-gK^nj$*E)MI%vqY zgmUXM05ZY=BT&Yr8E79++kus(fQpSc&$ap1Y%u8l)fvViMLc-4NOIL4Fgmj~#5OEb zPCOeGEphFkC^&GItJ|>`R%;q|Bk51L%1>N_81MzEk^tzw^J?g^ME2Zov)!rs*e#x; z{7LxHa&99V+p{I}@~~3cbP>z=Y0l6)(<|Zb9_cOb#}%Jx@-V&xzyAIZ7ISeB#&ag2 z8E>F^cR2-JcGg&;RxagZhMg*_bZ9koK2u?H9*rsH=d2)F)SSH?(+$t-WAXBC74zHh zc9(XMjJd=d`^Q0X{hO@u2H`hz&P%8fCf3#OYkg*=-lt7Ot|TP%2hdn|f&(&A)`7No zGfI#kA@d^}q243MSUh2S^TQ(5oZwmG<9t$Zp0;yUx>f}3C*iMZNqSkd*A|T!SRe{1 zIT3(9?7*hxtcc(D&@L}461Y)7#@;q4nKKo1+a96m5$Vhcc1gf^W!^V^O$eDVbvjkH zP{4}o0E!$>>fe&3B|dUe{?gAHhc#pu$dcb4wJuhxslRI+fKKIH)p$MSDm2_kj(p)K zU~(h~QnBu!)%8$)t&LI1^~|AT$wMlxSYIe=;$~<hA+A0ov!4_;G<=5a#9#qXx?^2q zva!VPxsmuq73N(uI~><V+gM4pIiUKQD!_=8Ox2=-im$R<3q{-)&N8}x>IwWDtRN5g z$TI2OYRMAr@PK%dRpATD^;i{9ZY*#s9hNq-&VT5U6O@pqjYkpub*NCto46ZD;-i}a zY`u|K&U}16H3(?t$i#xd=ZN@ms+CeAQdm7^$=Cq<GvrLyGysj^_dK9#e7)v3g9Y3d z2M1p}TaHKJ3d#qs+jI*gM_wj-QfH|@O{PzhA@e>l6U(GsmGg|Ry8t+W|MsxEe<+It zOo*TXz}^MkD=)jt32#rh+|<x<Zs!9v4o2Tc#C{q*2<C<}$f<Y@Lvm)MLC@*j&B+?j zb*UGKkR&c8q0w-@Tg~;1Y_>hj;_vP#LN%X9B5Y8V#61}x&0D-a+2k-dC~SfX6d6R7 zi7t5Xm2pOT(2zW<AI(HD6w3HUMFb<zj?-DcjdRCr%P}*XMNjmim*o6<u~6s(A0GcB zmCc|bnYSwH5+kUOw62LFZ#=gT`(|&Ita<iizM*RL?y1yH0_u*)_a0@FP!tZCB)$ha zz$G5J>9@pCDNAKPQB+matGcjRLcx)iNN=Mr)2}!kSZcO7EH+v=T+^)n&Yw0`%?)DK zd#!<aVJx%zu{`miCS%d}p8kZIQRr#7YrWz}A5dpdP}^wHQn{S$=<++|HQ`=nyIUG; zvO>2td2u<H$BZ9m(y^U;5j<!6PCjs&d`#b4uKTeExOkE6B^X?fDY?&@iffR8xh9L8 zv#4a!ZdvZS@=o})MKm<-fpUl*aXSTeCzdST4NvWClL>wcFn(hIjiP*$4L$RKbKz#J z#cos8%Ob+1eCfb5Fpf!EAv#qd7WHzsCi5G~6a1JBFZR6f_e^nf?fwlTa>&M=Gi*G8 z2$tB)vwikdq<N3A@3|$FW+;-irzNZeP8kR=CW%h74#0WMz}J$@_F>s>DeI~9`FrAq z`9M~i%=CGj=bO?HpUYrqRt45KA(Si8HrHs(#=KH1*K?vz;Sz(0c!SNfvXKJI!ea%V zcXSGSbnc)#VHw?HkJK}aR!dmE&N4S;%zF(y_4FLPWH7*|&xLr6C>pS{Wqxp#>5U3C zarOGtSH%<0%1fc0YIz*1k*V2CXZiW_8>3(gN_y3D%DM=BKb`hz-{~0E=dO`y+VJRG zFq9-6TH!Hq>HR8`ZUf()I)6E%flyld{Iv#YoDk?ERSwrZ?H5V69*H(*J`sgxaFsx< zoP?^??R}pKJiL7mZg8-4iH6R_MbVDv>7=Eay1CSO;py?no?=S`DPi4i(S`N)OS-ja zHto?(b`cYu8wQ^fb@_T}tZu3&Y4cWREr@HqGvdKWw$nH3JF`u^vE>-L+8;8(8cEo1 zzio`s09vcc3!o5X(9Lb8FKhk5(Y6Lx401RD;>_KU6j{xJy93@ydb~tWyVHk;+hl6_ zXYA8orUE_E7Dx^}4YI^i)oN*F(WM5T56INcIjWqJ)oi)%(1J1~r&#EQmj_b?N(ekC zR1F!ZOrKyKlVN^eIb-B2XS2=9YzD+us(Z^_kRC7?ThTYLD!7T=t}H<H4<yjtlb_%i zLKC@(r{O-o?kRX950%z6$^{mYk}@~QRtMw?OH)J7=nQUJJo;#atNIF$SGyaV{q|TN zdxh*AgF-0!oqx|mk7S+jEH9coFDo7VQ1w}lC|<!FWqH$%6s977#cFCTB((F~YK-=U zCH;%7bhj?hYs{krbszXUpL=q*9p!wm!>A+T6WzH?Jd!A!8<94<Odh|5IDH9mTBjFu zCvAX@j-kdUI^il~w5^rm1o;;&tAXBoo~0FaB(D?jhTy)$H&36}zGCOA9K=&JMxqNz zlN8U8MmKS5^564Low~$s2Br63A|-36yVe*z>IV3>Cig9_rP|wI@!3ZYAlKE647ziP zYCN>|bl;a-`LSo#p7E!uWbk9Yy<Z7qmjz6xMLt-0L(zP}a>%#F7+q&JG|@{1g7l6? z*q=gtKR=-uKA@%$8^{~es@GU|`iu#OD}ZzsB|XsdS&cWh<wGzX@hRH}5j{F+WNVVv z3)(of<bL#1{v9l?gBt0_=rh-G{oX~A%X?tRO*!Xx<setME*bzB3g!2S)=OMgrKQld z>6V>XGK&r-A7AeXluWQ!pnWW#w8f!0cK-^3Eu5?Pj@y8L&)tOrH?Uo80bQs)xp95X z-d$bp=s?M$a%vlN#u|%kcOl(e4C?XuU|l!IBeL)%<`lMRimp~dPY-c8KG-$_Pd1|3 z&b9ZU6}7qb7{04fz^)3OhZ?d6lBHUvCs4qv7BYEKmhLJVA)<=t?DdmOwez|j-RA$W z!DvoqoQ8_RnWp2qRRD8BGu@B6Xp#738^6@Zhkle8yAL|1Z5mad?BoK2_;L;3g>=W+ zYI7o!rXe#X=mP4zCy%)kBK^d_e6HrWE#F;9`2{8L;C4HcPyAaNT8PO?J}9U`AVi2Z zp68ivGyp6Hm>+kc9#ibXzJM?cp~WBe_Je~@lTwlPaa0SBB-rMvnSwdOxY?KkEx`1w zld{y}?{v*$$qIf(%<YgS5yj=uvAZ8|kvapw%skMLw#sA<@j>q-G~ul>7n^`l8K_m# zT?GhwdyW!Y*f8hX_<YoLbhyV#Vpl+t8G4SIn|bFo#cK(c563wIVAlDFE3Ul;WB{`B zE4L)7>+kp}ZOrg#N+e@0p(T}M&X&*|;Za?u=DXSnr5QKuETwRc^wnr4onB)`wuMOR zY>LUX_njtubWnjH>_uj%FY!TseQU>pTB|mjc3yF%KCDKrfvOw{;QaM@zl0bs>*S5B zn{n72&{Bi}7#!m#-uGpwU18+b5*q!2F|TX*?uURCKpzzHn*9H&;7lBu{{J{WJ8WiH zn1*CTW{wbw__hr-atxcZGDjsvzQqrrcAz1?$epse%~`HOZ0SJBa^xtYax{H&lyvv| zd_RA}`}2Cg-ml~NcrF)2u=?2U@S|_JgQsq-Z&HXvD(p7{xAj^Zn>EggY(McW+F{r8 z#@(i}5}`*S1xzj^h@45wB)%mmJfYrdCW-qt2?9&?0}Xl(__w?Xp9&EG%OJ5~(d^TD z)W!7{NgaTC?3_yQk^wiJ>skw>mTzK;z(a&seI~HA2(i(+^Q?KCH0;~O6z{#Sd@arn zkZ=Qlgj>y@8w<3aQ;)R|Qqjqmt;6_jw-dU;HZIJ(*118Mc={Ic@kI?(a?YV6sr~GA zHK?@!XO3NdC;i=0`vxU?$VetYBX$ZV&m1bTzA=%IP)Q)2%TaL9o$Qd$$b-3UY9UmE zv+>0qs*VdR1k6pCHqPFT-FQfz(I&LYh<_FPsjY?0;3M18@K?AE7JGyBaana>a*#2T z)r)qo7R-fX)NVe+7U$@j>>rs3Y?NOP4BFDJvn8&5N7o(6`b`7R?Ci%RO<Pm#4lzf{ zaVg*-vRFvfG<Ldl1S1aW*BPB14qV(ZC+!xt)lYIJ;tG2619?shF7@n+r`SMLQOKd* zwrPq6x6j@bU0;`UQ5P5Qd{}oZpeZw&YRA_dze;(KZO7-AKW8V`#NX4%AuU8Z%um6- zQH?ttTH``+N41T9`a{=!of$+R2%8*FV&+tJ9tF$j1g#&E4VsSO)yk_eahhw=1X5kR zyB?#$7p_j_9?}kVwHyezBCqT`24=GTiHA?+o9n1D^P~3eP?6C9ZFXd6G(_G#g97iN zGr$nvlMIOTZZFZ10rScci@iGG(Ylfvh$$NEEdx$<YldHZA<|SHNmW*)U)b4QYIFsB z%!n&$?n&f;@oyyTS%FO2T-MjCPQjRh$_xTJ)EBxcaX_1d_RFCf$cb5#Gp+B|eS9Q5 zX+$DPx6lV}5J#R#uPbTll8D#*x*K1~BG0!GVRrGS4i5#@A7?<B_J)}>n?eU_&A#nB z)DKv)yZ%SS{b}TMY7~JWeq741T#Xn1_g2NV_Zxqy-m8#*M?_Hn3yAM=U<}eWy^hM` z)v6#EAZCJ#MnK8Fkes58v5(?W&P}(NU&;|_&!`-s$sPns`qFs_B3^#SB2T|)H$1g{ zTuOL`B?h#;KMrVYSb<eGph#tGFmSI_x_4&p%&LP8|0wbq>w5L@QKn_(+^V-PCRKme zk;|NbInDh`lZD}V#<3DPu&P;&0B3{6=3z-b(mRQSd}1p>S>974N@_mJ_?L0Z<h|wB z*62^rCsc}_&2(`Q5?M2QGVSCpoix5)#ivW%XU`R%9w@(*K<uPjD-OK8^S7&q;^sit za^KOdg$Y>zIhO0rg#^3CXkI=0$?se=an(tg1;Eh+f8NV`*sAEP1sQ8<jnW=&Gs17g zC1dG%D>_7de!Wxud{XDB$F|=U?zf;Yq2cwlhJ`HR8f&~6Az-?zC=vo0CF;yqH%nYA z&<(!RGqTdk(L~?G&M$4zQlxeFnWTD-2Hw1<swzY&D4X(jRm&Hlr0y=eaFpMzc5B(| z_zxUuf9VZTz#q?BG<*M32c}e(ry-RDv|m!^CqYQt2`sgNY=PExt%!H(IaY`B26~kL zc*tioP0y;F?oDE|lF48_=XgKG9ef`Dpxm@V@qLQpgQvl{p0{CB2R>R9rdMiDcTN}H z+c~T=%5@0J?`HSJ07We>z!0I^^Yg5BJaHJ=4X?FA*}$7la%+Myk|vvLgSp$GUOvg+ zCv+2{?VG)%w0!c=Q00*8O@7H>&|-7MKOebkp*)rDD}t?#gqVZu$E#-?E#e~n-I;%4 zQhe*yPtiis2jb?nDgtj42N24muY^ZZbviq@57o1atN|eNJLGA<QRj%!aPA9|;^$2% zd`Qk|`*L?T{Bj-4)&zuavRl48jTRpq?VX2;{8KhGl0A0*dqcxMJWvS={UwGoa8Kpb z7|$<co|iG()q%{#xi2L~*D-N_)`|ttPXdmin;4RUMZR$sy)4ryGp!KZJ2vw>8@McR z4njVB#=nOjNcQcGN}nY7T>r5AYp8VSRJOspAsq3m(4)b=FZ-xp_QW7cEs%&^Q@hKW zz*H#Js*UTlAeEzeN%gYLs#i*%IqJ6d1Ze;SjSHTp`Q8LR^nOu#`J20J#uj&8Jo@?V zt<*CU;G6dXw@a3cmdV7EW>;xafz41D#FtCCg&e0RhuFB!8spG);u`tEe1PGjt?-ao zdZm-cMCowWa|PuPl`^Yw=;PGbh?gH@FC82e@jT?LNZT3aiguo6N|chCG>p{}aN5~C zS$r4({nO}kC$@pvtiT9r03GPpfg@$no44y&0)mfvDB7gh2cG(RUyaQqn{1senT_ai zcju0=JEE#te7O8(<-I{uTiwSzrKCp+$N99H0R<Xb3}&^C;5=X=k<iJ3l%r0wYd1So z?CH|ez$Q@Y|4LLqtMTUcGR9iv0UWRa`hiF~t2L;^&B^Hfr$Qx!LG9!F5cmydUj_0F z(&WN+mYqoq$=XClm8A#`qw@x3yEEHikiWS#&*UU^$oC<`9~VNfq0*@qr52{>DDa^c z0mt<wPF|IBTVWQ+%w;p`5k#ayqDc)6!c4*Bg1lO;c7Iqrx6!iI0F<-ILD~80HDgR; z1Xm#3gNi!KcIDO--+3Ta@h0`-V7@>=lv8w&Fgcu|{Xfk=Vp8EsCdd?HQ#S+(8CvoK z*Mk0K_A6-}_bGuWB`pfwym)vb-mumy!YS>A-&I@*=gRxDD<75{6R7#8mPS5}kZ|5G zTDmy8^j%>y16Rz=<38-#T0{ZI(o=fl!q?L!GHLT7ANXY|+I#0`zBp3B-3Wj&x^m@4 z!JJ*M&p28$4SG)}a>$_K998?eX~Ah!R`{zoIaAI2hzovZP~|}W+LS$dxen}DT`q-k zCfhgd8jRns^RGWlA)2`p7n>uz8NF7dH<`@-j8IfI8!!)gj_+SpbT_5a`cg7q2;8hc zLCJ+3hlu(F#8ElqUG1zBO0xnXO1fL#ubshrCMOsM)G8L&JE4J?Fu#If0H*(FWpCsU z->e_V;^9#03)Gt5F7NGq%l2M*^Lt1*7wvK)b@q;X*abQC{S1r&an8O@6#dqrvCRWK zq)lZAb>~AUCLqw`R9pjyeXx!i?=nL~CxSRnm97#LSY-Zsa{RBV5JQ%Ief0?7Pa-It zk%R7TM}@60dSW~i5$*hP`Z~>ZvRCvM0xuxa9oJ+zDO*RBr1RVk?asRmhp^~qkm!Lm z7ekDUW3O#{P36@jhZwrkw@#^ucqw);#M38cNv{MxhIuymeoGb6^rT1ktr4LDApvD` zQLfedf&jVgde@6LCgH>~ADA0%vQ0h_gFNm;`5P5>J$DePHGjiw|40l4f|`w7yN$x& zOri;=B`7EnU)I)g?34MMw#jjv*c+DdxVF#kq7Z9?0`aV7><8t3`oOf%>}L5xTERjp zFF9jYMO*cVw)?p1vI6R2WR?^uI(RySdhV&@w5lOdsEIH)V(ZwT;L^vNn#@+RwQdZ? zYKA{2;F)uM){`hzBRi3jbEgW}*1**B#a}_0ADeUg`1jNiwvRXS2$0ioxcv9x^!vMY zj-kKaLTL5zB3ciZP{vXIwg9aQ(?>@&*!BIgUt!20b9nBTuI^LrZYp2u9q<9C#<DAt zXbfB*e?>EV>Pw2nw*LZ8dmF9ciSpNmjc?P`meBOrs8KB<g!L}Igoo@lWY4`S5i1Y5 z6mSaqK+6I%9Z#`=sl*?qi~isTzj%`YL6UsAgNg6$1*h(sRb4zNxpe+>zH8m(5W63b zQdT}lffr83Of6(=W;h<T73%L6onbt=SzU>&_l3rr)N~;8F6T{nI~OlW+t&fUARW=m z7`#c&Vlx~z@OM#&nyH?&f(UYB-q=&FjQ?_P0l!h=Ui1XL@uBL=v;QeO>6%e;9i^(( z5XaCpbe0Ti%wVs0Fulz6fxY32(asM_(z(biWklGDxFeS>qa3PI_GK2R;0h_cy@O=D zobAxy2~QsgnhHs>w~?Brg*}8Ebu);HYA>e}!X&7Fr0z$*p%^D*MisZVbu$qV%|YHq zQ-}@A$NZ$$J{~41kN6+9trdKZOuAvf9cTAp{cQHpEC71k;`5HBPGi58aJgZL6!~ku zR>3g8C2JJSEK)O(Vr3F=i!i>3_tVol8^B-C48~1$EC`@r$3}2?e5?jw2BOdg!l`BO z^s~2hyJaq2KOBH~2-!)mHq1|>r)Q5v94meAXR7~U6P@-@d-{S#3W!G}N`oCL9`WVZ zl?6;NWL3uJcOVE<M5{VmkeB}SYYWnk*qo<F(M@1bv&y;c^!VYTw*W7hYG1HBOYVGj z5U)mhH69tUZR+S-$s=2$xQ~?*jGjH(G1lN`GyHIT&`!llf(Hw1*F0cO>2tnbt#C-w z>tU?j?mQWreI{UXY#ciP-`~KRCigcPT%&0D`NlIv2-NM@IF4PT7(X2UA~f_p<_QSY zpb;K<SN7TaC2f~jc}3_=0rBj%?#xf;ZQ2=BuX1;tuBE5Y0(C4T&@-8BD=TGQ?T;hK zhq72aHHqfH;(_cvi?;t5!EcP&+`r<o2D~e~N*(w<CQzo6+%gBqYf<TFY1IBfjav(+ zzsw7T2t?vGBqq**!?qqmv-r1>jceA*4D=$(et+wdK+ke~7RZ@puBiFf`;nE}){=VE ziA^0VC|9=nt2FDT11}d7E(Glebvn^`@K2yn2uFY3NSbA{O}xeKvUCRJ(KU*Fu;h#u zi^NmYSsi**9~)g3Wixdz<?>`c%b?NaGi%~8^D>%BXHDo{3`=G*=78S%n9-98TZ5zO z`%R$a(iAp78AxG^w7B=?helm2-2RulTDeQ3x1@_cf9x#=&@NTHtvxPe^;>fPcis~4 zNV+D2Gx3J~He?%NLCcbZ+!Q1vfViwq&HAkF!6#B>LFk4_SXCypC`89PO-r9`$EOhw z8ymcmHG8u^)X8!y?F5Kf=5L&O-pm~@TOBzc_mj;OAU`waDsi6!L6PQ_W@|r%a0KKv z5vYVMd2?1oRema^k6bfO{#H!`CN^!ya7@uB)3UG{c#?NA|F>}PcjnbtuY=!(XXZLi zzO-qN8vW5M7zb%Ub>eX}*k4BMEBoH)$UX!{IN1~(i$DehuEK0SO=eZ85Vj6HC3(_g zv_H8L^v@8~`}npK&zn7RVw$m=s~FThyB-?RvS9po>>v*32{A|a|10H-NrFOnx2@8Z ztWot+d~Y7eXBZRqIOgAXe0xLV-rd^Rq<<!yxo2(2?Py20QCeAqcdbc8#Ma@Wm|AGu zo#l0@#X-c#c7)C9(u3w__&p|9NW)P}Yk>?5V&0Cl$J>N1d-c}Fv%#y+8`EnWeWUX- z^rB`whJL4(`CA?CM?YlE_MpZT92>K?S}l*iY|<ZRe^zrQ0!}@J3$QS3WK_6Rz}`Gt z8>|nUjY77zA9KIna%r-rTqR_Rd_VXNTGdBqocC8%OV&yl#iOhue)q|9Gk5SusL#qO zoQoE7j*66_Y*Hm3+1h6(h0>Oj;0lj(vRHHL&*i0%)_1{lBib0t(<=XTeKey&tvet% z{uHo2tou5>r}qU7m|W>h%ck&`ynre6Q1poOe*N}2<llkP;6ys{iL5h&`iyBtSMM4O zM5E-vAT|=&`Gxg6!*CGe47gSG*2dmGvl0`%M)~2mU4CKs!kPArpADKBhq^4kQ2!(+ z=%wb^3A7%iF6EMND0E>hIHQ{g=J=R<wFNf4+6{$qgiHnonSUO3tPQ9rLY=A>Ci-)) z6(sg)1sINncQmFr9_ifoeOuVU)y9>wh8CA=`WMm7(qI?*+@3w5Hg$d2k%6d*rRFWh z-1&X`ag!`|+$8?%hF)E=vsngLi9h5NQk>31xV?xisXj(cSgBTY1cYls_&p~=)Z&>I zh4~A2XIJO6^<i%eoem0!r?-vG2mV^OB?YaDcsX<!GHH&_L%u_efw79~60=<k9aIsq z`^xw<OoJcbzR&hrv-1abN;vh^v>LN2%zA_hkzx|PF?cx+SlZT$9}`Hu6~}^TA@Jf0 zu*9~xsJxG~Z|ohYNBEk%dfxrJy!-iqMJMi~&$(K}`SI6ib`Py{#Wz<#F$1!7&ok!{ z3eepGCWx~Et%@pTlAarBUtdAN5m9((fdLhK_z|$%F)tA$L+v?f?c1-d739o`^TXlW z+rWFjU3mLEmQKMODlfZ(qW<?^V<cnB_J;ywq^929PSL+HCw4nd{dLy~nAz^Ao&Zw5 z#$7|F2z?tIqW4+@SybxRuQPIABP--}`@8Xfu)oxMd<c1ZdyBZ2yn1FAiytzKcCl7$ z%PrmJK9ByLVX-}&P4vV-r8tpPs=Sgx#yLJjB(MC_2eEoq3*)A(mI01@=b0xbBHmIS zSLlfO-`Kz6ii0O=d(Ns=(budA*H=H>)NU{&p3ll`kpugAF-~qH>>I8fx(DT$)gS08 c82R%D0-8M@iPvk~_8J6yjt;K&jbsM<|JYF?0ssI2 -- GitLab