From b13c3978ce5e7fc98c9f5a24ff627a68379e541c Mon Sep 17 00:00:00 2001 From: hl Date: Sat, 27 Jul 2019 17:06:40 +0800 Subject: [PATCH] Initial commit --- .npmignore | 9 + .travis.yml | 23 + LICENSE | 9 + README.md | 54 +++ admin/blockly.js | 217 ++++++++++ admin/i18n/cn/translations.json | 19 + admin/i18n/en/translations.json | 19 + admin/index.html | 168 ++++++++ admin/index_m.html | 211 +++++++++ admin/pushover.png | Bin 0 -> 3776 bytes admin/words.js | 23 + appveyor.yml | 25 ++ gulpfile.js | 394 +++++++++++++++++ img/Screen0.png | Bin 0 -> 64895 bytes img/Screen1.png | Bin 0 -> 77223 bytes img/Screen3.png | Bin 0 -> 50998 bytes io-package.json | 49 +++ lib/utils.js | 83 ++++ main.js | 265 ++++++++++++ package.json | 33 ++ test/lib/setup.js | 728 ++++++++++++++++++++++++++++++++ test/testAdapter.js | 140 ++++++ test/testPackageFiles.js | 91 ++++ 23 files changed, 2560 insertions(+) create mode 100644 .npmignore create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 admin/blockly.js create mode 100644 admin/i18n/cn/translations.json create mode 100644 admin/i18n/en/translations.json create mode 100644 admin/index.html create mode 100644 admin/index_m.html create mode 100644 admin/pushover.png create mode 100644 admin/words.js create mode 100644 appveyor.yml create mode 100644 gulpfile.js create mode 100644 img/Screen0.png create mode 100644 img/Screen1.png create mode 100644 img/Screen3.png create mode 100644 io-package.json create mode 100644 lib/utils.js create mode 100644 main.js create mode 100644 package.json create mode 100644 test/lib/setup.js create mode 100644 test/testAdapter.js create mode 100644 test/testPackageFiles.js diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..0f2ae68 --- /dev/null +++ b/.npmignore @@ -0,0 +1,9 @@ +gulpfile.js +tasks +tmp +test +.travis.yml +appveyor.yml +admin/i18n +iob_npm.done +package-lock.json \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e58b02a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +os: + - linux + - osx +language: node_js +node_js: + - '4' + - '6' + - '8' + - '10' +before_script: + - export NPMVERSION=$(echo "$($(which npm) -v)"|cut -c1) + - 'if [[ $NPMVERSION == 5 ]]; then npm install -g npm@5; fi' + - npm -v + - npm install winston@2.3.1 + - 'npm install https://github.com/yunkong2/yunkong2.js-controller/tarball/master --production' +env: + - CXX=g++-4.8 +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..02e0166 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2014-2018 bluefox + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3dca83f --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +![Logo](admin/pushover.png) +# yunkong2 pushover Adapter +============== + +[![NPM version](http://img.shields.io/npm/v/yunkong2.pushover.svg)](https://www.npmjs.com/package/yunkong2.pushover) +[![Downloads](https://img.shields.io/npm/dm/yunkong2.pushover.svg)](https://www.npmjs.com/package/yunkong2.pushover) + +[![NPM](https://nodei.co/npm/yunkong2.pushover.png?downloads=true)](https://nodei.co/npm/yunkong2.pushover/) + + +Send pushover notifications from yunkong2. + + +## Usage + +To send notification from ScriptEngine just write: + + + +```javascript + +//短信发送 +sendTo("pushover.0", { + phone: '15273732255', + message: '室内温度高于40度报警,并打开电磁阀风机(室外水位不高的情况下)及冷却循环装置' +}); + +// send notification to all instances of pushover adapter +sendTo("pushover", "message body"); + +// send notification to specific instance of pushover adapter +sendTo("pushover.1", "message body"); + +// To specify subject or other options +sendTo("pushover", { + message: 'Test text', // mandatory - your text message + title: 'SweetHome', // optional - your message's title, otherwise your app's name is used + sound: 'magic', // optional - the name of one of the sounds supported by device clients to override the user's default sound choice + // pushover, bike, bugle, cashregister, classical, cosmic, falling, + // gamelan, incoming, intermission, magic, mechanical, pianobar, siren, + // spacealarm, tugboat, alien, climb, persistent, echo, updown, none + priority: -1, // optional + // -1 to always send as a quiet notification, + // 1 to display as high-priority and bypass the user's quiet hours, or + // 2 to also require confirmation from the user + token: 'API/KEY token' // optional + // add other than configurated token to the call +url, // optional - a supplementary URL to show with your message + url_title, // optional - a title for your supplementary URL, otherwise just the URL is shown + device, // optional - your user's device name to send the message directly to that device, rather than all of the user's devices + timestamp // optional - a Unix timestamp of your message's date and time to display to the user, rather than the time your message is received by our API +}); + +``` diff --git a/admin/blockly.js b/admin/blockly.js new file mode 100644 index 0000000..19ddfe0 --- /dev/null +++ b/admin/blockly.js @@ -0,0 +1,217 @@ +'use strict'; + +goog.provide('Blockly.JavaScript.Sendto'); + +goog.require('Blockly.JavaScript'); + +/// --- SendTo pushover -------------------------------------------------- +Blockly.Words['pushover'] = {'en': 'pushover', 'de': 'pushover', 'ru': 'pushover'}; +Blockly.Words['pushover_message'] = {'en': 'message', 'de': 'Meldung', 'ru': 'сообщение'}; +Blockly.Words['pushover_title'] = {'en': 'title (optional)', 'de': 'Betreff (optional)', 'ru': 'заголовок (не обяз.)'}; +Blockly.Words['pushover_sound'] = {'en': 'sound', 'de': 'Klang', 'ru': 'звук'}; +Blockly.Words['pushover_priority'] = {'en': 'priority', 'de': 'Priorität', 'ru': 'приоритет'}; +Blockly.Words['pushover_url'] = {'en': 'URL (optional)', 'de': 'URL (optional)', 'ru': 'URL (не обяз.)'}; +Blockly.Words['pushover_url_title'] = {'en': 'URL title (optional)', 'de': 'URL Betreff (optional)', 'ru': 'заголовок для URL (не обяз.)'}; +Blockly.Words['pushover_device'] = {'en': 'device ID (optional)', 'de': 'Gerät ID (optional)', 'ru': 'ID устройства (не обяз.)'}; +Blockly.Words['pushover_timestamp'] = {'en': 'time in ms (optional)', 'de': 'Zeit in ms (optional)', 'ru': 'время в мс (не обяз.)'}; +Blockly.Words['pushover_normal'] = {'en': 'default', 'de': 'Normal', 'ru': 'по умолчанию'}; +Blockly.Words['pushover_high'] = {'en': 'high priority', 'de': 'Hohe Priorität', 'ru': 'приоритетное'}; +Blockly.Words['pushover_quiet'] = {'en': 'quiet', 'de': 'Leise', 'ru': 'тихое'}; +Blockly.Words['pushover_confirmation'] = {'en': 'with confirmation', 'de': 'Mit Bestätigung', 'ru': 'с подтверждением'}; + +Blockly.Words['pushover_sound_default'] = {'en': 'default', 'de': 'normal', 'ru': 'по умолчанию'}; +Blockly.Words['pushover_sound_pushover'] = {'en': 'pushover', 'de': 'pushover', 'ru': 'pushover'}; +Blockly.Words['pushover_sound_bike'] = {'en': 'bike', 'de': 'bike', 'ru': 'bike'}; +Blockly.Words['pushover_sound_bugle'] = {'en': 'bugle', 'de': 'bugle', 'ru': 'bugle'}; +Blockly.Words['pushover_sound_cashregister'] = {'en': 'cashregister', 'de': 'cashregister', 'ru': 'cashregister'}; +Blockly.Words['pushover_sound_classical'] = {'en': 'classical', 'de': 'classical', 'ru': 'classical'}; +Blockly.Words['pushover_sound_cosmic'] = {'en': 'cosmic', 'de': 'cosmic', 'ru': 'cosmic'}; +Blockly.Words['pushover_sound_falling'] = {'en': 'falling', 'de': 'falling', 'ru': 'falling'}; +Blockly.Words['pushover_sound_gamelan'] = {'en': 'gamelan', 'de': 'gamelan', 'ru': 'gamelan'}; +Blockly.Words['pushover_sound_incoming'] = {'en': 'incoming', 'de': 'incoming', 'ru': 'incoming'}; +Blockly.Words['pushover_sound_intermission'] = {'en': 'intermission', 'de': 'intermission', 'ru': 'intermission'}; +Blockly.Words['pushover_sound_magic'] = {'en': 'magic', 'de': 'magic', 'ru': 'magic'}; +Blockly.Words['pushover_sound_mechanical'] = {'en': 'mechanical', 'de': 'mechanical', 'ru': 'mechanical'}; +Blockly.Words['pushover_sound_pianobar'] = {'en': 'pianobar', 'de': 'pianobar', 'ru': 'pianobar'}; +Blockly.Words['pushover_sound_siren'] = {'en': 'siren', 'de': 'siren', 'ru': 'siren'}; +Blockly.Words['pushover_sound_spacealarm'] = {'en': 'spacealarm', 'de': 'spacealarm', 'ru': 'spacealarm'}; +Blockly.Words['pushover_sound_tugboat'] = {'en': 'tugboat', 'de': 'tugboat', 'ru': 'tugboat'}; +Blockly.Words['pushover_sound_alien'] = {'en': 'alien', 'de': 'alien', 'ru': 'alien'}; +Blockly.Words['pushover_sound_climb'] = {'en': 'climb', 'de': 'climb', 'ru': 'climb'}; +Blockly.Words['pushover_sound_persistent'] = {'en': 'persistent', 'de': 'persistent', 'ru': 'persistent'}; +Blockly.Words['pushover_sound_echo'] = {'en': 'echo', 'de': 'echo', 'ru': 'echo'}; +Blockly.Words['pushover_sound_updown'] = {'en': 'updown', 'de': 'updown', 'ru': 'updown'}; +Blockly.Words['pushover_sound_none'] = {'en': 'none', 'de': 'keins', 'ru': 'без звука'}; + +Blockly.Words['pushover_log'] = {'en': 'log level', 'de': 'Loglevel', 'ru': 'Протокол'}; +Blockly.Words['pushover_log_none'] = {'en': 'none', 'de': 'keins', 'ru': 'нет'}; +Blockly.Words['pushover_log_info'] = {'en': 'info', 'de': 'info', 'ru': 'инфо'}; +Blockly.Words['pushover_log_debug'] = {'en': 'debug', 'de': 'debug', 'ru': 'debug'}; +Blockly.Words['pushover_log_warn'] = {'en': 'warning', 'de': 'warning', 'ru': 'warning'}; +Blockly.Words['pushover_log_error'] = {'en': 'error', 'de': 'error', 'ru': 'ошибка'}; + +Blockly.Words['pushover_anyInstance'] = {'en': 'all instances', 'de': 'Alle Instanzen', 'ru': 'На все драйвера'}; +Blockly.Words['pushover_tooltip'] = {'en': 'Send message to pushover', 'de': 'Sende eine Meldung über Telegram', 'ru': 'Послать сообщение через Pushover'}; +Blockly.Words['pushover_help'] = {'en': 'https://github.com/yunkong2/yunkong2.pushover/blob/master/README.md', 'de': 'https://github.com/yunkong2/yunkong2.pushover/blob/master/README.md', 'ru': 'https://github.com/yunkong2/yunkong2.pushover/blob/master/README.md'}; + +Blockly.Sendto.blocks['pushover'] = + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' text' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + +Blockly.Blocks['pushover'] = { + init: function() { + this.appendDummyInput('INSTANCE') + .appendField(Blockly.Words['pushover'][systemLang]) + .appendField(new Blockly.FieldDropdown([[Blockly.Words['pushover_anyInstance'][systemLang], ""], ["pushover.0", ".0"], ["pushover.1", ".1"], ["pushover.2", ".2"], ["pushover.3", ".3"], ["pushover.4", ".4"]]), "INSTANCE"); + + this.appendValueInput('MESSAGE') + .appendField(Blockly.Words['pushover_message'][systemLang]); + + this.appendDummyInput('SOUND') + .appendField(Blockly.Words['pushover_sound'][systemLang]) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Words['pushover_sound_default'][systemLang], ""], + [Blockly.Words['pushover_sound_pushover'][systemLang], "pushover"], + [Blockly.Words['pushover_sound_bike'][systemLang], "bike"], + [Blockly.Words['pushover_sound_bugle'][systemLang], "bugle"], + [Blockly.Words['pushover_sound_cashregister'][systemLang], "cashregister"], + [Blockly.Words['pushover_sound_classical'][systemLang], "classical"], + [Blockly.Words['pushover_sound_cosmic'][systemLang], "cosmic"], + [Blockly.Words['pushover_sound_falling'][systemLang], "falling"], + [Blockly.Words['pushover_sound_gamelan'][systemLang], "gamelan"], + [Blockly.Words['pushover_sound_incoming'][systemLang], "incoming"], + [Blockly.Words['pushover_sound_intermission'][systemLang], "intermission"], + [Blockly.Words['pushover_sound_magic'][systemLang], "magic"], + [Blockly.Words['pushover_sound_mechanical'][systemLang], "mechanical"], + [Blockly.Words['pushover_sound_pianobar'][systemLang], "pianobar"], + [Blockly.Words['pushover_sound_siren'][systemLang], "siren"], + [Blockly.Words['pushover_sound_spacealarm'][systemLang], "spacealarm"], + [Blockly.Words['pushover_sound_tugboat'][systemLang], "tugboat"], + [Blockly.Words['pushover_sound_alien'][systemLang], "alien"], + [Blockly.Words['pushover_sound_climb'][systemLang], "climb"], + [Blockly.Words['pushover_sound_persistent'][systemLang], "persistent"], + [Blockly.Words['pushover_sound_echo'][systemLang], "echo"], + [Blockly.Words['pushover_sound_updown'][systemLang], "updown"], + [Blockly.Words['pushover_sound_none'][systemLang], "none"] + ]), 'SOUND'); + + this.appendDummyInput('PRIORITY') + .appendField(Blockly.Words['pushover_priority'][systemLang]) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Words['pushover_normal'][systemLang], "0"], + [Blockly.Words['pushover_high'][systemLang], "1"], + [Blockly.Words['pushover_quiet'][systemLang], "-1"], + [Blockly.Words['pushover_confirmation'][systemLang], "2"] + ]), 'PRIORITY'); + + var input = this.appendValueInput('TITLE') + .setCheck('String') + .appendField(Blockly.Words['pushover_title'][systemLang]); + if (input.connection) input.connection._optional = true; + + + input = this.appendValueInput("URL") + .setCheck('String') + .appendField(Blockly.Words['pushover_url'][systemLang]); + if (input.connection) input.connection._optional = true; + + input = this.appendValueInput('URL_TITLE') + .setCheck('String') + .appendField(Blockly.Words['pushover_url_title'][systemLang]); + if (input.connection) input.connection._optional = true; + + input = this.appendValueInput('DEVICE') + .setCheck('String') + .appendField(Blockly.Words['pushover_device'][systemLang]); + if (input.connection) input.connection._optional = true; + + input = this.appendValueInput('TIMESTAMP') + .setCheck('Date') + .appendField(Blockly.Words['pushover_timestamp'][systemLang]); + if (input.connection) input.connection._optional = true; + + this.appendDummyInput('LOG') + .appendField(Blockly.Words['pushover_log'][systemLang]) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Words['pushover_log_none'][systemLang], ''], + [Blockly.Words['pushover_log_info'][systemLang], 'log'], + [Blockly.Words['pushover_log_debug'][systemLang], 'debug'], + [Blockly.Words['pushover_log_warn'][systemLang], 'warn'], + [Blockly.Words['pushover_log_error'][systemLang], 'error'] + ]), 'LOG'); + + this.setInputsInline(false); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + + this.setColour(Blockly.Sendto.HUE); + this.setTooltip(Blockly.Words['pushover_tooltip'][systemLang]); + this.setHelpUrl(Blockly.Words['pushover_help'][systemLang]); + } +}; + +Blockly.JavaScript['pushover'] = function(block) { + var dropdown_instance = block.getFieldValue('INSTANCE'); + var logLevel = block.getFieldValue('LOG'); + var message = Blockly.JavaScript.valueToCode(block, 'MESSAGE', Blockly.JavaScript.ORDER_ATOMIC); + var text = '{\n'; + text += ' message: ' + message + ',\n'; + text += ' sound: "' + block.getFieldValue('SOUND') + '",\n'; + var value = parseInt(block.getFieldValue('PRIORITY'), 10); + if (value) text += ' priority: ' + value + ',\n'; + if (value === 2) { + text += ' retry: 60,\n'; + text += ' expire: 3600,\n'; + } + + value = Blockly.JavaScript.valueToCode(block, 'URL', Blockly.JavaScript.ORDER_ATOMIC); + if (value) text += ' url: ' + value + ',\n'; + + value = Blockly.JavaScript.valueToCode(block, 'URL_TITLE', Blockly.JavaScript.ORDER_ATOMIC); + if (value) text += ' url_title: ' + value + ',\n'; + + value = Blockly.JavaScript.valueToCode(block, 'TITLE', Blockly.JavaScript.ORDER_ATOMIC); + if (value) text += ' title: ' + value + ',\n'; + + value = Blockly.JavaScript.valueToCode(block, 'DEVICE', Blockly.JavaScript.ORDER_ATOMIC); + if (value) text += ' device: ' + value + ',\n'; + + value = Blockly.JavaScript.valueToCode(block, 'TIMESTAMP', Blockly.JavaScript.ORDER_ATOMIC); + if (value) text += ' timestamp: ' + value + ',\n'; + text = text.substring(0, text.length - 2); + text += '\n'; + + text += '}'; + var logText; + + if (logLevel) { + logText = 'console.' + logLevel + '("pushover: " + ' + message + ');\n' + } else { + logText = ''; + } + + return 'sendTo("pushover' + dropdown_instance + '", "send", ' + text + ');\n' + logText; +}; diff --git a/admin/i18n/cn/translations.json b/admin/i18n/cn/translations.json new file mode 100644 index 0000000..baaa98e --- /dev/null +++ b/admin/i18n/cn/translations.json @@ -0,0 +1,19 @@ +{ + "Pushover adapter settings": "Pushover adapter settings", + "Pushover settings": "Pushover settings", + "Group Key": "Group Key", + "Token": "Token", + "Title": "Title", + "Sound": "Sound", + "Priority": "Priority", + "Test": "Test", + "Notification settings": "Notification settings", + "Group Key of Delivery Group": "Group Key of Delivery Group", + "API Token/Key of Application": "API Token/Key of Application", + "quiet": "quiet", + "default": "default", + "high-priority": "high-priority", + "Enable first the adapter to test notification.": "Enable first the adapter to test notification.", + "First save the settings": "First save the settings", + "Check the log or your pushover app!": "Check the log or your pushover app!" +} \ No newline at end of file diff --git a/admin/i18n/en/translations.json b/admin/i18n/en/translations.json new file mode 100644 index 0000000..baaa98e --- /dev/null +++ b/admin/i18n/en/translations.json @@ -0,0 +1,19 @@ +{ + "Pushover adapter settings": "Pushover adapter settings", + "Pushover settings": "Pushover settings", + "Group Key": "Group Key", + "Token": "Token", + "Title": "Title", + "Sound": "Sound", + "Priority": "Priority", + "Test": "Test", + "Notification settings": "Notification settings", + "Group Key of Delivery Group": "Group Key of Delivery Group", + "API Token/Key of Application": "API Token/Key of Application", + "quiet": "quiet", + "default": "default", + "high-priority": "high-priority", + "Enable first the adapter to test notification.": "Enable first the adapter to test notification.", + "First save the settings": "First save the settings", + "Check the log or your pushover app!": "Check the log or your pushover app!" +} \ No newline at end of file diff --git a/admin/index.html b/admin/index.html new file mode 100644 index 0000000..caee9d5 --- /dev/null +++ b/admin/index.html @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + +
+ + + + +

Pushover adapter settings

+ +

Pushover settings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Group Key:Group Key of Delivery Group
Token:API Token/Key of Application

Notification settings

