From e4195f874d775343b8b65681f5a3e3103f092068 Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Wed, 13 Aug 2025 16:41:36 +0800 Subject: [PATCH 1/5] feat: implement download path templates configuration with support for multiple model types and custom templates --- py/routes/misc_routes.py | 2 +- .../css/components/modal/settings-modal.css | 95 +++++++ static/js/managers/SettingsManager.js | 261 ++++++++++++++++-- static/js/utils/constants.js | 45 +++ .../components/modals/settings_modal.html | 214 +++++++++----- 5 files changed, 513 insertions(+), 104 deletions(-) diff --git a/py/routes/misc_routes.py b/py/routes/misc_routes.py index 1ecd5a5a..f3d21c6a 100644 --- a/py/routes/misc_routes.py +++ b/py/routes/misc_routes.py @@ -184,7 +184,7 @@ class MiscRoutes: logger.info(f"Example images path changed to {value} - server restart required") # Special handling for base_model_path_mappings - parse JSON string - if key == 'base_model_path_mappings' and value: + if (key == 'base_model_path_mappings' or key == 'download_path_templates') and value: try: value = json.loads(value) except json.JSONDecodeError: diff --git a/static/css/components/modal/settings-modal.css b/static/css/components/modal/settings-modal.css index 7d67e79e..a13dc856 100644 --- a/static/css/components/modal/settings-modal.css +++ b/static/css/components/modal/settings-modal.css @@ -482,4 +482,99 @@ input:checked + .toggle-slider:before { [data-theme="dark"] .base-model-select option { background-color: #2d2d2d; color: var(--text-color); +} + +/* Template Configuration Styles */ +.placeholder-info { + margin-top: var(--space-1); + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--space-1); +} + +.placeholder-tag { + display: inline-block; + background: var(--lora-accent); + color: white; + padding: 2px 6px; + border-radius: 3px; + font-family: monospace; + font-size: 1em; + font-weight: 500; +} + +.template-custom-row { + margin-top: 8px; + animation: slideDown 0.2s ease-out; +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.template-custom-input { + width: 96%; + padding: 6px 10px; + border-radius: var(--border-radius-xs); + border: 1px solid var(--border-color); + background-color: var(--lora-surface); + color: var(--text-color); + font-size: 0.95em; + font-family: monospace; + height: 24px; + transition: border-color 0.2s; +} + +.template-custom-input:focus { + border-color: var(--lora-accent); + outline: none; + box-shadow: 0 0 0 2px rgba(var(--lora-accent-rgb, 79, 70, 229), 0.1); +} + +.template-custom-input::placeholder { + color: var(--text-color); + opacity: 0.5; + font-family: inherit; +} + +.template-validation { + margin-top: 6px; + font-size: 0.85em; + display: flex; + align-items: center; + gap: 6px; + min-height: 20px; +} + +.template-validation.valid { + color: var(--lora-success, #22c55e); +} + +.template-validation.invalid { + color: var(--lora-error, #ef4444); +} + +.template-validation i { + width: 12px; +} + +/* Dark theme specific adjustments */ +[data-theme="dark"] .template-custom-input { + background-color: rgba(30, 30, 30, 0.9); +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .placeholder-info { + flex-direction: column; + align-items: flex-start; + } } \ No newline at end of file diff --git a/static/js/managers/SettingsManager.js b/static/js/managers/SettingsManager.js index 78ae35f5..6203b17d 100644 --- a/static/js/managers/SettingsManager.js +++ b/static/js/managers/SettingsManager.js @@ -3,7 +3,7 @@ import { showToast } from '../utils/uiHelpers.js'; import { state } from '../state/index.js'; import { resetAndReload } from '../api/modelApiFactory.js'; import { setStorageItem, getStorageItem } from '../utils/storageHelpers.js'; -import { DOWNLOAD_PATH_TEMPLATES, MAPPABLE_BASE_MODELS } from '../utils/constants.js'; +import { DOWNLOAD_PATH_TEMPLATES, MAPPABLE_BASE_MODELS, PATH_TEMPLATE_PLACEHOLDERS, DEFAULT_PATH_TEMPLATES } from '../utils/constants.js'; export class SettingsManager { constructor() { @@ -73,11 +73,30 @@ export class SettingsManager { // We can delete the old setting, but keeping it for backwards compatibility } - // Set default for download path template if undefined - if (state.global.settings.download_path_template === undefined) { - state.global.settings.download_path_template = DOWNLOAD_PATH_TEMPLATES.BASE_MODEL_TAG.value; + // Migrate legacy download_path_template to new structure + if (state.global.settings.download_path_template && !state.global.settings.download_path_templates) { + const legacyTemplate = state.global.settings.download_path_template; + state.global.settings.download_path_templates = { + lora: legacyTemplate, + checkpoint: legacyTemplate, + embedding: legacyTemplate + }; + delete state.global.settings.download_path_template; + setStorageItem('settings', state.global.settings); } + // Set default for download path templates if undefined + if (state.global.settings.download_path_templates === undefined) { + state.global.settings.download_path_templates = { ...DEFAULT_PATH_TEMPLATES }; + } + + // Ensure all model types have templates + Object.keys(DEFAULT_PATH_TEMPLATES).forEach(modelType => { + if (!state.global.settings.download_path_templates[modelType]) { + state.global.settings.download_path_templates[modelType] = DEFAULT_PATH_TEMPLATES[modelType]; + } + }); + // Set default for base model path mappings if undefined if (state.global.settings.base_model_path_mappings === undefined) { state.global.settings.base_model_path_mappings = {}; @@ -105,7 +124,7 @@ export class SettingsManager { 'default_checkpoint_root', 'default_embedding_root', 'base_model_path_mappings', - 'download_path_template' + 'download_path_templates' ]; // Build payload for syncing @@ -113,7 +132,7 @@ export class SettingsManager { fieldsToSync.forEach(key => { if (localSettings[key] !== undefined) { - if (key === 'base_model_path_mappings') { + if (key === 'base_model_path_mappings' || key === 'download_path_templates') { payload[key] = JSON.stringify(localSettings[key]); } else { payload[key] = localSettings[key]; @@ -164,6 +183,30 @@ export class SettingsManager { document.querySelectorAll('.toggle-visibility').forEach(button => { button.addEventListener('click', () => this.toggleInputVisibility(button)); }); + + ['lora', 'checkpoint', 'embedding'].forEach(modelType => { + const customInput = document.getElementById(`${modelType}CustomTemplate`); + if (customInput) { + customInput.addEventListener('input', (e) => { + const template = e.target.value; + settingsManager.validateTemplate(modelType, template); + settingsManager.updateTemplatePreview(modelType, template); + }); + + customInput.addEventListener('blur', (e) => { + const template = e.target.value; + if (settingsManager.validateTemplate(modelType, template)) { + settingsManager.updateTemplate(modelType, template); + } + }); + + customInput.addEventListener('keydown', (e) => { + if (e.key === 'Enter') { + e.target.blur(); + } + }); + } + }); this.initialized = true; } @@ -211,12 +254,8 @@ export class SettingsManager { autoDownloadExampleImagesCheckbox.checked = state.global.settings.autoDownloadExampleImages || false; } - // Set download path template setting - const downloadPathTemplateSelect = document.getElementById('downloadPathTemplate'); - if (downloadPathTemplateSelect) { - downloadPathTemplateSelect.value = state.global.settings.download_path_template || ''; - this.updatePathTemplatePreview(); - } + // Load download path templates + this.loadDownloadPathTemplates(); // Set include trigger words setting const includeTriggerWordsCheckbox = document.getElementById('includeTriggerWords'); @@ -529,19 +568,184 @@ export class SettingsManager { } } - updatePathTemplatePreview() { - const templateSelect = document.getElementById('downloadPathTemplate'); - const previewElement = document.getElementById('pathTemplatePreview'); - if (!templateSelect || !previewElement) return; - - const template = templateSelect.value; - const templateInfo = Object.values(DOWNLOAD_PATH_TEMPLATES).find(t => t.value === template); + loadDownloadPathTemplates() { + const templates = state.global.settings.download_path_templates || DEFAULT_PATH_TEMPLATES; - if (templateInfo) { - previewElement.textContent = templateInfo.example; - previewElement.style.display = 'block'; + Object.keys(templates).forEach(modelType => { + this.loadTemplateForModelType(modelType, templates[modelType]); + }); + } + + loadTemplateForModelType(modelType, template) { + const presetSelect = document.getElementById(`${modelType}TemplatePreset`); + const customRow = document.getElementById(`${modelType}CustomRow`); + const customInput = document.getElementById(`${modelType}CustomTemplate`); + + if (!presetSelect) return; + + // Find matching preset + const matchingPreset = this.findMatchingPreset(template); + + if (matchingPreset) { + presetSelect.value = matchingPreset; + if (customRow) customRow.style.display = 'none'; } else { - previewElement.style.display = 'none'; + // Custom template + presetSelect.value = 'custom'; + if (customRow) customRow.style.display = 'block'; + if (customInput) { + customInput.value = template; + this.validateTemplate(modelType, template); + } + } + + this.updateTemplatePreview(modelType, template); + } + + findMatchingPreset(template) { + const presetValues = Object.values(DOWNLOAD_PATH_TEMPLATES) + .map(t => t.value) + .filter(v => v !== 'custom'); + + return presetValues.includes(template) ? template : null; + } + + updateTemplatePreset(modelType, value) { + const customRow = document.getElementById(`${modelType}CustomRow`); + const customInput = document.getElementById(`${modelType}CustomTemplate`); + + if (value === 'custom') { + if (customRow) customRow.style.display = 'block'; + if (customInput) customInput.focus(); + return; + } else { + if (customRow) customRow.style.display = 'none'; + } + + // Update template + this.updateTemplate(modelType, value); + } + + updateTemplate(modelType, template) { + // Validate template if it's custom + if (document.getElementById(`${modelType}TemplatePreset`).value === 'custom') { + if (!this.validateTemplate(modelType, template)) { + return; // Don't save invalid templates + } + } + + // Update state + if (!state.global.settings.download_path_templates) { + state.global.settings.download_path_templates = { ...DEFAULT_PATH_TEMPLATES }; + } + state.global.settings.download_path_templates[modelType] = template; + + // Update preview + this.updateTemplatePreview(modelType, template); + + // Save settings + this.saveDownloadPathTemplates(); + } + + validateTemplate(modelType, template) { + const validationElement = document.getElementById(`${modelType}Validation`); + if (!validationElement) return true; + + // Reset validation state + validationElement.innerHTML = ''; + validationElement.className = 'template-validation'; + + if (!template) { + validationElement.innerHTML = ' Valid (flat structure)'; + validationElement.classList.add('valid'); + return true; + } + + // Check for invalid characters + const invalidChars = /[<>:"|?*]/; + if (invalidChars.test(template)) { + validationElement.innerHTML = ' Invalid characters detected'; + validationElement.classList.add('invalid'); + return false; + } + + // Check for double slashes + if (template.includes('//')) { + validationElement.innerHTML = ' Double slashes not allowed'; + validationElement.classList.add('invalid'); + return false; + } + + // Check if it starts or ends with slash + if (template.startsWith('/') || template.endsWith('/')) { + validationElement.innerHTML = ' Cannot start or end with slash'; + validationElement.classList.add('invalid'); + return false; + } + + // Extract placeholders + const placeholderRegex = /\{([^}]+)\}/g; + const matches = template.match(placeholderRegex) || []; + + // Check for invalid placeholders + const invalidPlaceholders = matches.filter(match => + !PATH_TEMPLATE_PLACEHOLDERS.includes(match) + ); + + if (invalidPlaceholders.length > 0) { + validationElement.innerHTML = ` Invalid placeholder: ${invalidPlaceholders[0]}`; + validationElement.classList.add('invalid'); + return false; + } + + // Template is valid + validationElement.innerHTML = ' Valid template'; + validationElement.classList.add('valid'); + return true; + } + + updateTemplatePreview(modelType, template) { + const previewElement = document.getElementById(`${modelType}Preview`); + if (!previewElement) return; + + if (!template) { + previewElement.textContent = 'model-name.safetensors'; + } else { + // Generate example preview + const exampleTemplate = template + .replace('{base_model}', 'Flux.1 D') + .replace('{author}', 'authorname') + .replace('{first_tag}', 'style'); + previewElement.textContent = `${exampleTemplate}/model-name.safetensors`; + } + previewElement.style.display = 'block'; + } + + async saveDownloadPathTemplates() { + try { + // Save to localStorage + setStorageItem('settings', state.global.settings); + + // Save to backend + const response = await fetch('/api/settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + download_path_templates: JSON.stringify(state.global.settings.download_path_templates) + }) + }); + + if (!response.ok) { + throw new Error('Failed to save download path templates'); + } + + showToast('Download path templates updated', 'success'); + + } catch (error) { + console.error('Error saving download path templates:', error); + showToast('Failed to save download path templates: ' + error.message, 'error'); } } @@ -651,9 +855,6 @@ export class SettingsManager { state.global.settings.compactMode = (value !== 'default'); } else if (settingKey === 'card_info_display') { state.global.settings.cardInfoDisplay = value; - } else if (settingKey === 'download_path_template') { - state.global.settings.download_path_template = value; - this.updatePathTemplatePreview(); } else { // For any other settings that might be added in the future state.global.settings[settingKey] = value; @@ -664,9 +865,13 @@ export class SettingsManager { try { // For backend settings, make API call - if (settingKey === 'default_lora_root' || settingKey === 'default_checkpoint_root' || settingKey === 'default_embedding_root' || settingKey === 'download_path_template') { + if (settingKey === 'default_lora_root' || settingKey === 'default_checkpoint_root' || settingKey === 'default_embedding_root' || settingKey === 'download_path_templates') { const payload = {}; - payload[settingKey] = value; + if (settingKey === 'download_path_templates') { + payload[settingKey] = JSON.stringify(state.global.settings.download_path_templates); + } else { + payload[settingKey] = value; + } const response = await fetch('/api/settings', { method: 'POST', diff --git a/static/js/utils/constants.js b/static/js/utils/constants.js index 4c7520f9..53249ccb 100644 --- a/static/js/utils/constants.js +++ b/static/js/utils/constants.js @@ -112,6 +112,12 @@ export const DOWNLOAD_PATH_TEMPLATES = { description: 'Organize by base model type', example: 'Flux.1 D/model-name.safetensors' }, + AUTHOR: { + value: '{author}', + label: 'By Author', + description: 'Organize by model author', + example: 'authorname/model-name.safetensors' + }, FIRST_TAG: { value: '{first_tag}', label: 'By First Tag', @@ -123,9 +129,48 @@ export const DOWNLOAD_PATH_TEMPLATES = { label: 'Base Model + First Tag', description: 'Organize by base model and primary tag', example: 'Flux.1 D/style/model-name.safetensors' + }, + BASE_MODEL_AUTHOR: { + value: '{base_model}/{author}', + label: 'Base Model + Author', + description: 'Organize by base model and author', + example: 'Flux.1 D/authorname/model-name.safetensors' + }, + AUTHOR_TAG: { + value: '{author}/{first_tag}', + label: 'Author + First Tag', + description: 'Organize by author and primary tag', + example: 'authorname/style/model-name.safetensors' + }, + CUSTOM: { + value: 'custom', + label: 'Custom Template', + description: 'Create your own path structure', + example: 'Enter custom template...' } }; +// Valid placeholders for path templates +export const PATH_TEMPLATE_PLACEHOLDERS = [ + '{base_model}', + '{author}', + '{first_tag}' +]; + +// Default templates for each model type +export const DEFAULT_PATH_TEMPLATES = { + lora: '{base_model}/{first_tag}', + checkpoint: '{base_model}', + embedding: '{first_tag}' +}; + +// Model type labels for UI +export const MODEL_TYPE_LABELS = { + lora: 'LoRA Models', + checkpoint: 'Checkpoint Models', + embedding: 'Embedding Models' +}; + // Base models available for path mapping (for UI selection) export const MAPPABLE_BASE_MODELS = Object.values(BASE_MODELS).sort(); diff --git a/templates/components/modals/settings_modal.html b/templates/components/modals/settings_modal.html index e2d5d542..4f6ead0a 100644 --- a/templates/components/modals/settings_modal.html +++ b/templates/components/modals/settings_modal.html @@ -90,6 +90,57 @@ + + +
iS>#aLx>#HIl?1#^)}{zNP&1ViBF2@I{PXzvT1Z%n`?#{J&&X)rX7} z$)#c*@iMFOIY%ip-GobaX*Lrm8vJ#2LSoA^?Dg^fN|mj``crItgQFJ_^KX=nvpIL! zE2y0h?#8K?F=q@GNpE+eqR5tVPK)c_fZ3~zHu(R{qu08RI8lQCRD93iQ|Ro+4ZPdm z6{U35oR)DR-%A~ya;7Z~mM_0r5RN}P#J6+Ul_gpb|J?&r%qE+C*0(lghWA<;+5gi} z?|n=r?h!3WeEoR0@vFb$p=V)=A*9hCQ5AUaFFL28)xlOB6e$ZuQ83+ars}JE{tOBg zx)ScoqG$cS)^pSGbJzbnTU?bS$a|#z5pISlBJM1{C=LTR=hbkQ<(-U0NK~HrWc5?r z+u0e8)reeSp-RZ~$-eSL_67GFmwc{Sr?6?d=wG9Kk8{8Z?xEvHCPvfnKSPK6KPvmk zT)*$NTtZgC16>cXQICZQt;QyR_yTd?Dx+}%?r16=A2ohqNT{nAX&H=dR^4KCczZx| z7WF9Y2_u8@W0$fhxW1NC!AzOr05p u=W+l!vCTcdyP?FDPxi0RO&Yd?m9 zf6@(_pxMWn|1%&{W-=KU|EKFel0PQfTy01R-ylybV}=AWu|Ba%SN@aUL#Dp-$CvB0 zD-Tz3qKd8MIZqDTXPQ3ptpfg|6-xX6sDb3U{g2X~AN@2n{}%EeiT1_+--3Te|My`o zugG?$*bO-NTmU{#!PI*@<##6t->GknfDr`rPV0A(g);tqSpU_&S+{1d=Ye4KXh6ZU z{M^^>M&Z!orf-Uj2uHXNuiy72)6J+A;W>ldRYVNX)gsj^zWmYu{ ?<=^xje(7qL%3gl;W z)F_nh+b{WBz(Rb8>;rJrm*0VTcl|xIJW)8(3`cj>^=)zL+-RxuZM&^NTsP(YpKiJx zYo2m-{U^=dga6%XE$xapElF~JMGPUw6|Y@JF>N}22?(MYw4O;i?>eQrJgeu>d;32p zWjnf2dMZ3lE44vqJzG=iTh*A|q6Hr1wb(lZBo{h6F1==z5%W f-!j=t!u0`mcLa zx9Rka(uJ&nxwjc&BLCUcW$MaxkeA!a)f^(#Wy!vp2<+6|?~-_JPMldXX7S9iVKZ7H zscl9}uPNxnk9n6w(y*NrVq3o=!a&3PcF}V)D$)J8cCOjQ_ndPS12;AOE~h_O1Q7VW z&O+wOWNngqSf+Yx&pLxElR!2vovXV~^#1g7s6V9)SlBS_Nx#&EQD^8LJW6zRYZmMW z< D}eZzOE8Y+F(=EA{K#u*IAD z+wM^gf;}11@bjbB8NOX1lMM9#J+H6Fy|0Al?ot7w_llB7ovHobSks}s)zO|OWceQf z2b~_Hylgk}9a%u=5;Gav;;6*&fZL5H!?+05T?w~Z#S=K_43J^-cV8W9jLYZrGJnj( z+Gjcdr{i1NEX#g%O9d^Oh+&ZOFN+KW13Kmx@O_NB Y;4oLFKjhLkN`GuZd>p!M z=ko>2A<^JE{4)+Bb{dC9u_d6(%4&aMWzBoz)UmNRqx`-#p{f;NDnsSTC*rXNC7Jp^ zUV#vxlC)egLL5WX)byRY=Kv=q)ngkn1Rec_?e{ZYsdF9cySw)Sn6$A${+Ob7DGrUn zao8caU&uNFsqMH(N$=M~L4RAI*iSgDa@PrjFwFs;WP~qm5t5$Wg|z5O_qymu=%j{o zTTl7Kk0S-eKt!ZZp1!XFwzJS6j`Bf$*Lzku*f&r#y$Ntfbhl822^hakS!D6N+TktV z=Wz?xRDn7F>kL%a=T{E9G<^k!w1$z4YBNUJ&?g HY z*wSge-k$x ZOU!D2AIeFOjUJlV~0HQWHw-G1JeB8C p5YbRdFiq6Pl?I)a})szWj87LIYE(q8EE~2oH+>M}&}Q*rp?e<^C%rx{{Pr2HW^p z^J&{s+GXi!2!#V6fWNQ&c;eT8rwqg*(slY98e@c(I=!8rso!C>WtIT$^n%>`ogqoK z=%v+`FQ nQ`RD$;1X-{k z-5pjejbV-P1(F(Jh?Z~JeA47nAlHE=-j);mwZ->Rg2*;AvI7e(vI|>qU8mNXayJVR z%7IFRU1u8sE-neow3zOS$D~HluNzmvsJoZMVMp0`!qZG~i8x2|n?oP3lQg#0F7M{< zCXf6@DM@_xf?heS$*;JKNuA7nHt4-&pquZ~g36=2Xzn`WUH`0C2k}36=3ut &2$|JVE-{HjEio$qfv+IlbobXOvvlj|xLl-$%!c!x z*->3A09?YGrHl0F7VM@e^f8$OYTGl0-`7eRO4GZnS57$d{s5`ddUUkX^vS}ONztMF z0O-%x8QCS!mQrb~ORvGKb{;;w3yXI%7HDI8*Ps;HB@`kXi|A#4Xx-adn zpP&1a4dL5(^<8Jw5x_k=@arG57yszRg2|piH6IN;i43k^A}4#u)x>{-sZ2-1Bsi?R z8=}$nZC!mRTHBYVh2YYf@3b{{_lq97rgIpcrjK1$=d`)?;pDu{%g&dy^_U@U@;G_v zLx%u!e)ayiS+XID`Bv!rhQ!W|@FN}p?4ltYiWPZpVcnPY`DiXqV(LqcO)2Payg$LY zX73E55yP*`0 -(asc9kV27$r?N=cqSc%SnL>a{1YjA7`9Es XtOJVmu)E+?D_ z94 ejg{xufZ<3_{&h+ zA?F^tiY4^8qOo2MuRlmT*G`Ai$?=#PSn0nx^}RNx =Cz0=6H9vs6p9E`$%cOrXxpO%D+`D ztwzof8XmGrxD*_f2^sf5_#O%IEbXv_p(?=4J*MnnH0dr!CyR9{k2aIlUCYXNSY {^$__xSW!wo;<=9 }E$jMJ+WBcB^))h9n9 zCf`5vnu5+1sv`N69FuVJljCvT#gD!G-&`Du_8;!|=JktvYvmyfwxRDu&-oKH2;Lou zL?v?f!TbN^DNd$9UcnhpbQ+y=^_tD2^r``%Uzjra$WF_xWA%JyF!IGOofW8fQ;|rK zoy`CU27ov~(Ja^WkmCVLOINb?r(tBJf`Ob!>24QqX`8}tJJJ}2<=KHHWYuar^~Q@? zJ^)0BZAvI(Y`ZhtT}JfJ6N;%L2iT&`> %K@MgOjagBuQ_m7Y^-}k$Me;1`z7+ g zzd%%vU_7@`5ghUn!`e#9^tyI_(J8?P`69{^8t< X u_xGF+ u^x!ukFU;<2mbw(!=Y}+ zu~cC*Gx#a>H|hd&dQX{tkK!>-VUHrOfLU8^u)u@V`t %Qe;Y zFTm*e$3grDq2iOJAB |&uQnr{x7 zP|Dt$TuXxi)(#m6)RGCmZz3M%)~~_W=WAH(#bDYVy3N;F7DmSBJ)hZjSHl?KKG;sU z=#xI~)0$cMixZKB%*btjw^vn9!rYDh>$(s9?TV?W6LSLScl3c}9kEL_x%AksLSkrQ z+z%EeU!u Q zIF8q=lC2tD{n2`c0K7PLAuM=|#?n{%N?hhS6P1e?SS*fe|B&xde#; ~8<&gK2o(eyib20zoF@bGOXXieTsEgc(|e&XIl3E!@qE+kLKa6Z;-QH&E2 znZ`jiug8%_om6+*`7*h=syBcUL%%=yolVQf3>f;Lpz(Eurqg0Zm2N>sSCP@8kDQms zx%P6|2zCRlVKwG@2_$P jxPJQgy z0_1kKZ+X-!_`+(1l&iNk$l!^OMkzp-lj3>8r5-etIlB7AK>ogJ`j4Vyp%KjU9FJFn zrQ@JsoXdKVgsv}wR`Q}H?bb>GKJ;p`{McurKSnUVkG?_s uK*A1Zj;>~qxq?`TB64c`-Hl4Y?mvqEE+ps|6Cmw-ZsnH z(65jrF`wefOu=K1*_r6qxpsL@r3r7sTp@K;u@JTh`E8D);Ki@dR8&8cIXej0E^;v! zp22p*i}QEzstL6;4u4UfYZy^Glb<>rQZaVZicNYO@$Dpq)wZ|YEEr;VAw*jDEm}W; zp?Ov=g-nV$$P`6emGjb=t@YDcW4h(9B@!B#ko$M--btZfp80Ryyk4xPy>wARi%_Oc z5hvgF;u5D4%UZsj-!#+kYv!XkX0&z;vQgetpa~EQ&lw* pN>lok+6le)a z{-k`X1QQPkJoH*Vd+h?S5!M-!&M4csyD{>^t{E{dNA?2BkH0<8j#+1&9H3+KlbAcm zNzaamnS6hl-plaKqma&gejykA6|Ja_eu q@ z;e+7^-2#fG19QB+ar*d!PxAs7)w5}G2m)^J!HyxvK9RHf0%#j{ol%FvLWmb)G+Kvf zg<*2HH*nFy4p3^Y`K_HK5crZfX@>7p4?*~^Qf`_R25j2uVKTX%)XRmw`;8`Av1iO> zChpEdsf=w}FYiNa#SB9iyJX2NpJR##vcBg;Uo>oD<5;-zec2P@i{F&fdE|90tPkB- zWI~!*4ElAKC25PkxJ;k*ZGQqa7TiC)q&<;ed7G;;74dYy_RwT6wIc8?5+r08VDVYD zQ(Kwm8H6lip!y;{x;?rutv->0&SF>~{T)j!0(V^oA;VYpJV;tyrj4;>(k(t{DWt+l zj=HMB6De4m6_bj!cd8M@WA{ZEEw?4!<>!HIiteP!YuKE|WMuA@62Bm@CcIqBoql>` z +>Ebq$Nn2^f z#+#FT2MP`At;jHI>sPz8jo9<64C3m!uvpkM^bz={;W+ (r#ypyv%*Smb+u z#Zu2U hjJ{07|7uX+UXk@B*;S3Tz`t|e>B~5KVqI6vrRQ; zxBUJ+D({7R3@k^`$XjI->6KCAzSu_yO9$zoAWqvaZ&}dy+OfIK!l2eg4aFlCFZ_68 z8$KGR+$-?~s46q8Y*q-N!Phv{brZPE#X|X-N(oeGtqXD9jojtAF+%T>=SF6DXES@% zx+jX=zGqc`A|Vcv9TqN#EyUt}YKr_*bu499o+dn fw$+ZLA5D z#&ugTV!6RvYmFuRc8M^49NlD!tCvSWr97T!da+aXP+Z7f8Gj^KvN!r811qWB!Ryhr zcy<{jl^5Ka>uE=+#72bgh>LUC(A`x~3oA=^&oq68R;vPJhwW(Czyzo z&LKw&qC;o%W_J#lUAtB;I5>&YTZ)NKaXA08ewftG@_U@v3DxHO{cn{P{5U3RVVWLJ z3eCKMhsd10S60F-pGKn-h0Uw`a5XxLRpq|d1Ai=ju%3ul;PUvXAgmtr!S>_heCoV; zS#Pn5!jp>k13yU$C6zp_?Qk?3zPdI$ct5>8m&t9O?bm5Ia`Fy?Pd0ABn0$LWZ^3rb zpvOJ#o%TUkz|G{bkr0{Ki>R@hGS0U 5`(maonPdAVLJ>Hb3 zM!#cj*@Is2HVfY(tARN`LwoFlAy@rzyf%g|v5izqZ=kHIjj|k{EP{zknLv>L6-AY4 z8lc-&ms%D%7~SZDS!!lcQp}^Pn|MF())+-{G%^*I8?`N@RVu>so`Y&y9d@G0-maHc z&dujme;m3YV4mfclpPAA9#!7)t*-%98kkOFm-ZW)hb?z6a${OkUE%8XFI2zBO;7LH zK3wPHZZ#9?GX9YN#mSlLn6_H&B*(?&_I2d8xY)Beqi@`4Y{CMYLi?CszFL@y;aOon zS08-La ry zL2rv)#$14RdmIo|ins^wjv??fliPYfcueZr_nqB#=(W7Zi5E2{QqQ(h?AMqDvK*29 zc~WvAedmwxvU#D2mdkNLHnE4g_q{^{FdY((=u=v|o@T#>Nh7w)N8K`{&Xv=3>wnL* zVd+1=a`T%09@@yEv4+BdqINta-S7$bs1JP^_8%s`HXYXE1^wKoRrmQJapsR)Y4 G9O>ZDunk?@^Q@kdDfDh*C9|O2D9)lUOiGQD~4YRp^pg&cIN6`VJ97wIt= z82L%hzPeiv;w$TT`609sbtS>Of%P!kenY>?{5|^BCFucN7k&r^Z;NqsS6i|yTlF)p zv_lTomJ`~q-4?(4by>Yw*HMSpL4VjH4(6n4@fbOl--;|+b{8QP8NbhPU`VE9UJ3i% z;CqZCiPuLQWK(s!dJu8mH%bfU*P{3$*AG&A-dOFO@O4kaEI)7<-#(slcCWNm1a z@!w`{`haeL9>^ 358XS$MPw|2s6sU-3=_^xUBvCh t_O#?_{!RBD5$3~Xx)AHb&yO7Je#uO z@mnjYe-cL`?Vg;yuS$hp=imp&xi@!NL?jr$9ry0aj&V`Xm)fct;`Q)Dp1?1Vm%k%; zw?(_P=`*qoh0DGR_(HcoO^2Q~yNr^xQ9LJwcEZw+?HiBlMx~9?d=Dko9Q4b(NhL-b z|AboN=e$b*k1tYah8JO#bhHG{VnHPhQOIle7>Nx}k3Vb)B5Km8(@<%VIFAB7yV~4l zSee8vrcI&IizRn3wwkGZ)4n-a*K_Nx-%H?cTNv$XI5pvtZL2W2yglm)=@{_U(>LRg z#eI+)@Im|j>s||t*AaNLu6XOc)^{csNv2FM#Y8e-H2-30^;KzaKQ0OM3}fYS`@v5# z J z|3F;Ey2!Gl+=HNNyEq(DzsuD8T@^J#KQ0G^5bmnO&@PAW` zw=3IksKGxVTqdCFUDZSb$D8~ZtmlSH7V7s^KDWy0>Yew#>ESW1XXlsg&gmcx_D1sc zq5k*%lIxab-AY$(k9F2rJwK_kehHX`^s&-CKc# H8FPG!@HH!Wv!|0^d&knb4? FI@zrjWc6j06gyj9sOZzx2q&^BI2vJ{ZKET+U R|BJnWUoYk7@#K~8T?)^fhr&+9y`knp-angY3;jvuJ|m~0ZD{S!($m}* zCy;*=cALf~k}<}aU^_2SxMX) <{UIJ`DOfXZmZF zJyyf{>aDk5t`@6pxG@4h`y rA%bnpvrI|J*y> z$aKXO#@#Y2x?sBLNb*5)v(S@E<_0j#7OCH+_~(vo3Hg9O-yeIF++{*&t=^Vr`@U$r z&4}bBR>9poppO9h4N-ha38SvjRFg`(WbA|ZpXdY1#r#m3K7b?DGZ4B3G^hWBy5ZC< zt?mzw$-PE^l+&zAQU;KKWrz3|p+3%SMwXrL52~v}6N@eu@2`QMZ7jlX8g$e0F%Lmo zbCXgO{=TewAfn$;D}yZWcW%cOZJVD*F%B%Q*baVT8%(eX<#OJf`~RHA8YAlb!NSZD zF4tQ4>Ec5TE*Xt+clfD_=5a$7&~1zCgcYCsVZR$S40K`e-FsTY2Y1UyU8?*;c~`_y zYeMr*vds#(716q!^;pja)eCdqk)U84D+W*e%M75re$(MG@@HgseGe>`*)igQ7+R9` zFp^UghsU4XgvL V3C$zCt?lf6C)etsO#1mvaVS 4yoW!)&0Nkw+~lj+#C{TlSz-69R?0$=sJkCh0uU!~%ZywiRtxPpQ2@#}++ zY|5LXMQ(W; n3uL9BNbK8p*_X**5(TNGd0gvo8ke`v IGaQ zg)jK1!`Ies;+JfzRaaVtv>Z@F?Pe)_Wk-ICndeTFj;!}%Ko~M73&C`eJNUr)1IoYh zo AwtR^d^O$m#-nEX*CzOoF>2Z zV^!cesEWdHCQ(i_^U;Q25GG@neI)Jn}Ffm6l;N1aj}u?tuT%W`y{8;Pi!yT>ooK zxV517HF5l#(5A4daObCbw+8cVn}A7XF{8mSVF1zEM_}y7l7;~}evn){!?Q)7#s>Ej zyXX0<>}>T1A&)4M 18&2!*~8oy%Pm?M8u-b`)(I)%6CN-5=~HN z52${$?BU7?q H)*mNQPVbWEcnZP~ya>@09ZeK(Qm-DG2qxeI{N{gV}}k)G1}EY2`b_{US!q4Ak{` zp2ftEsSnvmh7^mvtNz1&5|?pH@{q`MeNuNgY9z%{(fwu7r(EilVQb>GX&S-a*v4hw z?Yke1+{Y}Q+2;#meiP6TbfL((bf2S6H&4PXM}3EkpI7eBOGOvxty;f3T=HXL_8gg1 zDM5!tj ;Xc?qAY+m*#g@ec z0E$3d)sc1ez~AU;8cJBRujwj8f>^jWf1{<8Jl)!3Gjcf4l5hNA0NnDXSV<3Y273v| znr2WWiLocdgcuhG&pd@{4 zcG zVDuD!i(daTD$kQ)qe=R&7STaszM@LL^AS`$t0S9vVdAxv(D#md-eljO;dNkFP+aW~ z3y$H(yjj1b6*afT6}x6#`jFpJu@OkXvn5% K+_R?d&1QejE@;kxFPp1fbTSJ;ZZSvJK$% z8*uATw;~Sob4cFQb;w9~5WzYw2#qmr1+KjYJ8z{hIvlu4A%`>0Q*tPxLGk;z%MOiK zb!Xr3(HmkQM_{Ex-Sm`kjCLR*EEEg1IrKU<_!b+r>BM2kiQj{k8sfXjdRx=!5Jxy1 zeD%3>3_*P#Xn3M^A$IX9H;@Z6Vw`9Vc{4qwO-+7j|Mse1`XXyJ8hrkZZfRo|%@iQI z@)i0Wq8i?QuDVEVRlfLR2efrDLej>J+G7w4f^-FjJ*1r?I}lQ{L3tg?|88wwW6fKW zLo43Jvzt@%c6F z--&2B6Zn3Mh(j6GogmKvakX(@K2?`Y?%3Mtb(9#j&Yb3Q;cruOKtv~l#n)M$j zm^BTko8&3p^REe#w5oT`y#bijI%E#8zr|MiMQG4E%J7 t}j*PjByg=w(_j zLZu?dJ@Y=9{nqUz;B389xUe=7`~F^wj(Iy}FYQ@i3wK?Qe9YBg6jt;IM!qy*nRcga zk^Ot33YuTB=CpakWB993Y6r-Obiwh9XKzA2$%s`ET(2`qsMW1rMT<6jXms_zY(dii z|6Ch 4i+fo)k`?lZUaFx(0|_ER`L0T1NU z+`IyN*~r9(JNW+XLAN{Szc0xgvrwbUnFa7>I&`8;MaiYhf>3Cwxa%S3pZ(6M9s)lA znLV3#(|x=~ADv+whsb|vJhA)DR?r6^!*Cpt=(7JV n#9 zDdq-59jc;h@6d+qzO_Hmv#+FWcY1mEW7RbNfJMs@TFTpeQdPYx$d{6e&SvZGNfE+K z*?HhwV{rDicWhK#F;TLD|Kepn%JU;u-G<3Vl*pq0?u^8mtj!R@uX;pe!z(Z*)nnNg z=XZN=>vhZn^=U@3Hv4|xw*>`yhrR1X8 g;q7w!`IJ8Om!Ek@GTB<@Wo)66}FVN*m=Qs^v z;cvSSUQ4r2D_yYGJ;Sz!c8Yj6%O(97w5Xg4G!3Jvbm$G=nM;$GGROh)yU8Ani1j|u zl*FTdmO&77g!BmHRT~+Hj|p%jexRbmm&W3u3D%mesfnDzT*j@?uIY2$%n`uEsS9-M zPxEl&F}C`lRLef;mQ5t0B7$!_UUgIQI?Z-5*57&H9ph2sL(}0(sPvr^{7$qrcrwGq z`(G~|6z!um>2?|~{Y9(&&`3(ajs8}U%NR_SNqCDMxw6X3rTBHjgylJa_daBI{~@M+ zgUIhfOD&_fx;T$snAs6Jm9o|uz$8ta@@bt;^pluQ5*w-Z`eq3U^b)*$SXiFgg4z&d z-9n84he%8>@xC~9cc@~ErZ7P5BWnSlGj! 5dv<9bSmz`pr18%G9GP_Mtb&U}g8^&iv|EZ%jcQ#P6J#{Hc9DHaYaB z0 t=}mlTKnL&5egIuaS+H;W?ln8MPuT@H`8D z{&q7V0`|qfoSz9^W^i2Aa+ln&s$#*R?;xYyJh?3&zq}23L((zl>7seZis7!_% m+^Ay%Mk|DJsznJBYx=Lcc9%b%-=GJW&2i46JJlS6~fwl@` MZhWy6BW=Bf?J0^qEL&R)p>n0| vgoUd`MCsA+`u7 z R@e q)PTHZ=qOUbrZkMV zt$&6gE3PK!#^nF<3V%QBq_64L<;8}}iTEj;g&6d+sNlx~@SV>yMB0V8y*sgyUq^~5 zavq56te$>V`G%Ae*_i;V+w8}od#9J_^Fr-MsoIti#R2KtXY-TY0LkhSS&`GIrq#FH zZC}2gn|>TN6fjVcf<#Ku+9ber&`;!Ea<1;*$-%vbIaWv<-!wXO%wuC_RnYsep(|tU z9B^9N$4h_rH^9vFj2rh*CwPE!Y|Nsl&X5_Xefpc1LmwEpysk37+%mnH5%?5}&{{V; zw<(h~Bj6jm6yjau?7-308=uBL4!u;0n=60u<(^ZYbwPv~GakJq%2e7rQ$)~C%is1i zV_AJFu(@C9+DvJZI(JhS wJoB4{TD z5w&?668$x_v;D5N{IQk&meYXwF>5WC=sQgo3KKN)TqQj2PJsBH6L Su*f$9D`eW?}b^zzUm2Y~`z-?XMaMc*jh#=FOLjpG< z;%x=FVDA7fh%$LYbl~#RX+s*Ys2 n6^CB%>1<#n^GA@g%We-(AK;*lZsV$YkV zUg9Pbp$YUoI4ef)n3zr=nn(a5b2=kp9*mZ-E20jvNWhM-rF>0DQfTZQ*E (EFGBTM>Eux5EPt5MAo3-Pfu6 zpe>sG9=JnZD=TpWblE{u1n#Hb_w-k_JHomX*e-Zg(QdA}c1YSH{k exS|o2^eH+%H%rz4U+^05V;6Mf>y1aadkzC6 zD@eeG-Sn}*w2QbiMBI(4`Xwb8{cBomgfHqaA2eh`jlggF`t`g=uremgbuSC2QE*H$ zWjFDfC_mv}U%P2k(g=mXS+5i(e#3q-H;MQ7L z_ WoVq6LqNXI7ZBmhtzwMmut-Jjm_Y@rE+(oCFuT9wO^-*(Q&ov zbp6$w9=MHC{V}J2&!|4Vq4t&cU?YbfP6V+!B$JdD=r1cN5k=%aO KAx(@1PzJ?nOs%t~c$oZJ_2n #}fCYZp zo1hScB8#O%VORtG{i$Gh0!RJB+Bj7TZcaCNe<~&v{PvPRE5#b;-W@!V9~P#*6@MBv zDSai^sLBK`gtYO+DlU;;282E+kH2H M`##E-A+7NliaS=uI%>>HLWTb z|9O0zPi Jlz(sqI_36e0vmxnzY4?7NYTGU|-IDt^I=NzZ z;m7NdT kB z*48#acOT39FZHM*`%IA3vkm1-T5n(l?4x>n9Sw_bTd5%`usfxstyBHyh7dIl2inKl zke!Z}Yr4qZ_w~H`<8(cE`TOHs_j$0|F)obq)T%t+Pn>rRO~VnBXKfu!PO^n|R!4$# z!rfrgZdm=7t*ba+0zaw>5j6>OFCRuwT@r#Nf8B73H}zMAz%LX0bww7nXJHuVJC#bz zmtpdZL-@a+{{huZw)|AKBENCxHkRq?7rJ@Nm~VJN_~L_V25p<(Yb|41$>#^}cPPu> zsu{kiQLY}J#g=_+jg75RGd;JH?F%D2M7R8qYeV58HR_RsidI*0!vC64ph0Lr$@(t7 zVJ{4kKF4dSWS8lkNGLKtifSPF(T|D+Ok4f+X8oh!NgL8fb&%fkmPiw!V^Q$#E4h@N zX6Wwb&SD-|@2c~6kP4}C57m94PO8A>RxH{DIiHJHzz$$+376?KQUs5$xhc0tw2bW+ zv_uBBUmCTJaQ>88qNDnKry5YZ%^P_uI(9I&n2^LCJU`#QTfx7`g;uy2ALB8pcoKuT zY*;PeT!V5#!~IE!qFzd2wA8?*{Sf|U^g+g@Hrw9KU$=a~uZ8Yr#%s5c1ObFOgkL_< zd& H4SnPQKm~Lx191+Tf|fBhl@6g8?oZApoF42x z52Nj5QA<``l;jTqGuJ^S8^CrnKFu?qKi4_JC7R8KDomo`5FBO#2u~=bu}n^mYEUkF zIp*Z| B6VX&dK5?!&|%-q@0#r-ACogJPlUNBp7_d25H{Q77v~>j1UWo)9Y! z>Pr1su?GdM4Y#3@&q7hruMp_735rCJD-~_Xo4^jxO7 bd?M#&VtA)spR}a|c_3PkUzpN`reMRLlXuVIsjskCZ*|_MV0g^ZK zp^#-R(>yF4Feu&R D_{88<{ZK! zb6E3~LscX2RXa<8tEDMcdc6@~mJGkDXDnYFK;`uiGG8Rce??Ttj8YwF)~r^s!f5qt z6HSbeNfF7Wg=PWr6Hg3Z%)xXF77|M8*U&)P=g{so0p?1r>ag`PTO<$Nlv*S#TcA%! zBkrT%MVQY3%ypvmnCy*~)P`wjYb$*o^}4Kt)Yt_Zz<$XI|9oC5d 2=!b7d`=18O|iZV_92wOzuE@{$a1N`Gng?+K{O`kf(f23HHG?h2 Uz}0d>FRmC%dZkp?HDW|W`+QqM&^5&ntL |n|g?B16WwNcF6!&$1Wp?Z_kw;+a3EWQW zRYWI*QT*1YQDVUC!Q%0P6zvg;(iLJe|5NjkEX#=ANIdIZ&mN~2%&o2j=a*cc4@t_C zp0bARLJ2Kkm2D^)GZ7{cBmo`&^LEO {W0H!>MsE{HS5LB=A#4h z2NW#i@c??^iqKIJff7@Q9#wD)0TG2BYl}d&rb%E_1}JS>*#YQdwrv&UMh;3^$Ig<1 zWMiIRjBf#^TTqp>lVS=Mz^Y{M^43~r4$0a #S?$+~&nMsp zvQo^dh=?M(K?3|O!xIQByC}J$aL#~pj9%T}7`Bfg?=#B8MaxJf-CMwuR+T|Epbcv- z$jedQ17`rp4YFZFv?K263aRJUly$@)z^CH8HW%uY0&wrF1w2){xi&e3V(HM=cb?^Z zNk7^;H3*Xkk~SI>s1M;I-IF+v3ST!X$T;{lZNRGNr9OWA>hnz=-COhultdwnjZFRu zz964kX*)P0l$01V5!_C)rRu@3@&N5qi8eJvXreMH*evC=K)%y~;DMuS;G>Kk2tbOS zi}KtQSC9jwj<53Hm-)rRwm{yOGks_iDK x6Ha z_*_*GnW)Ly+x;-^lm;Lb$P0%|ImVVqydQC2e209QFPpCzDwkQPX_ewj8vWYda_ zA%WLYlWhPgZIS|7WJ!+zl_q;5`=BJehg~Bg!d%LHnJ!(aob`Ugx=Cc5&w}1+mdRLS zElctQGF;=0(n;kkfU&|#v9jUUt}%?&wDKyvO?zX1fR(HmIo8Ou1eO#RxF9bx(gqno z&@=&HC{j(t6rxi^L5WCHh*^5|H1cd1h~Q!_tEZyl1-@(tkFuuZ>tefHLJ>ipa#LBe z7<~GVDK}ySVCNgpUrze_dTISq0c?_Ko?0ifdcfQ+b*|W9B4%R4{zsSMUf2thtiyr2 z#8C!pFli>;tR63^9ZCs2K?Hj0X-Ep22a>Yf;23=Au)kq%3W&(n6#+37QL##-sZ72% z_7Xm#9hu`R;}Bz!$WRJessWBkP58qj-<0{vj17RVVsb<$!$N}QF#lwn>95aAzk7Ck z5TFPFrIdyt#!41yr?od{<3BDCh*mk%DxnS4H8yD!Gg6Ay%5K1rHXSAUlq#)&M3gBY z%f1LSStydji}7IYOkv WIKP-*B}lVn*`}D zfqWi>5+Km#6~Z1!(oPxmnj)BL<#^Z@s4lPwsudAx3GaoP+R#Jhh%)M~6Q^g>b0XN` zLp~3RP@09Fr3(a*8n~jP;t~EM1aiZlDa4n3<+eNCjulLWy{XADIQBnSK(CgAiJ>L| zgck$WR+Jb(v#A3;SmuL@;*2bTt0y8W7Xf^Wx 0u+5#U`iniW)!rM%>&A4 z>X}4kCJ9}+MvP$ieIU#W%HZ3cOL3maa?|;3KqOSfV5?v~NR|xNoE8fHs(YlabAYnd z02b_O!cu^>8&*@X*UgOkK`-1~WT4NDz!lIu*tCtQm)8AY{R$CQbXAV6G TQ8w|(@QuIW+ zAje$@FM+}kax7yYn1e{^MDPVmD-O5?F{>~I540aeTsvhfFW}pUI@xbK V@-EH%_R9|Zo>EQ;T zJ~`{%z1GjI2a`{h+&m;(a&ub!33T_h9qn?|ubcmz<{I`v_}iE{SbM2~3Y!F(JT}kI ziCF{ls>jq?VrV)D-hqp1eG&h~zBc{Y?uRC~r)4@tOF#7GZR^+KLVQNA!9OVD-WdOS z)eJ#Otez4QUxAtOI@bD&0hsf4{ACS9dsW7&Ew 6a~qOR+JJy{p?oq7)Gyn$MmKx ?~R2<(_D3 zHVcuhGGZnBojaK}kbcW6!wi}wOFJTHHR}9ehq@9%mF4yDq{8{}vIkCBM@$OLhjdQd zx$AyzrJb7v;52b*pxw?ghPSzkeA0!b ugm2qJ1m+rp)lM*$)?7`~ zVgfVndnh})zHLPQa4So&90T{I0&*z*mp|z$Czu-imERnc(U(<3Lk|}dfL0zyAzHgM z4~U)q6BmQV`~Onlnb3sbk@8xUYP4y+RTuKsJtS#=ORNP4*8%2!mPdb48yy77*3>ly zn%bZhYwV?xIVIabi7wJvEtKc_*8z-=1WXB;9GnG$KU*f`;``j{*F3JXwM#wFr@u>n z9@_D2xN4TR=kum6TYV;90-V4GG?}I8BYGko o9*A?^VA1omj9CH zWRMjtL30h33SRo+=eg%R>*?- z$L?hBnVw#TSmy1cLEv00;+6A?#~gp0d%4 L &1rC&N;xVDXV7cdU#T&G^4V@Nu*+)?Rm k4M+wnF< z`5|Hks+ )LplNCVGdZ3St2$?G*d9^k{O e9wmAjfyMfXn2lK4w9S@Q;Df+eSftd+f7Xjx~ z92D*;HPqh#5A}IX)6k*ovUoW{16Fah4JeWK*;Wkmis%~Z$ -G4ZfN4|ZE@v4y+&=3CrdcirVS-E OApGCk6J4Nv28ebK4IjoGt?BC;XuP2OTG%NH}HPc~j?p>%g=PaM*T2 zv%bO=WzawKq_trz(C%H2h;`Oi2&iwn#~0=d=*a{4tv7V;o;4}m&IN0$`U*+<80VXv z3+g9a;XC*czC<1TDxggz+gILy{0h&%miSjB{8qlzD?VTA>sBOwzu`{jZogOZeGu+V z6<{9Db;~NK2dUkv`#NMqCLI?9EQ9?^%Aim0i>!N+L7LR)86vs2&k&G{`#X{bmReTW z{K5dSOd8K uN+LPQd#~e*9(0Q?#+nz{mk3TlF zJ@d@7-BCv!?pCc_fH0V&wA2)%1=&n|MB@Ry2l* D>I3EPuNd?o}ioeR#kQYuz7xTLL}=;E pRcmn@dvjFu6^SBeXfk$=N8sp;Mm=q`$y_G0ypbt@csUg;9C*ofc9!yD!1Re z*8ToBd_T$N&z_t50Q7A(mVP1_+hjfQ=fT^pC4DP`KA<$V=rg;*VEeDW%IC_sro|^b zUNok!q45HAF2F9uCAXw=Cm+LP-k!cT*o`*_)`u2o!*#SxopDXxBY;NM4DRy}T0#74 zy)5F#&BM b{q0Wv|hh+pK=8|kc(-^dpqLyUn>+E3f0O6oO$iWuH^ZLaN5p2U9;v!vWULqtDI zpoq04fnoG_$!`<;k{XKqI@lcYI(Y3IKszM;4OakV{Gl89i&%J}L~JOvpj_Y8%HpV_ z4x=D%3l6d_x#Ti;@x}6h9fCMKHgLvIe v0mPkfxOjX3Ja!`%y?_nZ*00%-fV$2^(?KMQN| z0TfKyM b(fvp(PZzufEzYW z*UrDO89ZG>f#CNqmpp>P9XFA@w!z8K5pn1^IKWA#-mn1#9=mK7PXhCk&=PLH$GLNF zkQ1mMULmx-Xb2FzoJ~3a*oFGTz5Z|d=Ta^1w>7=#*m{Ng^3zwiw?BM^+nxfnK0siG zzUXOL+&Vn`#uCt6f~{!tIeZ5{;nc5>y`s8lzW}sPAxcjNtTO3Xp)a{d2D0q`(f4 z6Wq1#R0^OG(7~qP{dyYQAy7mhk05X!fZP*kd;90JJ%OMf|NqxT60AP?#57 LA_%WX7GafN` D%1(H{L+DZt45*ZKD6VJNLZvyf1eP!>0A>0{}tt-h1xu<=*N3?XxGcem(hwjSU|V zP3-_b#snv@4AO-FR0DL#L4A-%x-7K*oL`>nDUtS amuR<_t;bN8~BypTWQM&QGN z)gJtGzPp%$QvfG^8W 2H*>#fJW#L4r!sO|pyHGcpdeZ21a8z`V98z?|!kPHO8 zz>Q?%sVsLb|H?qo2jKTUxbfzj_{|3AZ@h`Gz$Tk)>^9m+PGND{iZRPiT>*VV0^kk9 zwb#k AHIUi3kBR*cihyuU&u7zn=n3Z1sz`^$$^_MZrV7R#WQ;VKI)$aclhW2 zR1Ut)j$rl5Tcr#-PS75K_ac5{zzHMlgPj31F}l_TfRp7S(3k}nDU`)#0!lh-hXVmV ze1=oetz@dWE2xh+CB$PA2&nfkK0n AiKBFLCPh9oOX7)riBJD}-ndbz? zB?}9(waf9ajS{}4|A8}kz{sCMyyDgs!N2X0c30fy`7@v6bUR-ca;m$Q--JB*#1#~r zlMJ=hU+<>z!x#&?JA&!mZx##sbB 2!Y zZ+G7~$v>o4fCijLlRfAkaAWqfP&n1xlLGjgZW7tKt$I4T6a3{LMR?K^9_RKY-vNA* zN;arXNI1Fef(D!zBiILQvH51~g8-e3X3)3VV#{y}+c-7$&{I=Q@A-!h_?jkA2Od3@ z#k{bO6U+ +ItL zeSrY<<3E?66f$r{`LpLm`G0t%b3Y?}ci}w+?GiZA!XpIw1snaiAI~J>V_clHAtB%A zl(`DbfyxFm1o{y+?8T{_p0wh$7yZD`BjGvTUz7hW^sx-|G5`49?yr#ZwF~8$Pw--l zKG^ HVvF{;eF%20hp{b%9 z&%hU<9&i)~U|;+SzOW>B5PTu$xMLsA`EP&c`|j)C{EmC=t6$-E*j_$bMv#Ut_26{& zDdrhU3w+t=rdw{Uei7^2-}_ By@lH*0h-6J&Xq5T*)L+@+1rvld_4Z) zk2V9u*ZMDF<$y1~@a3;kpuA16{ikQ1<&HS~5RpxzV+ROd#=7Zd>8G_7fhxX;b?Bi7 zCC|(Pc(mZ(KKli?*PgpmJNY8kiC_9EpVGeWk6y`k;mc8HoQXa?f%WE-S-(7mQ%}f8 z`I1X7ulnpJ()sVC^O28uh&v!V?Ug=%jo%#D@xp1XemN`e8+@|wK6`V}k6?D%FJkG( zzxInZ%Nb#`I8$Dox(VdSzuW`J@Z$w-M4o;TOToVOd7$fySkwAESku^OqZQ~P*D7<4 zyeYs!C5sG#!uSQQSjihE=RBye{a2>@B3A9oQgx6$wqK3@Gzc?>*PlCrv6h47*e8^I zA5WK4a=eN9?SteE*tdNUEt4%3s$awc MvcxssASHvx=CHzpT(orv@W8G?%OOa{4=uZo&V&ru Yl+pHkqcr;c4ffL3c8-6R3k&(HalFG2S;9I)m%_4J=|pk+@$`{1IB zE)IGTjD7D1C%aRPF93X0e(@!A$Mj>3fX$xte*L6xyU(8Z#Y8s(KRnj(?!W&>_E#T3 zy!IWVj7I|g<&&S`AlFVF1d00V0T%cu|J2iC1cGrz;A??j7zod~PKZ-aJHwsU@y8s7 z0$ PGL(3qs5sxb{6?cMgW1+*aNmHf3d3zys6+S#ZJuK=jCn- zdK&qvBk 7{6pIssRk>d<+R&rSO?RuRza z6*t7L@TceSA!Oj^vR1e=uUWw-vu~%l{<@=`yNtFnJ@t(!cE*G1psS5#)-bvjQth$_ z&xx|f>^+5%&z}h#or|0X{YAAIin^})E*MK@*guOjNK~7ICd)f2?qhKqB=Gd|1_*;~ zdI)9FJZWX2xn!`Uv;n#YBQ>ZCxow5k!vwY<6_k`Zbm&Rzx#yneKJ>9qc&gm=ZPU;b ze`DZ!GiX%{kj;ewdV>k@j3kqDT&+AR#J^G{CLHT0f>^t>(f6cvT|_cEGJu@5$Txr* zq a($x{5l`t%$tL@QhsND|6owd76{f*&(y5 zibf}AfTHs}a=Q#4`7*R@jAwe%3OQ?5%g^&*{?>Xs)81vmP*lBIwR}!mRZ!l8IlwQ# zl3$dj>o@1I>l!tEtPCQEc|N_eQjM~i&%&}i@6I_v`l0Je=A0 _!TZ*Ceoj^AV zY% tHQ?AcsU1C^q@A9*GS|mfsg@nTBweb{C@~6IuQ7!j1pZDqS((%bW z?a}oNp0L{gINk6Q5a{aN?#l>HM7vWD2Z-X4PJ~w~nZw7K}us<2rPd=Qk^AcF#{^ zj`__s5o`m-ple3m>tlP$)2)*c3e#ipeN?RCXNJsh`K5YzD5=G9tVOUF9 ^+qlJ)cLW| 7lX z5LkqMFs1$oVh6}?ez>LfiqudtqsKHeXbp9!(}os7M3j|)+KDa{$~>qOTUHS7T6(R> zS|YH|z}$AoYu#PD?eEsE*YManjbwx>yFj0t2F4wyUI@H4|M`2A>aT(|YuE6+Q)#yy z@)~#NuJiLbYj5<)=o+Hdi{a&iJld8-t3K~D_+tTsPeed5;<=W_wh-Fh(jWN!1& z$h6{v8BKcxnJuvc29{7{D4<|Z7%w82>I6L35U`%_=US?Zzl`M{ML|_*`u4GIQb3)R zk1j3WFJhGhYd@w`%8Mx-pCsV$ol5;Sd0$12w3pm;VDpPYl&E&2Z2Mp_i4`?jZ8lAV zvi&me;z#jzyf_c?KwH%QAj8AXfm+@|?dl9#2ii9=V1(+@eA)C;U5(SDqq;xr%}Kzb z2g s;B5{BTv8b$>>-fW4G6QCHmv|3){ zoK}w581i(!+n^~CmO GIFGHDZKNLfaD9K0>_o!I`vdVh#r&0l{ zQ}dJfIJOmiK@RHhkIB&%<;$Tm{4=d(D{8itMNS8+YoJfM0fCyP0v1OU68tbwwv|zZ zaWZFhrZk#TE$V86!t`3D6{kF)M1IZL2{&SiqdwdLD_5+HV_Qglq4NQ+i$60emiOwA z548HAvZ*TKCfr-%jN#WX3}IvBrXfFRgDchZxKUCTa3RlEyy|Giyz(``)t=v8@Z!rN zSh9ehHdL()7P%rS6I&2PhS*lfm!$MXG);3-vT`{;jgtE)YycAc*O*9IIj`=(tcFF* z>Z`nsZ(s*Hz-!j$XNMS&<_N=+b)zwCy+L}YZQ2XF-}V!%bBTi1vf-)tRBXA$>`~K` zb}{cTS}l}?(_qFnX5D75gmOt&?za|Xvvokr5sQRAAsC-pVr(^W8)+x)CEo|bxCa7e z`fPD3XS8bH4S7;qMRv&up~9t=dqEkK8qx+HPr9-#60D*C5;lIEQsNT{PJZk`*MxSl z9NVNfxyb8Z!bKfmxf$vluGd;v)dx`;TBt3NIt-AZNgz4gSmmD}F*h TzKvzn5~feiUc9Fd`ym@#!KkBgq>t7VRPS{ICeu@|9KF|`WtOB>Be3BF=~1^Clk zW}z20RCt#MV0|qq=G!NpXC7g$W$IAQmrY)7M`Rw y$Li0A4KY zXl`ykxCrna7-9+wmaM=OkS)l h@}YK z5dz8sC; T9sEXqLHmR-I$P9hRnAgwBG#c!f9$}mpiId7U=;-VPa!Cm^unM###C<@@(P;J z`-6BP+O(+#u8Iad5+KG_Llz|G7J)}o%qgb?tXf-!^2f`FNf4bEPWA)RkB27%37Fyd zK-5wmZmc8OtEY#Eu>+9G%|Dr8-oE2i;LG(j >=}_LhzB)J33N#an5yY|#pU>*{qpA$Yh$VtBCWXzRG+xbMBrmssrwYHM zX-YKggiIzjdl1y+dOfSQ7;M(0{b-t4L2pI|xHTzYVm^Fwf(kCKrT?_mucQ#w|7pe* zT<4{D7TgU`kGUYB9ok87!4y@(7oV@f*5i=^$>CC%lD*N;+GR$7e=bl827Qbn9`>g% z62w2t6=hFMjm(u8^JHI11|E5Nws9t4T|Pevc#?Y|(@ao<8Hq^&6Mc3XV1Iz`)yCkv zlFgoGtB}`}R9IB#amkXWIqBbOSVt;T?#Xsnij$0zsp)AtB2}e)07U zbkQiU#XbXXc(~bIR_BOmV23jq9WFG-tMm>&Y1?cPk<>wsPfd{wuB8{~TuDKa>Q;8u zTWQ`4wV _ z8!@FxE|HARwmy_v3ea~BT1$XPO$&)!U)}t^m}f7{7Z)t%qOLAfY@qtgm{_D7H!oQm zX;FjWYh?A+RM12+r4cg%e9C^s=@_4qt>iCGA#o7VbMtC^6vM^lh!sD2YO)p4cOwNC zZ#>)w*?_rUt5!+hQ1*Ofz@Soo;3OwvZ7ZP`3}!L_HUiwANh&%=p2 zZhI$hNbBgYfI0DEnlwd&LJahOl4Yc8uNt(jTQHu?(Nfh1aN`92ufP~nvdhp!XLeg= zB2n@g!AwLe$+T$9Br2;+ML~wJbO|3Z6!0q#3AvW@fhcsGQpyQf2MS{&l$4H5fpz34 z5;KIk(>@P0P-Qkv+J?v>fTdtc16yBZkn2cmxrCP%wwSeT^9BYjRSXpaK1~5uhs|5~ z23>lpfLuymJdY(8<*GDH1(^<9 }iu+ z03jn4?J+!QtyIM7g8X2KMUy6SiB=LZVgeM#aZ*e%CTs=fJI^ahe3_wbbAXuWZ5<3a zD>jr9)y#nne>NT5OEocB(ZQ_)?UubPHsU)T xsIU$#{ zw|bDLN>d-RCYQ7aRECw6G3gBBi{*<@YC}8`N+(+*ri8lGj*Uqe2M+F<10I2~scuXv zOaNIH$(Uv$EJQnA>vqT~YN4Lxs&HI=-fvb2U}OJEI;>&H`+B~3d6uPu9xQcuHJl}1 z$AoY1%b&~@AXDnYoM6=O=8r4cg#eWd^LenXji=o7BJMVg6O`y^ TjN1r6uXa#4-_-%sOPy`Xq=cY| z{7sbTxEcGb2T#JH>~#<5W}fB>ayI|NwX(7~AZgje(7u5{GVLg9H^Z{JwjO77UKB3T zKJeINvPq&BTnT(aYwh&(1g07Qzp!N$6G07;OAb3WJQn^$8GkM}`FK4MP!r~_lK^d7 zx{I;J;k9~G5(TbYOK4_#A~PCA_K6gexk*{2H`;X|6H`U3lU&rohDmk++Sb;>1Gd!C zG64<2EL}Q$L=9kwH-^2qq{g}hWanhI;!~8o-Bcb-&?SlY$thgi EXOzs`g3HMH_f6&T ziuIxar;UPCV`u_$NJ)WGinMR-MlmZTnYrdPacaoi*NtCoLOJ|Re|$?{6Z+KbN`{hk zosH%Q@mT{(PO5yt(s&&Gc >Db$vspf;f|BbF2<7!qzm z(+qPonQdXtP6t1|=L@oP(#Hf~U%H=`(YGH}wjS+eFZG2EG=f&!4!UeolxTeb*(yJ8 zU$VDnA9`Y_wZkzRdz*FnW*a&=uGe*jw9CWw8TUBju^d;+fZ~X!!$O)YQQI`>r>8 zK=P?h8%QM}UJ2j~s92)03|~yDGuAFNYzgfpQ*~j&7YZcHX9|dJi2 rEZl-UR;$ZZj+Dze8w^aAFk&qkT{U7`{} ziAoJ?2Rwrn6X1!}P6~=m*Eyh -5|9-6FW|hC ;89+Xf07Ygep7tgd zB@IKf-E?*oVU?iIoRAli0xp0bf?JRoV2*h^)rtO`%K_-k((F;+c^#L+;`T$W#U7V? zmGjZisWI)E?}Dy}{7bZbAnP#iYkS|@YP)*c?$&;OD)bT!Dap YE-DRZ5L#!FfsC=_ HqkVTYJ*BzwZqEhC* zh3Yx4KM#`?11Q0)Rd~)aGtjn+$Y^NqH*^$=O)Ro{)h(b(`OgT}Faf8cX&@SAlqLEC z|1dtTaxp+f^CKpdGZLfOz6FLk+4}&jFD=7g{KYHuNBSgeFhUZ_p>0p7{r1{70eTg% zRg&$E9{hoYGORGw8VyokArHv-ivYc99zb5<^YEod%(bB(7tqStU(ARMb`%vQ+Co8x zvKg=mD&)aX`9s(IP{^JW`!xixt>%aMm9br}8%{YaJ?AO$Ply?dik4QKoieo`XDBrQ&FINkLXD-@=0Mxr$m 5!Ji z$s$@8fqs?y4Ag7p0a|H3m*yETg%bZH7QP7NtHGD>hHSIF{!VHi=)Q+ba>81G^70%a zNZ_JGx#UnX0$0v^_8L$vZ79cW%7Rl_xlq(3o%Bat! zS r)h>gT=Ciuq^G-UvV z6RMeFX(A_7`m)M4jA;tU^GMolEq5W~>D#OW(u4Rf3ihc$>JRN>7~+5+Ml)cc#6=qA zRE=+s3;UHbN;Sd=oKIUzIdBWOnDY^cZaH%fX;x^rj-b&q;|%MUxq}Rm`IzMa&5}X* zGE@vCY2M^)rfi|XB(G~l$fk`DjHP;{9!)K$=CMg3=^lZP+t*Mff9$SY>4h`MBX9+8 zgcK4x0V?ul=<^CCF_fM)1w ku6wBmJ%be!l7u OagI30x!e2k<$M7s}%2q>?kcpxb~*XeFU#gq6)zp3oE_ z6{$4@VzjKti+z;HU;6j`*W&&G|9R%56_lA`JF<2i=q+|ypvzWS;wCES9OJCy6WdT= zI%Pa-5uvV)X$BxOQu{ziC?h&h9H9cS;ng`0twN_{albH_<*17;+86rtk$9NTU$Jgh z tZfs%98}p-Z>?$*Cp61FVs0Qe%Z&2iIp<*pi8mx4xPqLtsX#U{ z9pRkcjJ(NOHcPg7E>Mamrk>y%V{hUdUWn|e9KdoM=<99Z3WD9RIVTMxz!S5vwGjir zg{WsO$S8=9S%V%4MR8LJG+Zh1Gp?vb71f(21S_-);8lLFM`dNGkO}pgc2wHI99tE- zli5oB#tCzCuE8^MBS&{y=i;QM4}~|OsE+IKLJ3BX5ahlnx`v49 (A`*K9m7_;*h|#aaubeN*YUMux}dlvcsZf zXvHmU!mA8iO!QBA<$sc(SMz{g8vr9EfANU92&Gje8I;=h12#;#IUzA2K#P&&OU#QT z)Dk?W43s7yAsVRj3RQtX^}!n@w}4G$C~ACxslZTbW5CnJqjtl=eCfMbMofv!%@Xt( zqR(R7^u$$%hA)BDwDI6)TY1gXmZ9t4P7sr2*vUc2xI ~$?f@@kxQ&G=`>aw@DIR(ANdUo`N`Q`8=vjx5yCY2T3?O5O zb(u_yIClnu+Sxa@t;qPMwOjh$Lx@+a>g6xl$)i_Dt5zYcN|UeCy&YEziRAhL0Wf^j z+fRehl$+eE0AeY*ih4&iFpdg7o1~P0GMZ^t>7Gc4ximi*4P!yD#GIkfy8_7qPSSt) z&&flJLb4@Fnr%VOQuPHhX57e{23C#*(;Jn(VXYBYTWfO5vW9te0Qj_$@-=+`v9(o? zm>q18$H36om5(eEjfrk zly3rm-8LWzs~c-r%JI z^c!}1Tg6TIjoQTcCh}?>unY-X&a#yJFf*W2HZ6U0j5MK}V Pe{&5rfM51uO%_TEW_X6?{wSzv<)_ueDg07M7M=!P zPJxop2EiL%zIo;7DO|nN1?9 ^yOzf|@M ;J7@OuJ%t8hGUwU>-uO{Ft!=F7MHzSYDksf#0k*<^{`AL!x>Nj)LWa<5l7ZBB zO#85@?7)jF5lcEs@~BT32pqV|rrbMGV|f)wS!l`=h=5*Opq;5BxYA!U1aJ6j1=t|N zCYgznVn&3#j8uj8nfqTzsKmtpMHXMuQLAW*X$P1GH83csFPmDTMzq(Cm@P7IQ!#AV z0J2ClC-RSx+6St85_z!+upcDqDKGP-&!m)~hX46zBe^B^E!uz~p-T!cKV*yzwvE=? z=fNav8W6(%hXw$5#3bSuiwsf`&2lGvgTd`)fvhhLpdJZh!vr>yzcd1Z`l$e|VqX$( zk+ne+C5exbor7=6rYo^nIbxYXr;WX0?&>q5vaT@~7Js~lT7ZBReM$Cr5(3)L{=~p_ zdOsAURK&vlIppyGf=1Mu&@oPU=Uhs@K5rKi{S)K-CXYOH2~nU|kF3a(B}Idy3A8D6 zQ~|qurU4;UD zi+QA_CB;K>QXCz7iI z1+a 5PEgjQJ%Q=;!YM2J7fJ=FY?YVEog7f^v%S%$ zK}%m6@csvU6FzB%Ke922D9P{8H %aN-1@>`5 z-Y51T^@BeppkS5v1lkV~?5$k2N=_!L^LV~cujzFt&{y=QapFpl_2~;4O8R7tYZ`*G z^>(h 8oF1H>2$Kd^;FFP_IkX(4$!iG)~{FB;?q0hS=fU*)32HdGu2a%Xejwjx51 z83rI5l4STF Uj#a$Wjq~)Qy-C z$l1-cEwqHHh45u7KUz9yZ9rRX4_%31fn^CogY3}QUo!+g%7BF~ybpy6BGUiBmZMfd zbePMl*XIBsLEgUcCcFgoA&Uy~(9S0&hKl)uee4rEL~L6e_&&2a(GJ-Wk%{|b8PtaA zv)L%9bSscmD6SRWp{UzAqK4kCpR04l3Nr<((AkLjY7gE(jX|n>@+@nc;OFt8U`oAc ztrBb>_#QxsE8(}ycXd~)L~W#;a)rotcs`^~-ZEB3BWxm6q#BM2s20xQBt-^^f;e^- z6EJ<^zsT4J72c+~2F0zh0+AoAqrSvPD2Se^hh)fZruKh;ePy+ku5|&;yp#kfO@s$p zsR6?qQ4<<4&{%d{tH2R+0B_8>-*cK~F+`eTMgX2X1tf(|U|pri%Vo%k0g^Xhm|B50 zrx$I`8+ZqNlZ8i6oGDk5A!i&3Qr0$qcZ@|+EmGNio-RWqCp_X|CZH-n_fWoA--q!v z2-TEHSc%V++mJ~dvA~G_?;eSsL+UYbWWkR4Mpw)q>?gdZ@VqMnH8$W|s({}@!rJo* zz^nEk-|J+RMt-SJd75CaNH)NhwS6w9txZ1^9%i$tj*`jTMmwyI!9|(1fv*xIg%+T( zM-> `TEEp4K%G$=r2sg(y+LC?||lM#KP>#Y?7#x ~Z@FZXMisalP^rXs2p zbAmUl%_gv54QSHNf}i&{;~doEOOf1nN<-F;vZiZP;b~B(nHeLOXoA)*WvHi=b=J5g z6=D15n{omjPQyQv1##@)Uf{-(&D&H(^pnkl$sY@dOZX;Vy3v;a79LPazJH0S9!k#{F(oRBtRO*~R1xdDIA;Oq@Onz> z0xhl7RyOrVU+yT`?vdhR`;ou;JO%i~|9$j%9%{h97ffi(<5{3=>JkTxUT%hCE&8lM zi8d{Akv!duqLNC`Yyz-f@QLgkrd 0=hc$yCr3@FLhR;!-Ii(MxzX(9;-PM5#HJK|;zb&?>qKGee{8h=oTw2xf^*0TD8E zcx5gXTIExyIq8OBCVlJxJCc%dDDT^_UH)?&f@t0onL_{`e4)%2#9n`88C1j<=>e=w zmTABm1I_F7kSt#Ov%o$dS)?op2o)KmB>;V~mts>Fvd04muz; j@K;4ryOpb?`xrzX94`y(r6viqFYF87uz{@3XO)VidRQmD z;L3ISr5J@77rY8geF=?fZ5b<4mMFPDd>azfr#197%v!FP#9fPmbZ~g{;<;pCi=4-c zO&-bM#k$Cm@fW}xcu`qaW^r;9iA`9w+QifR(g}2w?Mec&CRMd*t2qP8FkZRVU|S4B zyI}j55C35J_I4h{0M*cF9}6W^bAdAW?+xO1kmJh%wv2XBEFme3SOiQxhX}chaLb#8 z@EqoTs?zgo38>?GYF`Yh+8R%RqAmjHwg!2uIsH{91?Q+-GEdiSSbLh+#1aKuWDqUz z@`WJ0a<$NMPA`LdqzVn9o(L1PqD7$ OK>c3;^WGg-dj03#pI1wz%3?)=*Fz ze8iUm!>qx5$n1n#YsLUrv(Xh!QXB?vQZi= xfh_7dX2PS4OvqYz zevmoX^$A7?S#-spfK6n3KKxU}wgORw^$l94H-V8G5Iq~<*{seI(v#LUy%nfpNt!F5 zQPt!NPO?=MaS8hHc(8*h=@B{mr*C`TR)L&0R}nF 4E3QB{od+C3MvrblWguwy++r z4^(xEP6!sKbCHG1{FHsdrv$_+Y!VdeAy)|%@ 2P~NwS zb(}mANl_|$Sh7NmEjgpvjo8T|auLJ_`IvkR)R&CN0r}ppnkqm<8KIgjrQV3XX5SbC zL<|v_LHH&{TjRD)Gkjz4u`OI`MW@ISz5Lh*;%mJ6 nb^cVycI0S_zAlWs;`;IT84wi;Ll?=PR4BrFh zU$t@-=lO6BO>=`yS^LL-ZIFa%75m8-q~AzlfnE|py%1%30sfV)s0w-_m}Eef(yO*I zP_j)d6&aEe 1 uT-7;7 zfttrOr7JPoo&tPSXT&7=q>#%<7!4v{jUz{2zWW4fLp1|Hbed!hSN%^FVg2<6Bq~&s zAWDif-k?kqu}LkP6jnZ7xg#EFe^7!AtPcgVrmO{elM@g(1QU&^wrU~3hFR;{0V`oY z-?` zc=?TLwh46TGHZ>B8t{Rn{fiQqAr>=$%z-&wx!>p~*H}Q8r_zPAm)+0>Z?fGd6wulw zGkrY31ICDRBn25Hjq7|~AZ0cHX;3e`EDLHL+?7>p5!YB%(ig03qFPY^i&punm6Gud zC#L!82~p|=z;xCTA(PXB%Ahg5FxfyzM4;fgEOVn_hK39eOAj&<<|4Y(jaUF=b1OmD z5OO_UFp}+~8Ed^zBH+1l-lT*=kh-Q?Y-ExIO%6q4X&5ByCW!DGZ=oSrLdyM=@Mm>H zpkkWpn<(&r6cU+%pixuUpD4k8?F0Lv(cipW09ZtXmnV5?s)Z;?{Ow1Wt5v_``NAxm zvm!h^f$FiN3#;6e=LK)ch%U@?5EwENjdfRmPM kR_M}fXuMnYi**UBX- fwkx;A72jRpkISgIP) zjz#iWyV`oK)D$O1f|SF|56bc{c=-7Z60Kf(L1GfI$d?2p!1drd;ciEi%h`mT3i6-e ze?BH#XDDd`UupkfN_-g(+f0?!0A5ZpFlC#3l7Ep+Kmw^>CEK&^W@z#=$vY#;lVB1h z(2$Q}rN+`^AJ#&6@xaNDDluSvK2MNd&KSW!e;v_^WC+c*3wGq%+Ss|7jD6?Ow==Zc z>1(ZSe}!VqZ#|hs4d$|y$Mb(ifvc`BNJ9!G(#a>G1l;qZ0m{h{3SEguNqFHaAp0D* z >?in+nyW8Us5NDzC#|+Egi%tF5FS%{q;8?5(2h%)38q5p z8J0=&o+17jRp~4$@Q)1OdPQy*UWGH|%TcZMIwO3LZuMq1fEx)^O?_as1QZ)9F}C3T z;=jKNknx40a1W|WnlxY<7wU^m2sQeMC5CMNTC`O0x 5%h+Wdu%Eh?3eLh87-#KLP=D)4HTa 8dQKrb(pff-jIAP6DhD7kX2TjNf_C+QiU`l~*_Y!2AZM|Rv zuoPX)NZYGii+WqC+hgBDs0j%%a&nU_P-o>8dD)1_Rn^ZGW;^v|23sZ4d6T7oQleMR zgpy_x*okH|6rr36m$zTrsyrQx(x4AT$*QJQP^j;jPXU|`g=chaLuSK^5;ad(?f?@B z8C? Szztk+E^yu ztLeU($<#N;V6jz=pjAaQfmSgT#I2csIGP{!_3e!GRDH7?K>VRDF`9ItbG{^~Ndd3V z8o*j }CE&K>rcinMIcm4I(yPI#mWv>1hF=E7s z5$hgskK1C4&D}QJY~wD!>Lz#R-S_w!fB&n1<2J4@-{kau#PN&y)TY!X`BcYaCEs@a zJuTeYAXEz^2*T7x70YGI=5wja2<5Ay)DZF!7?c_({9 7ndd%D^IE`lnwu3&W1wL<+miK?$E0KcXj zHCl-dXkDHNIAKM=decoeH|On$5hF&77|{XTJ8%!dy#)7^2!Ep?^uNCdU(SyxMFU`| z%jz{QF<1${z{(kV@c|$QtDy6%CIJ-iN7Hm=W!x-sE20c9Ua|p}w}{MWmd7&X%JrUw zH3fFbkagY}DJ(_v_S$Sg67d{~+C!HTj|J=If0Pf*lquK)w8{(pB4{2BI3I1Ye5t&^ zobYhLGcp =4t{DR%f9N1slo*4oCO~<@3$B`p2r}r}s0ATulW};vBb9Om9cc%_Rp2Q# z%b+YO4YoH11RuqdQ*9889Jn+EP=RF_DtJqSS0ELU$R|iRoKqE4$I6 5bZm5hF&77%>Fp;1rKumhLmP`;O3)*opHZ*UA@q ~kLkum1&nmt2ziR$~@)*o#Pe(8Ng zNiG SdscNnP5( Ljg{Y>yI!c_at!sVJq-9+E3)|zX6j?Dt^Mp3M7 wE37WPLwPq4=a<_weX?wdgQyo3nT-b&(p zd}*Le1wGa@bX9>i%B}fSLzG2y%dQz_w|OA866ED}4C7uJ;Q8rOD^mB47%^hRh!N`) za2t# mZmPIWKBvk0#L<@d@2CWWVVVVrulvgpF!r2P;Zzlf2cRtB3dh O_(6-HA4;TP7Gr(%*4xyYH5coNhw2tkQCK*oy&3dM&3@W7J3i7~^dM%L} z@@VS|9K>=;c>xwD*@&Del*>VI6C{!TN8Vbi65U#(dGKXc=1sNCY@U~CS-TNUl!jr% zh!G=3j9BJCK+1tDVu5h4%Y)Ad4PXJpOer4(fFOb(w+$=y*zb^v8UvMA;bg;WJjQ^K z<4mLnpeHOt 1P%@9ztHhg2o?*@Qc5BoNWC5qsiGr7%gPb! znp&HPK9*paCk@k8s+HT4=LX0FT<}*9B?S~@6cHPVcqw;Hz*%Eq{vuXgewbAY+wBDV z?!LXd;DQT%X*mA(|Nj5nlb`%#Uy8W;>Z{#5-}x^0lb`&=Qx+b7`?r7N4nFu`_n!Cs zo%^r<`Y%t7c t6GkKXO-Hb(MS3i(c%h!|~7m{4u`vl`)jR3lDg}1Kb >@d6!({OA&HElzU=4S@ox|J`couvhV^RX?S4e0B!eh6A@~oLc*mk zgR2`n+>~o1%Q@#h{*ixl-~7)L-AjM_d7jb)#30qqAYbyL=ed*q^YiXI-}sXIE~hWM zZ~gZd+(-WDAKW7z{$OG9O<4vBd*9!^%YE;pueh(C_-Xf;;~yoJ15makLc0z=NqGw` zD~HVug$AsmRdshG*CtXDOOzB~d*-iQ3PXKlM6RpZ@`3uRlqP^WX9+pz_S w zxJN$nSWd5f?dzD1KnelXVgei7i(mYrq8-nA)-%IKxh?>~sg8k72v`9GtJ4ImcoT5k zamV^nijREcqwdj b4^wsb!`>*wySyY6-e9 =3ME3leJtUJKR)8GB>cS8E+H&5b^l@$om zY`uP*tpG3D)aq+E|NQgavB#z-gun3{k8#&tdo2gFIjo(zjexEHkN^004t_0gstdaE zES10$cB{|Or!Ri-i|&IT{HM?l*p1UvwHpa#0M}!VIffrW_^ZEqSHmZLkdGfyK8995 z{095fwh<#nEG!VPzT_n@cK`4Xf1d=d$p7&lztO$%jc@D>TqPKlyE;Mv4N%KyzxzvD z$)|y9IldVFMJ%z ~ XdbWGiqmJWefVFQJi$e}Mg!_(14Dk2?o>l%o z|L67mIKU8~@6UP8bKKXy_O;*_Jmb3e-g_rweB_ZwhB<)wbKrpoa@~j#BNiT5uUB4q zB?qY*xN5+9#1Thu-PgYMpPsu8jX_EQtI}$LXMU4ZK8Vr4RcOuj!-LiaNGQw3)hNiz zEl{p~_TJOI?vH-oJ> jKG zc*DM%g3}vrxRL9CM;-TY8ju~`b=TkEesbCw?ias0k2m#04>`zl^at$Zb64)0Csa_a z(smu~TY+|dV6|8lCG{zY#_gq4H6gDEqBNsIkdUu7AjG`3T4#~FVVPo+O*V0Fdea|= z6S8-|`)~O~&b~88(1XB8zrcel0y_mBBUpd^^?k{4u=}{jJw7}KiQowVqy|f9|JAR4 zm34HT`dxV8Mf`Y>J|dvkGtc}PUlpKlzWL@XSMB`Nr#{WWHG(+=Ubxy|9Q6p~6p(T2 zt+z5=fjnq9-R*)sjl>t+tZ%zcY;h8*W1y)ks6XqhvwTiYPb}c;$3FIPg9FqO^6>=V ze>@Kj=o=k7#^A+su_H!|SR5cI{lh u@Ak^z5JywbQ@AI`t9%jz XbO}yphCUkTi^ON2Zt|y@rxV5 z76KZae_Lcx|BD1_Wmad;tWWS6p#L2uu|SoU!>`PJ4<%gX`_K+s^H}>n^;muDk9! zUn}(ph!xn_5wIh0S35O`?*jyE`h_N(L|We>=qvpSf}-?AthO&+;S(j>m;e6nuk%%d zWPLPXmeA8|$cG*T @d&6Q6PK{Hwq7way)K@csGp7SFi-{G4B~!qb2HGd^|QV#_UPpwcgL0EtaK z0Deg^C#CYg$m7w&xq-zD9D^z{iiZ_i;;1(CKxG?4NxsnVnzppOf>zb*0?_4Vx0gNi z1X54$^jXEnKmPII<6i_>3Iu;Ri3MFhHU>X}R}E-NK^X$PJ|}@V)x#d}>}Nl#_-H^I z5U} ?7XMO(o`%9!ebX_k;1wstI4MQ|k02j95RB_d>xdB}mM(1I+9zP; z0Mg&Q@uhYkKLwStz4=XgBh+>XTt(N)l@hKdj|W)w$fxE^hnhUl*t`jpU3Bp!?kUfF zzWdZ?K1;#wO82a1JSBOA;NcH@5I U*e0h@-_^i?+3@azOMRz9&ZWxq+9t*DYBm7va# #>W zTwn3)t2`xIeA7)gyAOQuqwbsE`kvclla1YPKmRw~G5E zi!XJnSFd)v?Y66X$V2qw%z1kug`BzyIN#zVROy5f;8_o!9RhAXX+LWUAurmcuOX*Z z8747*sX+UusfwJjD*<`gqDEgJ;7dIS-t;49zy=^Vy+bgnz+(gXH}&yxK7RQB10VPR z|AdzP(hdL_L%x}hfby`z4l6zy03eXXPh{zr!+_^L_qW_O+ib%pvj}`~J^uLPgHF`j zkN&m4&wJi;`3mTBs`;Z5T|n^O^+>=hk^58MY~b+-_zO3!X##QtsQQKgI`G9T{bK}> zk1@s bI ^Rt?yD`dZpWI&pq5b-|=Smr*Hb-d@}mThd+dW z&gvT{ecMa0kdwzx{@Z8W1s7h#C#%2poM*VFJ^2X~?C#Ew2K@WyzTjT+JFnvOVoHDd zmUmEq{A+&J^_ZiM5HX8@7`S$OnkNKJ2JS7hmpogbRYjwsreDiBy`-}RRo%-RSd=D} z|4H|2sTXRE^70&ze-R4_ft~&(Dg-1S{NRW9)Ku#c41MDp-{61{r*H_+@Fg65rWFY% znD2e>`&b9+aq@~UCux1#U%M&+0p}fe+);frKp#=SiL5@8iXaNVSfHoFIDtfa?JxRq z`Q?{$9ROQklkF?|gm2-Z4@(*78{Q;n-}Iw=eXK!Gr%^vi0B*+@GJg2OAM&FV`mAxz zgE{oeU;dKoMvNG-yr6+;jzBNmmj*@+omjEweuq|Xe|bf&yz9ORe(-QR->HB8(EB(j z&2h@9r@Q~}^?&A$JmOII@|XU$J7B+k_+30sL~$~TM*zO=gI4@StQS1@*?cnlqL=+X z=^!oi{|S#h!M*YoFXI!}OE0~gztnXJUH^oF)Qc{ 7Gh~?bTOb 1qb8R#CSg<+QDoKPmg*N{C`8Unu}UI1?iE382#S z0x->#b8uioDmj!gs=2(N2-cVFg?R{CS5q*i43 va-SJtT j%SScZ37LTiEpX6QERH2_>V#33%(o1C&LgYtP(t<6!I?T2aC=pG2#252x;kPFkY zT(yQvR9LYhe&=rzZGEw@LF=qB#BT57f;nT*I%25+&$;4{FzC-<0eB>23|L2uSU#u) ztubJ20q&Vq7KvDf+*M7`O3i95dj &XTAKkYZbnj0>)P*^5`* ^7mOHGzD^j|HrWeQQ`q1g<4sTw8m9N@bEp{;EhS2_ MczWure(y45hF&77_odHC#$|NH^@(Y#-J6U1e8Ma3<6f$QaaT9*fy6wnYI~* zK4d_0qB& 5rYw(xhM7Gh;68iXq_={{xtjUbD*c>^_TgO8B_Pz|Pv!S12 zj2JOu#E20&Bz~*kyR|;Q<;?3AWP(;;HbDiXu)W@D3BWiTF{Ah;_@&?=v4OMwL3Xtb z&}<;`6Vp&2e{rw@{h19li!58e76h)!9Rng#&0$IxzErx_<<|_RQBBK;8v1+ewma@} zTWqnpFO3*6V#J6MlL7Y<+*3*@9gav4>kBgkWJ31JS)P8WB<%-+)gb|3@wN;i1ZK{G z)Pz!0Q +*5MMy`^>v3tHcM56SSkK3K8)J_oO5<@~>{ zBsZaE5-aZ+@b$W(mUs}@`K;F%E-4TI`fLVBNc!uuxNwv3;!i(k3NcDeV>{?S555u; z7=BZ4S=C0dUu&d?)>~;Ke{Dc3qMQKOn6xViLAyxjocd4-#a6Sxg8h2HlpV;McUsI0 zcu`L8!-^dnuD`z9YKx8BrW 6J5hDYY!n`|2p&aLHcL3#jfKo~KwRwIbQe z4;R&k!SGp++1&i2?W~Lbv;Ql03QT`JD=e{1U|Y0YUxj8`3$&;W8qjt?%FJ}w8``Eq zV!H_Dh%a=Bw$2(0`a7*NnGX>vt!RDdlU}_K` |qC;M$Ay#PTZ zlD9I*rvy?-zOf{M@}geMwVY9snD6Uszm(sQbUc;czQRIZEn<9LF7%2Fv)a8PU2XH5 z=>nEMScNobG*g1_Q|P>f@0{(Ug%uH67sPbKG@4FO1!N)q)4+vpHjMTJriF?C{I$k; z?KQlgm;Aqk(A9TT*SerB+j
E8bG@KB2eG)oz*;8 zLw=C?UOCw$B7)5>eNrzxrN4rOYW6v2Jh>IJXSQpNdij}F6qul`eCPTk8UbUNRSTk~ zra4VY1*{`WQXw+5SVBu3ZYD`}gI9bajuNaXe3@)GpjrO05Ah2D6NoG|Y0^qu(w}yf zWEZ^(XF5{c&iEvk)Gk+$N?gX^`RMagqUsaKpI8T^QsT8O3G>+otPCTc)$tq`{)tsv zKotqXrpa1GN!5MeQ9fJG&5+nW*?i;r6dM2IdWF^lrazu+Wq}5ASf4D5+1Opai3e2# zJz|HLqOIlM(nRn=gqn(OmFfp#`kuoEZ%4>ZZ&w6ah%s9UOIxg+z9S kpk^m;=x1$44t7@pkPiv3p>%axz=lP XVgzMDXrH1K1%OJUF?H zPxFFxZ=06XgnUqJ&rp|2N~c-hz6f89yRVeR2JDQ9US}|tR;Fa=h2;inf_$`uk|%og zb2p?sU iPMozqHZUV25aEl>`Fga9AoDiZYHvVk|X(Z>QxJbl^?hw&e0XYEh2ng>ni$B2bO zuldqC=5f8{vg97?3k2}V>J`q;`!D#Z5!QZO|Fc1E>pX$|hXYnF#eFY83*IR4XBo2R zDg!l4{GxPSM=gS;!rJ`T10pcM;YNo)!5IwpDKCcv 1XtCSoh) zUskvBPH qtT6u1SsrckdHSo?&b7Fl4l8+up?t-lVz z!B%1v-nj9y%eCO?lFL8@)S>?oDHnfqM%R=_fty$4Ne~V25I?j0P}OL)1W>jqj#bGI zDSR&%01MzhtPMVO9Wf8s5k$VPr?Hg!jJ^b+Rx0w?GfZnD35UGKs yhQ_gaW zepsk^hQ8yI+_0w^wYmLui=-y*i{gbf<~QVlP>pNVIa7I!U(u&((3%6cJ2qU6n-tTw zXVg2-TkZhgB<2ihO1^+U*d>%Sh-E+NKjrcNW`VkWkT13Jn(3=FWOAs}Onz0QGEp1* zmGfq>)fLv+cxYjf_MTqtCfNsI=cJi_h}<*+v Yp)DIGie}!tLd2R7sJ8(R8RH2?aZKd_6?A2zf$8Q=#{-y=m=P=W~rE}+DSYH zKj2l`_6}OX9@Itq`y;ezYbZC3^k391NoZwIO}%meh6wQ;!@xEYlR1U{BMnARdpujN zA}On=q8%jzOS)4U^^{+0b{17tc$Xuzf9MhSD%k)kh|HSl3GZu~RN*wW;$gr_SFR>^ zx~9AaPP*POpLrtlMxFB4z`E5J5M~f0WONIwL)H+2XQ86cocHa;ruZ=-vr9IBTZ$m$ z{59o*xv*K+Zw-*8!7K98P0ob`83=&ccMWS=pzJoafprf>m(Uqt8Wq-+y)n2!0c3O- z_yzFMGR3rB?ryIf?duSb`WlnS;r)UZsSVE1E*2{m8L_gCom=gLSKcF-G90~HP9Pk; zsO`B86uXQ@u_E2O$bW@^RsAB@iXRzS!vt-0K&