Title:
Sound:
Priority:
+ + +
+ + diff --git a/admin/index_m.html b/admin/index_m.html new file mode 100644 index 0000000..8d1dd06 --- /dev/null +++ b/admin/index_m.html @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ +
+
+
+
+ + + 短信发送账号 +
+
+
+
+ + + 短信发送密码 +
+
+
+
+ + + 注册单位名称 +
+
+
+
+ + + API Token/Key of Application +
+
+
+
+ + + 短信服务登录地址 +
+
+
+
+ + + 短信服务发送地址 +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+ + diff --git a/admin/pushover.png b/admin/pushover.png new file mode 100644 index 0000000000000000000000000000000000000000..86746e5b11421e409065165103fc34d3995698f8 GIT binary patch literal 3776 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 b) return 1; + if (a < b) return -1; + return 0; + } else if (posA === -1) { + return -1; + } else if (posB === -1) { + return 1; + } else { + if (posA > posB) return 1; + if (posA < posB) return -1; + return 0; + } + }); + var keys = fs.readFileSync(src + 'i18n/flat.txt').toString().split('\n'); + + for (var l = 0; l < dirs.length; l++) { + if (dirs[l] === 'flat.txt') continue; + var lang = dirs[l]; + var values = fs.readFileSync(src + 'i18n/' + lang + '/flat.txt').toString().split('\n'); + langs[lang] = {}; + keys.forEach(function (word, i) { + langs[lang][word] = values[i].replace(/<\/ i>/g, '').replace(/<\/ b>/g, '').replace(/<\/ span>/g, '').replace(/% s/g, ' %s'); + }); + + var words = langs[lang]; + for (var word in words) { + if (words.hasOwnProperty(word)) { + bigOne[word] = bigOne[word] || {}; + if (words[word] !== EMPTY) { + bigOne[word][lang] = words[word]; + } + } + } + } + // read actual words.js + var aWords = readWordJs(); + + var temporaryIgnore = ['pt', 'fr', 'nl', 'flat.txt']; + if (aWords) { + // Merge words together + for (var w in aWords) { + if (aWords.hasOwnProperty(w)) { + if (!bigOne[w]) { + console.warn('Take from actual words.js: ' + w); + bigOne[w] = aWords[w] + } + dirs.forEach(function (lang) { + if (temporaryIgnore.indexOf(lang) !== -1) return; + if (!bigOne[w][lang]) { + console.warn('Missing "' + lang + '": ' + w); + } + }); + } + } + + } + + writeWordJs(bigOne, src); +} +function languages2words(src) { + var dirs = fs.readdirSync(src + 'i18n/'); + var langs = {}; + var bigOne = {}; + var order = Object.keys(languages); + dirs.sort(function (a, b) { + var posA = order.indexOf(a); + var posB = order.indexOf(b); + if (posA === -1 && posB === -1) { + if (a > b) return 1; + if (a < b) return -1; + return 0; + } else if (posA === -1) { + return -1; + } else if (posB === -1) { + return 1; + } else { + if (posA > posB) return 1; + if (posA < posB) return -1; + return 0; + } + }); + for (var l = 0; l < dirs.length; l++) { + if (dirs[l] === 'flat.txt') continue; + var lang = dirs[l]; + langs[lang] = fs.readFileSync(src + 'i18n/' + lang + '/translations.json').toString(); + langs[lang] = JSON.parse(langs[lang]); + var words = langs[lang]; + for (var word in words) { + if (words.hasOwnProperty(word)) { + bigOne[word] = bigOne[word] || {}; + if (words[word] !== EMPTY) { + bigOne[word][lang] = words[word]; + } + } + } + } + // read actual words.js + var aWords = readWordJs(); + + var temporaryIgnore = ['pt', 'fr', 'nl', 'it']; + if (aWords) { + // Merge words together + for (var w in aWords) { + if (aWords.hasOwnProperty(w)) { + if (!bigOne[w]) { + console.warn('Take from actual words.js: ' + w); + bigOne[w] = aWords[w] + } + dirs.forEach(function (lang) { + if (temporaryIgnore.indexOf(lang) !== -1) return; + if (!bigOne[w][lang]) { + console.warn('Missing "' + lang + '": ' + w); + } + }); + } + } + + } + + writeWordJs(bigOne, src); +} + +gulp.task('adminWords2languages', function (done) { + words2languages('./admin/'); + done(); +}); + +gulp.task('adminWords2languagesFlat', function (done) { + words2languagesFlat('./admin/'); + done(); +}); + +gulp.task('adminLanguagesFlat2words', function (done) { + languagesFlat2words('./admin/'); + done(); +}); + +gulp.task('adminLanguages2words', function (done) { + languages2words('./admin/'); + done(); +}); + + +gulp.task('updatePackages', function (done) { + iopackage.common.version = pkg.version; + iopackage.common.news = iopackage.common.news || {}; + if (!iopackage.common.news[pkg.version]) { + var news = iopackage.common.news; + var newNews = {}; + + newNews[pkg.version] = { + en: 'news', + de: 'neues', + ru: 'новое' + }; + iopackage.common.news = Object.assign(newNews, news); + } + fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4)); + done(); +}); + +gulp.task('updateReadme', function (done) { + var readme = fs.readFileSync('README.md').toString(); + var pos = readme.indexOf('## Changelog\n'); + if (pos !== -1) { + var readmeStart = readme.substring(0, pos + '## Changelog\n'.length); + var readmeEnd = readme.substring(pos + '## Changelog\n'.length); + + if (readme.indexOf(version) === -1) { + var timestamp = new Date(); + var date = timestamp.getFullYear() + '-' + + ('0' + (timestamp.getMonth() + 1).toString(10)).slice(-2) + '-' + + ('0' + (timestamp.getDate()).toString(10)).slice(-2); + + var news = ''; + if (iopackage.common.news && iopackage.common.news[pkg.version]) { + news += '* ' + iopackage.common.news[pkg.version].en; + } + + fs.writeFileSync('README.md', readmeStart + '### ' + version + ' (' + date + ')\n' + (news ? news + '\n\n' : '\n') + readmeEnd); + } + } + done(); +}); + +gulp.task('default', ['updatePackages', 'updateReadme']); diff --git a/img/Screen0.png b/img/Screen0.png new file mode 100644 index 0000000000000000000000000000000000000000..5576d1bbe5c5d741b8fbf33567cc6ab1cf829a58 GIT binary patch literal 64895 zcmeFZXH-*N*Dj2`A}RvX1*Aw75s=9NfRl85PFM>Ql(3mAVo?-uhNm;BSPpT zLTDyHgb+eWIUDc$x!>pc-f_P3j`98Zew>VvvDtfPuf5iqb6#`KYt2QZ&Qmqo^DO6S zXlQ7kJXX=8p*eYzhUP@o+2g>Ko32T*z~Q9h1FZ)%G?j4|NH(W{^K-8rn}TR)uKxKR z`@r3B2Do_LOVz|n-~G9luZ^bz%_|!xH!o2)2d^7jl1#sw<=YT$R$6RNHD$k3X5on+P^3T4fests}% z@CZ)MfHuS;v<328&!-09b<3{3`j{qq8uskFao2H_tLBHYN@?z0+wTJrhVQEG+_1TP z!{oN`4K)<8JUweV%XC9M13?Fgt3Ko7h{8iSgaI!Y{zNf@cRB`siV`AZ!3-ghZ~pQ(H@W>ZP4vokZ7 zI2D6_{rF;D?`HY+)qV5CY6PvbhpW4bk^v^fG+t;sRqn2|WI63s1{R1$wZ9 z48*a^`K*s+Q@r%`lSWRU(P(a`2w&fg8D1;MJ&%V>kjnDl4VT6hR%y4O6^U$d<)hIH zhahdx<sHb}9BkEmEkRlBEhp*cnZ|Zld8?pR>;6jS!SV<8d#~-u&7o5f|{=e6+=uFF7lmptHp3ujhWG6#Jtoj3eh zSi)pud(189evAG#W2!``?%UN`2syR!;ouF&&)BAw_j>ob;9j7w6?MDZumIh@Y;aCZ z+&O{VDW7E`;uU-n5};TRyLQk-bV;6u56YViqwDWC#L%zi{0M2i(bhc|RYq-)#Jbbt zDm-@9bg$5~QpvdJRRVz^OE>q`gNN->G*>ohiND;sO*D-3J6y@2yKwUR_X=<9#F1uj zTc$n0IL8o?f!f9tCh!*1^R<^MY)>xr*tVR>J`7{lNlYZt;NFhKYz9%^;Cu*tRw0|_ zbRzUk7zJ-sz~-{b;xgwiB1WqFYD-`nH6jRG<`Cx^McDNT_Dv5MM1|VshmNXkHe#=c zCr=fe8Ga@`NdZk(xswF=o_A>08Xz_HOIHJgY8_K-o@YLg8L-~qY*}R;O{HI<7x9lC zO#deE25$kUXjtYr2$1Ro$cK4*Y@#)#Eqzd{YwA>s*FPAh%bMF*x@;`gWh>X}F)C>7 zAYusE-TnP;{vA3a{H}P{b5u{8}3F{+_}@tLSOKsy(g zHN;x-@$K3n+w_({sbnzKdTV=SIP++Ry6=a8W&Oz_vH1V_VqKSG&u5jT_P3ch2p%=9%Ud0fFXDQ}$ z9Y3r8XlJzLSFM!RWX9~yAK2m#N1AE!0!yzEit||p^(88?H?&w(3gvgca zZVvWXf+M_Q=pFZSHEMnuxVo)Ad&psfRw5TtZ?Y^ZD=RPVS2+yw@$-9+k;JImV%?Xo z+%B_d;I^XtJfpOiq_j^zsyT@(Gpki^cCnuK*jiK_ok&Fl@8nrpS_XXnoySRjOh-a1 zQP6{_V%Rs_7uWb_4hUFp=7kH^dv9C!5izXNlnoSR&Q0)gn(- z+U2Gd8OgU%DTmsh?r|ZnI^>S7^(XOn;{kyujZ~^kUEX@6gxlOq8H2I;-}K*C^X9%Y zU>6y@rgON8TphmEo|;XKb;F_veS8W<(tN0-zzShzEC$1Hf~ZKCZsG`lVjWCxNGIAE z6R*$5DWo`ESd!f8p5wDcF*zwies0V+73)$O^{Sed*2L7>xWI@V1ykLxrm#*dC}wfm zk}hP`-$lF>lt(uedTEoan@1sY*I%Ox2K3l{QlAdVd&a5JvrTf>!hm=Wswoy{oB4q9 z$qx>hTwF~bb+#_xhL94gjSI*s1IhLEqAd#pS2uOf*R5V%@sHgvS>@K)u$pPV=C(0$ zS(4mQItsF`J9FNdcQ8Q`&z$@feX?lp^vb=D$+9rKJXI>2C$d%r9>wGE%_>i6j#I&X zH<~jT&AMBNnH{~Nk%&5y{y;FZY~OJ4v!8Q-=;toS%^SU3+O5BTs?8)?^6B{%{gF=- z1j|)CX3$rJ-Q*BzV5=Wu_l@#;-;ZQM3KU zWlP_A#N;HuRqM_V4bH=%$C-m!YAdsiKw#ok}F-Kw%pyg^W5x5_j;0kO1{b9j@(~H?oOq z3d-3cm&bddEWMm9Y8!VjvnGmidvo<1%^E(fOsHp`<~qD|ij#hDOX3{J*y_y`pDxHP zZ;J)c1|v7G!nyAjhbzxYgbpmd2RsA3GnWeHS%o~Cx2C`)4|d$5h)qw7&%SUz@+Uz1ju(yt>FF;9HBT)ztdA@6Hh7 zXrf;+C^xxe)!X9~r&pnnDg_7iyDKo6Iun1K?vXqZC8<){__kEsy$JylIMdTAHnC+n zXi!EPRgMj~87OR-OpT?#K{YH*srjiRHD5B)OOi9yA39X=RJ&TO0$!bqElG}_6&s(6 zhMOXOe~;@5!64Zxy7pa-yIWb#OZ&Jqoj0PCI6F65HI*vBoL$P7m|$RZmy4pM3w&!% zfvRfmFu|04J&ArhWZDf!}}wSCJF>!X`WDg{v#6TIsO59vPq^ zk6T;Y%TqeYivyF;xMqB82(h0(``R+#;;CkB*QW1Vn~F9A{+zpUZJ}czS%~l|c;>+# z5lr>n+6F=hgcu3{b$IY5$hI%b7wJ#h^H9*SR@n9h6MYZ96n#%;-Wh-Y>YnhA?l4+b zm74GFk*l_QlWi35EsHMxEAfxi)ClH{aw%yOO}JJe?x{oY}4pT7Oj3yENn8 z+r2vb2m}ip(?h4zEwoLU! z$@uL-XJWrryKXg(h5ppe+2pllT`viNG8!V(aqriPm`Vhfqpl{b z005E8;i5R+&si}y6n7nxU2_=9SZ;sL@rm&4)wPiI%FQ2n%aZELBlftGOVHV( zOQevlqLr(c{mDj)%WH9sb6L8y#C7#5U0$O1er%@j>Q{;0Z&RQK{WrO9*pp%^Ey_=- z4VOh;D-jPY3RGM%i_Cl@$&ajFt=)SnVZFf^*jUC~F~DS<1j*BsgM)^^e~h{0OpkYS z>N?JrxU(!IKCaNVm@HViZk{X2EwzVCCHnZkr`;ddYSmrP{suObORf1}YIz-xV{sLU z1Vvh8=NZnFzox2pTwUHzIOMF7Z_+hI#UB&;Watt>LTO#Bm3EyJ{cL6E#p-+asr>3# ztwroA5|6X64-{X&dg15iB^kRfbUPL%@N>zP)`iq&3y3f)3q#x$wj%LpxW7Wt&R|Gf45KD?}c@Pu0^Bd;g#IjhCaO} zM}^y`UY=<Czm?sPUeA5CkE9P07UpS2|;eAcE*>79fQTDrPi*_FsRZkClgfu}F4~rt^{-T8ny*`a z4cgxZz}qeuqinrbra=1L8BpTCfa%TYw~K7b%(Dl#J3AuSgW7n?Z++yo;B`ojZS{5b zD|^&uwB~VZ`V8a4I8y25ho=N^KU?*JA9-TCVv@M(GYsm5tpAaS8ron#@NQaV}dp(lGL*hrzEKU zv*2&faSfCAF5Jsz`Xk+-B~?1p?eKugHkdgIN%(xA$JiU$E++Qzyd#2Rv2u1r3Xra+ zb%`n~zZL$Mtbr_~X$3W-tiWhGc~e6eh@>X3^t-sVXas-<<%~x!?uXHm9S={AMo5RU ztxJ)G%A2{ZjEs$~zrK1vx4&E8MoxzZt^D|+vAFNsCgdo=5r?e@BHrwXdSo!slDr)w zjnqjFzMHOz;X2s%(9I0FH3c3}&YtkwsGaP>&o}vEeF@{IuEePP-kSuIjSmw)1Rw5} zS~P59q0c#WUYkvi~$Bm$+sZsfk8r)=r6+WU@7rNO;>oMnJgiz6@)@ z`}?>E%l_JMzYk?d(J4**u8?>xj*~FvUR>vb3{;ei{=J>GI>h{l5FW8aTS3QYwZ@e? z^Nqmo&nB%MKX^;caPawa^iM005L2&S5l@`rgFFad*OuyY|2E0z^IjcgLN~_TPw#^k zWxj*9=GCn?AlVsq4l89%f%^@(X!OVFdmFPBUJCp(ZB<1I>TVX_GE~mt<$a^dj>2OI z;l?~Z28XLPQsXA_3o9tORd0Lg23lJ^&tTi82%_p+8G`C|7v-M5R-bOq*K_p#HU!?X zEB8a$m3uJ0QWUFFuyqn7^+j`5-K^|4&GKF{B3AhY=;X&W>#kTVl&pmLt=H{_l|l?K z(T3aZpZtaku{yu}HX&daUms!51twGw+eeFW*8sKz`PGT0{MGtq?5zFs=FXnf)*aqa zpGhtJ8IC^puX@($Z3dSh+=m=W3R36c@Md8dnF9i+0B=k;jzSIXT-x$OmL13Os4)JFO4i8CC0U z^7i&l*IZ$0+f&ujis29?O;Qi6yUjC-jO^*~J>v!dC*zOa^?~aL&Yy{up|=?R=E<(V zlDzs!_|r80%gEr!CXw!X^iTBZipz8QlY8U7jO&%Qzc>dNCz(*Bp;F(esRmG?TWT-b zL!$2+C3CTZ4xpG`+;z6*<6tWFSLaR`i%(Hhf%<*8+g`Xgl+4HPaDTQcpbAU?I zXit>?C{iZYdg^vPki;J4^TC*(ILan&NGF`SZB2;|G1lNq+Re&yWfHTxcI)9g#$d$W z7P=RUS?Zvrqr)B-5fN#uo0u?CPyzU?sVD}ab(i7VOlkKr%O<1LdYrw3oY&g-Y*Ig9 ziyaFU3b}n!tMF_lo=dc}!OKF{mDC9}bMwryGkt1PX^~AF`xL8Qf2YGB$>-q}$DW-t z$q29NCUi?vLD(x&>-x00Z`@8d1d{-(1b7X;48l>!9Kno0Ab?z%>DI%G%xr9=5#LsT zk|VC8+N^IfF075_p~#!Qg#MFq{PxwR!M)}S)!F3rO!wAXJqo^?b15R`6d)usxp+k2 zsaY=U?d@F58OvOMqdC^kMl)=Qt(G9zcIw-vZF4yk$4T z&-i0K)%J5*SuF1nL-=+j@XfuWKZZ{Ke`huSlMs!7QZF2}d|c;<3H~2`hG0FhD!F;1 z&1pS{n_tl3Kczk@`kST1u|Gb;knk{3txN` zU3z_U@ERm=U|#?pI=9;Nw8djs{|?K0`@xJa4cJ@m@^-+|fI1TEeAv?U%eg%jy`Iv@ZAE;1!($#CYn zc7}3R4z%KU=*kk5+gkXfhtl?IXlTC1eB_YA%%UY;m>_?Q#}$`wi-l#G@Ti z*Vonjf>-T6p6?$fiFNY>;FtiNiUYcf-C zZ|PX2a1~oQE5<#d94JdiD|OBTq!5!BNAL>$io=_zq0+%2BhTekP|p%`nE!cJm)7m% zFn91W-Oy_&ii+oF0nVqN-mm$cZ9?tpgt2%=6K1n5YAKOQ)L?S1@b17B?GhP=YA1wz z;n;DSXOZ|zCvY&Q&2`=R%&Uw#;gE<7?O(wQ1(#fq;}t|nmE~UyNmrnmP4o&I zwcEwLdVR7@am!0CofUHpC6l4TS`!d%aed;iZr?b9YiS1#zpN0Zu(pKe*TfsEhy4lHLJPg z2c)kXiqHea820&>Rq$|*>EQ99P=SM%z|u+*-1Y9@vmD2v-JH0fF4;&OotzTY%xOI) z13$RLHZ8r6;>`&aiu_7J5x?neRi})7FOjC&y5)9s_@#bBf!t){S|glDLsS!Wx+T%V z;E?()qZ}G5hq5rVBh2n+X$Kj4AA0N@Rt6mJ_q5&%-bXjHnO0}OjS}3;_c8n-YP191 z7XlU&%H>H~<-$7mL`=7&IVn*b@VwQ8ORSQd<)(Ipw4)KmCp_un#}Ig!OFZp<7~CB6 zMNr@aFOC|jP5O4oF8(0CrMgu%iTF7jGBb|4BiOXD?s{vrN6#==pZqY}*wE$z%EipN4C1#(4}~f* zfs*Ck*sPV@7)Y;InebbLgHfZ2sfe;4!D*DA-}ooW_d9T3e}uh2Fbze9f-0BtIY?eH zPZd!X1pn#o;%lDIAvz%bY}49w8ELWnhBQVR8Vv{{Lu}^_wMo`ua%zTMdc#JoztLy< zr<79v;3b`{UD;76Bd=Tr)`jA}O86N<7+iR&kd80?b^-*}SA8#qE=A z(>}-`g$Cm0Lt2b$;sMNgM13n7PO5g^%;0QOx`|BI@`G&%pJxwVNza2CiiI@_-q04mXg6C(+I@DVWP0kr|OYdgZrm-iYq@J}S`|<{|JVd2#P8DV$ zHU1t2yJBFL5&YYgP( zFOM-nM0G96%b4rNR6PReZ}jE@|-IQ@^ccU3}BM*bxq zu>we9LU|B~Om9t&Fk^RkAG2L}il%*|UE<=LE=shCuNz%Ca;dz6E4#5@TCt+})=X*B zU4mDArlJ;LTp^vo9bt~k0DHu+svegM|J#j?W(>`>@&B1(~rA5$d zq%;U4HLMqC^uil*RfJ;U^~!UoarIhZmiAI1$8Y=y z>t`9+3OS_X__*rYN>=HFmP_@ylp%B^GLm(JWD0*}v%<);g1S!|VESKXktj2Xk7dpbQ^`szN6ORR|Ojfnu*ovSL(n;*l`fmg#(nsmxXw%i0}b8Oep{fAUeZ9CV}gy|iO>8Ldnl57rK2o|hSl zc0F8Ssp%eZoeDYhrQDdT?jMy+v0EN-y@Mbx|Ef~_?DJYWP?gK;` z7ckzw;IL(E*QsQmEj60r|v?vsbvk%m96dLec9i;7PnEy;v)EJ8bwLXzcx~fQYx1)$Cx0$Yf=4VrvIz(7;=rOo#MF%1}3hN6OKJ4n;m7!J6%DXJIP~SE5)je2f$nQv@pW3s|sMbZ` z;@iGzRK^x~8=2{(KH?uTJ<-day|^N!gGte>diQ;7+STncmSymplIuOU_Y5x9{4-ls zX^zW^tM@(ee2!WwG|G(9sbQ=f8oIVqm(c^)4R5P9aXc_`5c&G#y7O0JRN|KwqsJkF zI?}O{%8EO`CBhAMzxsI$&7D(^7cm?4G-P@=DD~Ab+R(`S^Nrwpti2NO^D6K_EJs4-3@tsag5=;~FMs^GjJxx%;NRxr6n&wqgVrqNywgPp9)Uo0` zfnp3<#nXa3rwQ)Ciwot9f67aqZ5CZ}ik5bn3$Z~Hm*zcJZ@3r)lOBM|ZvhS5pn<{- z%PvgVdYQkcZK%MuP*iUG&yum|*=ssgD%>`ZW6^A^5;Qan_owbNBLlFdK-Eb)Q+qD2 zlwGBGCKK?A+wW*U+8Bt7y;hADVWxRKaKrWUMQOLWdm*H+FTQw$oQVE7<<)&!_|NZw z!jwP1SGzl^V!lyYk5s3Ljz7As`Gbb$^PT_9A^)dEHOmV)*JrwD98hJW^91P3gS(@r zPoIAD=n=5E@5^lRuB$*u>RBaok~9rX5lzSGf!ngOf-KIHK+^AzUlDnB|{j~ zoig>IyT{cEsQzicETwaLRI$k$o8o^=*vwXf@2E$|fF8Z6c=P2AP!n|D;pitFr&EA0 z4NdX`U`o%jny?%V+u*c~-GcffsDetOK6;)OK|7CbG?0Q(eQ7TaSiFmIH8Q>(Qjyn! z{<-exSBCkv@$T>D7>}jPs`OMWd#X0(iP|Gg*=*2D@Vt%rTZE4lZ}yde@}#3_jlLf; z)#uS%eXrvYv}yi4E9ia2o9!z=u~N~+jvnrxpy$dIN8eJ<_c5APc{ctG+IXZy2sltVl~_@(-$ z40ozLu(IbvLo9R854$v%hwz>)Ru^Q2=n72i4c z2|W_)JN3%p7;FPKLbIJLyvQI`z&S6PphdNSi23t1g5c3|d5y0FAKt(9FUej>8%~dD zFkDHeohLrY7)_6PTOoc0_acr$%4aD!e^u(X#E~rvhE`Ob-3yN~sOdS+*zhLSMe0uE zUh5>n?QDdy4(hQ@>U5?BS!-^|6h86XyBdM^1})^RxQ&KC!D zgyDVk0;f9&-`Y%E09d!U(yv2?6ZJ33~% z8Nj(WT>p+mmQ6mx7mqVCRQ`&hHF52+wUY`3D*2wBWfh2fksDbz1GJq?!^m}XJ1ze& zV?Dyk|3fw3KbUpj|0_X+QPM5=0?mEiD@RbE!g~Gsb!KK6fVy+|8)mwnYa#)YJPy3H zb8W5YMG?@c4WOv0{4q319v31%JT}BWtxkPM*~HX-NEFU~D|8qQCMbF=`^>4FE+egj}_MlLJWgT})%6tnticQ)S?(3$%aBafsoH z6iePA9^NpyF~pF53KZwzvc^zp~p9iAtT3aPH3F? z=dBDqxTD7nrMs4XT4bfGzo1lt$&r~(%*wTU4w%08v|B(zG=fyC5l$3d6wN=TR#NvN@tAg zHi;Th;CGk9X)E2j1iJHpIci^gG?gaA=h|0v!;Hx1a<3zd^5~Tw>JmCKmJcB#Xn`7c zBE)R7q-lAVTrv)K!LnqUXL^ziE^8lo#PnrP z3rkU%GXtnLjO@;>^ZpN&4F$2ER)%`!xc_LMK}G~CbieEXY_`+xFAK{Fbl+c&+)Bfc zmM1&1CF)(KE_1e+66g=>cHhs)bBLUP+CxB{F6;HDPboVG03_0)o`^MWYTXRN-#-%O4YN!nlKap_*^=~J16XE@Hsy|j$++ZW4}uV zHhBexA=!NiFqkn6U4zY_6*tftuzR@p>(gJ>VE~C_Z9pe%S}w=3q*ogQ&Y zBi~WJSM2th=YCS1-}@LEV>>>EXcNofhl5xa9&v)DKE%thWxn|7`xsGN-|9DJsZaL5 z*HDffJqA)pHb|$tB2Be2AlZfru1g@qM8hfnuDUj!9(r9+YVph?kX*55l`?02H`7B< zoD4GH(%t$ZJ?XS4HJ8$JQ@(joUMrhbSaB{Ho)Bw?FFb$de(21+qhNlVL)Mu2jYNK&1qR4JUpw}5%#N?SFUS7 z=wSxI@;G*=c01j^@cK>awo7nQvsIVu)asZ-qLP!wgQ>HxBr(h4lIDZ@OEX~i?L7An zrcZ9fSL9UL4wF9JIid5qqSF54bnw7mMwrIA(xYG6uc?PrgfmEb+11y{Y`)OPx+r)$ zDyzTbja~`dI<#HW3)%4Pyo(<8(F>Wn9QkM{SStyyj^FaDHaXSsykhn0vUs$?N6S!A zwjpN&U`v5?}uibt`uzEpQ<|%8pr6BCky_J+6<~) zX@3`>E%HG02ThvxyO?fGimY+Dwq=o|~=X8rqu4^Lk(PpTHa6 zhmfuNHSy{R6YJNe9uxjs>aM)AI|v@aN;%Ul03vD$TBY01%MLP}9jm8=wNyld-#QQuADDLP+)96#`S&GACX61;g-%cbvXb-+nEd@((Nk zl)2fxH17fSJnPD4>!#Uxw~M^)zwZtwp9&ZV8D42dFfTdZP3UIG{=sgWw%?@p<#+4z zPU`Wkw=Pn8Hf7T^jI95JQE6(5Hp(>)E!6v6va6`<@2fmRoMkUkjOpG@mL|28GQH$I z>@Sctf<-P-yxyVTz6-lV?lq*%Vqa1{KkU4j68_K|n_+YqPAjhd5V$Qud1%peV9^x$NgFZ zE8^!flXo!^Nz<@N0*z$OTYY(&6~Lqa9f=I_peneE+O%I%cD%p(cvG@lQ#`>PW>ST6 zNz9fuTSlJZ=zceGtt4>(FpUOd4f38aC_7Jj%Te$9Y?i+XSCx;5!xZm_(>{r`pz%oD{gEKMg9XwEYJGx|Sq z*#9(b{MVHI--rIz9RnSyE5+v|3HC!8yz{1<&Ji)0#uAdqd7b(13bSVC?WyekMAixv0ZeYl&RcwQfe9^hBgc zXrY75%$NlyBM+i9`jL_OmkTh@L_}Gv3c)Y->b_mSry0e|khXMw6yYz~m!2RwbwYnM zW6mANZ5;W2qVUz7{!1=qqwkEHzJ3-gpB~}MP>vCYX_(!)y6tMm^mNdjc2BdWR)Sk2 z44c_BHgVrY9dcoDKj)tP*gW+9SH&OG&@xc4I;`e8610@=N6CL7oKY$#c5ED}?c_lc^&Y+p`<^9oDBR9Eg51^Oeb)TaH zOPnodV1oPz&C-~gOFu_P!Z0k!KJvYS+p`UZ%8hx7#>z!9qTvqu?A{2B;5D_Gc+<|C zp>s9%>*r0+-Ry+{!|*Af6~7heAmgVs=u7LTZD4<0Ce+i5;L-mkKo4>uk#%iP=hKq< zs9`Me?&R9>2HE!=6$>&so=WV!77Wwv<7)(VjJOkP!Sn5p15xNa6yV0b_pObnp#iU$-)7N3Ut zDhT#AE z+cB7NIiKs$1$YX?wgqk7@rsVV+};Te{Ui?~a11IO%OrjPCJ@#MnMA$ERUOqeNiY)m;pkGbuP~(wN1tIuw#!ai`o=J;SC5`fq z#e46z3+(YF&Zp@Od+6D^?7d?e8uOaC@~`TRw5nc+VnB@Lovw>#ELXdF}a^3t<$Kb2|Gj#(%+?{`|!7+m6~8_9xTOYbCQRBJP+E zzD1()`$Jk$OYC8}*ph>0=)jiShk)2*tw-3d__w!znkpNi8XnJ!-r^`7t_^kAn$ya= z1}xy(zHb3FL$@jwcSF5I0(hcmGobx#%MSvYcv7AbxW=;Sg9%_?-UoeMfA~|8ukDKlIGe&Huhn^Ud~eU#W_sE#D)$=_cR+Ze+YTapD9} zN4q+b)pQXce#aPCf#LKYQMAC`PlxO5>)Zhj0lbnmIh-u31-c4Yvmr1&p_v2W$J>jz)yp$EseXj$odt=9bt zEd2`5tID_mF2NHd($DDGrSC5TFF}HgX@A%wUxl5-jn;ej?iP)1%j+H}0(Ti~%-mY#mPiZjQwLrpL$f>I>Xr zqE_KvgBt2=j#8dn-vBn3C@%hc;zitbg%l}XBHNYDuH#hs8RQjd-gB%1bbpga!uDhD zXbWEjgIw>H56$5(vF0h<;p#hkqZy=g^URgw24)q3n(Xvk=x#1t#e!TwO|Ni56CP3O zD}m-I_MP(gZ z5;E-)a@AC7wB*jDG{{?TYkI9hn0z03A0xhdt@k(U+4C^vmlG5qt;yjR(-m24t86x& zUYqs<35$B(oBAg%4J1K`n)W|v| zu*XPGh7G01l2mfgVQQDs^^rEpmg);%*E#@-9lkDe$E|ES0{Sx{R$;7_znGDq=_=__ zJhb@`nbpbT+gyNBAw|wlf4je;MiEGXs6fjSQ02<7Bhb%^BEX=b0Bn_G z+Paa{ay2N0_gmhbI4agUt{J=m@6M3U2Kv#S`*7-hF|cbCMiDovRn)B&{nnPePo(ap zcG_k|OS&rpTjXD>0!vJK0Gz>`wMv{{zExA@bg{J^&V&Q6d8P~S@&x;>XY9^ zYiQg#0AHU~0%0_8`EC~!@))?9ceG?i!zk2oTAjDEC$AFPOaDb-(a;)Ka^M_@FrI;7 zFh|J2^Lp&k2SN9eclx05+2T2av z_JW<-h61}_l!d|tupu0LM_k-HZm)?QUmCjTczhf@NEMY77ZktmM22qi``JB@!SR@*FrZ0iy%u_c7m+Hs9QF)zs43 z-Ne?06;*ijiN+JJZ?xF7H1SJ_d&3;#{1gG9-|3lKU@s)bU%*41HdZK9y+V-mm`m+20HUd>6#6zHMYb6I}zKGOW z7^N!D*>LV-P)#AmJ=d^y6iN+hUWJ}#J*A)SN1PZ(NW_toI6U>P$su9cOq$EETQbIH zW?&SUq^d3))wL{O`*U*9Fpgk=@G&Fw!dho^2}~P?-dWIQ=!20sD1ML~+N_-g(I=Ys zI8n(g|K43H8_fCf$KUr5fgsF5!x*cXb{p5t*adDoqb(E-AyjN^;Wor5?Ds0;}Ir5k7G+GVI{^lcJ7lbekId6;yi2H zW$i^@S7uqa0#AG&JYd;;<%>FxXOwh+Ea-#-h|?L|8%N*7n=hY%gToZYDCW3yaOXfNhD%;HTFLdC!IVwSSd*R|n+oFzv2 zmak7=FF%lDkXrOdw+04d=Cj@UlT*(gtkHiHc<9{*mU;L zNq8S>k3WvnPx%tqWAVV?xwd{F0_!M``Rtt(cUYGe7vV0w5nU@sV!X>1jrMpO0ZT>|gIn65I^r!Qwn{*C2kkFsgqI zrks7)%M|Gx(dMV>bN?V4x}>ZI4$zgHHY88989k9)szd`ZiTw}bov*fnyI*?)%Zfl3 z8c9OXAh#%^smr`nOInhz%Z`x(Rl$(X%K*U-g)rcrazyev^gE&wc(bclxXPcxivvaT zGVo56Qee6CzZ7!W1koA!i<7k{4)rNx&-ol=RTBU)uOQg-Eh`+T(t1NE`x zK}F|I5T*=Pud3cmO4HM>09q*O+YBA+E|Gd-Z>Sh6%7|Yo_2HH$%#V1~uRQNqI z0KSbwUTJw{@#SrCF_G`l$UOgmQX%DGHz;7vW9%{$uXL7Nu7*`GvG1KM^=F29S$?t1 zZdqC`^CV;-#$3&cqg6TOiK@fnG}$rf^|V~?=gQ+1mb7!CE=_3EdU|v6rksCxi4x*Y zJ}bFCmiUydK|J|seh_9SqY-|mF|`kiI`i)iXuQY1oS!2(X#6S=gSXoPY;m#u)E?f% z(DKNQf&T;DH7cQE{C);ITfG0S*2G>Yhvt!E3;Fk})*lQ@j~p91`Y2$mFadHvL1wAV zXhVhgpSq*H!T)|$krM`eVi0@_@T`YK{J-DXj4>pezExZ1uns~~Nk8C!dY*9PI+K!; zviA>_4F^MX3GY=9!RIKYU2WN5t^e-d-HC5Tq40Isd1|xsv=}Uf7n;JqC*2NK!dF8B zWvvgE<^ID}A8kr>n{TYeBCN^%O5`Of$+-qvm!>zeDYW}j6Cvk z0>>{_3>lAC%us0O_tUvEV@s19&4Q|~04=`WUjz+@MX=@`12|C`R${>aV(z`8nrhp< zL6paaAfN(bC@N9}0coLwQk9PM5_<2_LJ?4r-bH$o-a{`T6s5O-lmG!juL%hP0@7#m zJn#E`b7tl{>pSbrtTp)u)&fHIz3;vE^}BxMT6ix*2IwSH9L66EBwta40BzHlr|DTz z2jkuKt!f4VleT={XW)whj((iPYY8)*t>u2%ux2k|fEjvLf`M9%lD>c)Lcb5mc3N3>_Z{mfUT*})Kkwc!6*g3tqH*>c`jWedM?#U6PngI zGHzbC;IYjP9q-Ls9_emctu8jE*EgCUk8|y zQ*sCaeR4|#C<((o&1#^9oPMJFbt_J@Q5;p>;@s6*V-;Ii-4R^m}5ZV`mLi} z^fFc9i38mR4RSVQI)3Il206Rc7nK&D6Sl^8ai@!V%(UCI1D*&o5;~O%X!NU;j7?B~ z^Y>CM*0dz_nOnP5&A0h`C55W?7&Y0JRNcDEL1EddN`08H1;Dpqqd^k>E5x*_W3{1a?x$Z9=$TgNDVRHb_9y5S6xlZXNtpaCGb*s|cjMjH^^8j$_9!FQ-nxd%jc0NS%l2o+S0O z7{ASRpOjZq6no+?*mAn28!{3U7wY}`nirlXI^kQhzdU>kRPb-* z$^wqY8olAKuhrOG0YneRKv(fkrh^CJd7$)@Vu{R|$htwrnG-1kmB^H&D~%%4PjY0P z0#fMW4gP%RxK?HD^!#IGc64WJj}LH@*LdnsRAGmq8+ytl;H@q#*p1P#!X0=K9A3W) zgt(HASIFF!ym%_j02w;G&9?2B5s%G{j(>`FFH9Fkgo=bM+STCzA$)g#8gwL&lG~o? z7NXp2G>9uJYT%uHYC1-$dl{MY0YmXHCX7Vcov+g&*nR-V`^cJC(%$eZL`MHQi-)NB zavaX8@e4ieT%+tk_$_CNdi?i=+@auJl-r5tKDUOS)kO1)<~R5EoK7L)vk9b*D)icI zE?JUZ&$s^MYfmz2w>U9uiwJuTkS3*=;#>&tLmkkE+ZyJ54NbwaOsbJ}W%m5en;ug_ zVlN(eUSl0$qw}&9s(9?N`RjI%48`5OfQ!VBupb;&mHOnW-GiUF@7nc zkzDB#=qF~GMkwxd_6;kmJv~m1Tu#R`QF2n)7w7$LQS)GZt16qfPB~`R>N|&1Vo<1q z7IxqHI&y~A_a(9kn&dSL{-C!3Ny(-0fmP;*rMrYM1y|L5f>cUFP5SoT8EGS!T8;JH z*G7MS>(A`+hnm;Wp}7xkpX3jolH;Kn?LVu}im4p?sQrRB4E2@XAz#&9BcV}soXO6VAv)Faw}`$ogSQn^EgYyg znShsO@iUvVe*GAeT8q4e7dHSj86Hd~>NFl6fT1rM&G7J4oO#vIS5EC`6bNwxHVug= z|LWMP0x2lymDIZ|WH0yA-A_gBMo$hMO4_rn4)v0h%0?`L0I`vqVFavWp7)qDb+wwVw~i+oDSl0wV~HXLGw} z`A68kC`UhzCKXHW=rRv*f<-{dO8m~AYk1PIXBapfb({j|fTFjSkR0pWO*wJjI^+Vh zm3ZKeQ>0((#QG!?(@9k0Y?R)B3paQT4_Sj%H( z5>296>TWKDG(BkNFmrEtINTegUvp8G&e>AZqRMqtK}`!j)-*6)84dgN&br11JIx@h zK60EsNP4HdT9jo~f;WTzdKqnDo>)b55+9=e5MOgN<#CFc7ILrfe?;n(`hBd`Q3YsUz;U&KBP=YD9(5V)`t65B)o|SP; z*bp{U@_I7tYx(;o)SRyHANk_L{nieZQR&qIA=>jBIZ-gd& zg2yY9FII*q5g&8XxJ&kP!-Yi#H}=2HC>a6m!Y5l>Cd>1Wk%h9b=^dYLIis(N9>wKK;tz{Lt}V;KoBXb6?1P)!C7ah|Kq-Wy~;Oi zL!8E~mNzo54t?>qYDih#u0MN*d-wnzB&P2|+594&tUFfz_hvxgRifwD$AZX8ALCOV zh)tgpz)gEWUE)7$LT}99va5zaE*VLYP1=tyl}_N3%(66#B52USXw#gy_CZ*4RSvnnra9*h#}FhPA*N0RnTjy zG#oswe*B@6}+pl&@M&%R_dHBT;L`Fni`%s^?7}2TayO_FLDUHwnJ`)yGE)YdX z<3hEmzL(9fDLwb!)oE>Z^L=OE2} zNS1_LnOwCbD1V+9dll>B2zag(EM=7nyb}M(W8-YON;Sd|S#o?um#Vj---&De7~V%d z^j>KQ&0(0IN|$L|IB6ShR@&9z>X;bex%d7eEXn{WKxE%ES^#Z5?v--v$(+qTzPWnv zW_=~x@%6Q|{PzPbS_7E&*~uT-Cf4dJ9=swZLc>RF1l1pPk=X3XdV0gIjVJKFB!l1{ z&D>eZ-e=L}I?oI#dW=%iXuE`+<_x@d3zuFXkY&9L;sPF)FC-eZAy1gE!=g4h#I0(7 z=&tb8eKr>&GFePBonl*0B|8)hj(+Cp2Lt<2Hl;(SdfT`lgVpadpg}=RhWv&G^NTjq zr74ux#;QFJ>nI4cW0MXm!vzl>!W=1RrD?cqwnOVEFEvd});`UJa2PoK5MRt2?fjYj z>xH@Fs|&_gbJr(NEx6jYAb54ug^?gHu(v&YvVTD*-oqc5cwIaacO2`?eYLfa9PaQv zY+9ytNU3WicK76#@%a)*1bj%dXeJHY9!;HzIryR~<`j;Vt;-^r_+s|~%a~?)Mcmgd*8U1k2>h`_2Q4Elx!G zakxPrxT(OVg7X0V`s6!QT%T6sZ$8kcjKh^_7rf|L07?I9Tpe#{c$9|Yuxr+61DA`T z-1alc>wnVGKOJ{2x9hvTx&C-bst~lJmF&Sr`c}~S88La?rlYSMC^Co-L{w=p$nTJR z;IRY5GnJnk-WE+G#OAJI(;TOI^P2XJDWGR?H#Z1kc}{%-nY*jPR3xev^zfm~s<--M z=Welc&n6>%NOmh<<+4hn)ZFw7;X#1}_mBtLvEkt^P-z`_&bNfJyPwI z0U0Gas>d4{OjkNs$%7F9MYkVM&+>Kzr(TrzxE4N3CoA5Bp<~Gmr4MBe+pMI)j9m`v z{(4lLTa|kvAL)jv;aev4?M>y0nPl?eqLX!9aUA2d`Uk?tYPaCp-wgAOGB)>JdP=k> ziM&p~N&xRahg7qjh**0hio?ZB?Zg%P%XkWkt*;aytUA!!#u=$DS?=sdsbsSFYsETu zca10I(=VR=DR->93Eq4T0XJ$N)($nk3(QnP5&UwU$o`p#`{Ge57A zCmvarSNRz86_IvqVO{;>fnm)RBE_D_j^IBczs^NLI3GGZ6$UF9@IFV+sDi?%LFGJE zvZfN)jO%%b$6-G_%A<83r+_g15l`p>tULCtxk)j^rN3%renf6=Eu294d2e~=&NLrp z1fV-wC+5CV?B$iXT>HA&tHE<{i~0yujP7Ghn=3e7xl z(o}dg6{~E}mUdG)YN`Q|GMK3%iJoHxrCJ7)VY>UNJO%Q`Pif#Ft&{JHg>KG{prN{V zdmX_xaXnua4?gQTDzxOUK(7N zEWUk5%qk&u<}XY?Y4@@6cJ5+!NN0(}HwlF^Z+PlE@CE9v(-fQe$Vx$@*<`P-cKOOc zq5hWrJcKbN{j&!*OR4k)s?>Ek1t8eg5|xiRt?hMVt@T<6ez6+rU{L|lsSLLH}17pGAS0emw%@->$1n@U#hLE3(+ zK~Z8)d_!%!Z>P^G}*FNQwvL&2Q}@biUC zQ|U&LyMh7MOwI6sCq>RWeh?hVz`R*0^~1@Q`@c(YR)(E+K?n5`i3) zbO;UW&;Q97dzwpot4Cgwa6R{rzbjCH+8kGY4C*?PkNcR<1x402xEBY!qKl9N4;fS3 z_`v+RvTCE(*=*a`^&@kk*A#`Q^we?_DM)nS$F z@~{}O+U8ccXof)GmFJq+ZyBOi!*$-GEWcI*uc3tjvy>v*g6-#?d=ZUnTm)b7MZ@{G?)==dsuOBaL;O_K~npo$Y_P zwzHgl@+j7UEG1BVPOP+!AcWv&idgo#~})9?&X9R`YI7}4v`{fzsfW#erVpt(8Vy-_c$fD1tPo{?~VUdbCa56Lx4B<7>-ZA)fp&H@F@3`33>Vt zZwEQ_zfb9{NI)$igU&HAGpR@65uu#MS-<1)i>Wr_RjNKt>zVVxnZ)9UX1;>O&e3vo zh&P*Ku53ado{keyftx|j`Gg@)BwD71%_-w_q~f7@j+)+$E8clLv~13q5Ww1}(tJl* zV$5|y@~qK2OX^#q_LR*AA#5TX|Jvape8P-nf^9x-Mysh~fAuYdk&46k{j^y*V1c^3 z)ZvloLSw9CwyhB;FDmQk=IV3jRWFM{*E;O8j{LoYA3ase-cHwpd<(n@H$lrhJGJ%F zjM3}Z=bS|A4C@Q_6F`q^2l8?n{qHnCi9CD|zMcx}&14Q=v%i)$OXTfKF`dr?K z0KmFZe5W`Vaj2rdOV}zCrlqVY8+*y+{S`_gd`K^n;3(ngb5Ye%irXJ(|*T_On-3JHAZ(u*{ox5sUfEv#P7>po@8n4fOn7RCs?k~^ZF z@w^4AIVA&evgTMh3JFo$K12=f15hgEF%4T4$u)^^>#x0fG#SPokhyw`+HE`h?wU*m zrB-Kve)MivH|Od7PxUM9!F6vvV%Xs%vJ%t=uUlqKv?4W${UolfyPb{a-_5#d^;k63 zraYNQ2_PdL|V2rSDtfCRRVeVR!d+0}9MZcV~!8~GhN{5Bp-k;B;TZ=wVpNDn58l;J%Bt?WmlaTfDiB=fpBwnLkNg+O5>X!%whpOOn)A z`M%B!YDqr+(IQXfc;V#_YP#;T-6er|b2K)Zjws&*>)nf^u{hewW8NNurFLEIy_3Wq zlcL9ld-OytvUc{oqZQr_p~F}gEm+{=y*jlSGNXj0rO2AE?n^8 z>aIon?E4`QXW?JnEfu?|$4dUBBqaAVtOMI%8|~^rZ`;yA<8(dxs#V2U4?8M*?7sR4 zN;C6IhH7~^>34_5JJaB82+CK`ozTX0-t$*H_~|zFhdt5nJgCUiw{d=KVr?{Q#UTC{ z(r~2Vw#%AA!EELNJj0g|Y((60Xx4_w`)vzvB!6TjWoI}{qBx(iN3M+JFZw0|F1}(( z_g8vG5s95=vcC#l2+KTibj^GC@^yRLU^06oR!e9)SA@_%_in^$B=qaNvP9M=9Q==3 zSsHQgJ9E3-9;rMDHgD*)GxgQ;50f@!Z^)>#;FDGh>?Rp?WSq{i4bScoBRyX{j7fGX zT%4BcSzRZxdPN_E8RtP;>+DaHWt>!`ZS%bP*|sX;&$fReK~a(3P{EVn<JDgHt~9dpxt9TFj}}8JBh7X3O?Su zkx7-5s%>|&@a?HrF!b>~u zEQ99oRkTL+!UUM;lhs8=tKELX*NhC1I?vwjv;VCz82^>3;@3@32f$zvyYIg3vpY#0i}FbDYBu)gZg8~bxlwAAU`Pp5N%D(_e4@1w>z7st znxq&0Rr#3)6NAq;rN;(`9h!G=iJ2drJ=@@K#X9fpj5hN~@>V!(8^CcZx}L6fcD%k; z7RzfZ1wU|W$e`8tlZoe1h%coFS%SpxGcf46N#1Xncfs%Xopg=05)N(9@4A}}Qu#y~ zbT3|>3uO|wWS~dh?th=#Ex0v1SKT);ttQ>z5D!=;Q&Vje$jPNHLk9F^K9fBftKk~| zMtp7qs52cya6RUaFP#?HzEEp)-jpy?SlOH+(;Mp!1473WgAE8rn$4Xs1r4*jNSmU` z`lj%q^6wpTz){(MCJShhMh>_7tWW4jw&Lp~smXU_nzzJ99Og1_09=7K!jM+DJKo z*p|g~d1FR$cDFy^zN*N4;|1L7_2n|ZB^5jNM6kd0UPsjbE}s?Pbv-JeU2q4MIqp4hqr~}B}04m-l5R`_sk7bV%^VgM;?wTc7z<05JE5gyqC`EE;;4G zQZ?6~GeMV--J#Uu9y@zus+?XPzcas}YMf zM^r=xc0LnKbNN}+_~RaZ*B`kw8(m)qk$ zF_hsroy{a%I~mp37BKL=fH=2AGJ(adx4V-H-D2mpkzH@j4H%<<8(ctB%ay3qMK3L(EE}$v@W@uCl>KEZ@Yx zbh-_6-}8f<@m^aJ=mu;D2b7WL46AbXyQ)y)^ws)Ht!m5R>sq_5JqHX8HvsnF-O47l zaQ}@gL-cO&P*hWky9zJ|kPtga-y3hg zhzQ%D)YWYn-lXvq<4+JiHI4GN^OiLd-4DFtxWtIWcaCne@E-%|CUxljb2Gv9RTX>B zJL)AWc##7bGr}sxKMw5<&7G>i@9+a+kTeDZIL5*b@Yv_EZqQAkDf9~u=qtWdvkS0B z*FLV1Ggrbpj%jj1m1-J}e;L@N=~LI#y54OnOqegDW{7LH>NYC6D_0c_j*tV+c6-9I zr0^+?Z_KIIVVW`J#WeZZZcqogQDaH;)Sfx7@6PNZaiIOGcjQXJ$5N|G7o7guEc~39 zn8Q6DQjdu*kR?P?5C^h2kVb(0E(-pjt4gCam|IOdO8ObRtp2Fqd+^x}f@g8Ch{*#a z1gRh19e0-0kDHz?{SFIpU3D}vWr8ZKG`)TW@;K3pnzP4dh|Qu7fBN$!HC&0Y2P+-K z+Gb-3HWh~Zn;XP9$q83OabIj;ObdGmMDpC->#SegEJTZ0a;ln%bIH=Dr+=Su=8?7o zmqVy}3B#11A&P0Pg_}Jl5&rR>vqPh=xG6DPh(q2=D$CN0zF)RTud^YpLH)#Dx6(im zh%K>0Jd*@GN6bX)y6_x0bsY2x+M?JwDqpTVE8x8a-}0sf)GaELR#@5h`pRr?cBb34 z=epH;TaDkP>e2LgU3i-pKSE=~$J?{L&R)2pSmi({7&HV?C9uGqw8KJuI_kD{#T3`> z+&s{G5a%z2v`bVddM}nJ`ps)c4@;-_2&y8hBy~=-Bw9N0cE*0d&1x%Xm#%BirpD_l zB{(|L;ds7>F<|`*ig`GM?NK;Az4vr;CS&|=Dw&&l=l&1fi|YE;1bh#;^~EnWE(hJJ zAAAl<7_oWDJSoNbYEEKEAbZ1~;HXa@;XZ$%A1ee!0UW*ZFxyFXljdqd1CaMv9Cy}7 zbuy%4sp?cK59F8G8zoPc{+075C90C-`X|IxIqsfy^dZ4-%UndI_lrpQ>z0ucawo|z zK;nyy*O|Ha1pay_Vo`jlm-)K?Ss`!0P3wc7Q6y{;HE}uqN=Q}EfsXT>o3D%xnKm#y zU^r*)TEX9*rXFD5X0?0-z-w7MXY8^Tanq%-esq$*tH(+b1Tl6C0^y=yCry7wlbSYyrLwm>b92)S1HdW)IOo_Aa`3ZMWLWvoEqe*p0VJb<&)WrSYu7$$Lt=^c;&4=F~2x4k|+2 zOgp%QJ*>8gwMOP^>(f%0im41#iac8!&MM*>%38e7zcr6`2s$*v&<_lYVQ3fQyzJgT*%cKo zhVJiF5`R)?gO@X}Kw){wJ+w9dMAP_IfHw@E&OLNQ{PJ_gMTSKy{#%TASm0 z>4#;xZ-6vAk7d#v1H`FB9q;HstBlG;?S1#J9;R}byrKlz7QHe?J#QGDrCM^8hBhRv z(mUF(>=WmF>rpmwL*za$s_0b%`TNbq-0(&iISG!qeVZN``e-IO4qe%2Pcha~cEsED zsNnSAbUlW|iIEekZpaRP#d7vim@OertH|F5`%3^{Hf=v(51fFx+!gjD5AH>KFtz&> z1y>fPq12ckC%qf3bOs_XN^Ee4%Akd5O5bgVJNSAXmN06`XoagG1m^iO8uZJPCsCL z811aq?P|YWEyUHuwq>$0ORxMYi+;KVx9WMXE=!kcoglY5MSfecsq{<5VE!WYa6hs< zXXTU3E;VB5nVvS)GzXOKFsO%bNbL!o&W-N856B#%E8K>HL}-WHC`Cc4wIV14#KG zXNkn0#l%8`OhB32z&FfwpNP6%rnAW~pAIIb<{hzZqaimnwSVmQL^hN)|1+7oZj?LX zi;nZ*HXU`;TTE2{EPY0bN_f<5mohgyGM)YHl&(K|EGM(UkT)(h*KL4m8n0g z>sfyLD!|3KZ4Km3>E8D`5IE8i8h_nT-dDv`ERbd?SOUN)JYBQdbz-8#@DZ=4leV82 zG`>5UNenqW$L1>2nl2A^;ySF2#e9#D>j7|wL!9x{*)h#+24f26u&W*GM)!k|HkUxq zNzw8W$Py8;(O()2{(G|-{{>1HDZ#;)aMDChsYp!-AglgAQJ-2p07ti;btq1bt_3|Y z3jes))!gXgG!HvJnK_nn^cw&(&P)XKks5n-9~_2EA0KA$aYr;|w&b5n3N{yvtJ4)2 zv+DRl_k)_`kQ_wG^8bpBTSG-&THG~&2C`wBm?i{54|Cjl?M-#Xi91&u=;YQZ@_Q5@ zfw(dc{?N0hwawWk+_Y3DR!?n>*p8%|*-6_SV(v0W8e51D^4MFgE&OcwhCChY2DLeD z(*ChJOylU17Ng`wg7%p9`VU$Y5Gv7@tc3+EHP&)qCl#lM%}#TMxqxKKyY;3yjtW*=;1wp8)|* z1uUs=iMwiEKPkN-`vq=wU^CpLPsv1gqJ2&=OcF@xHTBDw+%2Y3U2|J)ucl%SzK@D= z_Ql8ieKfwR{AmsAKWr4!P+U6QcYbsK1Ov7G{{?MorW8O}*PH4|%P_6?+q;9A*1AY3 z!5@N5fX~<$TKa0G_$%-CFNsltI+GqvO@%l6UiXsR+Efv(kD!J^8o5SiZMFr2q~Eg} zCKrhJdsT#(Jl~HsO?fjVbbLVG(7emo6+a|M2;gG)7siQc#lXTf=Z;{UejL!KNW)g! z>p~f{=*E2RGM{_pVNrdtB`Wu~BFV)|uEWH={GVs)GiR}8MH;Iu8`4M8kI~0!;}v2y zOmHGCCIYLd?}>gs?xp^K8#zj1ygJ_*`SF&3yQ_=w?z^MgGib*&KzYiFdbzq(>}as6 z6s#Oj80KfNy0K)cYB?_~>@ziV9gyDC??W>thI>4lZS_jV3`n47_l5jR0V$d^Q~ z6HSS8JjURa{~pWAf=6d+Y2G*LD6QkKl>Y7L_?jf_g zlRc`XYx%dr`QD(?q*Me`DSKq@|?;ep~GiAdrItacSS>(@@Vetz<&1C#aOf)KJS^x1nKIIrV0Wjvd-{teyvF; zwmx#(iQ}LGz`{M}t9{nuD@7maF(aoPUk}SJlN7$*hI;l4PTfnjx_`K1y2B>wV2I#p zUH)ke+{cC>ZH8QC-3NalOOG={lgt)|q_gf_QyL+ud3bo}OgrUnqPb5$YLVt^z7)Qt zz%TY&ZKf)T3tR6y-w)GBDehA;ds#a&**O%xo^wY3-+-SDA^#J8+O_{1es=r~KT(2t zZti-cPbua-p0tnmMVVbGEJ$>nQnOt&5M@B99+V&d>c_|{F;;6x`fU}H2mBOPOK?Ef zyh>=^u4?JQe`Ik`qVsN&jo$sis#D*b?UoB$k1p9~B$dSMmKOrWpB_+~HNYr! z9SjAZaV@HVuiFMH{TgaY!Q2H!ILuuJYpKO={bd;-sOVX0eOyEB+B|*A#V}O+SpS7~ z3w*OAWki{F9u3=8Ys0Y^NPEzioGUd8(-_b-+qrO?E7uu;E3VzJQr%)Bqu+5VJ$k6& zNCc;y@r`-DIPG=&kaHclkTcRxLbo$5$+sMCZnj1nG2{K_aZFA%@@69yoCTgDRM z6*pdSD#mqu_0_%v%L0`(+4@;8c2a45vlSk6iAX$Wu?&g2trLB*^2>Njd{+nK>@Rz2 zFZp|b=8mM-qTQTn^B0yHnqhj07meDPJ+GY}Hridk-2k&3%D_p!sFV^!Th55v>aPsl zsk}$nk=1n>8vdHxBn3eh;iGGC8b3YD}v` zlx}N5<$YI6ROK0UFRBukv1kp(_gh-RTgN+v9XK5VlY?q_&d0UJ29$9`PS3zgHCzu?g-euQs!y!^n_W&-iG7KVS{a zi$^|%HNx#X>P2 zZf6nT3h4DU(D5L=`pO0&ReU$lJR@CVXXAjf1;e$^2QsB1{R>)UFv&VZw~YbjV!Eft zGJD*Q^U2j>ob`W710Egub=>1qrikmh#G(uT5sRvVQB@*_^ssV!2Pa3~`OE`B*c0P0 zXMO9mZmvak+awn%WNy4%=`bp@VDIZ62B_Z%qOU|T880Irk7cHUIb(lsoUCXCuJiib z`3oSkZTm8Vs*!}*P7=X}cE17P&KfCJ>!9k&vEvDaV_|)H3 zYKC~bv;U~^M!$~LT_=JbvYcr+rAkpnGTe7JLWb7Vd_8+u{KT%#t6JRuu%-fYv}KRF z79-lwBl(O(>;#)J%-Ez8rTOfvSnVW?a!;x%ZJTDye)@~3ye9b*@Ag*$=t6Q(;#U5T zv!3>*C?lUKmyF`dAqPVxNvEuSHQpWb0!B?*Yp}(lR$9n$OrACYq*1XqiOx&b{H5SDS~eBXu30RYiMTYlfzr_(@Q7SeMm z_l{t6joFitkMG?CIxB&vvK2#Et;Yd%4Xrl#?$$llj!%q##M{2?wRY13J?$nJ=_-(G zc&++;%7#;~vXP45p+^3q=*+eGbM%g8VGnonoIqoudTXq-I1OF0I2y-hcINuL=Hv8M zmxPJqx!KGB;zg6oyzAuy=LbB-i=YQ9$1LfM>Y;$tNoD>Nn<0;=^j25liff2cjgkFF z0BXfgWm|q!E*-%RQ{g`QXJx zQX0q3EZX#je*+MTGaE|G)YUn!w$|*zNkD1WomG?}!m|lq0~VxeZx!AK?Mg+Lv&vaG z3i8Rn<)}|r!~39*jhUSFeD_XYdFO{X1Jcf#$Ijdw?ZGEc$Yi_8{rrNKb0P*<4ZsoZ zPct(x^=K^HYHB!Jx*^&LlKfcsAJ_`cd{(bQmv|}wIx;nXKit2+SQs*1siA#EZ&cz2 zFEWL!!^6sasn8MVztdGCA-P=7P-lrc16&VwBkG&Fe*<9vH#b>ijA*RS#5o@Rg(55I z81pK7W}z<*Jir%eT92j3Q7X_Iiabt2be_S)K$e2AsR#1&wnLiph0<_SER`MaPAGWun%-lE{SM7Hy7a`e!rDXUzYxwnW@j~ru zuETyWDoRqPr%}XQhFYveBXG7E{)ad$Gz_dT_j(N{h%lWP|rx zViZqOqps0|KMz3Y4$FsEsaXKGq;ZYX%YAItfP@n znRL8I+QTE(qc3YOtS~<2Yn{e*T!A>?dtI7)Pvp<A~SzUkz(FM8sR^P%W<$pWt4_F6#+K?usZK z4VIYuQ4K{xMxE~uFLx|eeQxh=XGW+~b&?KJr99b12yfm|0kmA6x%x+@ZpOu#iDZD? zJk|b3)*J_4U^58i?-AW0eC*{M(FD>$9V2jfgno*Frr)m)PSpl6y6IjXGs6GOiGIm+1o9Idl`U)A%s zf48K=XW5U|#_<6`(oya+sdS=W^lS7EjP>h}riK7_%?l!v?6~rfUv?D?_o(jju^E1h%@)dYpef9T$`Ct9TKiK=f z6uV;<{5Q$g?9SL{2pS5#lDPs|NtERcP>s`^PReknn-V0R`34~uWzgDX&RWS7kL5vGir%Pvc1jl7Yk87WoOpiA z-!0!OlyxcJ+uYy62tC)}I@wpXwK6_#aWL51jqFnnoJ6MGmaR$=3-~5ki?gUq`#n02 zF!j^Yn#;B9q1|(`9oq6TIU_z=_PX=i(@I_uMeI9}#`58P%~_K&bUf%iNH|vJ%hYC1~5eb;Cs-h!&iPmQN=zj1+4}S$eose+hgzRjnH1gyJp=D;WvV2UuF+7wYaT z+%2_r&dYH@p6piYKvZ=^{8ng{*i&CCT?p06Bmp}y6uOl~33DdYH(5ur=2R;N=Bftb zZtGi<3cu!Xcxdr9OtV`ua%0m|UMFHxb5KK zZAE=Vb~>f6)IaR#*-5$es#V)Fu1J{xHAv>GF&&m^Av?{7Url%!ejLlgPFQ z!|d#^zrz3y!m(p1CA|p7HowLk@)yI`c1ee#+F#}LF&Nep zZ9lJ7Cyv34<4to_zdwOPA4@C-GRaC-{9^FpPUQT+Y=Pb}PS>yG67cF(vVC=u>i@`q zTGHanfV6I{tVm7yjB{Eo{{ihZ0&Oma>@go_+{+^UZ0Y3Y2{AR{1(|Ul7rR>pqfM~Y_I$PHZE?(Dzi=1!e@e$1__J? zZ$$S~d2@Bx^_ISSD6)jn9uu@8J1o_3!?VE2jPRRHPV3)?f`5wC(Rd})LZvS=33GW0 z4$^GdlMu=1?f1RM_-nC>X~x#HCy;CT^DB1w~5j1Q|#doeVHB z2~xSu`}iqBrL-ZPQpza5yuJHZEF1ipzvouT^7GHmQgQU1lvvrF5>+g`keGI&unizU~La7A3pUGK|esrm|s^70Foz+TQ zPu86ZW4QcQWy#771J69!W~FUi__;Yq=6YWc5c`TEM#Pl*bRrIAS4VgSU6!KApcSkR zM0~Nx$ijFGQULC(cd|ZKEF%MnN+pz))`RAAF{N5*n14)x+fOeI!`aEMdF&3! zrE%rXE$f46t4QD3Pp76x)~q$k3fh}vwJ?C!qgpjzfmiTIqZo7jX>_fF9nQ})RU`uu zHoK6vti5lhn&jMga5ciZZ`R2s%Oy@HUl6w!KBgnV;I`GxU~zVEH8lSj8^_;3GFtN= zAZhkLfFvkF{yzhf1CPPvWc};^8IuXp_mIFtRV6rqfmJHY- z0c%jTUFIERdtb7KQv1hC7aD|z-_qdDTuY3fQqL{DxAK(5g8KVE@ba#vO!Q_I%W*v^%Gt0t%}R< z{fn?1x16Z#=FE28DVgG0O9vE>BjReUyzwq>!*)(xUO;W;daOPhZ%o>M6C_IRM?mY8 zcEtmCnJhp2khO6sm)9&@{QQmj0#N_FKmXZcm#46)8Z@mMnM@OonQcop0u&X(IV$&i z@7-Yz{x@Aoe+!^10Uw*DmsM`BQd4i`kFF)=v;t6q$4C%l>o^WWK3jDjjSw7{tUtpo z8ctOzs$`%~UTW0}3jXR1Zsud%g$TPySI|ncP_$oH111a`WuWq<&c8bQ4NOaJ3I}l4 z28?p}1V7#uZH}Ek$*fC|fV5Tk4_mrx*`G;m3UfYs;2MaGZ#(OEqlFt!8sG==sgA5V zj~DfV$<$qs|Jh@1tXD`UjZAi)Z2-|Pwvq6r-U zD9O8*l%$(>OAP14-~8@B@J{8w0Pl2O{R8jvC4|4VcNhFf)6mel17%*#s-$pi-vpw! zW6g14lzKDB!MO2oPS);~8D7OQbbwLjp%7ce?_Xpfm_7Kq4%QwVKDg5Rv%mgh(ok5+ z_$r=+r<}K=`%h*9u0xf)*tD?hYIUC99g9@p^Wp}(J5^_Z&YrM^bhF%t!%;KnmH#|}S#?sN zDSncd-TR~Alik`Vk_4Oa)o;_(xizh6s(1I-lOA;8thY46)wA#LI1)TbH zvxS$h7om>VSrk7+q`> zH%YIYJ-z+S^$Y#TCyBSrMenC{S9+pc+q=0XF95YzIIF0Skkmy!`%bMObsU9i4I~;r-8UBaAQ1 zek|W!;#4>JGaHdpNqfmKes?Us9Bl)O-)9`f+Phy|zSm&rEh-Z0|JQ)r ze}rY7q#fNO4FO)8`qRy7or*j^o0DmDhVe6~fB*yIqH<^Sn)%Ezcgo`J@CzlY8zBty zWxA7|i?LaKp<2N(2IdrV1p(O1hsI`e-uIiTxwmF&rs}PlTXp%5F6b?5?Y-9X{H#Fny%@HW+7nRM@l!r= zV83l(a(!Mqd82zr53M|ttn%=p{90RmQiB&y+K&2kqpFkM=ZPhs)CXjgOh>f1jyAWu zTA+d{xj1r5^UlOuOnnAaEWOeI-&S2;q%is)7hwA)F*59NNe#43V-@?0jVKGbAiMzpT?IzCel_OyO{#0F z^DXq?+dsAIOZVd)H?8c$J51J~!OmjkP>JW~CQ!e!`IwG-*eF319d0V$Ewu579p{tR zpDtchxZB2fr+Rbyz6*!KINcP_;QBQzqM2|qzKK>Sx*_Ei^8XDchS*sBuIGNaMc}BE z#?QgU21h+BJ-%_jjuyrY79BnV{~b!EB55fTV5kxR#NM3Mq~6(^?jhT{Exs2j__LBJ z%2|ug2Pg5#;pAj@yt~13Hk?a^Rwu&tk1EiXSMfmyIS9C9!24Z*MI(YJRw(*>;RWPUXJ^gtt_+vE+O z=9}7P6Z!?ro>*Dq-IZEjQErrOIlH*61+o_;MXl~05$ zIVu`PiN*y6QT}Gcw|Ku{Fa=}g;Y*Oi3w~9};HE7i?zgX-Z?6j0c>K6yN5a37e<)_& zNQn6bHmI?%pkRz~qME)AKg`-CvvEk#&o&_6WO7kB8qhN{@`tJZn02>!XY5q@miS9} zLCCfJ7XP-Ku>Oq>23{vp;Hf8ivYeK?vkS{Ry*+0VJ@1R1yEY?I%Mz*aQ8{KZa@+gH zHzNOxNLvZWI`He5Mp}xxpaS#Y!Ccs&x7YyK*ELy#cD-YiroN1*^@j+?>waTl@`?`9 z^m^}0r86n)>9+#7<(5`c=UVxgdMUksiU(vWl|u@%ly5Ox!bWB7yOzaV6!S(82R}cI ziQCkxGpzn~rT8%gD!$O(G9D)({A1LL$ZY~i6$v=rLU)9H zy^=-CtEj7$cgO*l&&^{~2CwIB!$LyJDB$E)heZ=$IbIo`6B9imT5@Go(+K_!(1}5X zFoC20Li*xa$^TbKU!h#Xk?H@6R;vFEn|cbS-?I8|UMWGy_oOB3o>HNq_veB5Ma*7{ z34df}u#6juAE$2F*0l$&h(}M8>HTSMTD17Zj0c){ElhXpXwqhS=1fMxXnb8kf%V%f zRsVKbXLa4>`rKjaM1H%$<;O{;BxV9xQtf_Yaoh`&L4C`r-WFr;R@)P!Ck%%!c7jIn zT_EjPoGGr>Mm2Lolsm>HN$aN^Ihhnhwi9_zE&66vib8@hU7EgBm+;+ZK!}?>2xF(O zIAF`?g)cvvi|P(GgmpbJq-?$OfROwaGx zmJpF)*mS}sot0pfc}};`UEx%(WV^|7_t@&0)f_4=!2|784}e5DPEMUj&I-pO z9tbL#XOq{XzKG-M^Uc%FYCxCT0~cwyDcHG;Ol!<6dj+qDSuP<)qFTg#)#H9-i8L$& z;b{13!>2cfqMM?iiQD?g&`(Q79ygLtAv2C*^9N~b%AfD;uj4#Coh-g0iLrk?k#@U{UI2zE`@pCBvV!)bZKG z6JV3Ia-3Dq*!B|W`npkKW~<7y!x(3l;o_ImDZ{PWM*HeqljI>4kGLbr1!FMx~(XW_$wzUe2kHjS)@wMg2AX1SXB2i zu5+ao^Ee^BByCNg@e&@#ZD0Mfcu(}EXko_>p)_h0bCHIOot~K)@JhQhJ8Q4b&zpC z#)6W6eRliX-`aGNyPwo0f8q1PBZ<_E-W}Y}d#$ubQtTOZ)03*C-yT85uRufpyqI^$ z|6zT~i% z+>f19yYhjOoX?bg{T~)sfXmf%#EwQ?s}>+`l$>~@^$zuNVIg-|xjx$8)#vJ*atj#{ zO4k&G+}H3L%pq}kk)Tn%1i*ij3HTljcL3!(<1)+3B8^%KTRWYkr^@Q3+02EdE>1pF zUQC2wi^(u20U(#%L;3wm5c!FJ*{*hrzT3!YQmOSH00c9~unDL#{ZnWaC61r&K5ZWI zVVt8r#kwx_g2os$7g@3izd^HbYyR@I_Es~zjF_ZcCx01<+z>wWj6swYexVH{moa$~ zB`3X=*Rb}ET``=Mwfn5`q@=jGF}FcRI|GwZ;NMqWWm~3K27tnzk>869CtALgP3evR zlKOuX@T0{9H75c5XO1GT$uZL~ACrReD_T#+x|%b45f`87a%v8y2#T?qxwK0bujmP- zBFx0Dcmvcfs+>BpWMVGAQ5jOzq;@g1vT||rZYvU_*HWuWsDrBKbN1dFt32R1d(T3r z*o-;G#EPOD_YHtzi}56fgc~B#&~h6KE9lbjQrT3S5GV7I@YY8ce#PG%`Q9WV5t*Hv z^&phoGSja|18|r4(c5^W2$=cN+EC!0=-BT@sD)~&6W8qFXdTbg>Y~2cbR0Bgs|#Su zkp4sD)KX%(d!k9ULA{bfS*P)0xKA~|qOeND(UZsoxB~B4>+&>@OH$En(4iY=6~RVI zx)W933|!>2e)i{xOHbEE0R5a+jBDpJ1VH8FqaTHNdJ7hwnbOor%q$D{9u$M50~FG< zdJ@_GT~|Gh{_l0wckIWXoX+e$T_lox;_?k;<2M%OtQ>?-kdbF$s?-48(?FDm?DLT2SEJN;G+Prq*boSOC8-5W#p)i*s)}6d z-iy}>2|jX(QE&LC&hnT0pVwK>IbHdgZ)Bziew2ejw7HDBooikGV2|6= zM3bNQ?;Xk261Eq$cuN0e3Y1?bg?Hr_@4w0~PNx66<=6j-3h^!=^FLGc{ogq%PP=q& z9uvR_HJV98BvN~*kLq9ecJ5t&0Ad@03rL>JC4P^|SszGs=cX~{bB#=jy8#qsf|Gos zKgbrBN*Nph7uS0~mlmC^%>T)vv=$ba)8kkuazd7q&t|N`e1%A~P_okR$NBhZ9KR$I zQQCdKtCs(!|5*hZ|5z6a!k^2s`rEQKGjM#7eKq-4Gcy|mU;&z4gW+)g(BFdx?J;_X z*o44AKKwZZ0?s?}M`!W*I+J$*$VDu(`!^0KAs&xRNtEn5n=6*f5fy8Q>SdrgiJBEm z?n7)w3&W2W7A8n-w+w0l%a2c0kG4KcI4HgHr9J^HFblt9npRwh#U@_GbJDNPe^f9q z8Ti}V?dGlD$E|%2zG_u~sl{q#H4wtZ^OKwNB|y@P8wUEhDXYb~K$fHg;HO`2bYcA3 zVJYwE#qWcU=5sC{)4a%%zYA6rxR(_82NrptYx@Tq;h_PbbC7udJdz8#8GLux0sJSiMe(h9`pz#RPm6vyt{0bNYy6Z0_ z_+j-KDb4d{+pNi}Dp=xtvC~=i-ldOB3*X5U8UD`Wzy)#U*|k zw*lL12ZvUth`#V0pi!N7l+;#5XE1zyxyAxH=Rfn;=7kuFHy7e!@EogeQMe%J z&+8B%k#{Bzz!NZv0j~U1K6CXfwqLu+EhRJqzslO#b@HN8q(t=lE*_2-HDWNT`N~Kd zX6LJ$o$Q`OBUHZK$9&?dnGwjaeSSk#74-`FiY+GT#)9TcFg?WHenPOzLr`I!CiWRv zdfb+ejcYEWaFP39$dG<_P0c2)DYOU;U}%)gDMy zl39OCw|$IJyN2EXt28lgI^oWm)@~U(EkqA_(I`@>-Tn2>@Kbvm8q_3+53=PcONfJ} z1Jmgpu&!={RB9M_`eeg}W#UPk0G-=t`2-tkcIw-ecI6UfzDWp)uYTL9dH+QMdqDiC zgi^z)TVs|ozKdZ(=CELKE!GCzqF7vX_<(7Kwq3#@i8H1=!$BgZiPcbr_Llp=%rxsu zgM4kMPN^2NpN+Bcq=hAR3hfr)5h^=X9cIeS}xE^Qlc+QPCz=Y zGVw!t4~=L~w@YT7%~lR`Iyhd9%^|d5DF`jt$*h7=k9Of7v(@78siMqm2hD_Yu9P=O zj2wlV?+@R(eDAzB+Q`LaTdiJ#9F~+i=~eBmQHf`O3f%a=`(F;uxaL6$NqHHLhfm$Y z#^(qpXCIyvHEvc0GOc^@7s5oPrq4c8&iP=ytJx@`#XeFe-!W!;tY?23(Kzko>(XnG z+Z;C*7~Wh=y^*xoIB8K)uGVf?FltAG-4>ggXz|AgzRFfv9Qj@cr8@Gf2tukWe?Kiar1yA8C5A!(uD5d089=yP9Pq!pTWR#wl|Et5PNf~ zaDuwC+Ve<%DbXw4V-<4X#T~woP-}$PC=JsV{rqViPsNfa;lP#q`QC1@ZrnSR)M0l# z10??Fxh(qKgA z_;txtLWY-WhzGx`qx%?2&#}AfPzx9}wojbwYy0@RKsj>Fji^ci`(jC4cAm6Abi`_W znR-Xyvdr12lD$tPW&H9!IX$e65nf^5#(6 zFHi-S&8U3Mr}@r#^|9(O>hx#l_ZiDcr!J8> zNJO}rb|h2f+iwTck1Z#Bt;%tj{Bc(K5j7I`iok- zGkn!$x3d?tOnc?jeu2YfzhH^&>e=mA(pMs1!f_8>zv!Os6ewNFU=1g40n);56d39g zuvKB(rZplAd6AIW3(9MBOTbk~Cau$5u{Lqf0|Kv{3=;n3O$aZVxN3A9U!Rm8${V=g zTh3eMO8^Ql&$h*WESRZ8X>N09SO9*DgNT8NP~eKTb=2MSpCg3cid{ExDHFEaBrJ6O zwZIS79LAKRP`!EUZ+=$h{p$}7gC|}!TNpRwhdpal zUR_gnvp>WIiLG-PhH44um`b$T@tqsG)hFo77epJavxo_nsq%$ z{3^rw1~Q>j1_jsiV0(z845L1WilVDu^pQ7a?72@GDK$WISfD1aQ`OFjD$)Ft*TM=L z26NMl?25LogZ7OQcr3kd#(JBq%x%%L`-$xa3&yYXwqPYyG-akwgv+w(JzcUkt?3oS z63UCzMFY0)E#f`wkYJg{G%3%7uk}S;UmM54NsFB3hatUWPN&Q2q#ki3V4PAfHO<)a z(xrVIkW}6V1ILp-1JIrQ-aRWyu;fwqO4m zY8o^d9bqvJ#J!~PgJu~NeYx0w9|4*nQI>Jba+!Zq&wHpCdl`D(SMji?JwhBEM@BY< znkSvNH6ctP1zTvk1B$-v8l(H(@2alMlS85YbAH{j|LJo^kinK)XSID-0 z>#|VY?;e&iChh}^rXKu-ay~ja;WCGf*H5~blh4Yz_}@V=QAh=Gk$R8< zk0G6|-Vn8yd?y%6$^?wEMd%@WW71<|!7TQYh8V$Fdhr)J?$M0m*L84U?s~;bp`IoC z^-f<7YYN}s)hN;*61W!Olwg|G|0Xp8@+V;KN>%`>C~$*UmwXxFE|fKZYTH{6{{sTM z#yVYhrpe?zPXUL1!8gS;5L#r6pQhb{a}1NIQkkP}|MZF1Iou|=T<~`{MF-%5+0GWG zMkJx)bCseEis04NM}#2QH%^@Pzv?^EY2fLx>4dnV4*SQWl-?W64k4?0TQA=P(3fp2>ERvqlvK~rBu#zse&rvC=ib=u8YGr_(cFar%<5m=U5H6S(Ri~5oe zsn$@;Fpl7)BpS9Awt!QNLwo#QKZsMREmTo?QWn8bOhlYYmAsb_{(0SMU_*~Ft*}(v z7lfB43>++u9!Qg!_^8}Vm0@Hf!ADWD617`gH4Pl)1O#~Codn(h`o)Yq>V;A9C;&i| zY>dvDIO$D&sD?e|de$i9Vf)Vao)CklpHo1FS>ifIV$hyb2wo3EwIWZ5v~S7#(e1c=LC;sYcy7!_GlNCIOtu+jn`19=a{H<8Dg z+^?p7Uiu&568jEQWV|OhMSbA?=Un1)h`_GVBWNP})j-5{B0dYGzVT*2$d0COTa%f& zzep`FSDhkriYd(NspL<ObkPj#m+Jm~QhMB` z5_L~N<_*QB*T==vDL_nObYq#SPjyp=gD~bPJP2P8F^iO)w|kR2{UbAjJd$^!u$2dJ zq1r0682QxXkjMr!rLZT@$hpNR4|2mJGl+XlAV91I|+GbNT19z&e4$ zT7cX62}hmUqNc%|47j&Afa>x4X3<;QmGSk;Bkh{jVQ%2lX5dq9lwWh1{tY0P^J4=( zdI9u~fuH{bO8&pE%k5mk1pz@gdu%pVf_L2qDTjjq{LxppgWs)UiGZ`wT_G_+aVj0= z46rf+zn1s1rPzTbS>}A38L8UTZW{x`0-Jpisl|XluF}ATlhRPMZ_&O{+ad6`KQpT~ zIs(U+ZU?>guC3HX9hCZeluky59rYYTg5GGq#O}}R`Oc>stuf{~?3urbw%II*KcM50 z;(2&zirZkJS+y+NIxvE8RQa$?Z}!1%I4+I3VWaQbQq90li4D4*gaGw}!$SC$e!kWN`W+_yj;#6Ygep?U%8?6}_Ot#K$*~4xu47-`0S>DSX zZn@m5+PlHbHqkCmDi<<^_5pW*f%<(w@H33_>a-Hq?w2Rx3ETA%^bAkt;#CRMO7ws= z@7{+fgB3ubAeY$e@ICM=8Dmdb?yxZ#`9QWbPeBEXzqyVtY^^^8UK;xHHO;38DsDVQ zLvg5}7Z|!c8v|M|n{R&e;3wa6k>VhsOKSB`yHu;*>@J^0>|K~xa$&Ytb0%%j6CHD% z&T1@W>vLW-wJAyPoAeYdf6!ei!( zl*lG+fYdQy2!JYN54Y|lU>dXQC_X_bo}{K=guNa(2{apo*WJ0HOC4Op52C+n3V*Q! z(H^KB#l{`%2BHIZoqM9w&y`*$@u^r@NFSx$Q4zyx#*i8fgR(4sY>&?xvV}o3a%cT% zR%SeUj-|{c!$KfOhi&#+y$66v0NYaeLF)J?^xPKBLyKW$Lt&3y^nQXO`grxGj^iZU z5bbrTe%m*&_een;dGYM} zYCC6Z&#+mHSz6?Fw|A`_Uv(ke{ft#frMR^1}PK|&?Y6-m~w>}+2>QQ&G=T&eE!8}i$9E= zEsTEO(2(*e0pSNMzb{haY8@`@1oMZbkTWj_hVi->!C5DdIB4VCO`!5 zFrV1$yF3wN$IouqD&}^BF0=ey|KnAHfQa|O2@&bS%hosgw+;84grHZ|B1fE@o|dXo z5r3e2H=b8>#~wr?%0|s@`XW(!?Y_-kE{3UuQPxtOZQP8(BGA>&1Q!3S1an5q?q?^A zfgG*QOG_CUxGfT-z8*_vX1Z9Bv^He0&KE)57S*beh>!|InX-wPFZ#Cu^HchT*5g=t zh9$1ohaniaf!9LfLsG>1HA6sfh6g0f6j5~z@XeHSP5;(DD5thq9?VGm*x%ews%cRB zZT$z%TCJg5i6v_=t58wMkm0KK8L#^2^qSyVe1daFW>}qXquxrQHxyKw`Dm!j<}qVLGJZY>gG8kBFNORzbj;@2 zdsXQUL%zNtl?qsTJ}*Y&ciWslWL14qf)?@+h{bE;6oPSG*DrtR7<%YmWC7%%hCd!k zVEDl&?|xK~f}sm$zf&*3di4L1FXVK~i;>kGA`+s)4HW%K0F8s577%c5`(Z%LD3UMK z$pezdcLE4sa&v*sbIhYo+Qnuyly{uC>?ACAe9S`TPOEY!R^iQ<{^4dY;`u#vV#U`l zHfsWoUZ`y8F(S1o!PN?)$^4_Q`}XCIO({W`DQqhG^3+71YT`Q;N^KA&i>RDDY>lEOoTJFsQywoj!XAKd%!T>sc~ zd2WlJ!>BK{<$SkSIANL5Qsd^tB*g9ZoaNziSz$9Z`E}ci@SEctfX-?|x6tZ(yfe@@ z7PlajvROyD)X-0fcAieQeby(L>i6v6HQNJ!bX-iTz@c3f*GdR(6b_*T>C+I*_%dn1 zQCVR~|0X4sAMC@`;?MdgB0*TgZ3jiTK|w1LKUDBi{CxJWGLYvSnh83QMXDB}l9GZy zgci6t1!E}Ykg2or@$rd`f^LiPAAgmFn~V;g#oow`&+g$mQcyPW@xk;(RBG`I(-MUi zYNU9thploMc&`0f?wB9>{_pN2{w^QP-XgPblYt~ABpAh^ll98Z{Jo}F0tF@Jwhn$< z;hb{TvaXT-=yT>9JmeEY-nU0R*I94F!T0v4$dDV=QmomW&kc#NG;0I9+5V!D%`;+4 za_88Sj)RxQCE4;cq3KOMh;F7fx z^k1pDTD1*FLf4WLcsi(aXrqvq0r!1;2cf=*sPzj3G!=U48lGIUS4aU?OsG7?*1N2b zBXgN_05i?OwE`*C2c&J(OZg{WpS-WpYPfOlG>L;f7J(USE!Pn5+wR#1pKQD&s{h;C z%=gVGQnfHtsM%o4L_pmmCY<%PmIa@d?bskbW~sb?=M0;b$6d{F`kVP8>od*IW%nFQ zrbWq(KRwRit#GY>5b14WG+%ezO}pc1^0{9QCY|Wzn)Oa>N)1Pevhs^?!|veGPA#kI zb(Ly=d!ThF?aYkg4A#9xwW^ekz*d47Y*5p^S1Y~>Cl#*X0rM5^&U3rZ43^r!oJIM&f_@L zS%j3nrTseiFAjCg{EN@njmakyO2&+`MBN zgkLbr_rrIHQhsCYX&t+6;S2ecNzDi2k91GD=7%^~#e?=Wr6^KMPS}#S z9Jz>5@&Q+d;PHh~-P);~owFzGJWguS00<@cAlK6<=P#4{^ZGSV-sT4cpA&VRfdOf5 zVmA?t`01kgF$DJ1!e!{#r4Z5ijcoqsnigdpb6UWXD65s(MMA*?t*)o{@0C~We2WcN zfedt){3%|!KQ5onZvFjbx~BuHVgEe&4eE62Wz<)$mV6MeD=OaDTg60|eyZb3_>ULd zmd1oen!i;y+YL8)otI5|R_WzBc%AdlO+7!#o_>2p6D47!mBYTI{`~#-z!e-hQt>e^ z31jiGEN(7AA(qkiIk*&HSAm3>Hpdq6BzATq0f$8H>ZB&naK(VYAep!VFXt{@~$9j^&m) zhjveUvT(?1SPDtme>iIP(mkqDO?FWry0#;9v%Ggt*fCK-$4ysXL*h- zXQP8~MhN1(ZoA~n)iGSnhrjS3A*aI5LyjVA5=pGFXEK=79gZaCV;z$zEiB3_tc9Td z1Pn|)N+>c$qgluME`3^>S3oF`=16_ti+G{qJnq3)Lv3}o%VMAP*flHfgXInFJngrQxE91j>H`AtKruT?H z0dscOaS|Q09om>--SnAO%fIk2+mozS^$73}{ev6j|K8SBUr-8$O-1KGiXu7NG8-+dr(R4^XKi z(|17NPyqXz%NK*~N}u%o)^%`}Arg1{bElT8#4)4j64GpqfhZOXfe4xDjJ%y-YH%_giXL&qYR^jeA^Y5Y zqotr`sRtnzkpqpxbyq$rZL@08rjSXe5NWFUZ|50=y^o>lk!^15C5;v@CJ&>D3jI5O zLJn+Cb2%y)#i#8}~>`)ZfmL zlpj3PHh9Z1`s3yI4DUi=k`Zg#vAK;2TLt=!p@+l+g*Xo8dDDDj4e3&I0etS4MxQLP zI12ktC9~8VPejW9!luV}9*Z#r6jJUPmW|^(#NA3=mn8sN-STJtyd&_)+Mr;1&DX|?rlS6gdjgstDNoR_#F^F ziGa5UmpPBW#n%IsSjMuVc+*t0&(2!^IH*oM_14waSaiqh{iDcL1fsH$sI--=)aO}{ z!$U53mO6Z(#cWSH$Cz0szky25Q!TPf)sMbI(I_rIOS@z~hl(kG&(w0yip7rybMotW zDZklbsoM67oFA)4w{+qF)#hK^z7j?^n$6CCB$=oAn$M7$LV_6A$^9`IZtL9SJje#R z6)K*8eE+OfeP}K}RU4l5TgTMH{}UVqCmZkOIVDja>v_5bS!CDq4BJg|n10i|>ORAs zTqDz{&M|GES(2?%)bhrNkOYSqY#3!USdw!|A~!fZKO`%m>{@w*mDmc?=RZ(yjj=mrP{7>C_U$qlK}#yH>F--=8)&NWEmbl* zjc5ztzKfzS=U=s&Z#Xg#vEKQG6QxSMIn z%-6L4V3txYnmq^ENW>bnzA;UbXqV0#HqhV}#gWIxu_lkH%%~E~jtoz!5=?QbP{ED4 zMd8b*h`|^YlI^X=8x{?VMvvuc-?u^2cyq}#etF||7v^#dlW|&~Fi{kT>MF;VlA?#+ zh*|x!WrLE&KvY!<=-^itRzSmzoVnmxD1#=Be@R$yzF!h1y)L+5OfV zn@Pq^^xTzmAwYEv}h?BNeb>EkapqUCt(UnsC!f3n%UQSUD(U5q7Wx4XxnI?`nJpr-f`# zsgk1YoKQZN8jfrB>+gS>DLJJIxV0oJn4})jg;4S9xE!Sw`WQ6(o*r-T6Ut6bC`cGxcfh79RHiUX=6n#u~AJ}bGhIa&hYc`$cpMVhc zSO<&`Yirw=ev88^D=rM-9`M<;6l-c}Jl#yGv0SI`ICNQfd9KgJp|zIyLj9C`%<_Is zHrYg04*WtP8kJ=tlq1_5g{bmgm%dReI0w35A9`lyO(iy(O_KyPS5ylmTC^v{48|X# zbF3RUs=gvxvW`N0`pP}SJmYQ*E?ne~erzUX4!D|FR*7(^B;;IWWd{EhnKSdQ1ppZD z{cZnoCg>jnKm($G$#H;_x*zkq?E%>6l#?{Y2V(0K`U z`@C!_h0loJc{#u%MJ+s1s;^&Yk%g|6FbG`b1=pNe_a|~47VO3&LOUOW$LjBTkzWes z)9^z;>Md+Vorxg?w6>ZApwL0-l82y%%#Sl)!rxa)tcQfISjW@-uK$%^!}cPOu%c6S z)50KyDn-OyWdeK#vkWeQ80;#w5MmufhEb5=b$yxt0`RF=e&# zSl^OSSUzS!sQ+vamBXX{epT#6pk`t|Nem)(9EYf2D0gi_`K&jOu+rP?BYQ${Uu|EW zdSfSqeSBtA9Ts*18mKFUWHO0pC4?%> z>3)n@VY|Lxj8IYD-Xfoe3X!_jLW~<71zcRY5#<$bJ6E#REZ2u4kekxfa_{Beo37P% zD+oj)rQfsur|f{&rfgv#{(53TZ~-idYQ#s4mVd;yFo|nC?Dc3ay7oruirAASJ$B($ zm=w*RdgzO#Yo?iw<|2I*XUqr3x8)@iQAP(5%JAjPl7|jQZ+}_|m|JDD+HX8j?gz-rlSd0lR)yidmLnB+n=q&Qtc7wNq zH|#kJgdx?8gi3D1I}tKwq7IU**%qZx?Ru6%-;Phr+;d8)E$oIvn%X_Mn}{l-0`usz zst8I?AkcPUE@rn$zjkndR0UrqLcDkA#zl-@><3u>-o1Uz7FujpIJ?RmVKGh#cH+m6ZHq>y-EVi^>+;g&e0zg|;)pqo!(QyL^F&{RcltHV+I ze%lO&^};!0QGPov)tO45t?tsNKN#&+hAF9hPZ4~=+T3Z%Yq=z_E+1D`7uO}k=JA+O z$7oix=jgbdM1oHcGDlv8id-LFs~>6NtSj=I!KNb>qhS?MpaN75eBLc8y=?O^HBje#*j0$_8KVj?hdoS)g@hZMen7k++W{4=wnGD|J@4)M_l{DcZLgrZh| z?#<+adZK--J(5(w1J;tgBHAJ} ztvhGRv$qCQnPJa}!RkIbJGvE4QipwEV52t|E3zx!B5;UDyFi@H9g{;jI|jveJx}G# zoDGOy@!=j9Sj#|AFIzS!Yx@qYo75TeW?9N6x`(o9WEfl%^%x=BqU#P_iPMG48acG; zuf7vNY3;3mcQ~ll7*&2Uu-K`pw&l8ova(qS?hxm4in^zz^D*Bu`h_`q#cIkHLbhce z=#X1JfT`-X>Ob4h#h-hoIT6$`d_0vub!a}ZLYbH@^6Z?9c|PEwzvPspsJ@=^l)A&2 zGfO3l@n}dhNy}Jj4H5(vAwI6C_^5+He5KF;x--rk5rkn?o5z|9n}{1)%&GQ$)8z?0 zE$6mOMi5J(bwEMCPN90bN>@a@G~St|RY6D)WA5<-vzwAA*-72$2%F8X+uH$BWI$6* zWK)5AbXCnykU1mHZyva=vvG!w?rVpseGbC(Vre63oyEC@_QA@nE32kms}1fGoRe?s zzcZA6>}jEIGJ+-wb`x;NY#$L;G1SGUBb?FMYlF_EDZgZ% z^)}V$6q@*~T+NrY2LirhWrcLLFvGjb_ zj(9`IM@B?YG5~*gWt$l_2^-hIm(2Z^)89EUgC$y@(%Zm%d0%GD8TjV+kiFWm>*NxYiTg?0^1I z2YC_4{ulh24r~ixN7vmqHDB3Q5?+JC%p7&lAEtMHwYU{{qJmRPv)GNR-ip`I{-Wr# z`x4H~25Ka;ZYlp`Gtx}PCNQS!9{5)^pwa;AJ($7Iod;;gGyhHR!;J_JAOZ&|9QcMVaFq_cyw824r z=zCyUEp@cn0%livM(9V)kQ_k7f*|p7Oyi5&R%Me;{f+2b-1=o6<{Vq$Ja*>qQ7e-> zUQ?v4mxe!eGg@KIk|vqqK$|24&Si`Z2=6MmF2v7pRmpE(9sQ`Y_8szB-{siMCITJu z`~^5P*Y1m#U^H?8;1YSg6R;)GRbIfHu4s1AUICbZCN^m6bP5HZ_o>e?uE`q?%$p2t zd>-4T7bphocVD|EJq4)`WBU$CUw)7(X`?PA-Bcw#l$n_sAD-p2ySR^Vi888HsWvSg zj_MmsNwsY=bCfLd#Lah@9a?@Za%OT;Cg9G4;5a;N4fQ;f9^f$d)O<{A*fpyP4-;!{ zoT=H3Nc{*+9iDt>Y|PNYv<;%#;Gff|JTFHRQ>4{zrrLNN~*$@ppzyqDuNX z-{&>wU+6Z)n)I>iNZZa=4q3!lXL#@{m&~*|17DN`E}UhvrCp8V(V^60s!wdt^s_by z165=yRi33>7gSn*)WHVz&#Fd7s}_o&4A?R{KKZu0b6dM*u|i}WzU`ZvOLzJAN>LjK zaeIc`XpXEQ(<4;6M)guuBKO2IQ^lxjF07wMzEWsv+t3NbuMml;9-a!Ol&2C9-+Gl- zb8#Fm>~s4wreftIvSrPdp~+-Wo+1gE#b1`}np#zHd5+3Sy2&LjvikJNs_Zz0d@5^! zrmTgrd+2NIDSdi$;GQ6eEGhkKmmOnd5&NbUl@|QD3d-H)!*3DmWgCyU+bOC-?9gIh z%m2RC7xnguD+={t0)=BsmvG6t?Dbgyj2OeFlZ|Bz2Iyjs|1Lk^+)&1wIgox!zz)e* zD4@AIZ1n)v{#UafyXHE8Cv{i2z1yFce`I2IwwS}hmKnB(lBWEC8UdOc)^eG?HGop3 z$wR{D&fpy!QhxB7IFOL}qog^-yz%i&??e2%`VO`B|KT!Em{fa zol@JjfJ)4jD5=37@JhPz)iGdkdk8bSu89!Y`wt1t$>mfzYaBEAL;^kFdmLRMN z$cktv7z)ONdCB7mgrSA55${u4u&dm>)&W2iwa_A<3AzUMpNeJ_fW%jICO?RZ$f&G0C8g2? zWy<%S_A^aHDK^q$rAnP7`wqPq)gwDC7Co;%-rJo08}Sj%^+zUj1qp212!1^U$lAHP z6G+jG0v;0F2E!2OUVg_^dG`1mAe!MR`k;EprQ?rJp$QOHpsD-$Jxki*{ z!@S5H#r>H*>(D#!2Gh6>)t2WeO2KcfiwoD=UGh{|awgLVs~^BhlN#6FnCV=sc}%L? z>Kve`5~e&6de;9IDDfX#SqI{K)qG_b=XAVgn_Msp+REQ~bo)KLgnklWmSTG(CCjH( zw&74BD@{uk57~3e{41%NQjJXp0`+x`o?4cDc2U6d)uG5Usj1NsWNV>sJe)$lRVl*s zEE*;P_i=x58(IFx@NwCe#ad2zxISc`zMl7nLQxsUq*Q?^hNZPc2i zx(T~xFFny9rfM=RqYZ~W4C`!a&HcgUY2R$zil=bG$`tpbF-wSVVW-McaIyVFc>0G1J?D zq6j2g8kVQL_20ftjW$10r)G^k{Rg1!@$bf5mW-T#>S<1HT2D|qaTNbE-RWJY*yTra zCw4P_KL<|4UDZt;b#J%nko=BVgqA_wv;C(%1)(&3nE&anZ&mK`A8%VdXz!*2j&=_c zicd_=_Mh*ZmG6|4l(g)(H%`yKHQi{Dc(744#2--^S+n%!Ueil+f~DePN5EI z=9upR*mq}s_S`fJtG)a5Lwk4GEvD@D#N@UnMU%DlblOhH?z}ya)h3AfpEe+{{z&61 zqkc|UwM&ao-i9xn37xCcG<-2?Y#?)lBJ98>+LM_*|GCF z-M(liZGBC|VOam#PYH!;f|ub9BM|wYf#a9!MJl4=6NH>B1g803ZIaLPJC(fFaP{i? z#gou7A2Rfv+j2PMz+Z-0A52n~B2w5NLitZ|&d3&t|5YRlcgl-d*izw_zj=FLC-#Nc z&6P*O;gogS^>2>r-!qPFY#MZs*#@W#ma)ewaRMI~*Fh(d%GKP$bqbyW>f5Gc>xGr0 zW7$mQ^RO;TzpI0s9C|HY;H-9kDdU3FmpQyP%efZd7Uw^|X;Mw%L@#?aN)OEg4vg;b zg_veUn@~j=3k>p`y}@zOv$Z}}C2}YB89=7oHS`EeM8RuxUxC6XDXE%RqGQ=pGwD~T zojSUyu6|KlrOYrAd5263;Zz~@H?3L_RxZVuzxu6G;<%D;rqHNlfM z86c8bqdk;fitQl@KttefuY)&6(y%i(UpKIi@3CI=E6p#m1=Z;S3dSj@F+NYzQN?Ch zZSinms@G_(QLzykG!J#C6%b^9)SBGvYwt0R`1x=xFnrS3Yv*oWS;|A9M`vxfK8~o3 zjg9l`g(?NID*>dU* zZl|TY;krDv=Z7>O4GDAaPZ&5RthU{pl-=$u+?3$SqRzYdTTK}f%c-TVyG*VE@Lu2; z5&+bAr!va$a%Y|<;Lf|qFNA!wI!xkg4=l4Z-)uhs9!6rEy6&NHNrLdmDQA(_^W_I| zeiv~jS4*U~$11m)fpg^t{!~|sI=-tqr6z6cM1GjDG=M^OgH9Fove0esJ{lJ1c-Ri8 z?-np63z!b^D+wM7U_K(QncH$*E)(Fr1e%HqGZ_g!I4b=|slRE+q6ScrfW z1wlll2@#@#fb^0OiZtmEic*51i3o^F6Oj(mA#{+0-a$H20tqeBJE4U@C^?JoKj(H| z?Thm~dtYZ|K6A~v#vEh5?>okzU4~Wi{5J4GdO3y2g1;axb8t)~cg+VWq$%=cUi@aE zyA>_k%Mn|id9m4l8U${)&21*%c!}Pgd=Px;3-o9jdX!s7%OxGHl70l^ z8(ZU@YVS2EhH;3O9$SZ0SdS%aDNu{{FMGzsSzfJu2l;(XlG4?;Va^ArJ!XCg{@xx_ zLM*-TJe`}dUEk*D4abWrKDus&k!?T8G~Cto^#aH1clt)F*!0+Yz>wwS;}i3E?12A; z_y7B-41q=kpCY0DKY#uV#tIPbSpvAJolok>f%7bYO|ODL`KRAO?p(_GmN8nZgNZ@zKL%gRD@)8C;RE}Rb#7ul(H3~#`aBj*xp|Cw77@EvTkjvUYL zu7Zgw{XYi4d+551IIp(*;JU`3`Nk0vi&JA|aj;wMhUNBoa0haHb&aWX3Kjx*wN>(` z#qQ4%Wv<)S)rXKJ{nq5Or@lSoie9l5CF_nR+*q$MqO{#mdd#2@s#=P=VDu{Z-eXgC zmz;^vADP+4*>Bl<9Iv{x%jfDV3xB6@GS_fn!%J2P;m=EWmXa6+kh^vT_5rcL-8v{O zD^sp8q(^Y7@#81#;zSYowMy;)LFMMij8%a5xCu zBd!w>nvQuI=QCZK9Raq1N9nOXVopp9#>N!%qpxqwU+jcxg^B-u9ideEojZWQ*(=Bz zC~d)*Fn7uO8T^Ih8zTc1Zmwc}3=YFnAb6m*no&!j+}8op2DLBX6(?$C`iAmI#v@Li ztZ}icKgjMM+ClE_*qnT)uc)?_iSHvpC2m)>6DwiuOm;U7<(pm13~eP>82;vEzLr}( z=nr+AVpvi|MP_m3a3gKf%=-!=N+nnI^soj5y@Zj%*9u1~8Z1hHdPww>y(P(iJ^4!dt}l&K`;Y286)-w0o;vitqHC1bmy zuZG5*YaMFQ;~`vZkR;GMO%6RVP{!U-yqM=nDzQV5Drd^6as+`{LY4Whus3!3{OpzZfx&en(1r(3`Yc zI>2MJcz7DIJ)atyp2RI|y`{`a+#KBdN<`gT`WwFgvH(ZU`A9yFU-dM)izZt`?(QuY z%36EITPn1GY}C#;3v?g7GTY;eE2cm^;|(X!r2(;1h5Ir69m{f7X$j|Hy^q8j72Yj~ z%sgJTa~!zdmW2ku!iifc-#LTh%;ZvozrqHWkR8PVXVwCJ#jWo9^x{^vN2d+7ObPt2 zI6_=QjP=CKI~QwVGtP5UE0`I-y_7CT%2r*D1}U6vbxmhr3pFdV^(arEdDe`_cXHQx zTV7X)$H~|J*PzvuJyEa9-ACSvqV{0%!9|uw_P+gIA8Dw=f(TIr;>#Dtt=UPtJKoZ) zQqm$={`gBj=g29G^mcZoVWb5CP=)>EnH9}9t#ii#!N z6?7%hJDBQmj$hvMP74`BqbRq#kNIu`S7Y{}3*aR*2diX9YG6K7G$JS90$1(DH~O=@ z+0PShJTiyx$$d5J4+KuszZVlZIIu=3NtSjWLEZxf8sHc3056{h@odUFRNjOM_Kc{Z zOJE?Wa1yd$C8=y=_p8LaR8nLpQCu2L3o3D$jasYBHrmP0=0@hl$%3o)-@2bg@a-s9 z-f;2Bmt-BA*1=qIE5k3mz$MBJ_W^Jo+iqt5$^Cat3X>gv+T#XVtCxaW-NIh z`BBjH=K2=`F-s`cq&Ze2gIQg; z*jdQW{TK?~rXs%#Kwo`X`Hb54+$dBr37IvFz{HKJxQ<18o(y|L|4~pkBJu*~nJxWG znZ5Ss+iBH$OIYP>ieMRi+X6j@O`2T~3=wG;S`-yU6aGYPik3b~U+VVk$w|RnvmRK? zsU3(tRMcLId!RvBuNB#i6KN6qM^%-mRT`FI3~-g?SV4%}#`p07w$f8gfwD)TO@o%7v=&9haD zCVuPcgr}Vf-R8?${}K74MoQFTuKxpLGDP}dyKh58BkR&(r?);^#PCAPbIU`# zA)k9wpdOn_=xX$>)QN?ck0y!${y_^JYeG{Ir`+yjwn{gy-EUiH@M~Am!9Dna#TR6GMC9wC|dJ}Kt#IsyMWT~Wgdt-xyt~{@6%O69u_d@%* zjC@J>cT3A>0WYlCc^82EuMFd@n@l7{#I11E82mKzC?aJ_7WX-r%Q5Jbj={U2i=|pU zR)eKqp^Uq&s>vW!QWU36$cmjh@0QhMNx@ajd3dMrYNqemMo7c0)X$GT(2(ERACsCZ z8baqXZS=eUyz*u)O;wrYSl*DD`5*PW}+yCvrr4`?goBE^#d>6zIBhCC0OG+?~QV^w2nNC8P9^p zl7mum>>FXk7DtzWS((b#ZYe!R{$!cV1a8!@Yw1uTD0kej1tVbI9)dyh;GUH5u2mqc!-3E&|Tm>_Nr4hG!e*`$xps?42 z)Xyi0rFzE1gmQ~podu)<9++ps@KEa8`=o|EW{Dv{=jcLOJQk8jSPhuT32-#@5^XrQ zVUFG7c?k>#*%PPxcHAkWl{yoZz#?Vp7)wB6I*M*;N%nqT(Pk^7vC5JoZ0Cofy1@Dv(Dn3FPUkA$U*I+ONs`Vo zg^ne^bpPO9l(=og>$6Jq+XqgT75R{w)gS!YgBrX7Yp9qV{0Dr=uIu7uaBY)IfH=fdW;rNimAB}eab}XGW-I;7#{Lo@n^n(k=}BdI@l=sf%Y5is=7ZbY z^Jc)|>2^gzlL_9JSI%Bt(K0I_1nGn{$B6(aI*{(J z&MeuHv{L?3Wzi*#G&sDTE%-_Ot4ZbJ4i8DoUH4dMB~FSC;{;Gf?f=VH6qo)-kS65+ z|Dh5MxK1nGVUw@+?FsFr{I+}&QIbYT>6%~rwDQ?)+nUjR!aD;2ldc;o>zh4!!sETF z%*$V(xlTTZT&Kb@Q$-{~9xMG_`Y9GibouDDc{-nFvuEX5cgXov%@jQ7jxr|Ld~)UO zwpAc_i0#tv%m*>6fk4F*c{gj4muMymT#|!{H#{`yUrwGdEgiGy`#YEb+_&62BxpMw zJ8e{-YABz7PETuKVC&k~*kZ1vLMN!3YMj44tNPG-7Kn_apU%E;MS_F>FjzosPK*cn zgiYY+j&J00j zioKs&rD>6e?8VutU$HTFzCRy|B@B*4qWLL^LEQ~ueR^-d*Sa5Pa$$v==Hb=U@+>7= zjMNL};Br+*&Mr@cg|*vqKTp*N8lIakHGN6Hr_O8-<`l1=FFpLo-B493@en<}R&n9P z(*>l=JuZ@brub8QF1V^nhGb0f4LPTNDck#H>`mMpKG7!P9X7SvuMjCb%Ese{+cYrH z^z$>RvNR!~p9NKZ65tq|GAjve7Smbg&j|TE@;pE8{RDdSnyBPYK&PZNnr;9)#q`DV z5?p4;~dK;~P^S z&_Qm_BzP}2m58M20t{*{|DZwkcs7bZ!MBVSpCJ3oRR!4cm%Af?NzP|#m z$_kCh2yFCs?OARC?`_veP5lvqp4wAR-kNhdU)i;m;c|YSTB|o4;gE;OuGob?0H*^q zgJ`onhlW55;$e>mStwHx>M~W|RlJ&LY3|B@2K+T1KT(aM`xohy02{mK#Zxr}u(mz6 z3YyS4nDM)e&U@Z76ReAq*T8aJPXC}^uy!t(Z9%Whf72spqu!DA&!2eOmQcukNWwOJ z-P6cnhn8Qvx+~81SPPcpEd|Y6^ho1#GBrARk$ALYMJX*d7-^0dfS22uR81@z!-Z4( zov=_b+CU&KyWbff_x^#B&^KkJJk8;GrDtgD$I`zwe=?+V1=*W~?D+t{yDfr%KvM+HL&>GnH&{X_7fC_;4c76 zzNr%|M-P9MQUC9hIVz5R{8hQ!<(ar*`p7T;$n%Q;$P`YjNz+e-^&wlCLt9q;U!;l*JfKT=CINT3W+a^PpZ8=)4{?=K%u!+(43D&~Qi{1YXh+qdU*6$JY}9^neRq`K!CCoa(i8xf3$3GCMfaD&LWGhw#WN*;6EW zF+>p=_NhKhV_wrcC9Rp+4V2@PYi(zoC{6P{arDhQ4PBm+nkN4b;LL|+0 zpUuG2kc3Ay)*L5Ja0z;^#(e%(a}T~4pL0~$_cOSmtPo8@=50l-Msgxi9Rqiig~kW> zPBZ4w%9aml4|3f9iF%ji!WB6cJ7x4jM*Jk7Fafu0qMF#t?IFBSy0Pv7H8PV$x$L_5 z(+p(Y1pU`8?|I=DVXMb4P%$}n=4lP;X>td_V4Go4J6UJZPu7pqKDUTKZKYD|wB)J@(S}v|j$j)qK-X^%-qHOsLpMh5OD)Sf#;LVEG?gxLRf zF~OOSAuoaG;{@Rzt)~(T?l#x0vu3ducN)GNR4Zpo_V_!y$&tW$Qa~= zOD}6x)fYxa_f8;Mey>=M1%aKawE!xh(|*VBfU-N?GHikyJ+6g;)y-~7} z=`H7ejQ8)7S}BlEl^k_;<)<8-z10RqBjTSn4i9sT=&5@)HUm@ zbA?_9?Ir9?ZzpSr^dt8*#p{Lb_J8L^qgx$)-kP`cHJdm3O-lT;h->)nMChQ{K{cmfOg@ASu(l)gHd8_8;go+_zr zD=4>i@M9^K0j98Vu!RA#?SUy2qp79dMom1#7Z8q_8I4TK*yy80e{$lD{h;CBmb-?+ zS%G{KLofEBHMAo->gdR*meQ|chqA~5-i9L(NRyRQ>_^1*x=Kpi{q|1$u_U4IhArn{ zlTUz!qB*KH^i11ME4M?G(7#&Y!CKBT=E9 zDHL@t!HO~YCq9GuA3mIgXFN|Pp+1;U0Bpm_k*py-s|*fpaMFu>udfn z>vXQ6RGNYqph)tUf)G=d_S8-mKg(oz#bcTCo_SeFSeelv(I9BlIYRk+qe6>3(hwqm z^jiM2uJOP~a-fCo_O@%gGJ=C86kzcgpS46;j~S&5Ox%N0V;&2WE|}QN+>BxLTk6&D{?(;dGitnibF} z;xrT&tx_Xdds`*WY&vQn@@_FebZU?^I>)A=*y}pM^dZQR$q`BG0@o&*5)yVaNnx@) zN#tdbSeqytesk7^s#GG6!qq^d-pL$!Y(PlFR}4UK@gAft#Jq;rxNGZr&b_OEDD^5z z8zJVboAowe>m2H_GdDIrkwqfY>W8JNd&)M`bQfgUxIZ|xq__2VvX_9)1YN1@i4x&P z^%MKdx~-!FoQx3bbMB87XywLM`X)VH{b=TM^+rEIO%%c0Nq^(DO$f^hO+MT$E9Imn z?C&zr9|?`#Hk&3J@8pZTC#F@QRzt8I#&rjsm|!{Pw&X+o4MUQE581PYg>P^cPRv6y z0&DD@W=GGYx^v-)w?e2^xvm}AM5!nE#hsOcZX+XsNq07?+m*tEPpfwGA44GMzgao& zAZdCB`$=7$P#7)&a|t{!4Af4Bm`$%#Vd;S{@8euGn5H?6>3>`+!;3Z)Hsdbc+I?na zGVF=ADqc?h9agJfS=eafzM)vDQDIAb$dbFc*2m;)!>Mm$?C2C?SIC#d@3Yt0(%L!& zm|I8g+S*jS)3pIxM+1QOSo*eV`}r4W;jt-`kI@vMw; z>=CWaniIauqd$Rj#9f^bKAGggSvMwWw#M&fyOOC|Cze@hA78}v?71=2)Awj|x6yZ* zonA;6Lsu2ub-9D|AWOTg4+cSZqisdKjz|T*`%!~Y%gG%@A3>4Qs&%0Vl4du%+|9CU z_cR0N9a(Gl4dy7%+`93B0D`E;?=uZ{KX!nGlB7r-hzu$C?Cac+N{ZgwNXTw{ceTs96 z66N!E&ncOfoA630`GjBP(tpm}veldG%5`&kD;c+p+4+{Y8C94)#vGO#63r|6I9nTp zn*~0$r>ww$N~^kUQigUh|L^gt68zs%F2SatJWC6JbTGEE4Gg2fNc4JHx6EwL&p} zd8>3ZG=lS;3k``Uh+lCeT^vcqLv#G|F!29Hm1W7`wnrv=pY580f5SCUL~6q`H>t6X z&qB9=(IA7sXD~$>hR;%pe`Bc{b0r%kj3qoJ5J=Nlf*td_Ej70YL(i&8FnPE(bFIt1 z(JUnTRuEq@EFUgh{c~csLl7g_Sw+5Pt$auU7P83OA-9ODYm1zOwyT;05s^d>VgOr> zxI6Oz@1w`raq_iP89eW%wQpuR+_dyWs0=S;h>8Y9c1MPY$u!PV#$0$qfW8j|Yc>vO z0UEtBniU#v%PbPqw-4lF0kE0MNT69$INL!bQz*f%@HZz(>QIcMAoeD{Os>Zd*pYv= zVuWv42f`HO=i0xNgo8N63?CA2< z-sp+#S2JrzW@{ry@=wekn7J+4ycC{1c?gph6IONA+iQCLMOQ8HU?_FhyVT_uZyQNt z_Fw=jo1PIa9y%+ju&+=s)v-C-IJVKd7=?TuVP32sAzy@PrSk21sg*z@()l#XGPENw z5mPgR;Bxe|kqzQxS{OySm9mtK?5H^=%5G{G4D~w^LL+QL1~Bym*^e zR#sM6Xa>&`zgYD4c5!jxNxeTS^S-Ma@>J*|LYmZZ7!bT)74*7jSftU-@%``ZOg^9l z#3ftTZ+Ayh-CP_#^lCKQPaDM#B(d-A>OWk^YUn|ZI|y2iT3_X8b68GgWQRSC#rv$U zU-rK)a1|8ieVy-pJz(Qi>99H2$I{Z6mnX3uw7mRPnF;1{wlfZ^GZ`YqgN)6&u7)yf z0)4k{Kz5UW@!!r#`MX8~Za(s3N#TPafMx)X%x)Fs_<3aI{^n2vD-E(iIOB1DwK={~ zFby+{?!A%}ypF`+iLTvV1|46i!=g;M?P&hMcA=MzB+7T6r4#sz>Ly*ATk(AEW-d}> zfJi(lu*<2=Pk}?At5^`~yzZG9`jR7KowSKUOq4aUuXTlIw(`?i47sIXp zR0!x|-h~XRp{~wAw*eR;BM6imf$4qO))h{cA93jYaD&aysivmZ7ti8-y`3+eyG5Qj zfB+0c!swpU`-GF{6y4`QN_%Fe+8T06OASHCbY zTC>(Wy3RUpjG6NaV0YqRL3y#@6Z=;Srz{PHb_R32;U~?*onk+{gud_L1psS~u)-RJn}Qo|a11jNsYrW^307xD{jc`G3@tzM@O7HU;Tk z1@HN1rt67abX5gkA~5wqOrrK_V>*{J;`GG*9QMQeePf zltLT{8ZH=Jaz`7~cYYuLqG`XUtM&Jbk){P<;ergOaBiH0K07Dl%KYjBdC2I<&^2Ks zq@@kyMhZw5Gb+9ukeZ7|9`^DU2O=D7}GCJ$W@F=`^{~ zDS4=zv^)aAEXaUbHHIG|6IViWjTli%bsal$D+#JB*Isy0?#3-krM--nxxu9<6q@Lq zJ)jzIC7INo6i^yabVqC`D>RoM(|YwLm7h?%LAtH3m(9TqjvKn+ZsVud9)ear)g_+4 z!TgHH79Ve#tF&vXnUWyyQQxa>B!c&rCD^}P*-MoDHYW7iNIrB=FNl+D%GA!napvC) z-Bw1bO8Ie^e6hvsN%DDEbdC*sIVrY5nVOf>jXwGMMQ|L8H8q@)r#B$(yW8=qzQZBg zO_hAZdGXu7)VL+gbyN+c1Ctwev~BD7+|zl1LihxK>%C|rwx$pK47rF>Co5i3uUUqr z>_hapaHKZ!j18dLTFrTB-)>$L9#HFr-uoWJZ1ACx&Y_a2Nt&(ta?TrunRnV%F2Sfr zA+gJG>kn_iN87kBiM_M(t|`L$)D`RnPR6GNAc7^+DbWF`mMK~5r0)Ed-uPv5`_TpB zb}IIBk#iHqr#?Ox#a}Arcp$GaZ{oeL;_(>OhtcY8dTYq5gp%X++{{c&=&VZhTkes_ zF8@3ZcVUyUgcoa~DuqOf$ALro?(VM2kDuGam*+JtP+!A@>A5b}6~mfckG}T#<$+5}@dN<~oMWFrT}vc-Ahm<0(nRnxg>=QR<&d@RbWJ05vYO9h zw_g^b@Zt^|!AYD zJj+^7VyXC(8KNbQf+r;g`@Jmb4884SpY-tMHKCRum*zQJ!C9>RWqFX}6eoN&&6j3a zKj%X?n>)HzAm~<{!gBEHOJiW#zFxqMrK4US@su-J>PEambk{S?!D_@;M6)ezM87_=!OsRPMESADqWJl%EaC86=5Czcl2q>h9Os31>^-h zdY-q8Htu&J+WSeT>31sYmg)Uu6a9mMeS<=~TD!tGm2O5BXV3)Y^!nr?f2#x+Nqg{a z2qD*Bx%)vM+Q3G!U?1wBZS=y@()%?!!K+~XTc3&Kq$K9%%avf}`mNk}J!SX9<{Rsv z2R{}MVXLT4CAQ1J&2;ZH>IgJC6}C=3)?hCOL2GiH+1n8h1+mga9EeSmWq8zIf34TA;+GlG>wwl4g7f;2?Q}?a zq!?DJ-d!Nu-A&8Rjv)R(PXwfE&@jzXLW$N{Phb7EADsGzD@>CR0%t7II=2}U=}-r) z?6zFi?zkR5H|IvG^WW$W9^$KaO)HiA31Q^*uftgrSEgVQP{>+O4ko+aAZQXGK?;78 z3}7J&r*>pqz;0|a66sFfyh`|OD(xhYbM7W>Kg&00*f_Tq^Lx7DT=)=*`9BTi#IoNW zq<`L%SXq2%W|`e5+}dj5u17G49937iZeC?$1bH+RmpM$<1?k3jD1%ftOZAk7^vEgA zwU`ifObR#cq?8j{a1g;tqh)AeqX?Y#&|l4#n@)ij>8xS`>D*nTIPlM8ecchaei#^? zlV+2o#|+A5yoAhl)qs}7g!TqR{XFIdF}rwwZX$T|m^LQh@XTMvSOE5&9AAix#ERm? zMYQ867DVKyxyf`~ZF=8tc9FX85iMT+LZkau{?_kde(^4KhR^Hvay?#OfkI-6@1&nC z>eO@bX5m8h#rrqdM7R~EaLO5KahTJt`uMVF!bspFN^1eoxim_lF0b=m#vet`9Tike z(zyngLrDQdr=x!-M3FH}ImyA=WjconSh8TinlTiKxl2H{iFCT2@J^i$fY zP$qA7!k0zH0j}Ns8+`VJ5+_DgF>)DVe;gW$S&fXkYwokbx|edy?|Xr~>^hOGS`Fjh zbFqsOFgM5_B(wUuPE1cd@{RVBX_ssEji9AtjjRx9cN{(_^3TPT#Zl+OfFC_>VxG7L3*dsl6Jx1DYd^;Vz27{#Zc+_z#aEKmRCeS}? zAqu&YcS#Esb~ls#Cf5+#_>O0}##(1~1sl}(?x#yFbIMC<2bEcN(4VoD--2)U#@kCj zFLAk*vx#@lNiBWqfONAhR;0AGHR^Z2q%|)hXnlB|spRktmHFv((wM`Xy+Vrf^Bp5- z!+uS%WzpAfxPRq)%rx(R4EFN8`Zu^N%~Ar-PmbC!^}X-TGOv!!-CkxskJ5##$5PX& zcJEE|@nn{i?D-MsT^6@oGqMHk9WA#3L$|-b&+wD_wN>-O-JynqLO=^JTKN&--nXm9 z2VQDwvD9wqQN%l*Plos}Qf7)}=$IS!Sg}6S0AXJg7{h{SUAZV3i1 z(;-cE-;9wIHI+3<-MW-GagcPacjbJ=T3F_0t(^Ah(F|&_Nv}8yQYvj+L7`s2Nd-F{N15CLrUl1lyQh2k zt`QVinv~g#U~g0uOYuF`#mP2TWWoMv!>MRsm#KGIR6j zpwa2K)P5d7%GIFI)zyVbqnT_DrkW!Hud!(|>jk6)6F5oYEc z)o^^Zn=Q0hUbE+G{6ATlRa^2Rr!H+Bt!0-G87YuI!SCX>HBLN@(et>hF&Ep7b<~CH ziri}oJ95Wk#PTs5ag5AAroD8}<~-$a_v@7Uf*tIm7TkEPc`EJp&}p-~&B)r&jz@39 zcHj{p={|5vyPdEV98IH`sA@kza5!IJ+)lO~GHBH!3e#z`3v)!IB-yBx@-*}3`>}sk zfJe=4*wM_c$L;G`>c7MZIBv_mIyb40c4d!Zwx|fhSPjKQoZ=0(hkYqC;U@dL9k?1{(qv@U^;Gu|(Yq>Z z(i>iZ?u{mv{x&Nw=}ni>Zu(RsD}d~@QgPx_e`x1ck^Ww65Ft@h=e7%3seNB}AjNDk z|1tHVSO`a+<0=UM>`Ka~{X0g*hnX*c3Ba_Jl@Yy+Wd#wlHZ6AmT`*N#)-1DoG1oS} zzqO^*K zj90ewIQ?ADOfNy6cZMGTB_eAIX72eDyCKEgK$Y*lb)EB*P>{LMIq>wweqRJzi`MGb zc?Slv_7#Exn?Qx1%V2F}f!9V&dp^58(z(_%As~yhVwVzdH;J6n+aB|j1C?7#3YB08 z%gc`t`8RX#u|}BE%pp=&*9)>WjVvNONM%=@*$rV*FM3ce@~JlYXShqg<%Bg}w%4?{ z9u{^hVS8vEQTdDsK%wtqLHs|4o-c27i!4~_`7A}uG*Jx~M zosr%7`>tLnC}#Qd-GG8KRR)QEwwugLfagURjI%s@3ktmgRskokE|HtSWQ?BXwworb zRRaT}yv*T9$@CKCqy=60MrV0@}*{Jv$bF>Wmi2(}0OxnJ) z1uyho@~UW)HajJ84)?p)$l9@1mAsD9h5Aw4wd+_3PIRWKUX!U?IOO4(2Z@ z6{{(fC7t=NLtm2YIX!<0P^Db2x%h32;s+aSpzOo_=t7JNd2v-w?St`0&xFI8G0^Pc z;spF>V=B~`dT!e^QH(S+G^6>7bnGG&{QUgDO(u=vb*sO&Jy#ZJ4_(w2azXoYn?*Zh(8x*g*U40Eg3{1>2t;!9R^y`=)IgceIGS}PV zuJ@Y;U16VZlFQT>tn1d}?(e;1E_aH{?jM6r6Yio%T~x0c;`x7ARwdXPFBaK<8CQju zZ$SUq{hsxIL=e9gd-b35GYWo~KK;)wF8lxHqDhtaod0bA?njgVp7q}k{x4o$D9_`D zbE@rz5~tjSxug_py!w+G)K_I@Q(9K5bl4ZaeYSsme!cBx;q%p(H>qeblk+9Bz+xT| z|AnCY*6>p0g?=7qAOz~^pVp*r6M{d;A*a8~*W_aP`$tr~R-o-d$V^w-KG7-K0vyb{ z%GcC40EyRC-`f7jQF?o@Ay92KX~5xjmN~Go1Chq3zIy>%Qo!3~{4M~S=PV)@+Odm2OJFv|P+Z7w@ zZFTV9v?iW#pPpZNB^aL?J@!_{7X$$)R+d*{Iom`AkLh9#aa|oj-R&z)0Lp>JslT-` zM2NlWiOX*`O1ZYf0T~QZBXNuO#a;;Vx)vNx`)}w<#PS?gKp0)nN#D)sBx_ZV39xg0 zov2Sdo?_kHQuN;vC7{ce$U%fT}e+lj06 zI_OUQZYTK3d%xL(#{FO1YFY!Ne7-8mZ{cT$v%pJHO6qJoOT zKG_&cW!4^*B-2}1#X(C!%r0tSO9*|{E>oJ&v;fv#DGH9&esk?C?@$x|c=^>w-R{zfGSB^T64pEm+b#pJXe#Gn zImyiPpzC?YCe=iDu(?(SeH;3wu50FGAy!X>!{?CFiAZ!7_W&1DxFczm*px(zn3`dZ z7_EQmk9v3Lz>kJB&$#3W>Lf;O8`XE5cDpq`p}0bh?fn(IMnWS44!w=XQa1H#ZiIt| zp(Y3kF1tp>l%Z6V6wT$jWxbf$O?~g4Wa@6R1IO9MUF+KE-1k{VcAcDywy83kZ$IaX z$xe$KorIcGd?bJB^;D;{LSy}pPsWb<5JL|+gUw*wQq-%#^0nuGvjro5H)g)+dwrR-8=t7kA)XtOz1*7dSmg|oXet;BH0LerZ`n^z_UXp$m>Z7P zlHDuX5(Tkd2;Pve@|Bd2M8C#@uk@!Fbn+&dPlcdWNClD_%uds=QwwN*n=0}<6Vp!Z z#?Sy!51r@YZKio1)IIf=)kcJw4>~+;pp!7>LS%aOCRH*J&A!wUOh%9otdz(~z*^i1 z!wY80M@ErXWWDzbh3(@Z9Nm8U*}wnhH`Cs5OxoAa40w8a`c@2jL0rwBn-Ga0&?&tx zmnty_xDFc$nNU^jHs^=y`+^5K_B5qwQ(UH9q&3f~7QS5V8h30w|9GbD#^}S?_Pw0} zHW7wyH7!it`|3~U9PPw$Qhai?j?IVF&;QDdh;|i}&x4*C(q`gLo)-S+#n1#i*=f5; zU1YxB#Rg_5kWJjm!s?1W-Sfs9xhscSd3OihI+;ye&|p6|Z9J3f$Byb5Y&=bgk7D+p zufsYSlqu$>;W|`#ycSs9qn)a2tw|eUVH@wpZwzG|VG{11iJHSYqVKt6(G2R=tPAAc z3SP<}V3_-^QvC4E2%Es!60**8Np~$YR{<{Znd4zmUNI6SP1{fSU+X5dma_PMe05*W z93#-xyxdRBDBEId)q$SE2SFIHQ{Vdx z#fEp*IR_M;tTJ%*n^V`fV#QA3N6EtJ%VH|ARVLY6Pn(#S{V^igZW$~{3Rj&a&J=6G z_MF=WvMFxla4JWj4l?IdlQ1hn|M~N0oRdk@XGdLu6S=|Wqx$5-#{KJ8x!h>jAiwy> zD(ClGyPzN!RpxaH4H6Qo0eNP4Yq79vSKX+^JMD2L==nshTS*+7H>HZ}bHGjJ2-zaa z$$Vo_Ts(gpA3qPW>nD$4j>r#dJ>bmE0El*Zyeb>HkG;`GoO(&Y@-A3;5hUy=M2oND!EQ1@i-u6om|?52>V*fVGq z6XSf})tSJBO9>fgRAHqptnPS%UoNZ^-O2*OE)@pmWjlTD7ioV)6A%h?cKajYa^N@n zblsDuWIlFlXE?%-iPR$2(z-JDAA1CgsXgT@wQTH9jYn!S#cWM`M(pX(C& zoV2?G_9aC9*Nr793x7#?iTOd#(|V5gL^1gpo4LfNkEaY8LQeK@x;dz-qe+}=X{tib zMh@>-v9cJS8cuj>N(<2!SPLt4+~@7 zUZa@K;uotqz6yG8dfH|4W| z!9O{#U=*zdvn4~>bUe`7R4B7hyTd=|pGVMs%I^^SGCs1LNW*0wnQzLyYZ)in%i$ux z3dzfEYSO)S8r+~TB4JoWe;xa>50iG#phiP5re*`2!s&bK1VUajYV!0QT2RC|gJABz zB_{sVTq*uxR&Gk6y2)C(^3ZE*`cSU`q=Y3W#~T=W(Q816+;Ia7 zJ@>F=frTllW(Y2hisw01x= zE=IUiTQmRVTJzJ0iAd| zh^J-wjZ_c^$Cx50xERY;z=cw^4Vhfk#lo#SB6@F2L3 zj5?j96jxc;G{K9_H~g4HH68m)Mr>9QRJ|_Z2dCFEatt?ZK?{r>*6D&LJlFzX;VTTq zZ{V#ye@5lid4T$wOw)Z7roPG9({l43?kxt@JdcmcOrLDTSFpm_67Atz0#oDu;eO03PSoHk|^55 z3{&ZrW-BL??WCtov2=CfvIQ}GThsgoki)+V^K5Z@2XJBWzpB_E6Uf&7$D=TpM$t{D z39X04hl_{1g~PiA?#+}F@B5(#NT2osqSU2nHye-=gmNxiP8o!6PeqIHk!qalxbIi- zy!balDQRNvU~EP=#hn49yI1i}alPH;SH@FQnVyVs4qvvTQW>Ml>;qW9dh_)>AB&9^ zU--YnDAO+WPv7<_Ayz*lj?Q>P=RQGWy`5pHrzd=V>Uu6ET+DISzdRT9it}~3^x&V< z^0eyINtsLs^@}qCz7-JF8_=}tq5I?QZ-TBgHCW ztl6)gD{Wf2-Yp%UL`TVF8?o>gN0kRkhwnn-f_i=$!#qFVR%se$tvk={J^D5F?-ci_ zcpqdl^gg>PM&&w(^sfG~jx-#wL79B4hp$nmf>fQt1=*_dkeT*EDm8 z3=Qvkg*Guktg8LHBgeEu#B(trRrGM|mvSv$AL?!}2xmF0v^0X<-^`dM$YdE2_q+!O zWJ`t@akT>?z+6!}bSf}&%dI`hC!@F4R6WYd({uSXR3R|6N^Lz|m9}|M`HadsbNV;< zN*rA@3wWdu zmlkN$xAFvxBuaWru4HUN(^A8-#;m%AZ1vldooYE=-=orxC5=*6o@<=Vl8}qSE-=O!v6t5IWO)dz z1(|mPFLvTjd2?|JqX)eqqVU8!Q;X{WYBHS7ZeZLJ&W82qQ*Yq z7$h{dkQywooLS>*xzGq1OyLGf3SA4=6E$hx_g9ZJF{ow^aeFefJ1>mD1pzd&8axi9 zo#*=#a@EJiZ=Ymu+NvKzY&oOvC%E1&Bk< zOFpmeH*D^W|N5YyV)DfN#sUFCC4a|=4g#PA1#r_lO#qKOyKv4yV)$7@<06;EGjMG1 zk&1q-H$DK>4DZ9Hiycql0?J-QT3Xt{fwg%#XUo;Vq1$8w{ewvwL_(4QozNo2sb53i z0i|JwxFdPSK8Utj2=-QWQzH(`^Pg!-X~Hy-%CT!;d+UVz{dQ;1m?5%L3wW~pN zj@|mR;MS6nwjbNsJ=Lj|Im(mFy9;}yFphVCk9`*4&#dA9_3KwieEHi`fjT!W zzqa9mu-fkFdtI$7dS8#4+q}RQ91^%G3EKoFt}ca5;ez*EiJ234i&uj#jyWR34AjXl zwyl{A6m@&vDOMR`bI+6!XniEMDJo21h8v7B7VXZ|Q(;uAQ_>N6UYk~X`V zOUiRqO~n1g7s6UnmRRh7iv-3|C}$g)gzISQW*QXLRt=DhB=2Mfzs#tT#edJ1VhUv= zRH;@i{!;BTC^RC=sA_2QNt{#?QrUG2sC zjU)@lVJ(wFW~^inu|C0v6TxDx9Dc_Le=HCMbM4YIyyXr8eGlN9MbCie+yjbJce_CC ze-h9L07SnW3ic}kX4ObM2^b(FJRBAFA+#wIYzrPo}iWdCr&USn{s<=Dlg9XY% z^FEdI&QS*h1p3=jC>eCchQ}UM4B{3E=xsfG@R2dFKE?L4b_Svbq(b2BjQYOx^I!zZ zzHkEqAB433s`i0i24W@Yg%vom!=d8wH;ZO`a<2$mI5gtL3oJ#Lqa&xf#B2$*`uL6j zPascNDl{DZ-_w6Leg9%z8^=w%_H061ZHX5cnh4+f%hmAY(kP{&UsxcZxbi4~oIuv9 zFzk60QBo@P|NVRPg-;u%s;XMBfG2bLScw(C1RmU?DjqT24mpmiBH&Z3+ z56)WWKZJy1$mFxstzqL`0#QdFRZCS}y{PGAa|rY74-*(BwNE*a?TbtW4tVTjZ$uB> z``_8wtLL*e8dzwe7I8uSDn}%%e_`f!ik8QGuC(e}WMpqbquw1@kFSucj~f?0*M1el zV!BVN4o6)%oAG2RtD#HYqyvvplVmwsXLI}+92t3HZknR|se|}9yAvN-LceZ3kWqD^ zvol7WlZFqc77G^jN>$e6O)$I}figgQFC>{7c7PwNswhqH=~2r5gdAB+R@hX378}$8 z=!KjBvjAk?^8Vo4%Pv86_lLcq`@OTtyGd~(cvNaIOEXuI<_jwDAmBxrnMdW|250EZ z4V^cFj!t3gZy*QYTj4=RKoLy_RV!;<_s}gKEfWtTD#=&ubN_Be}zS7iP%e?Au2`hT(Hjrj+S2xmZT4;&(K69A^a-o?K-Wd?5Y2|v5 zNJqb?jKBuzX(;9RQpOgr?)a8lBNE)dr-@UG)k7+hy)vJkCNc30y)r;!%DBGowxMxE@Vc#}e^a zexX2P_%yHt8 zt#Zxk7`Is6TI-R76$q;kzNQD26%4mEUngyR#Q{_h6-Fz`at2mtDLzUFd!ID;ERef`ZUUKDqsx z)e)%mqf?+d-G6Xnz6=T)0t0aCd_k!qX8QeR3wz?B&W0oA0Fk{8Y~AcP@H z2P!KJ;H~US2^f%2wNSNgkI5cB?z^=SEo9W_{?kgMQn`nizKq;%h%l85YTn-dn(nS zQ%3x)0_>VaA`H8`3rgOaIqmfPvy=~UA|6=#v0>j;TFpjAM@C1peJLZDKHC`&r9pjx zSo`z+O7qRZsBoO=)jErJp)ZrFVjtP!1@3^A zGL@COhpq>kWc%`5#0-bEZmlT4!@DlAZN*lJ!n!dLuPi{mtRO*KWpZo=&L1&iQ2Xqv z7Eg@go!Hx!v^XF0f6i;$n*ek!Ahsw%oBsXP7b9qRcsOIl<0N@;OxQ0Vj>U6ZmLV^d zufg=HTT&qFoK(O=6IJ|!4WqT0*=Gs~*ju|Z09X~j`35WnVHiFFG`PC^BePdu#rgnd zEyq_P+&L{3(0B!ImCu|nW6`zkgU69+t4-;6+hk*$HsuW)<1IM+ZA66~z>O~cbzO~c zy|loVjMQ)LhnGQWV^wDm7QXWjILEIDKy@21*BdGaFd6~qE$L(N^?TvpF?`V3*%`yy z4^+}&VJrY;-3xbIU3fpZkf;WjazEUjsL8pLdOO3vA@{Hi@d2as_NzhOB@rBPHRP@5 z_eTF_W>R(O@OJQUiyZSL@pjAP@U`IWGUn{;tQA$LY0s%~r3i5IY=gQ+Zbo?GIsU@s zNB3{Rn}!W~{+0`*8}3VBd$GLE4|@9H>$jT}V0!W~euJ+>OFdCRN5zRKW!BkmK(ypH zvu(HP-L!HQ`+dy3|EjY={y@NdTyY};j4vMvuHlz2LgM5Y#9SGoC-@*J6w2`Kcr^W9 z)qevUw9ys@AXq2{+CQb@3-4nB?@V7NIO1{X59-T2Nt)BI_uAHV;(kL(?6RmRT1{?M zK|)(VjAGKN5JL@px}PYSA7kjntNDZ_X+6zdfnz(On^W=>m7otQSGD%SqgrhF^?cBD z(+hw+9i7C!Q;=;`I4=N0q6TuU`)ep9X~1%13e|@&P3Q+V_)6&4HpcMBXHc30;-iSi z{YkpUkF~H}@?cEQEm8AB_DP*=-=Bcg8(7zrqv`c<;jJ&;uoA?0ib2s}O2OQCB!Wl5 z$8A zuV+qcmPC80Sm3SW%28BD5Xd3hg@imLs*fQ-&_CVuTtIsWSuB{4Z6m1@XBdyWCBUYp zwLm=B>rVSux$C2kKM`+>Apo&79{FJK@0KWfA)*xp?@r4Nx-iHD#L64J-LdrLf@{1bld6^%; z$}AgeYYu+8%pu-)@NeF<`X5aOiK~K#gZ>QxR!alam`pK^3uz?9t)P=tUqAEI6wa3M zM5milJf9&D3#OAP24Tg>jAchU5 zXXAkmvj2e_B@a0WT%-hCwWIiOs(9A?!p3t~n+(uuk&FY`Jw*qQT)`I-Qh=!J+n(Y9 z#BZxY7`MirZN*j19Ivse|@rtJ}tT_Os z?RW!>6F5*}HBk-|dMWJ_DHeV8D>zLiN?Ze3PN|N!h+PJrb<>mauh6MyguyC{5rG8NLTq9DLmFJ;ax`%JIZ>O2sY(;ftBYcFs2i{%&MD$mYUC>t z1088!0J6Kfb}s^x!!SPruccc2$Esh7y?VFCPyp#R$Q^9}71#v7Vb;yaC~aeX=`p z_>cUgdS2IYA zG`Xxn9LjI3q25hV<0Q)-D zA=BF{Rnu<1`kur%+rw#uUbt8GeGGk>>}8>SKpbtVdZs-+XfnCg=bRD;R2ViB6*YrV z`i&OOI;=jx{^Q$!q($WVK<%^8)heVBF)?9|Xoz(nrF1~`J*Od$TjFGOz; zN4wCCk3AaCcn}Rb=RQ25shYrLKy~>XM>MnwryL zagpaqL2dv!@Yq93xSzk9mgk@i&A&KJay7&OnWqa98S9Ak*=E%_my&v_gY|SLCrFf( zvEW%e9zMNaxfWDaxKnR_$b1`RY;&+_w;cSIkzG1Nlq-R9=I6M#@=o#31W-` zCgFsQYfKyk&f&1aopby5T}(MV=CV%uNx3I+|As`4^eQ;+$A%0dwW_O_ zZ)3~xmMKe|=9rbdlL@RGc#Sp~^-0VMP)k_Fa^3ydrWA&+C@~d^krW3;jr1n*L`(L2 zH8QCsX=`ZU8L$gSI&v?A?Io4P9nu#nh`v!X8yTuH)mhrgh!F;FkY>jx9(3A2B*;_1 zDNhg5Vl_59#e(Cqlf_FPDMirqd^S>-$j4y(I?L2aw#RP$LmgFP8aesvYVP6y`B@@oc(M_ zY}@loVqn?bo^NuLF><^LUCy;T0rM`?`inqq@Hs}>@N&xUT$ekU1$L+rxz4MalY!^j zsYGR%oei5T%USuL={m}*A`A@R*?L~IsLlg7$xq zgn^o%{1PuSt4Kyn)rh7>ZE4<&6f&J*zJ9SZk^4q!Y z?jZBF3&UFtA@xI^RDlh=81^(_jdLPVUm%AWd!I?qZ{?|9hmrCbUfl(uLue-*JL4__ zQ@FTm%}mVN2ICg8S$T~xxBYo}REdD8g=Pf}miA1O)0Pu9H|pxV;ZTs?dJJl@_jkPR z+t(}(_`PGXcbTGDZ|5RTc{C+79ia=GWGay#)70u~QQdN!wVZ)9y*+78orvhd$1={A zOs<=oF*~(}odE2(*O-SnuZ?clTD`gsqrGI@9TV|cpxdg#GJIzJ?`Ei{`M*RcCvX)Q z7lErpKaNdYmE*C0#2CIgF~(lic_X5*G$j_CG(jd0Z4a58r0VHqU@&Bm=_gCdQ%Y2y z81pY!{$ZQuT~>rEQ}pa^MBHu4ph^`vuaQ|`CG<(KT9qH_%$kv}wPoe|I)VbNk-%%s zjCU(l?n4{U4)>A8N_UC2!88A{=j?lWX`XuDO_#r_mP?*rTTy!A7FmdRtd~OXo5=|g zG1foy@IkD2_xModw-&$SXuv=rNR%PB%aJ4id)T}kAJkO?JqUrq6qGn(*FqO6xTY#f z96EXS#~m_X>n4X6fS__4mLF0-(M5w|pt$iy@hUJW3)FhMPhB-pg~d?ys@Yx;7>)Z) z&q0Fcu-}h~y6P|g)T;>|0RJQN!jOE4mrQe74v0{tFYLQ1MK8hFxUI%#C3jc% z`K`vbYq1w7GDs*J@xW@QAaVG7fuZac5(qLaG*u*?N5HM;8xgzAQPEv0@w=GfSwp4l z#py1nH7q^cl+cx&&v-A^Y47;tvQ%nA*ghyOEloMdRtV+Q%|-u&v)>kmJj)^rW3k=99t61kElXFDxtZt+(dADBoz6hcm2 z_O)9wO^&I0v`W}2gX2UneparpI)?pXe)O0p-=%5D;8}Y5YU&-8^GIWA!DQC2-zD?G zm8BGAtx&Dt7zdyVqu{-PGjwiDI3>wvVg5Dq7wkBBIea`)%;}p`S*l`H-C!>(OA7qy z@ooxmEu+wTWK4|rVz5iQPhNq|x3*CfiY+caR8vi&=AVoHV1ra;xG+FP1{CDr?lCFY z;53m4zLcaqb&_COP^|Q@W%X!49C|}aR>vX{?f5uba{e*(q3LuJGqYzs;812OvbA&* zhu$xEDW#kG{5VGie>(W3q+;%Ieqhu_)K?7&_)1Ae zh@wR~?a0yhQsS)K??}s*kkfy^eX*n(tqn7TGo?u!UDSIzaRPRP(!w7?(Zx@$4GVdR zKCRr^8V-Ers2gglFP-;G34f~hJsAQ|0?U-(=3`v z)gTe^;6{WdD(QBMZ>4hCGXv$>1{tFI8oRH}rjZO0Sx1|&QyVEa5-R7j=`m&ZtnQCp zG1zcAEDDN&ER(w5tmSHU+L2Y5}&h2qh$3J%{jq6JJC!a~N zw-3VKlx=0IjsJUioFE2ot?0N)jqB~SUQPD{W=rpwrm^G81fI7HSd(-#ehzKc_0?!^85uWoKVJ!9no{;7Al zYQPV2Y<1Bnp2KKl;+>%?EbwR#QaHpfc5xE^2o-YSw_3q7RHA_lqH>r_hrd= zJ2%b_(&Y23qiXyMdzoL!*DbsFq0sJHh1jpwX*OXIMzG!X|B#+PoZ1rW(3Su}S+*K~+0ndb+x&rn>vBrx7}yOo}OHr%wh_bdL)6Faj=ob?eA<;4j*$En0dBPmk3H9I7=a=z9xYc;gEwStk* z?&L;^Y&MFGkx#V^PrOZTn>M=IpZN(NHI@cx&Y;k+K)Ln*yx%XC*hx`u1%^;_yZ|`7 zJ2HM;JJD3!OjMH5s_kGN*uP%z|AH%K2f+pz(uXuUwh6`&6jvdn>|T`1ollq`AOdp@ zA$fB&KT6-_nIbZ;sVOTek_HU=pGkj&q0r9I{|#rn-+%!kKV`?_{LktW8o1Xxr3-Fs zhQg%AQ{#hw3L*#y1504d^>(NKiHrHavYw)91{MlQoF&o+>vF-`D`MB3T|mYo16M-F1N^%QB^-i7toQA<$o>zR+~D$3b)4$Ts5o zW``fpN`mr8UU18e;f9gj4;WjYFeAtvYfLpAw~qQUKESy^{8xjL%_$*lDmMD#SHY${V2Q+d%&P@eX9Gk>;mKR>#`9OWD1#-IN71}=d-~6< z*W)fpg_M+q3+_?CzD7zJ%O5TnC_v((XS}ZCfE_tYazDpD^3_c8-E9x<_an7_`z)Kb zlMD~Bad@=Kx_W119R+oLH2SdlevzB36U~&CLSu@|uO9vJec@RN+?-@ufKN5jn&$)~ zrQ}Y*Q9N$hbHJnV5pv;EtJVIP=S)=!szgj1*G^0z9?Ior&fs-#l2COnn&71@dUOY$ zj!kjOojlcN+Xeo$UKAbA(%xJdGTx0e{Hp1pfoqGM*-_f4m_2udKSnqNb5A+*u=}Zt ztXf3Sval_xDl^s+fj(A6+$L(yyrVuSu>nSqG| zQKT49vA+2Oh&XI9Y0z@zy1Ffd6PAU2dyu$#t2kbeeS|z#H5I?sHUoB8oaY17xM~*L zwy_awmLCw3ffGat4@)TNBfa7%8QFUGv2Fnv}O?(-+-)_T3=ABk!>ZCt2Xvq z&4i}ox3>)I7djaT?ynklxd|s=YnARp$YTa*V>smaOB+;^m%koso*q=M{AO40$ChwJ zjGV7KG8SmgD=3RH=KkxP^rvBVofEHy;d*qu+XE_a?B@NkRhdd~YMrC@fhG2Ef)QNR z&q%-ca!mwWfw-vZp?%bX?M9Yqh85($ygyjKNn9&dj<_sz2??E0q{Y(v=CGk>W% z{&#q@Gg$&mawl-uMI@ZozU6Cwi0|n0rX8PNfbu=m5^YUhtGrTr1t%;I-oWxNtY}K; zPK=JV1dEMeDpGaFPjr?!#&DEfWMGC}%AJHotO}XRf<;@P|crv3B5JqPR zxj5553l5!x8WvS}gWhu>QQw-`9#}CO=SZU4bfWI8+=cVf4W;#eG81gHSL5eJ>mE-C z8OT9ZJ4}_WETcnd@caAiOX|R)h!JH3C=gxTyStWS{xUM-vij498flI5aLut z9qHA~7kuf!nhp zMOYj#<=6?*_G@KuW|tl#p0-6gb&H*uW?0yyQ1{IUd1wj^&tt_cGPLcU(#cB^D2C*m=tf20_#4Z|+BkvoCiQiDS@AALj zmou%X8@mCzF>XoH3g`A$RkEo>kfgHeO!a4Z%E%}kF}{JhFXm@ie7`|rk!0k|8$ zX+s$>mXn@i`L%f&53F@p-?KKu20iW!ifBse4PXtOVo)3zQL3`)8njeWQK5;g;PjQH z%{yk@eeagHN00dNrtQgI5F^zBre-8c(vE!#L7xZbT2ybY z<*yfsJeG&T$fqS8soo0q?v2myP zI6uAEo z`4g{!^-VD8NRjs53C`R{slp-un(5c|{G_&f1;QeR^AdV9yS zezo8DW4JUh%U@)acIfNWYpPqxDl};jO0f^eKA4&U!wdA>xKNt%Xms2p?ckk@dbkMN zcW7XYzbPtxGf#ETAZMn^CS!rhP}+8xDQ7ly@H|Of`*#}hZTq)M1olgraG|FqZ7*BL zVPk?!-1m3k!J^9f4;2q8Z@H(yuNbYktJpLre}dR)3wPy{BxV>ML?p_8(il0TXv($> z-~I*sQ2&pzB**cnw4y)CR_mm8y*yk6;S^1BQTr@tYSb9~WaUR%S2`GAb^6j)%i?oa z)3yKBi~%oag6QZ<<6(0r=)}wb5O0mPFxh!3KhzFhW&S(dF#bJ;3KEYgDlcnbbGV*A zBz_|4^!f}33Gu^Ss5w!${q9EiGoDLx>lUnY>)Rc7dhmcnUIL)+aV44H3JI|RA{J4R zW_)%C;5;<~-&R&?i8{KiMSVEBh1bwW%%Lu9n8o$5~;XfTcX(4C__5vRH2_|7#g zI4An3IvSXblj1?)F4Z*Bjmy|{y!3QX%0et6sRbWQRKDR_jHn$tGjdJ+M&Zb%OVy%2N8#ipOG8#8E50e-;K_wnZd%uiY)rfOt$+OtE%fvz+sgX&c zXcyH&6Ke$6rl7EqLk7!%GV_H)4#yldt6U`+k_3xyF6XrAK8GcX^WdsLQpX#@>n5Y% zUF#ypi7IOaW% z-!}E99E;tLwG@xkrMSp!aKjRGb+?xhvt#Aff>{1}kyu{Xq3Rm$p?K_nQvZv&NjB2N zN`E04E|w@Yu1^n(R=M53tI=|{P7$jTy}XXxWTW?7uU&yr6;Tm}PJn})E`D*v8mD); z#v_E+S2M&5POx~!4w;V9N+OGOpH^S6KYs^y!TaDk&fVDB(m<% zOp2R~M6<#U=1#^??L7?VZ2jvsGbH3<_>tQ@))ERj`3?hrACn;WO6dMy;04<6Co)%GJ{)p~O? zj>r{BjV~5V$*i^OYRkLU2w{av2fK!Ia!hPVaq+Zk9AEjIS3ORMfBo&Zvxv?sFPgwN z4K)j(1LF)2H8IZ9&k=r|7!vNmZ5jzM@{)czX!uQ`d?4sjWZJB4^Y^1oOViqUuklL&52(xM zF;Sq5Q1LV<9%Fzp$+0@|bA=DcpV*lv)`#$-=3@C1H&?$Rkb+Q^HF7xm&lC#-g~Qgrk0ZM$Y<&-QEYRF|;wEoxZ?*Dk~XVZng>Wl|?H9OFgmA znSK*VFZyL{V(caQpI!Q%>ZxWu@};qkU2>HQ=v4EYIx%_zwmqex`4z7$F*Ef{i>D2t z!Lc{WUmn%y^YI#O7}Se+M(U#jc&HnPc~oXc{k%1aBwjT}JV_{266>_p`^14c1N$%I zomq@TOKkEFK<&G_xp@O00H+ms21^)NA=52O+wUV{D5Jk?%|<)HGtq&Sk<)G#pf{4Q zFk^^VF562;E@Gg%YW9&Mb}Vy^SxrtNOgK^}7PRRhPnD2FurN6@wk)Ms61!DqTpM7j z0$gSKMNEp*!iz+eIIt%69!nHh^s8Ati#N)puEHBSOlFnlR6Hpmnp-}#a!7g9Wt~Y? z(V5cz>Ex^lGkiK){?oo$RivU^ z!d+A*(=BVEJGCq|fiLw7gsrEq4H3=|AzZih9;>c2ClfP0oyoIJd#UI+83l7_)$x77 zjh~KlJw{!r6DypO%etf|jI^sSnlmY)dJwLUq&)7wujdb3KXW|3_BOZEqd$NCcx(l& zwbK+D8Ct+6V-q!03HMRlA>YpmB^zH#U2JnhT+YQUUE)2An*;U+C3|3k_Qu4;h zQ2Aa&=%1{$)=NKLZ->R>m^|j3l!sBDkiI){nC4$8$41^7>>JUhf=eyVk98%z&g-;y zT^Z8Nci*M5A`)a|TbCjs2^bfaN5QvN8{dqzbuzr+*b6SPT4M)~WpsJVx zk@BT`&4?c>GL?r$PvH(hEn-TvdM2kZtvS@F|5APoA_W_EbLt(knA9<|%ssvWFjWAD zc0ke1pK6ezSBm2pm`E_uUJ9My+9=W$SuwmC(HV(y zP0+|7|I|1+(kQaNhlV{T`F^Ar5l&_;_s{oTdq!=wI(XH;J|L?0{7ey&QjiRK4qWiN zzDje^cwSInF5{);GVO0w+^EAn$U)DODsV0PGQ<3!gW;~rc;GkD1UJ4D7EVxp=2=te zl<}qgKV)iS=sZe#D4XW`SEc743oi%S+5K>)lbaGa7eWEHgzZ+zD1(d{clHe;r^;TY z_olB*x2Jo5QiNtea4kDO(iJP(G_3oDKhn1kXF(d~3b{_bN@)g?+NEV!#D6^D8T5V8 zpX3uCbrN{>aA$d1^nG5epR|2mUdVp7K3=E8K_5=Nu zletX3hEVP~{Asa576ryca#Q)HGRkjeZMEw|XvE1My6g=o3-EQ+Rp(WSRV|%;6eM$) zEA%6;-g9*C%AiMH#)BhRhLg9*T4>}8OGZkQ5t@{@mlU4-hGr24yo6bRPu*K=$O1VX zpL7Sc+dTHQM%fN_%N9N!;@x`BSF%>Wkq_80GOhNz#t0|o9#!=hi$i~@Q=)kH^jw#3 zh6BF~p)*>BM)I0rSIg34gEabNshCoC;gAsZU1}O?rYD~*h`Gi`a$f+w^aAP2r(?8x zX@V2OgnW>25IMljnzZ)#GMWrzn*1&nc(xD^QDS1yrI9YHoB?I=VxVZpw$iIe@3Gf? zQdp6aE`wNe%&X&lRrHobLM9haaEUm@DaS7CX%HtC(zf*<2u!? z1c~)?9ph-Ilx$9c?m1;7-ldetjAlgKrDiA&wN<$Cu09&svOQa=J+)Oe?l`pCJYAQ5FSUkBcN_*!~eLLkw&DA#IlFyEa)*ZEG^083V zmf$$K)9Y4?$z#T|-?=t+Q0fK8Yk0CYX6-`RF|MEKOW{xY8TM@vx*%}a%JNU6-QrzY zJ76#-W1T>TS1EO<;^{s%uFcKX%TEc}4R)5B4W*r(&w%P|`1kmUpVLF7wj_D~PFpXS z&je>*c|HK!wMtdhw>E)SjOE6|lCn{QrdoYXZ^8R%mp_n6r*B&I!^j6o)0+0t@!$7X ztY9IvB}fzwQLpM1C#?PJ`%|5+NT0tQcXDN@s*;{$B@~nS3rR+cT1_g~Dp@o0KYRQN z$cd0F4K2Gt>7SKXp95E9n~53=;c;K+kIu}zRWvLvX$z(@HM}7Y7tZ_e7d3;KFK9)Y z!k{J`!7e8XT4$n(PSb(}FFoPOI}W}veMOL`okB|_6N(}P6)xZl{5gw4?id;ruIFo* zoGoK&=+E~M=25*av*TlMiby!}VRZ^B$5|@VT0xVHUEyCZkhry+$C{L#6uRaZJM2Ty znfw!r3&JyO+qmCXONm^h4xv!)aG1%l z3`T0VIjN^5o^rxpM%dr~-8DHtgCq5*uq|5aH5iTkIP~=WJE1Z<^KR?)pTpCgQnC%F zFJFhoJi$>2~z=(z9v|x-mEd~os}2p44X$PE`C3J_Vq^d(sOtf=S-`0 z5z&znO!B>Wbyc#~I{!xTLm_rRL#BJjh<416N>lt;*6XPt+PPq%euY}u^oYf>H8qE= zew36yln?5y=d12>$?;h_^lD5xcr&3-Og~5b6u=4tblM~F{rTLu>7{!mTO3LeitUoC zHfs_yFRvVClK15 zw(q|Ok)jM?FbO3>QOe&Y?N5*g4ndhVXAq;h)p?Shod#vCd%2z|vgzq1E^?O+V|AIu2-JuR6nIV|}t+pmvlLs!$&z4Jd2-#RKzw?#-R z_-Huuhlzlcr0~Ubyh|aoxx6n+{)QkG8XYp6Ck4!nj(#(N3(`asd05m)cl3?wwI}pWh@|#XUBzEQ6mTJBuVpM}mbDnpwLoCPiV8Xv; z_pk&XEAY2UFvovXV{6!T+=kt@8q+pU$hmB3-TjWS!d%@S_^Q;~%kQ#QU(g zag=sP_MdPBV;GNC>tn}tSL4FcwcmtzKUS+trKhUGMqW?`$qo8-uQ?Qt&vTK zbR2**mR*a|hjc1jYk%;C4n4%00j$IK}`SPJ2b_82f{r^v66OvOI8LXgrmF zD7qqLAe~Y{&Ry}z!ZFr`DuSkB$TumY&s_oDYK@^d-9c-1j;oEYbTdKGC`6PTVNaH( zaoqe_&KGUA1-$`vW^NjvBDnDhTDByP`6N%pK(~R@AbEkxv*XpT8M8Z%s zaTO_yQ1Y8NvF+lPVMin<@VRVSoa9BeJfmWHaVG+-_8aRmI2e>mW%-uL_!uKYvDQnC zgu?reyYkDw@togb?vSHmft<0`KG*nC&>Gd6%Fy<_3FMy3Y>aIEIXxi&}nV(I@q&47uXsXQP)RXqn#;K#egX0$c1Xavk4hrZb5_+Euz-7r)Hu#OI_Sx z@CAYxoKQrvOUbxgz!4!k!y{4`G$(M zuBai`CJXF8O+sWGn=&A@@o}C${Tu1Et(arJ1=s5D5ZSLfhg@Ur*_DsD=Yluci_(=H z2e*qEMWnoE3mAs@502zlr0R~JN#eujoOpP+$pj^MWYDn6xBxV>_lo6{hKT z`2=V$vM#|$Txm12WHIBzTZviNf2`v^1{7y``*+yM*Tz2NQq0V510+bi9MgztP@YDE zxgsCPuz&mKe9BK@NO~w3uj1V){6yOe(Fk+w*}Hd3R%TDKPK2T;=NGXqmLl`AxmXdb z(Kyl#3Z{3}SBOjGeSKEg%VcnU>Yz3Iw&Eag#E}IlCGLTRA#s-cJNf1s=`#W`q-E(~ zEYhiYZV`p$!J3chwS@ zrbW0T*iy{-1xS=z7{MVJmZH7q2;2Ft5`P%9Tf)65Yb*i%uvt^6<%J8!g-h)g9}~-AP?o}I4ilt+|Vr^ zjC3EP!gX0TpMf22*CvRW_L93QI**Uj!o3jp^`Qk%jBymf^ndQa|SfR5rb(s~U9fgO!-t!DPNu|5h zxi4s&MzD0V^?caeFo{tGHB3AnR97ftjs!Z+ARUXx!{uoVF*{b=GtpwZmi04o(QS)* zi3cT7wD#s{w`?5<9yIMw&|0+1V#+;AAWcdBI11}D(<^WTPxhGE4F0Aq*O(YK6R}Vf z2IHqZ=8LwTp7*$r+{#@zqu3HSaU3PY@@O9%#F2Wse^)B+=!q!SNTiw$&CQCb&h%kf z;ZEW^P{}(<^t^aM#2n*N{*tJI1T!B+DI6QaBQmH)>={(7U{d@Z1xc94oQbj+Q91v- zA%BW&CPG+>m2JrZ)@CzeEjl2HoLN4T(Tl2KiItmNiQ+NJ#^$^SJk8CR7gvNDNprouYEgzR2v@wBbYblHNYow$gN8;eG`B{BIOv6q9j6Y5_T||A=}5&$3yoeL7%djCKd50*blzX zIDD!<$0Fl0QO$%do~oy~TXxaAZq56umeXmW8< zlwXY*1zf5Nl|}BsKH#b0gM8hpdPu7 zlQ9!d{ofFTYe!UiKcIdXrL?8dwAr031g?!EZ4nlWMyrMVo0kZ$Vs4g0LPP;viTi_p zCy$u7kbJW>6DD?`~jvS@VHv-GV^ASQPreQtgB};6kILWy_CM@?^BYWh7v1qwu8;ybk zWkDk5pBqE(LZ0At$jZ&%tGiKmA8D2*;<#Gn=5@KBb>3+b=V z+6O_5KMm<=xTvdwpl$N2*00U)3PE&SR83M{B;IlqJ*XkvO;3TKgsnP4*n}ZB4XSW1 z@l&k1#c8{8vO^g!5jS_J^PFmPG=sOqd=a5quxhkF$XNLFxUsBHB~2mocUEw2&@qEq z6t@G7(@3<^k);y(sK=ko-v#QGK~3Pek_{XzA(xJz9EI>4ZR!U2G8kO`3tT$gUoOi+ zEZjWhXWH$J<(po)BfqnscV(EL1+aq;`0`pzzk zk=2%)CyGk`L7%T9&!Abwp`y%flJ)A3aewfYlo-OXmH9$!Cb$K z6d9H%v4o5a@P2^?Z1prUV$l*YOb3y8MkFu&OUGThM;Pg%`XGj}n&kMidk0FY8%B>y zo|z65B&*XkGS$H0NdI?=n6~d5I!l+{5$GH z-}HWD8O`FXI)jvN;M9KC#(1Y4V(S5P8O36@ws;kqzheV-n|aG0esAI6DX(}(0()Q# zKraVOZA1ry1RPkO)k5^yu>Yg)09;>|IhU(-iPdRddWX>Ayc@gi>Ecm=;I!~d?$_T{ zI->HrCH)vIQpU0B`&_OCm>RlM!i+>PQ*!fAwE-Podt5q0^4Yp7dk*L$hZG`7tEJwf@KP`b z9B6pG#%U^KnWFdkfMY}nm0}UzOX<_g)_;j_j9A<^vcT!qq8+|YYdw8m{a2<(-`13|Jb{L?0?cygzobNV2FWfoqA2i3E+!*3`(h>z zJyc?*W0l z?Vrlpo>8=`bbTn1KiGd^C{4I%pWO|G?Ie+;I_T~#J(7uPWxvO!5Ix(qDT~N4!Bb7o z?QRgtrF+-^MU~us;z?bXd(FrA7c4Rf>2s#dld#a4^etBXzUt<+fwq}>+sKaruY&BG z0T0phy?~cyi_HJ-_3t`kgSwxeH_gPi3RA9b+(ka-Ey9sZB)B&9>2G)MlGKV+K5^e1 z4OPz)F|Y1QHs3jQ^$tyBT<$F?E9<2N6Ma7Y=Ge8O`FW$wl?jhF;&lkhOK(ZYbTE-n ze6Lz6^ix^La#O_>ZAC8XrWVfv&Eq3u#9k;mVM?aGV=K6j z#-~nxN&fxa)Iyh!SciLbtA&d#4w5aISW=lnf5JPR8Z#EtANb!gzINjB2_8!oUcJV@ z*6BXpo)R0R!@}_e43UKk{*HAf35K@Nk4 z-RgTtoZ}mEi$NG)Fut0WcAsz0$u`uGvtTZi^2`Zc4pg)v+VW z5qovY@3QKp2t2nW;uZL|zKH9A5R=+}w8L~pFp!A!QL#+=IZ_}bLs-}E=SdM=@kbBI zmFzo3@RG`s5E|$yozsPQXbG{mxmT1qP^c5DCOYWCXchCd0lQD2=iMh|*Dq+4zlH&F znI&m?0~b^G6)R|j&J-axH>yW^Z zJf?vy@z#rUXv?KhE6FWMnp0%%YU2*$ZNTH0jvcdi99B?elxToB`^DBa0h?^N25A|P zLpL<7pwNk_BjWGh60IcLQ=oFd3QuGJr+FaFP0&u9Iha;hD{V)BY`1kL{RIs)NbD5} z7}sOc>&kWdAA2wdo+}eP8aC-2>>V`se0zL)5lkd{DiyI$w~=s}%_|?L3wAK+PsNZ= zrtFhTwK_+NLtTkdwavV98i`w+NE6aw7532E_N+Y~ggG}-&@+U%!AX*q^quE^Rm`_G zNrrW!$L&knhkKOrl)%kL{L+V78*XJ|$m<()_qt*NB!{!Rp-==E_U>*D)KIs||{6r4&JBsM%R%K_#4Yv)qYa zl(hy4aT+NPP`OLTEitiFSraj+L!rxQBIS07!bsW>c7K$y*XjRiV^(5;f|=r%?};5t z)L}I`<>*hKe2AY2Mh9KiIX~M-ZlC{gALaY(cz0@pr|2N)*?#b^+<-!0 z#zY?F_48Rmwf*G|@#5-E)FpDikP2hoWhwk+^->(VfEri$_F(+z5d!X??x}UUkvLV` z3P*$C7_wVw!bXS@5JqD2-u*FT7Z=tbeo3D8%p1oi?+cLUqMBf{!%Ag3%A*cY0TYxr%sW}&HOJ{?r zUAQ8(U5@WDa6iF^WmO5M6{48#kL*AaWj^7FrEP{IblNyos-uuar>**pkTObz8akxh zojVl+OC-P7`-(C%>4oFEQ4$WT+3fo*RmRhS`2FE90K{vK`1o(_4IVmV(273Yd|h># z1c|wkK0^BfvT@QXIm~tTXbG;0a zSFbychRJ&i4-?d9^km`v|88@+VpV+#$RMh#&w!#V)7=)z5zmjle{Y%-Fa-I3V&bbI zLws+WsuT;0-2`wz#K+A8F`W-|<%v9hI2F}y(gp4@$Q9=<0Ygw;3*!fG6Y{t#P^XF> zQ2o;o{*MP1o+JMtsgP-fA*ZB#+#g@#@9y+xN+sXlG97P3b673z&pP7)WX? zMzC5e+PvXdRsZ1+gOrS*32>&a07@v2eB#Z`)v{Sg!qoaqTv zVQ(KO-XK(U^ZRTC9Xd@Q@O=2EDLo3ZrFAw=Ryn1uR2aIfZ=bny> zC5x5g-tCk;plk865z8xq3niE1d{VlUVVdtH1jQ_qgP5h(eWNHHc>(jSyt-t)8 zRaGCv1-416feU`%LA-sZGL+;pBqp;bm3BYaNigYEK;@roWWH?N&Sc-q7(C%pwmw~6 z`NOO!irfR&KorxyJ)HtHgH|7z$#0p?R2Xz>?dCcK(pDgK5FQtujlx1=>13tQ_$^j1 zM*8<>!pLnGL-Cl)(Y5ljtBkMp8NU1|bY8o0SLZd+Zzu^F(|=FikW(GA+2pdfI?uMCo`64vzx(G9dbWC>R9`&)&YXD{SL*=?B5&jZUCg)f<;40IpoLB? z4z4pS>JI8Migk8ueOM!PdOTg@3P3prQa-#QT9XR%5`QgxH`*3s%dR!R& zr!N!`Z?lR-Ao}B8O5}KUcGtPEe&-Z0xh|xK)vEfC5`mUvP~U6n!Nv&_?7&*`$hdB=7r|@_vhlxhlQ*5jecRPc_05MWeG|BdPo=z6cu-GZqd8&hz1 zOx+nlKiMWR50Mf9K8=sn>y4d@0hRT1ywiOjwKHA1zo@ivezx`tP$BwY_ulwORjo(_ zcym<#+0>wp#6eh&838Mv{s!(&axAuh)KHn1NnxW!arI{NC0+0Sy84=tdZ6_+b5jzi zE&b#-aoZ81FKvHVsIwfwBnMD^j^Qm!E9MYBz=S1JXPdyF>yBBKmL5zoYW<#E9R52v zH%bfS${N)D+yAqt&vl#$3^RpNIQ5&t|Cz zCYVu+|HXj_m}JF}|Aw}|@8 zVMQFG_S$_-c-CA=NtR=^^xncC&*JhbZ_)t z6|TYA<>I&RllX&E_Ktd$Vo!_@!}EOg5!5>f&Vc_!KUcB*9=m8amBU zuA)$`mS&nKMO0!Ser?&f9{7AD*!#=iK{QMM_DC z?%el9o(P@HciItvT7R)9MOJ)k*eCBM{>N&wJRF@wX9K+vC^->gRV} zP4O%`zMUJ|x|uJhb}l(aTf&`I56(n+%y~h{5lqO^X%@3rRd{Sbdc?0Ws5dwJV{ZT4 z@I~UO!{bScapz@5SdJHFhH*bIibmieP7c?z5$D49C1#`1u@Jeo7A#GNrKjgfyS|+I z@)KnSU|L6ujRKtChVU?KkicteGNqkI#G{S1+h*nL3UT-6YtJ(;j|9w!`(N)%t7!;0 z4myb+zat|!%*t{@vN!(322CH*!=W7MPCJ-Gd}9lK0*^|#Y5R|o6OOdTgmgrzgDwdD00vU5G&RardomL_vQ^Is?b@Ux|7x7zov_i)v2 z^5QNjP(gc{;D(JU$qf2;D#N{UILKpgFHH zQ@nP8#u!iO=%`B|YWSt$W>GhP0PTuVExXKG-ZZq~%uc6z|Qi9zGm60#Ght(?U5T<~Pq*Bi43A_tG|6 zEHJJMr++8>aP|_tf9reOeps9}bCEC8V9tV}SXX1<7yWmLoSPy6*XzN8h_sLRNr>}H zQGeExvFIqUQjA3{f;&;~o*@OsHPTyDIxovh^Jv?1mTbQE8;^Dx()T0yX;xTRt@1K0 zIQPnO>V>I8jpW;piQh@%K`&JRLuTV)IBsL3eU(B4jv9r^ZL^kvMb}NQ^@QDl4ny?{u^YoqJ!^vae#$~?6yb=|n2CTGU3 z@*i|j8X?=vx|(|BU=EOO&1nQM)H-o%50lts9X6Q~Sj)5?AJVK^py_g2d9VmS7UjQR z{W4Z*bB(0v`Vjj3vy3JfW4v)gCEHxJKtYN*-n>e2FEDC6yX&{qYEeaKig*BI1EcQ$*g-e9C!6 zZLQglZQc+NXsj-@CR!ie1*ugqyUi8w2ea< z+#g5oxtRTgAWw`4a$EcP*B_hV*S)aYdJ+I3y~lzu2uSn|2EkoY-70$NC zRbjV`#r&8hO=V?eMwEp~>@L^WjjG$DDT}V(JCwt?>0&#*R?Y@XgVJCxzIBGCB(p&5QSw8jEfw##zrQUYZniQmL)~Zk!H`NX|_z%+z1L3g1u)oqQHF zA#wXYtJ4svKPnS%o;zCDT6d0t{EaOd;5@eX>pv)Y8j$QLsTStP@z&6Ooi-{8GV#Fj zD_sW`HK@wf1a@{jM7~XZ9H@R9J6id zZgCqQC+%CoIRr$WYhh*u8yG?_kdRR$0|-9#^&`^N$rZbLav%`6-t6|E@)9#$cj!V*%mKz!RM^bjphcv)@JRHmOxQ_^p;t93#x ze(mK?`Rc++huQ$sxaNBMQQW~f^T(J1xFjwy`47BPQ(WyJ>36wXGRZG!i%)-=HiAay z4ocsuGDs0_@BTEI1WBvp0pcsnzUo4j1y5bxnn*AU8`#sYCekN*KWh?lfS%<{skmN22J*NKtwxDD(8A~ZoH!J$^?uF)p9~<>KzblW*mq!x_1 z6Y<0dph47-?@FV!#IXw`Ej1qwB%~Swp{0JrKOIkOr6vE%i^p!GO^6^K>fSI z4`D$Lmv{0~@e}vjS3KNMe4r+CLnw4NHw8HpK?98xCA50Av%O_nYGlXO(VG@A?>);@ zW2lIfG;d@(-ONzXdgY@*-E{*rSQ=JZY4{JGUvS}oB9{ad{|vRVm7YLL5L`{A0EGoK zzb_)s4g_Z}vlG|Giz`ul5Q?{;xa-%+0(0=_ZCA0||03_LqoNAmu3;4wQ9_Uq>CT}$ zrKCZ+K}xzC1O(~s?uLOuVCa(W?(UAEJHCTHzh^ybeea*&TJN{scmBcwXU@6Lb;ot> zeeE5|WTRK~ZODz$EB&znS?+Epeb>4kHK5dU0dMID*gjr>`~WR1A%f9=I~dh(IF-mx z*xQz7lfN?ewS5BOhhD-N(kK&z2zv0yUR=KXW1WonAfL)5U2@!{tC3!Sg=&r-`d}NT>>EmV(@Mr z^Mo5ye}%p;wX_&ncm?fOpRAmSvtp`+f#} z9*u@XGmu5IFi%xz@gmlArEuRb#HGZX01-EFMm1FSCk!GHi9a5lh>HD=sy`I@)XPW8&$s~p2&x{bfIH^)$iGB|#S!{=vq zzVH3j(NDS?!;jmC#uiNOT%%JFPO_2(AwLzn4g3~XJ`7O2kMNY0oL0m2HO@r$da0&m z>Y_+6{4B22suU0}{-MqP5tg*VeP1gaY>`ZlV+?DGn{X{3sO+ns>hnRFYamQ10WlXR z5W&6J_>KlzA&r~S#VN0{eqV1$DpdNRQ%BKA?g0oTaY|0q?iFKM(IGsh@PHTBpnhuA zmV8U+ujJ1@pKj2b`Ez(yervjYxNR;K%JVTM!UT;j&DhgnX~iryYIG?kxcd5eq2_S) zOJ?Ouk9h@Ixl8(U$6q#3@P5SgNLGM0+%9mv018+})PVLB>8>i{^oK2w=31fm3(@N% zff2OhX_05!Ce&>Ql^7ejM6oQR$`(>;hVhZ6Pc94EuZD+7=o}S+-Bi9}sIey%Bp{#MobQvQl7HYDGn_6_y-z{W?|e z<~K$D>Ks~-mckf-*$PF((X1mEiVl;58tj>ri8V&e53|;1+6}(uM*;M)B9Jza#-euI z>*d(Yj}$ECyNMJ;p0s4I$2JB85t>i&4xJGqfp;!m#$wReXJl1G^Os)pKjss7#j!Uh zHji8Rh<+KTw_z-%ocryg$8(;~rk zGLqlplNvSLWcpg-3|~Fzv<*vHdab!dD^2%Qy?iz_{~MrDEZCfC|6ZF@b}Hfo=>jr! z*``FUBx5OYv{@a=T|-9(XjY07lv_}aT)_ZMP}`~0oq&D&d)B5&6n%7%EpADR?L|u5 z`%=5)IZ;eI^=I9!rJg16-W(p9^nS)-nIXLXcbW20;vSX9(XuBJnB^L=5<6rHKElL} zKV0f6mBK&30TKm~ODSLQouF9)2H* zalaCk;F8W52?!n6TBGCRe}9LVOW*Lu^eQ1;WHF1Z9y`WIG&nX!MS;loM}BU3*<7DN zig2*K$P86^Fy_V}-N7Q)nd@Y=zsm=PFuY*ric;(Fmh!Zc%~xuLD!1HqMxX=n-2zee zQ?r;2cO8l^QF{h@b!6&#lJ%3Y{81fXI;DxcEsDn&7wa0Fj)DxpulpagcUNIvz(gFU ztx&iVxrUpq16?sxkw*kWe`f{fcmq$O^+27t_lj$9#q!%K@lWSyiVz8TFUhyCf;r^UFPIw&i{o8q^0e)Mrv^Cm%rlVmhJ<1DYht>jT;YVf6L4OXXXoLTnUY zV#4v!K@P`H!ppfIQgi}j&*kVaOsRu^7&oz^2I;v6E?$e=0a=s`vsg(XY#MxtRL_JT zrcmMRD9pFOubm}Qmrh$6ji<)yMg;xHe`{rb>PF1R-GY{Hc8WTKd}L~? za0!z9u*<5JD`}AA!)v|Vy<8OA5bp?@XMx5B9f?TVD$U=@^pzhvJWQ#EU6}7a1pWB# zgXCrq-Vmeq#v|X*#{Y37mNsjH#>`bE!si>#erZe282os?mKg0Tk#|Zn4>G}Vm{I_< zynBMl|DxoiX^hFtaHvWsuWwJ)Hq>X&BVT1QT5;_mEB+K6L@IU%gVMrgs&eN_XNQ|G zXg-*hzi0n8KSXGI@ib=7q!@wBI3LSWOQHW|a{x+vABxOZ&b8$p!3(!erV)SoRiK6o zXnDbnFgbji8cUn9^|N~&1h}Hn?xd8}c}6T@x&yy}wdOutvM@*Q7J!i47yk;~d^3GM z!W2t5BfnfwK9;~-o^J@qi(Y(W;0>Uo0rEp^?fbtP3JgmBxP!o#ptBkk{l_0%>glZV z??i=S|$54j@voN1Y}(b6lb&RjDVslQLUwzRcPS6nhOSQm*BhQ zqq>b$;E+D4!TE7c$x5a^zBm22huQQ_rfME{sjAMdvreF~BcxbohSO6r4do;o zk=8O{HH!>BzrdRhDC{w&i*2URKYjWKJ5*_5ZmGtnyP|6QDAG57Guc@S$bpsZC`m8O zyTg{s6&9qG#`MVmg|OI43->|Dz1PL8L?D{f;`pqpxQl$9vUofv!yOzCu2l>ZRdZ*} zWj!jL?+3~nHtZ-GI|JB!U8g$TEJ|g>o0TtwSxS8~go(XxH87z3KH2l1kwBC#xiX%+}0%f)GL`Hsn^0oG;=>gL0q0xl+IbU5v`WHU(;?r2Z~32APnE@j+m|g zoq6ho--z+k@blCvYoPqeNOWm#I3h%SQG72~(h(xoRJ4Y>ty2>Mr;n6+I`>*(Rd$RE zG+W}7SB|jtepOX=PKMReVsN*~qmnyAmIr~z3&ngpu`MzhFzgf8RIyzJW;GFbzt?gh z`!t?M#iINaQF*wkz1L1D++ML~5wO7`tF3UPll1oDq7nQQbdq@Aeb~{*GZIze@{0lu zUU)G5{fLGa=Y4sq|BsC+M=?J@BOA@FG0)vch1HQYny*}k%uElg&-i#mz&=iww?CF7}`E}(;l4L(>NKckV8lb^_g zU6G+DH*R=M7OARf337WtKA)0gmIIAqM*Ew%@JV33ck2|BN(z+;jX{yq<-T9)9*SJX0_uvC z;aY!7R(`(y&LKX2wWIx>>5u}-w0Usc;OIut@;&C&~ih4 z(g)Tx7cuU03rKw#P~ed-q1bKpy-IwqU+-g=zV18T_|fVG1V9v@eI*1Q3dX>!71Z$~9~ugC6kXOrIDm&OG1q6Bfd`M)tKtB0*#;I04_+pgnE7#5p)LLEGd1}cAG_b% z3({VHEfPa~qDB9F*MNRh`ePUi!M3Kr0t@4-PRFudpT0GOXiF|{?4X0Zcy!c6)%E(o zUOWeiuk*2nST=TjzamxbqF61#9csULmz3Ykj5yfyj^kNhOl_CpYmX{)IJ;Av?h zZsH>1VBs$9>)FNb(u--B#5-KGPKPp2al3i`t7pNf`>M>OuTH&KS4CS&1A5hiVkse^23a>(l9kW8 zp6(f_$VWNnNb=mP5s&3T_2co4Ifqi+s>MR zZ8eu92kpR=0$|>+Coc8G?LZL-KOAf98?`@qqDu7KSGphm5poX~azDjE1K)@o;cnjt zg_*l-4Jxu7;%eq-AI$u&uhM9zpoT{=bHda)fEL39x!ACMOEBACDD*KRy{UO}zV3poYRk>=hj! zGf`y+;ki&r*$VO66ctR=4aM0c?z?86Q+pf!?8rk%vxm%-(vJ9~O^So0=IubXK#E~) zarr^DjmqQ%?I9+iYGq9P(0ORz%ula7s-RE$gNa2u*d&3Sz1u06Mc;~ZB!aLl!GYq2 z%q)>Kk3R?aux+hl$T(wSb`VH!a(dgIl|HwC>#yr&w$BPXFz9oi^?B2D;>@tf3)bCo zJt)UXpG)GiF<4s7O?9#lq3k*SJhZp|#mY>)o$}=Q?EOg)S?arLf}w=o&eUH+Vhv#X z>$C^-!lWtDDyJdUDp75_&KKVv{C>?xmgj=Uu|PRZ<1f)5BSDMN*im!J2U-n2iVDBW zziVyO);(sh=lh-@Dh|tHB-!ajCBL@+7qU5hB6(dYxH~hv6kPcoGY!~uT#t8UJ|Wo}4*#vJfXE?JlyMOqJ&1}b zP`b3(BK+=cuFEsHW*L#iywMR=x@Pf|c{eZl!gyN!jO$2-X57tJ^m$?`R6B}UWq`2i zf)2fliHn1RpoijqW8~{^^QbAlo2C&`h9V{92Pn(5Q$sD5m`?8~XB*s>C?Y|xXt z>T{pX*-~mLti1p~LxCOW{gdRY2|<)bAK*8x@a2XVRg3!dm`9Jt>i^uMz~ZOc(-O-y z89iWvCOVNX8UuI&E0gE-yeE06S&!&{hHy3iKvSZJ6sU0){5uTnWY+@*UqDogG_Tjh zUErti@I;w&%565k*|E%2*~NWyJSaaLfX|U7cenj5)Eu=JhUBIKV$bSu9aHI|K^se) zuP(9=#2SMXtHoo$&UMIT!QPJ4^g||hz4V3kjZ+|X%{Wyr4`rXrtlwtwFzw?2G!SR< zzkMxP%1Om8>pLF`X9ThHD;v>54Vv&JvJ|3NSpf(B4R$Z%G!NV6SEQz$;E%wf>+?dm z&*0l5;>Q%PXXrQ_a>0o|cb_tYKj;9q`qSnGg(>4-9_2so%|{CBEKKIV;O`&ByzajZ z^G|>M@-G_x^waU?k7vmP2Nnaq+fpv49ne z;uKpKMb+6i3?St(9^;d5JHFX8hyUvq3JC4NXBno5Ij|34l*y~}Rp&v{3QClBbAJfj z{tRPzFu(w{S?D4?<%&;mw|#tKA0NtVl#MxxjN0Ldpq)H~{tU4G%E6QE;Ts353jj@eOicDjvk)BYoRX_mHY3I>XSDDHzy`slj8Vpu8=K|97gJRix#e%+ zh~>H>!E@fJw0>TjwHp`{p$Lr{iKqmJ1z^(p+5qI#3N7qHvw}H4vGYXATs=3QZ^^mx z<3-_4SLM~JX-`lUyCc|PE?6mrqrt&}xC%-Gr`gHS}pi+qzO%G#|lG>(jYjQ%VLsk7NDMlBah+&pf@|(%8#TiQFl^J29 z5yXTQyQZqFF)=YSyrj?DltNBy*;p%#cP!T-F%9X2!Pv2}v1GY+g#qfNZN$@hvsHj0 zYoGpP=q4+*3OnYSFx`mYXh@bAg)CBaSUizTTZ_ywE0jj4V@(q>4BA* z3j2hdh!@(L?coes=$x*#SR=Z-)BS1PQxl-?8<3bID0H+74Q> z+NjiVlU<;yd`BadX>s+9s`$LQ2AzNx^-u0T{UAU>yy1MqZL&mM#%!BbYmr-whyvM4 zqrxsOgfY3wU@K@Hj3z5AIk)Hlj-D!7F#_LmmTyj2Ja7~YUW454yUxNCJz=eeskwuw zX1AAg2OF39`={dWRK8VTFhdk0z&3aBF~dUM`m((^UvZ1cm~2{C z)V1$6Vd>R@Cp4MKnFLg8MIE*3i``PwwIb3Mm_I!^vR5OL04}u`)GJ-*>J5c3WGZ)? zDKp%-S^-67`F?pW;$+t*J!*)*zc@{x(qiO*{3}i><_n1@`s1^j#5W_vS}0|+&VNwJ zd6!+f00DS(?$sJftU0^Fi8zX{EYImREfftCX;;xenJrXaloIBzHhgx(kINCV`zaNn zFW*HH3p$V)%&Upm>DadksijmKKLx=skb@Wt=Nogjw?$(*m5BkK6hP6Wavw*$*~2=Z z9CxN6YP=6W(f#;F43>6{6xgBFRq1RjMjH}5)R-=rQXydI!c$8w&?_31B83N}(K&#L zh#ZUm4a|7EK|h$3)5iIpB(*HoeRdx%r42A=Io*tm*I;rK07xaSPD4ypx!N-gN&AsE z_&BN!P`k<9MtIo-BD;Dwjwnct%2@WCI$Dly)iJhBxseuemAR9A5%Xw;n~ad22nsui zVSJ9UWPLSqqfDqB!=kh=WLv5J#hF!xvD?jg+=q!Y?x_P$UibAQ0cv*1Ux?=;ay9zF z(2L4vKDCDauq#H$D^c?xR>(?L~!>b z+TXaYC`Q<`bi>Ofsjs=W2~?u~may`T^}-VgEG*#1NMT14aKxfi-&DUR)2{3_7>^JA zw3s^!U^fsjdL(yeRfGhB#pZ}!?MgO|aeIL=CmZwubxB}|OdSn$YnTcc(>n@{E}fxL zxSeYcO-IjlizsV57~m$sc){Mt1>cf^;<&~Ozi)veFFsqTt&^ySS!pe()w$|GiQw5u z^(A>?TM;3uqb{Oda@t5rcb{P@pSTE?3yRv^sX6{U@Cv|mpk9(@8;tTa<7sN2gkx7> z5*DytGIb^ufi^6ut0zJ#u+b}%3qpOgHW;XzrM7(rHM6vx8%C0q=zxuh^@e%R0^F*R zRIpNMGo!mAwcREgX5tALY-M^)?qLa*h;M}Ppb=b&DlyJD7S~SR`!-HL36F) zpE6_mH5!e~9>G;Q^r2&o(pHRF1h@mS`Nn0l%#y!+H25;)7P83nF?duxjha&a-ZgGY zd0O1j=X?e_|2aIdoY!^S>d6g-H=7;G0`BkUN2k3KUDZC_na25E z8*Xi(siEgpN@l(YdUOv6WhAR-Sg%(16mF8+-(PJV4b(J;7q-&|sQ^*aVqL4+N_%Ur ztM%1kR-aq$c{+d($_ZRt?mzJ&7|fPKlwAD~_mDIU3(1y~%mAMG14r4jC^q?^!=*RM zJkx%q1X71;1^Mw;3idTN`#;X~s0hLZf_4Dp!PP|YATd|KS>@}X+W7#XI+Ie%FWJ68 z*H;`*w#K}QM_A~X4VomJF~4$Ql!nH}sjwBAlgT*SYy56n z`SQ+c)3R*7#!bCb8afSWko`VF{3{QWB21BFLa$>|TZqdJ|13Ii6< zHMVQeTr;Mc%^Bg~uE59#jv-eS{UIiH86WLS;UCn{nAX}2z}-XWmv#To6z=i(iu?`= z)mKlL7x2pX2E=H@DZR{(Go{wqQWcLM%Oa{=g8fo@01Vt9zWw}Q41lFNZ&B1YEU&X`Xo);)*6Go2_74X94FkqOp-S|e*|+{0h^wY#gxTMy z=3%jHk*F(LhH-+J2o?^HKbop-Hu4h^j1V8Se^kO-;CM)h^O&tP4?o9bg-gbB*RKM9tGYx_?k40s7oDklfWc>UzW7e9c~4q{4cC{2ac%{Pi`$K@{WVSL5%10bEF16_(QuCq}$ZArk!V7W}sb28U9D(c1-@jR`m zms0)9Wa<7Bn!!M}y58N?AvxeS`h|^uRIRSq2&b8MKc_)G)L!J2^!nIUKyo&%STPG29ckMcuIz`WPibtQHmjUA_c6;P>spO}PrF?n)DuopYu1ARlSPuh{!QkSHQ~^F&4Z(bHfreiByY&WoqT^Ck#h zv{9zsQa3aw=y0)aDLpKG7k0`giFW5L@eCD&)}@_O9%qc;p5O66*q`YRZh%3p7o?rP zjI^FwPnO6OVJ?5N_y`>&xF!zWFXz*X_9CG#wHg6on~D7}bSQOU^%jB}SVi35e4u-( zdGCHJL&pH^!0m$RPX^1(mENTDJw@HK>xgh;&bCOZqq3WfA6(HZBktDREd|?cSOBFL zXd!w_s7^bLv!(KU`r%3}B|i?GVP{S1C$H?K8T_+u!J_Ocma_x0r_cGx1K1vlcbK`< zB(Z}!lFbw#Mu*SfdN8-%vp-`RTTqo7zN32jyJtwkl5gDf0+ZCx5@Y|KbN;(w;pw;k zd!VQPAs-J+w7@zvc!$6;XnzR^op8e-GKue2y_e(VYnrC@O|29F?G`O!@rD0`CODys$uH zUW#p>r%s(`9MT`NjS~Tr6pm_W4kxjm=Qx>X%iOy)cgeI%<}&Ob228gzr))Q zbVbYnexAj37Q(q1(Nvq2btw70u!JwtwlQKrP<#ynTbw`7C7pa;8JN_r1}XrT2E?}S zu2MM#iwu3RKzPiK*c@7GeTq7Oc?H}e6;)|)1p#2KttLM?ZQ$D+$PVUuII9F(8j*0Ss24;7VgE zMery$dB2wIRjDp9_7(yi-cn+5RMY#-+t|>#pJw59k$Q zPSUFD*7PGU_x2iAm8cgKAjZait3ab%;LAgePC?o*U;IqPIa?(~@D(RsJW9z>L5I}a zr0jFm4bL&y1h0M`>u)aq2fOQ|h@?ox$ymS4ntvI*rrOdZZ^W9MjVa(;KccR&c^mov z#tG!I<}WE*!xGdefXN|M}ou>L%(; z(R)+O@-Li+RJQSEYkJXR=I|qHAE{!Lf~hE}J&N^pm0z%)TPLm4j?6T8$rFp$a7qVi zMwL%@nM9?=jx~IyhVd}QO?Qzkz55%D%ZPdnfLS_s$)6Qxh0u^s)Fs6x7k-PXId#dK zadALqt~fP0WxT}@k#8=SHv=~yG0o=-M&~Z#uEjFFV1m5x)`fPIrK;I{dmk8;9h>r+ z;}pg3rUtxhj_FvEE9=7&9Ix=Y0%VIXy2QXs84|>(*V38Ot4)zFjxAx&Vg*I-ltiOs zd@r=d(i67LLZ1*+#Zi?`t!f(fUso5R52!bgv(7JQVkpQSSzOuJ`LbvDxxM4Spt#Id zPo*CG94)LoAO1%xcUsAY;dXnG_)gO3~`{U@^zA=Q9FweVSTC>rEI-xb^0; zC8oL+gw{-|-K;N^Xl8(%3BOA$v-}g-Jgi!olQlTKxA>*$?g|T)Lg3qam+V}I!Kw|U z4^Njj*lVIq80(aFRjAoTH%9e0f~_|hYdxdtka2(ZZcn-) zwUu=;!^(pcnj!f2Tb%kCF^9>z17yp@eKXOHajinuJk6uAnpu8K6q;$d?O#uczo3Q2 z4swE!Pbp)Jveri=WZ+V+HDZC1H!43>pW+20USM6$nh_P$fqAQ~uj2st0oinj)59@Y#8;l0H|{tJOhWJO4S#Q3w(YW-Uml)%8naxGhxB)-2U*^} z2Sp2XUn_9HwTv6&l(_DOINOGu{o7ok0WL#=6u`(2(x`Yc%cWL=1pvZ5=UjjP?@tAw zi!p)riX(2&0g-`*?lsr$U76N*9$_I3pn#!V_A_rBg4bt}uG`W9xzI6Oq^&9Naaus6! zZ+ZmtTFmvbp8;(O$`slE!jdf~Im*%P84SPR_UFdxYNN-vwbJK0TgU z?~<$=G&D1a0ouj*TVPD!U!6gJyJE|hWNn)j1#G15wTsXV*Pdo;}PUHMn?6esU-ekBPcr&rQX5uC2>WtgX(D9N%#ws6-JBxS-Pk_$n_ zH5AZt7b#wE(@88@b&YHjc{kgw+VP@KY(UISTHL~45d?HB=#@@EFKO}_jM1zHN~|nW z`qaJ~#~at%P%D&Ab$W>CIoNO~Yx05s(vj+-+U&4e-M^Yvj0^#`CdS(s(%>nFp-3Aw zfW(j+qR(r=T{=Nhd2^#wMsDX6WqFu!QnI>eC%ta)bmm)BI5C0KM9RS?3yF{v(iWt9jWBPuvTT=)%g#qws~_B}T1sNH zez*6r`$BB;W;Udjizo$t++C&L71EpAXsQsdIs3%8=kRt{VT`AScLZriXC(KmuA7C` zhvv9`Qy5awbV3M9T(cAswo+#6q@HWAY2HDd86cc@sQ%QI_{*s}->hG1e15FX{R!~6GcFNtGf0gXC-2Hs(Hj1OD1V=$X6 zKIM_|0W%W3%FV8YFsa%O(;1BKI@wPqY*|M`cH)K#>B4VB!Z7iQec49+nP|+=Kh)uX z0r+ZytM-$k)>7_oiOA8uy;V&K9RIs9&hHfzr$U? zGIfRrLl6Rsco&$KJG<_Svev)psPOUG%oh5}BV}cS!HjSvdz`&<)}shJoY}QpZkXfv`>>XH;;{#Rn9r3jo!KU>(6Z>SCE!XCE`Z#= z7uM(Mpze8WR{@K}p#2vz^_wIbi4Zr&VJ?+>Hg)TSz&~ZzTk($*3mC!;kesYUkMq># zuHI;HvDKck0xnNhqykBsd*I|O(>dG_|41WL~Jv0JzDMWpMKhCR&Zs)crpWgdeGR>n+*E$^HUwHqrIx zuD)Mg+oDr#28U9%8J9F3fEunOUUO;T!9p(ha`)sin&7F_WKF)ilBK>`e5hX?*dqkx zz!?(&CQzEn;AcC{6bd`tu37GS4hC0*ugAUNQjt>{V6K-^J6=C{=C4%~*0a02)L4x^ za7J_MzouL#EKjDtuxmpF~^MKdfwnggFGScMd?1DK28wX= z{OxJQ)Wq5VLfP`4pKJk@21jC}PnE4Ep)WR48j};FBvvO(jH%);$hcxVyKiD!Msc_d z3qGzC1(TzUteW>fgE0GKaShU_Wb`mSW`F;Hm<d!1gau3F(NKA-Dm(B0KV zN+80AU9@SOh4`IAW4e`z?3+@?w_o@oA{Oh84ULL26$@&9t@ryUCHf3=n&(IidArj! zt#9jTKD~%{yjjjO=+yAR+XjMGAvgRIN|w)RKd4@3w~_>z;quO4^v)yV4=2VeY4 zB65RU7a%+tqTn|ZV(?c*I@cUx_qD&C)m2q}!swyzW}}L?dr!%@^8_5P^ z{T(a3-RwJ+b4gj`%Ymdf-tN^li^b+r58n-mEnPVWy49SFki8T|*-QJ0)p^XpK#OLG z5zi)6*t59}RT0tbeHFiBJ&-`IT!ldC1C&_7Y9%Ci4vS)MX_y{);wLINi(X=PV_dmZ z**RhkludkvMGEU18pym882qlLq?B9a&;ZHG66`vDS1#SVfm<^d+K>=MUASbeAuW~r z*1&M>M)%b7qS$L(^ny-XFieor`oG8!9G=aht6I5$rE-3EwX?f{+hvHM+iR2jz#WNI z{9Fsvly>6ZA#x-QS`H%yXrM!VQ`S7+y{8#{7(KxM5)#dMS+@BxvZBug9}QhwS({HK z9E(^pH`r!lHR^kBSKCt{LW&G)@bP+>+o4qJgiPqoQ0TZa+@RtsEzz)lGdldn@1u~z zi)lX>c$P~o#%SXwQtuO!!cc^M;pNpy$`Fjw^L{xFBJWW6+VTbDX?7E3ZFr?k^(ZV& zMlHiw@d$4*}Mg=(;%cKRy;u}tHWK2ImHLU z-0rSj`{F?8J#XSE=j7ni11TD9pqdRyZH{lR;!xoG^c3SY;7xOOl@lpO_qSXDh~Sj3 zD1J0bL{pJ8whs=7276K+jJWwe3^%(zNAhZ~wi;-FZj{YR_01-mC-#N$KlVkuB&+oY z>jjH>r@*ycE!7kJl17>{-WG>yqAYeAoUH@nc`H|8N9F)rhoOjHml9=vc^6`0K!03s za@XNDM^a0XIRyqFlY)Q_I8z1N{d~o7Z!HlshM3Zy|1+{`HzgYq6y}_I=FCA^x9ihj z0i0wrC=)-9v=T5EDx#1XCV1Z?VyAq`xu7!_gY1%JX8HN=sNke4FB|Z6ASO74%MzhU zhayy0ftsFLdVosWTPa1^zR#km{5iyJ1t<*XoSZd{ZVzbqoeUN|gG#)j4o5q$WHuFE zhX+ulg5lGo-GeH){`Kv@h-Tn3WOFCcDs`V*OwS~&7QIV3|YHrQCVG+jwjNrRE= z;yp;1T3ba8YYXz*K+?$E1tx%D{&6>T=`ZU-noWzh%x}Gps4Ch*5RnD-rdDC5{h$(`1*2Qj%OO;fyT%v7N3!z zJ-agc){|Jvlje>-76`7yF56ACZf>`sML&0A!ogyJ#5J6Vb$CQkfio2&oV(Y0em@+b zWSIoPOS~@=P}e6NDc1KTref9WF0OU90=l;#YUZvYuj{vVKPpz#>h=XHruX<1Eq)}x zkMQINm(18friFZyUBeV zo(nE3d^f{A)1tn?b9fmqOU9a^M1~8szxL}44g%2rAeVqy)i>fDJ^L-x2@a> zi^(_Tidm497m~nnW|u?a6$ND}vx2_&?VcHU+9g~`)y_!RoVFm_c>O|wvo0Zui9Xuv z;^rnv0vVM#>4Rl_5#dNyzaB!1vPs2074NL2mV>@xzvH&ILo|=x#)cvKszzk}gUjfG zsy1N8%`QVTGFtBTWQeVeNBTs{uhi4BH4TdU1?mH!bsufho|1%OIf$l`3V;W_W%j^hbEBJA$?E*=eN(QT%usI0 zc<^kI(uBl>oE4Y6lAMxYY>=x
|eirdKQ&rWheDiQ*j`3q9=*DrjeoxOaJxHY39 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 Ts7fh;?4pE-tZ=sABiH`{r01y< literal 0 HcmV?d00001 diff --git a/img/Screen3.png b/img/Screen3.png new file mode 100644 index 0000000000000000000000000000000000000000..e610f5db94d0fa8c320949b6d3c31aa95f22ab50 GIT binary patch literal 50998 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 gSO$Tu6ZXXrTnTw!tnin1NMicSpWb4 literal 0 HcmV?d00001 diff --git a/io-package.json b/io-package.json new file mode 100644 index 0000000..08e064a --- /dev/null +++ b/io-package.json @@ -0,0 +1,49 @@ +{ + "common": { + "name": "pushover", + "version": "0.1.0", + "title": "报警通知", + "desc": { + "en": "This adapter allows to send pushover notifications from yunkong2", + "cn": "云控报警通知" + }, + "authors": [ + "spacen " + ], + "license": "MIT", + "platform": "Node.js", + "mode": "daemon", + "availableModes": [ + "daemon", + "subscribe" + ], + "loglevel": "info", + "messagebox": true, + "materialize": true, + "subscribe": "messagebox", + "readme": "https://git.spacen.net/yunkong2/yunkong2.pushover/raw/master/README.md", + "wakeup": true, + "enabled": true, + "icon": "pushover.png", + "keywords": [ + "notification", + "pushover", + "message" + ], + "extIcon": "https://git.spacen.net/yunkong2/yunkong2.pushover/raw/master/admin/pushover.png", + "type": "messaging", + "blockly": true + }, + "native": { + "user_name": "admin", + "user_passwd": "bdDm@648", + "ec_name": "华翔翔能(湖南)能源科技有限公司", + "token": "xxxxx", + "title": "yunkong2", + "sound": "", + "priority": 0, + "smsLoginUrl":"http://mas.ecloud.10086.cn/app/http/authorize", + "smsUrl" : "http://mas.ecloud.10086.cn/app/http/sendSms" + }, + "objects": [] +} \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 0000000..6af37ff --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,83 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +let controllerDir; +let appName; + +/** + * returns application name + * + * The name of the application can be different and this function finds it out. + * + * @returns {string} + */ + function getAppName() { + const parts = __dirname.replace(/\\/g, '/').split('/'); + return parts[parts.length - 2].split('.')[0]; +} + +/** + * looks for js-controller home folder + * + * @param {boolean} isInstall + * @returns {string} + */ +function getControllerDir(isInstall) { + // Find the js-controller location + const possibilities = [ + 'yunkong2.js-controller', + 'yunkong2.js-controller', + ]; + /** @type {string} */ + let controllerPath; + for (const pkg of possibilities) { + try { + const possiblePath = require.resolve(pkg); + if (fs.existsSync(possiblePath)) { + controllerPath = possiblePath; + break; + } + } catch (e) { /* not found */ } + } + if (controllerPath == null) { + if (!isInstall) { + console.log('Cannot find js-controller'); + process.exit(10); + } else { + process.exit(); + } + } + // we found the controller + return path.dirname(controllerPath); +} + +/** + * reads controller base settings + * + * @alias getConfig + * @returns {object} + */ + function getConfig() { + let configPath; + if (fs.existsSync( + configPath = path.join(controllerDir, 'conf', appName + '.json') + )) { + return JSON.parse(fs.readFileSync(configPath, 'utf8')); + } else if (fs.existsSync( + configPath = path.join(controllerDir, 'conf', + appName.toLowerCase() + '.json') + )) { + return JSON.parse(fs.readFileSync(configPath, 'utf8')); + } else { + throw new Error('Cannot find ' + controllerDir + '/conf/' + appName + '.json'); + } +} +appName = getAppName(); +controllerDir = getControllerDir(typeof process !== 'undefined' && process.argv && process.argv.indexOf('--install') !== -1); +const adapter = require(path.join(controllerDir, 'lib/adapter.js')); + +exports.controllerDir = controllerDir; +exports.getConfig = getConfig; +exports.Adapter = adapter; +exports.appName = appName; diff --git a/main.js b/main.js new file mode 100644 index 0000000..36dd243 --- /dev/null +++ b/main.js @@ -0,0 +1,265 @@ +/** + * + * yunkong2 pushover Adapter + * + * (c) 2014-2018 bluefox + * + * MIT License + * + */ + +/* jshint -W097 */// jshint strict:false +/*jslint node: true */ +'use strict'; + +var md5=require("md5") + +const utils = require(__dirname + '/lib/utils'); // Get common adapter utils +const Pushover = require('pushover-notifications'); + +const request = require('request'); + +const adapter = new utils.Adapter('pushover'); + +adapter.on('message', obj => { + if (obj && obj.command === 'send') { + processMessage(obj); + } + processMessages(); +}); + +adapter.on('ready', main); + +let stopTimer = null; +let pushover; +let lastMessageTime = 0; +let lastMessageText = ''; + +// Terminate adapter after 30 seconds idle +function stop() { + if (stopTimer) { + clearTimeout(stopTimer); + } + + // Stop only if subscribe mode + if (adapter.common && adapter.common.mode === 'subscribe') { + stopTimer = setTimeout(() => { + stopTimer = null; + adapter.stop(); + }, 30000); + } +} + +function processMessage(obj) { + if (!obj || !obj.message) return; + + // filter out double messages + const json = JSON.stringify(obj.message); + if (lastMessageTime && lastMessageText === JSON.stringify(obj.message) && new Date().getTime() - lastMessageTime < 1000) { + adapter.log.debug('Filter out double message [first was for ' + (new Date().getTime() - lastMessageTime) + 'ms]: ' + json); + return; + } + lastMessageTime = new Date().getTime(); + lastMessageText = json; + + if (stopTimer) clearTimeout(stopTimer); + + sendNotification(obj.message, (err, response) => { + if (obj.callback) adapter.sendTo(obj.from, 'send', { error: err, response: response}, obj.callback); + }); + + stop(); +} + +function processMessages() { + adapter.getMessage((err, obj) => { + if (obj) { + processMessage(obj); + processMessages(); + } + }); +} + +function createObject() { + //adapter.setObject('config.0.voltage.50002', json, function (err) { + // if (err) log('Cannot write object: ' + err); + //}); + adapter.setObject('config.0.voltage.50002', { + custom: { + min: 320, + max: 400, + interval: 5, + count: 2 + }, + common: { + name: "50002", + role: "", + type: "array", + desc: "pushover创建", + read: true, + write: true + } + }, function () { + adapter.log.info('Save ' + userdataDir + 'pushover.json'); + }); + +} + +function main() { + // Adapter is started only if some one writes into "system.adapter.pushover.X.messagebox" new value + //createObject(); + processMessages(); + stop(); +} + +function sendNotification(message, callback) { + if (!message) message = {}; + + if (!pushover) { + if (adapter.config.user_name && adapter.config.token) { + pushover = new Pushover({ + user: adapter.config.user_name, + token: adapter.config.token + }); + } else { + adapter.log.error('Cannot send notification while not configured'); + } + } + + if (!pushover) return; + + if (typeof message !== 'object') { + message = {message: message}; + } + if (message.hasOwnProperty('token')) { + pushover.token = message.token + } else { + pushover.token = adapter.config.token + } + + //message.title = message.title || adapter.config.title; + //message.sound = message.sound || (adapter.config.sound ? adapter.config.sound : undefined); + //message.priority = message.priority || adapter.config.priority; + //message.url = message.url || adapter.config.url; + //message.url_title = message.url_title || adapter.config.url_title; + //message.device = message.device || adapter.config.device; + //message.message = message.message || ''; + + // if timestamp in ms => make seconds // if greater than 2000.01.01 00:00:00 + if (message.timestamp && message.timestamp > 946681200000) { + message.timestamp = Math.round(message.timestamp / 1000); + } + + // mandatory parameters if priority is high (2) + if (message.priority === 2) { + message.retry = parseInt(message.retry, 10) || 60; + message.expire = parseInt(message.expire, 10) || 3600; + } + + adapter.log.info('Send pushover notification: ' + JSON.stringify(message)); + adapter.log.info('adapter.config.smsUrl:' + adapter.config.smsUrl); + adapter.log.info('adapter.config.smsLoginUrl:' + adapter.config.smsLoginUrl); + + var mobiles = message.phone; + var content = message.message; + smsLogin(mobiles,content); + + /* + request(adapter.config.smsUrl, function (error, response, body) { + + adapter.log.info('response.statusCode:' + response.statusCode); + adapter.log.info('body:' + body); + + if (error || response.statusCode !== 200) { + adapter.log.error(error || response.statusCode); + } else { + // try to parse answer + try { + var data = JSON.parse(body); + // do something with data + adapter.log.info(JSON.parse(data)); + } catch (e) { + adapter.log.error('Cannot parse answer'); + } + } + }); + */ + + +/* + pushover.send(message, (err, result) => { + if (err) { + adapter.log.error('Cannot send notification: ' + JSON.stringify(err)); + if (callback) callback(err); + return false; + } else { + if (callback) callback(null, result); + return true; + } + }); +*/ +} + + + +// 短信发送登录 +function smsLogin(mobiles,content) +{ + var url = "http://mas.ecloud.10086.cn/app/http/authorize?ec_name=%E5%8D%8E%E7%BF%94%E7%BF%94%E8%83%BD%EF%BC%88%E6%B9%96%E5%8D%97%EF%BC%89%E8%83%BD%E6%BA%90%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&user_name=admin&user_passwd=bdDm@648"; + + console.log('url:' + url); + + request(url, function (error, response, body) { + adapter.log.info('error:' + error); + adapter.log.info('statusCode:' + response && response.statusCode); + adapter.log.info('body:' + body); + + if (!error && response.statusCode == 200) { + // 请求成功的处理逻辑 + + try { + var data = JSON.parse(body); + // do something with data + adapter.log.info(data.mas_user_id); + adapter.log.info(data.access_token); + + var sign = 'uEbOVoPZ'; + smsMess(data.mas_user_id, mobiles, content, sign, '', data.access_token); + } catch (e) { + adapter.log.info(e); + } + } + }); +} + + +//发送短信 +function smsMess(mas_user_id,mobiles,content,sign,serial,access_token) { + // API输入参数签名结果,签名算法:将mas_user_id,mobiles,content,sign,serial,access_token按照顺序拼接,然后通过MD5+HEX计算后得出的值 + var mac = mas_user_id + mobiles + content + sign + serial + access_token; + adapter.log.info('mac:' + mac); + + mac = md5(mac); + adapter.log.info('mac-md5:' + mac); + + mac = mac.toUpperCase(); //再把密文中的英文母全部转为大写 + adapter.log.info('mac-upper:' + mac); + + var form = { + mas_user_id:mas_user_id, + mobiles:mobiles, + content:content, + sign:sign, + serial:serial, + mac:mac + }; + + var url = 'http://mas.ecloud.10086.cn/app/http/sendSms'; + request.post({url:url, form:form}, function(error, response, body) { + if (!error && response.statusCode == 200) { + adapter.log.info(body); + } + }) + +} + diff --git a/package.json b/package.json new file mode 100644 index 0000000..f9f6118 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "yunkong2.pushover", + "description": "This adapter allows to send pushover notifications from yunkong2", + "version": "0.1.0", + "author": "bluefox ", + "contributors": [ + "bluefox " + ], + "homepage": "https://git.spacen.net/yunkong2/yunkong2.pushover", + "license": "MIT", + "keywords": [ + "yunkong2", + "pushover", + "home automation" + ], + "repository": { + "type": "git", + "url": "https://git.spacen.net/yunkong2/yunkong2.pushover" + }, + "dependencies": { + "request": "^2.72.0", + "pushover-notifications": "^1.0.0" + }, + "devDependencies": { + "gulp": "^3.9.1", + "mocha": "^5.2.0", + "chai": "^4.1.2" + }, + "main": "main.js", + "scripts": { + "test": "node node_modules/mocha/bin/mocha --exit" + } +} diff --git a/test/lib/setup.js b/test/lib/setup.js new file mode 100644 index 0000000..09cc5f3 --- /dev/null +++ b/test/lib/setup.js @@ -0,0 +1,728 @@ +/* jshint -W097 */// jshint strict:false +/*jslint node: true */ +// check if tmp directory exists +var fs = require('fs'); +var path = require('path'); +var child_process = require('child_process'); +var rootDir = path.normalize(__dirname + '/../../'); +var pkg = require(rootDir + 'package.json'); +var debug = typeof v8debug === 'object'; +pkg.main = pkg.main || 'main.js'; + +var adapterName = path.normalize(rootDir).replace(/\\/g, '/').split('/'); +adapterName = adapterName[adapterName.length - 2]; +var adapterStarted = false; + +function getAppName() { + var parts = __dirname.replace(/\\/g, '/').split('/'); + return parts[parts.length - 3].split('.')[0]; +} + +var appName = getAppName().toLowerCase(); + +var objects; +var states; + +var pid = null; + +function copyFileSync(source, target) { + + var targetFile = target; + + //if target is a directory a new file with the same name will be created + if (fs.existsSync(target)) { + if ( fs.lstatSync( target ).isDirectory() ) { + targetFile = path.join(target, path.basename(source)); + } + } + + try { + fs.writeFileSync(targetFile, fs.readFileSync(source)); + } + catch (err) { + console.log("file copy error: " +source +" -> " + targetFile + " (error ignored)"); + } +} + +function copyFolderRecursiveSync(source, target, ignore) { + var files = []; + + var base = path.basename(source); + if (base === adapterName) { + base = pkg.name; + } + //check if folder needs to be created or integrated + var targetFolder = path.join(target, base); + if (!fs.existsSync(targetFolder)) { + fs.mkdirSync(targetFolder); + } + + //copy + if (fs.lstatSync(source).isDirectory()) { + files = fs.readdirSync(source); + files.forEach(function (file) { + if (ignore && ignore.indexOf(file) !== -1) { + return; + } + + var curSource = path.join(source, file); + var curTarget = path.join(targetFolder, file); + if (fs.lstatSync(curSource).isDirectory()) { + // ignore grunt files + if (file.indexOf('grunt') !== -1) return; + if (file === 'chai') return; + if (file === 'mocha') return; + copyFolderRecursiveSync(curSource, targetFolder, ignore); + } else { + copyFileSync(curSource, curTarget); + } + }); + } +} + +if (!fs.existsSync(rootDir + 'tmp')) { + fs.mkdirSync(rootDir + 'tmp'); +} + +function storeOriginalFiles() { + console.log('Store original files...'); + var dataDir = rootDir + 'tmp/' + appName + '-data/'; + + var f = fs.readFileSync(dataDir + 'objects.json'); + var objects = JSON.parse(f.toString()); + if (objects['system.adapter.admin.0'] && objects['system.adapter.admin.0'].common) { + objects['system.adapter.admin.0'].common.enabled = false; + } + if (objects['system.adapter.admin.1'] && objects['system.adapter.admin.1'].common) { + objects['system.adapter.admin.1'].common.enabled = false; + } + + fs.writeFileSync(dataDir + 'objects.json.original', JSON.stringify(objects)); + try { + f = fs.readFileSync(dataDir + 'states.json'); + fs.writeFileSync(dataDir + 'states.json.original', f); + } + catch (err) { + console.log('no states.json found - ignore'); + } +} + +function restoreOriginalFiles() { + console.log('restoreOriginalFiles...'); + var dataDir = rootDir + 'tmp/' + appName + '-data/'; + + var f = fs.readFileSync(dataDir + 'objects.json.original'); + fs.writeFileSync(dataDir + 'objects.json', f); + try { + f = fs.readFileSync(dataDir + 'states.json.original'); + fs.writeFileSync(dataDir + 'states.json', f); + } + catch (err) { + console.log('no states.json.original found - ignore'); + } + +} + +function checkIsAdapterInstalled(cb, counter, customName) { + customName = customName || pkg.name.split('.').pop(); + counter = counter || 0; + var dataDir = rootDir + 'tmp/' + appName + '-data/'; + console.log('checkIsAdapterInstalled...'); + + try { + var f = fs.readFileSync(dataDir + 'objects.json'); + var objects = JSON.parse(f.toString()); + if (objects['system.adapter.' + customName + '.0']) { + console.log('checkIsAdapterInstalled: ready!'); + setTimeout(function () { + if (cb) cb(); + }, 100); + return; + } else { + console.warn('checkIsAdapterInstalled: still not ready'); + } + } catch (err) { + + } + + if (counter > 20) { + console.error('checkIsAdapterInstalled: Cannot install!'); + if (cb) cb('Cannot install'); + } else { + console.log('checkIsAdapterInstalled: wait...'); + setTimeout(function() { + checkIsAdapterInstalled(cb, counter + 1); + }, 1000); + } +} + +function checkIsControllerInstalled(cb, counter) { + counter = counter || 0; + var dataDir = rootDir + 'tmp/' + appName + '-data/'; + + console.log('checkIsControllerInstalled...'); + try { + var f = fs.readFileSync(dataDir + 'objects.json'); + var objects = JSON.parse(f.toString()); + if (objects['system.adapter.admin.0']) { + console.log('checkIsControllerInstalled: installed!'); + setTimeout(function () { + if (cb) cb(); + }, 100); + return; + } + } catch (err) { + + } + + if (counter > 20) { + console.log('checkIsControllerInstalled: Cannot install!'); + if (cb) cb('Cannot install'); + } else { + console.log('checkIsControllerInstalled: wait...'); + setTimeout(function() { + checkIsControllerInstalled(cb, counter + 1); + }, 1000); + } +} + +function installAdapter(customName, cb) { + if (typeof customName === 'function') { + cb = customName; + customName = null; + } + customName = customName || pkg.name.split('.').pop(); + console.log('Install adapter...'); + var startFile = 'node_modules/' + appName + '.js-controller/' + appName + '.js'; + // make first install + if (debug) { + child_process.execSync('node ' + startFile + ' add ' + customName + ' --enabled false', { + cwd: rootDir + 'tmp', + stdio: [0, 1, 2] + }); + checkIsAdapterInstalled(function (error) { + if (error) console.error(error); + console.log('Adapter installed.'); + if (cb) cb(); + }); + } else { + // add controller + var _pid = child_process.fork(startFile, ['add', customName, '--enabled', 'false'], { + cwd: rootDir + 'tmp', + stdio: [0, 1, 2, 'ipc'] + }); + + waitForEnd(_pid, function () { + checkIsAdapterInstalled(function (error) { + if (error) console.error(error); + console.log('Adapter installed.'); + if (cb) cb(); + }); + }); + } +} + +function waitForEnd(_pid, cb) { + if (!_pid) { + cb(-1, -1); + return; + } + _pid.on('exit', function (code, signal) { + if (_pid) { + _pid = null; + cb(code, signal); + } + }); + _pid.on('close', function (code, signal) { + if (_pid) { + _pid = null; + cb(code, signal); + } + }); +} + +function installJsController(cb) { + console.log('installJsController...'); + if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller') || + !fs.existsSync(rootDir + 'tmp/' + appName + '-data')) { + // try to detect appName.js-controller in node_modules/appName.js-controller + // travis CI installs js-controller into node_modules + if (fs.existsSync(rootDir + 'node_modules/' + appName + '.js-controller')) { + console.log('installJsController: no js-controller => copy it from "' + rootDir + 'node_modules/' + appName + '.js-controller"'); + // copy all + // stop controller + console.log('Stop controller if running...'); + var _pid; + if (debug) { + // start controller + _pid = child_process.exec('node ' + appName + '.js stop', { + cwd: rootDir + 'node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2] + }); + } else { + _pid = child_process.fork(appName + '.js', ['stop'], { + cwd: rootDir + 'node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2, 'ipc'] + }); + } + + waitForEnd(_pid, function () { + // copy all files into + if (!fs.existsSync(rootDir + 'tmp')) fs.mkdirSync(rootDir + 'tmp'); + if (!fs.existsSync(rootDir + 'tmp/node_modules')) fs.mkdirSync(rootDir + 'tmp/node_modules'); + + if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller')){ + console.log('Copy js-controller...'); + copyFolderRecursiveSync(rootDir + 'node_modules/' + appName + '.js-controller', rootDir + 'tmp/node_modules/'); + } + + console.log('Setup js-controller...'); + var __pid; + if (debug) { + // start controller + _pid = child_process.exec('node ' + appName + '.js setup first --console', { + cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2] + }); + } else { + __pid = child_process.fork(appName + '.js', ['setup', 'first', '--console'], { + cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2, 'ipc'] + }); + } + waitForEnd(__pid, function () { + checkIsControllerInstalled(function () { + // change ports for object and state DBs + var config = require(rootDir + 'tmp/' + appName + '-data/' + appName + '.json'); + config.objects.port = 19001; + config.states.port = 19000; + fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/' + appName + '.json', JSON.stringify(config, null, 2)); + console.log('Setup finished.'); + + copyAdapterToController(); + + installAdapter(function () { + storeOriginalFiles(); + if (cb) cb(true); + }); + }); + }); + }); + } else { + // check if port 9000 is free, else admin adapter will be added to running instance + var client = new require('net').Socket(); + client.connect(9000, '127.0.0.1', function() { + console.error('Cannot initiate fisrt run of test, because one instance of application is running on this PC. Stop it and repeat.'); + process.exit(0); + }); + + setTimeout(function () { + client.destroy(); + if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller')) { + console.log('installJsController: no js-controller => install from git'); + + child_process.execSync('npm install https://github.com/' + appName + '/' + appName + '.js-controller/tarball/master --prefix ./ --production', { + cwd: rootDir + 'tmp/', + stdio: [0, 1, 2] + }); + } else { + console.log('Setup js-controller...'); + var __pid; + if (debug) { + // start controller + child_process.exec('node ' + appName + '.js setup first', { + cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2] + }); + } else { + child_process.fork(appName + '.js', ['setup', 'first'], { + cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2, 'ipc'] + }); + } + } + + // let npm install admin and run setup + checkIsControllerInstalled(function () { + var _pid; + + if (fs.existsSync(rootDir + 'node_modules/' + appName + '.js-controller/' + appName + '.js')) { + _pid = child_process.fork(appName + '.js', ['stop'], { + cwd: rootDir + 'node_modules/' + appName + '.js-controller', + stdio: [0, 1, 2, 'ipc'] + }); + } + + waitForEnd(_pid, function () { + // change ports for object and state DBs + var config = require(rootDir + 'tmp/' + appName + '-data/' + appName + '.json'); + config.objects.port = 19001; + config.states.port = 19000; + fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/' + appName + '.json', JSON.stringify(config, null, 2)); + + copyAdapterToController(); + + installAdapter(function () { + storeOriginalFiles(); + if (cb) cb(true); + }); + }); + }); + }, 1000); + } + } else { + setTimeout(function () { + console.log('installJsController: js-controller installed'); + if (cb) cb(false); + }, 0); + } +} + +function copyAdapterToController() { + console.log('Copy adapter...'); + // Copy adapter to tmp/node_modules/appName.adapter + copyFolderRecursiveSync(rootDir, rootDir + 'tmp/node_modules/', ['.idea', 'test', 'tmp', '.git', appName + '.js-controller']); + console.log('Adapter copied.'); +} + +function clearControllerLog() { + var dirPath = rootDir + 'tmp/log'; + var files; + try { + if (fs.existsSync(dirPath)) { + console.log('Clear controller log...'); + files = fs.readdirSync(dirPath); + } else { + console.log('Create controller log directory...'); + files = []; + fs.mkdirSync(dirPath); + } + } catch(e) { + console.error('Cannot read "' + dirPath + '"'); + return; + } + if (files.length > 0) { + try { + for (var i = 0; i < files.length; i++) { + var filePath = dirPath + '/' + files[i]; + fs.unlinkSync(filePath); + } + console.log('Controller log cleared'); + } catch (err) { + console.error('cannot clear log: ' + err); + } + } +} + +function clearDB() { + var dirPath = rootDir + 'tmp/yunkong2-data/sqlite'; + var files; + try { + if (fs.existsSync(dirPath)) { + console.log('Clear sqlite DB...'); + files = fs.readdirSync(dirPath); + } else { + console.log('Create controller log directory...'); + files = []; + fs.mkdirSync(dirPath); + } + } catch(e) { + console.error('Cannot read "' + dirPath + '"'); + return; + } + if (files.length > 0) { + try { + for (var i = 0; i < files.length; i++) { + var filePath = dirPath + '/' + files[i]; + fs.unlinkSync(filePath); + } + console.log('Clear sqlite DB'); + } catch (err) { + console.error('cannot clear DB: ' + err); + } + } +} + +function setupController(cb) { + installJsController(function (isInited) { + clearControllerLog(); + clearDB(); + + if (!isInited) { + restoreOriginalFiles(); + copyAdapterToController(); + } + // read system.config object + var dataDir = rootDir + 'tmp/' + appName + '-data/'; + + var objs; + try { + objs = fs.readFileSync(dataDir + 'objects.json'); + objs = JSON.parse(objs); + } + catch (e) { + console.log('ERROR reading/parsing system configuration. Ignore'); + objs = {'system.config': {}}; + } + if (!objs || !objs['system.config']) { + objs = {'system.config': {}}; + } + + if (cb) cb(objs['system.config']); + }); +} + +function startAdapter(objects, states, callback) { + if (adapterStarted) { + console.log('Adapter already started ...'); + if (callback) callback(objects, states); + return; + } + adapterStarted = true; + console.log('startAdapter...'); + if (fs.existsSync(rootDir + 'tmp/node_modules/' + pkg.name + '/' + pkg.main)) { + try { + if (debug) { + // start controller + pid = child_process.exec('node node_modules/' + pkg.name + '/' + pkg.main + ' --console silly', { + cwd: rootDir + 'tmp', + stdio: [0, 1, 2] + }); + } else { + // start controller + pid = child_process.fork('node_modules/' + pkg.name + '/' + pkg.main, ['--console', 'silly'], { + cwd: rootDir + 'tmp', + stdio: [0, 1, 2, 'ipc'] + }); + } + } catch (error) { + console.error(JSON.stringify(error)); + } + } else { + console.error('Cannot find: ' + rootDir + 'tmp/node_modules/' + pkg.name + '/' + pkg.main); + } + if (callback) callback(objects, states); +} + +function startController(isStartAdapter, onObjectChange, onStateChange, callback) { + if (typeof isStartAdapter === 'function') { + callback = onStateChange; + onStateChange = onObjectChange; + onObjectChange = isStartAdapter; + isStartAdapter = true; + } + + if (onStateChange === undefined) { + callback = onObjectChange; + onObjectChange = undefined; + } + + if (pid) { + console.error('Controller is already started!'); + } else { + console.log('startController...'); + adapterStarted = false; + var isObjectConnected; + var isStatesConnected; + + var Objects = require(rootDir + 'tmp/node_modules/' + appName + '.js-controller/lib/objects/objectsInMemServer'); + objects = new Objects({ + connection: { + "type" : "file", + "host" : "127.0.0.1", + "port" : 19001, + "user" : "", + "pass" : "", + "noFileCache": false, + "connectTimeout": 2000 + }, + logger: { + silly: function (msg) { + console.log(msg); + }, + debug: function (msg) { + console.log(msg); + }, + info: function (msg) { + console.log(msg); + }, + warn: function (msg) { + console.warn(msg); + }, + error: function (msg) { + console.error(msg); + } + }, + connected: function () { + isObjectConnected = true; + if (isStatesConnected) { + console.log('startController: started!'); + if (isStartAdapter) { + startAdapter(objects, states, callback); + } else { + if (callback) { + callback(objects, states); + callback = null; + } + } + } + }, + change: onObjectChange + }); + + // Just open in memory DB itself + var States = require(rootDir + 'tmp/node_modules/' + appName + '.js-controller/lib/states/statesInMemServer'); + states = new States({ + connection: { + type: 'file', + host: '127.0.0.1', + port: 19000, + options: { + auth_pass: null, + retry_max_delay: 15000 + } + }, + logger: { + silly: function (msg) { + console.log(msg); + }, + debug: function (msg) { + console.log(msg); + }, + info: function (msg) { + console.log(msg); + }, + warn: function (msg) { + console.log(msg); + }, + error: function (msg) { + console.log(msg); + } + }, + connected: function () { + isStatesConnected = true; + if (isObjectConnected) { + console.log('startController: started!!'); + if (isStartAdapter) { + startAdapter(objects, states, callback); + } else { + if (callback) { + callback(objects, states); + callback = null; + } + } + } + }, + change: onStateChange + }); + } +} + +function stopAdapter(cb) { + if (!pid) { + console.error('Controller is not running!'); + if (cb) { + setTimeout(function () { + cb(false); + }, 0); + } + } else { + adapterStarted = false; + pid.on('exit', function (code, signal) { + if (pid) { + console.log('child process terminated due to receipt of signal ' + signal); + if (cb) cb(); + pid = null; + } + }); + + pid.on('close', function (code, signal) { + if (pid) { + if (cb) cb(); + pid = null; + } + }); + + pid.kill('SIGTERM'); + } +} + +function _stopController() { + if (objects) { + objects.destroy(); + objects = null; + } + if (states) { + states.destroy(); + states = null; + } +} + +function stopController(cb) { + var timeout; + if (objects) { + console.log('Set system.adapter.' + pkg.name + '.0'); + objects.setObject('system.adapter.' + pkg.name + '.0', { + common:{ + enabled: false + } + }); + } + + stopAdapter(function () { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + + _stopController(); + + if (cb) { + cb(true); + cb = null; + } + }); + + timeout = setTimeout(function () { + timeout = null; + console.log('child process NOT terminated'); + + _stopController(); + + if (cb) { + cb(false); + cb = null; + } + pid = null; + }, 5000); +} + +// Setup the adapter +function setAdapterConfig(common, native, instance) { + var objects = JSON.parse(fs.readFileSync(rootDir + 'tmp/' + appName + '-data/objects.json').toString()); + var id = 'system.adapter.' + adapterName.split('.').pop() + '.' + (instance || 0); + if (common) objects[id].common = common; + if (native) objects[id].native = native; + fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/objects.json', JSON.stringify(objects)); +} + +// Read config of the adapter +function getAdapterConfig(instance) { + var objects = JSON.parse(fs.readFileSync(rootDir + 'tmp/' + appName + '-data/objects.json').toString()); + var id = 'system.adapter.' + adapterName.split('.').pop() + '.' + (instance || 0); + return objects[id]; +} + +if (typeof module !== undefined && module.parent) { + module.exports.getAdapterConfig = getAdapterConfig; + module.exports.setAdapterConfig = setAdapterConfig; + module.exports.startController = startController; + module.exports.stopController = stopController; + module.exports.setupController = setupController; + module.exports.stopAdapter = stopAdapter; + module.exports.startAdapter = startAdapter; + module.exports.installAdapter = installAdapter; + module.exports.appName = appName; + module.exports.adapterName = adapterName; + module.exports.adapterStarted = adapterStarted; +} diff --git a/test/testAdapter.js b/test/testAdapter.js new file mode 100644 index 0000000..ae9c289 --- /dev/null +++ b/test/testAdapter.js @@ -0,0 +1,140 @@ +/* jshint -W097 */// jshint strict:false +/*jslint node: true */ +var expect = require('chai').expect; +var setup = require(__dirname + '/lib/setup'); + +var objects = null; +var states = null; +var onStateChanged = null; +var onObjectChanged = null; +var sendToID = 1; + +var adapterShortName = setup.adapterName.substring(setup.adapterName.indexOf('.')+1); + +function checkConnectionOfAdapter(cb, counter) { + counter = counter || 0; + console.log('Try check #' + counter); + if (counter > 30) { + if (cb) cb('Cannot check connection'); + return; + } + + states.getState('system.adapter.' + adapterShortName + '.0.alive', function (err, state) { + if (err) console.error(err); + if (state && state.val) { + if (cb) cb(); + } else { + setTimeout(function () { + checkConnectionOfAdapter(cb, counter + 1); + }, 1000); + } + }); +} + +function checkValueOfState(id, value, cb, counter) { + counter = counter || 0; + if (counter > 20) { + if (cb) cb('Cannot check value Of State ' + id); + return; + } + + states.getState(id, function (err, state) { + if (err) console.error(err); + if (value === null && !state) { + if (cb) cb(); + } else + if (state && (value === undefined || state.val === value)) { + if (cb) cb(); + } else { + setTimeout(function () { + checkValueOfState(id, value, cb, counter + 1); + }, 500); + } + }); +} + +function sendTo(target, command, message, callback) { + onStateChanged = function (id, state) { + if (id === 'messagebox.system.adapter.test.0') { + callback(state.message); + } + }; + + states.pushMessage('system.adapter.' + target, { + command: command, + message: message, + from: 'system.adapter.test.0', + callback: { + message: message, + id: sendToID++, + ack: false, + time: (new Date()).getTime() + } + }); +} + +describe('Test ' + adapterShortName + ' adapter', function() { + before('Test ' + adapterShortName + ' adapter: Start js-controller', function (_done) { + this.timeout(600000); // because of first install from npm + + setup.setupController(function () { + var config = setup.getAdapterConfig(); + // enable adapter + config.common.enabled = true; + config.common.loglevel = 'debug'; + + //config.native.dbtype = 'sqlite'; + + setup.setAdapterConfig(config.common, config.native); + + setup.startController(true, function(id, obj) {}, function (id, state) { + if (onStateChanged) onStateChanged(id, state); + }, + function (_objects, _states) { + objects = _objects; + states = _states; + _done(); + }); + }); + }); + +/* + ENABLE THIS WHEN ADAPTER RUNS IN DEAMON MODE TO CHECK THAT IT HAS STARTED SUCCESSFULLY +*/ + it('Test ' + adapterShortName + ' adapter: Check if adapter started', function (done) { + this.timeout(60000); + checkConnectionOfAdapter(function (res) { + if (res) console.log(res); + expect(res).not.to.be.equal('Cannot check connection'); + objects.setObject('system.adapter.test.0', { + common: { + + }, + type: 'instance' + }, + function () { + states.subscribeMessage('system.adapter.test.0'); + done(); + }); + }); + }); +/**/ + +/* + PUT YOUR OWN TESTS HERE USING + it('Testname', function ( done) { + ... + }); + + You can also use "sendTo" method to send messages to the started adapter +*/ + + after('Test ' + adapterShortName + ' adapter: Stop js-controller', function (done) { + this.timeout(10000); + + setup.stopController(function (normalTerminated) { + console.log('Adapter normal terminated: ' + normalTerminated); + done(); + }); + }); +}); diff --git a/test/testPackageFiles.js b/test/testPackageFiles.js new file mode 100644 index 0000000..d0759c0 --- /dev/null +++ b/test/testPackageFiles.js @@ -0,0 +1,91 @@ +/* jshint -W097 */ +/* jshint strict:false */ +/* jslint node: true */ +/* jshint expr: true */ +var expect = require('chai').expect; +var fs = require('fs'); + +describe('Test package.json and io-package.json', function() { + it('Test package files', function (done) { + console.log(); + + var fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8'); + var ioPackage = JSON.parse(fileContentIOPackage); + + var fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8'); + var npmPackage = JSON.parse(fileContentNPMPackage); + + expect(ioPackage).to.be.an('object'); + expect(npmPackage).to.be.an('object'); + + expect(ioPackage.common.version, 'ERROR: Version number in io-package.json needs to exist').to.exist; + expect(npmPackage.version, 'ERROR: Version number in package.json needs to exist').to.exist; + + expect(ioPackage.common.version, 'ERROR: Version numbers in package.json and io-package.json needs to match').to.be.equal(npmPackage.version); + + if (!ioPackage.common.news || !ioPackage.common.news[ioPackage.common.version]) { + console.log('WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!'); + console.log(); + } + + expect(npmPackage.author, 'ERROR: Author in package.json needs to exist').to.exist; + expect(ioPackage.common.authors, 'ERROR: Authors in io-package.json needs to exist').to.exist; + + if (ioPackage.common.name.indexOf('template') !== 0) { + if (Array.isArray(ioPackage.common.authors)) { + expect(ioPackage.common.authors.length, 'ERROR: Author in io-package.json needs to be set').to.not.be.equal(0); + if (ioPackage.common.authors.length === 1) { + expect(ioPackage.common.authors[0], 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); + } + } + else { + expect(ioPackage.common.authors, 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); + } + } + else { + console.log('WARNING: Testing for set authors field in io-package skipped because template adapter'); + console.log(); + } + expect(fs.existsSync(__dirname + '/../README.md'), 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.').to.be.true; + if (!ioPackage.common.titleLang || typeof ioPackage.common.titleLang !== 'object') { + console.log('WARNING: titleLang is not existing in io-package.json. Please add'); + console.log(); + } + if ( + ioPackage.common.title.indexOf('yunkong2') !== -1 || + ioPackage.common.title.indexOf('yunkong2') !== -1 || + ioPackage.common.title.indexOf('adapter') !== -1 || + ioPackage.common.title.indexOf('Adapter') !== -1 + ) { + console.log('WARNING: title contains Adapter or yunkong2. It is clear anyway, that it is adapter for yunkong2.'); + console.log(); + } + + if (ioPackage.common.name.indexOf('vis-') !== 0) { + if (!ioPackage.common.materialize || !fs.existsSync(__dirname + '/../admin/index_m.html') || !fs.existsSync(__dirname + '/../gulpfile.js')) { + console.log('WARNING: Admin3 support is missing! Please add it'); + console.log(); + } + if (ioPackage.common.materialize) { + expect(fs.existsSync(__dirname + '/../admin/index_m.html'), 'Admin3 support is enabled in io-package.json, but index_m.html is missing!').to.be.true; + } + } + + var licenseFileExists = fs.existsSync(__dirname + '/../LICENSE'); + var fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8'); + if (fileContentReadme.indexOf('## Changelog') === -1) { + console.log('Warning: The README.md should have a section ## Changelog'); + console.log(); + } + expect((licenseFileExists || fileContentReadme.indexOf('## License') !== -1), 'A LICENSE must exist as LICENSE file or as part of the README.md').to.be.true; + if (!licenseFileExists) { + console.log('Warning: The License should also exist as LICENSE file'); + console.log(); + } + if (fileContentReadme.indexOf('## License') === -1) { + console.log('Warning: The README.md should also have a section ## License to be shown in Admin3'); + console.log(); + } + done(); + }); +});