From 4c73456fc1f5df8ebb3a89d9db657c3c54624d66 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 14 Dec 2022 10:00:32 +0100 Subject: [PATCH] Move highlighting into new IDE module --- Cargo.lock | 1 - Cargo.toml | 1 - library/src/text/raw.rs | 108 ++++++--- src/geom/paint.rs | 14 -- src/ide/highlight.rs | 308 ++++++++++++++++++++++++++ src/ide/mod.rs | 5 + src/lib.rs | 1 + src/syntax/highlight.rs | 445 -------------------------------------- src/syntax/mod.rs | 1 - src/syntax/tokens.rs | 4 +- tests/ref/math/syntax.png | Bin 53524 -> 53626 bytes tests/src/benches.rs | 12 - 12 files changed, 392 insertions(+), 508 deletions(-) create mode 100644 src/ide/highlight.rs create mode 100644 src/ide/mod.rs delete mode 100644 src/syntax/highlight.rs diff --git a/Cargo.lock b/Cargo.lock index 9de15487b..56ef09769 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1150,7 +1150,6 @@ dependencies = [ "siphasher", "subsetter", "svg2pdf", - "syntect", "thin-vec", "tiny-skia", "ttf-parser 0.17.1", diff --git a/Cargo.toml b/Cargo.toml index 5a7a15e85..f38fc9972 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,6 @@ serde = { version = "1", features = ["derive"] } siphasher = "0.3" subsetter = "0.1" svg2pdf = "0.4" -syntect = { version = "5", default-features = false, features = ["default-syntaxes", "regex-fancy"] } thin-vec = "0.2" tiny-skia = "0.6.2" ttf-parser = "0.17" diff --git a/library/src/text/raw.rs b/library/src/text/raw.rs index 7c1e36001..21a0531af 100644 --- a/library/src/text/raw.rs +++ b/library/src/text/raw.rs @@ -1,10 +1,6 @@ use once_cell::sync::Lazy; -use syntect::easy::HighlightLines; -use syntect::highlighting::{ - Color, FontStyle, Style, StyleModifier, Theme, ThemeItem, ThemeSettings, -}; -use syntect::parsing::SyntaxSet; -use typst::syntax; +use syntect::highlighting as synt; +use typst::syntax::{self, LinkedNode}; use super::{FontFamily, Hyphenate, LinebreakNode, TextNode}; use crate::layout::BlockNode; @@ -61,8 +57,8 @@ impl Show for RawNode { let foreground = THEME .settings .foreground - .map(Color::from) - .unwrap_or(Color::BLACK) + .map(to_typst) + .map_or(Color::BLACK, Color::from) .into(); let mut realized = if matches!(lang.as_deref(), Some("typ" | "typst" | "typc")) { @@ -72,16 +68,22 @@ impl Show for RawNode { }; let mut seq = vec![]; - syntax::highlight::highlight_themed(&root, &THEME, |range, style| { - seq.push(styled(&self.text[range], foreground, style)); - }); + let highlighter = synt::Highlighter::new(&THEME); + highlight_themed( + &LinkedNode::new(&root), + vec![], + &highlighter, + &mut |node, style| { + seq.push(styled(&self.text[node.range()], foreground, style)); + }, + ); Content::sequence(seq) } else if let Some(syntax) = lang.and_then(|token| SYNTAXES.find_syntax_by_token(&token)) { let mut seq = vec![]; - let mut highlighter = HighlightLines::new(syntax, &THEME); + let mut highlighter = syntect::easy::HighlightLines::new(syntax, &THEME); for (i, line) in self.text.lines().enumerate() { if i != 0 { seq.push(LinebreakNode { justify: false }.pack()); @@ -113,54 +115,90 @@ impl Show for RawNode { } } +/// Highlight a syntax node in a theme by calling `f` with ranges and their +/// styles. +fn highlight_themed( + node: &LinkedNode, + scopes: Vec, + highlighter: &synt::Highlighter, + f: &mut F, +) where + F: FnMut(&LinkedNode, synt::Style), +{ + if node.children().len() == 0 { + let style = highlighter.style_for_stack(&scopes); + f(node, style); + return; + } + + for child in node.children() { + let mut scopes = scopes.clone(); + if let Some(tag) = typst::ide::highlight(&child) { + scopes.push(syntect::parsing::Scope::new(tag.tm_scope()).unwrap()) + } + highlight_themed(&child, scopes, highlighter, f); + } +} + /// Style a piece of text with a syntect style. -fn styled(piece: &str, foreground: Paint, style: Style) -> Content { +fn styled(piece: &str, foreground: Paint, style: synt::Style) -> Content { let mut body = TextNode::packed(piece); - let paint = style.foreground.into(); + let paint = to_typst(style.foreground).into(); if paint != foreground { body = body.styled(TextNode::FILL, paint); } - if style.font_style.contains(FontStyle::BOLD) { + if style.font_style.contains(synt::FontStyle::BOLD) { body = body.strong(); } - if style.font_style.contains(FontStyle::ITALIC) { + if style.font_style.contains(synt::FontStyle::ITALIC) { body = body.emph(); } - if style.font_style.contains(FontStyle::UNDERLINE) { + if style.font_style.contains(synt::FontStyle::UNDERLINE) { body = body.underlined(); } body } +fn to_typst(synt::Color { r, g, b, a }: synt::Color) -> RgbaColor { + RgbaColor { r, g, b, a } +} + +fn to_syn(RgbaColor { r, g, b, a }: RgbaColor) -> synt::Color { + synt::Color { r, g, b, a } +} + /// The syntect syntax definitions. -static SYNTAXES: Lazy = Lazy::new(|| SyntaxSet::load_defaults_newlines()); +static SYNTAXES: Lazy = + Lazy::new(|| syntect::parsing::SyntaxSet::load_defaults_newlines()); /// The default theme used for syntax highlighting. -#[rustfmt::skip] -pub static THEME: Lazy = Lazy::new(|| Theme { +pub static THEME: Lazy = Lazy::new(|| synt::Theme { name: Some("Typst Light".into()), author: Some("The Typst Project Developers".into()), - settings: ThemeSettings::default(), + settings: synt::ThemeSettings::default(), scopes: vec![ item("comment", Some("#8a8a8a"), None), item("constant.character.escape", Some("#1d6c76"), None), - item("constant.character.shortcut", Some("#1d6c76"), None), - item("markup.bold", None, Some(FontStyle::BOLD)), - item("markup.italic", None, Some(FontStyle::ITALIC)), - item("markup.underline", None, Some(FontStyle::UNDERLINE)), + item("markup.bold", None, Some(synt::FontStyle::BOLD)), + item("markup.italic", None, Some(synt::FontStyle::ITALIC)), + item("markup.underline", None, Some(synt::FontStyle::UNDERLINE)), item("markup.raw", Some("#818181"), None), item("string.other.math.typst", None, None), item("punctuation.definition.math", Some("#298e0d"), None), item("keyword.operator.math", Some("#1d6c76"), None), - item("markup.heading, entity.name.section", None, Some(FontStyle::BOLD)), - item("markup.heading.typst", None, Some(FontStyle::BOLD | FontStyle::UNDERLINE)), + item("markup.heading, entity.name.section", None, Some(synt::FontStyle::BOLD)), + item( + "markup.heading.typst", + None, + Some(synt::FontStyle::BOLD | synt::FontStyle::UNDERLINE), + ), item("punctuation.definition.list", Some("#8b41b1"), None), - item("markup.list.term", None, Some(FontStyle::BOLD)), + item("markup.list.term", None, Some(synt::FontStyle::BOLD)), item("entity.name.label, markup.other.reference", Some("#1d6c76"), None), item("keyword, constant.language, variable.language", Some("#d73a49"), None), item("storage.type, storage.modifier", Some("#d73a49"), None), @@ -169,17 +207,21 @@ pub static THEME: Lazy = Lazy::new(|| Theme { item("entity.name, variable.function, support", Some("#4b69c6"), None), item("support.macro", Some("#16718d"), None), item("meta.annotation", Some("#301414"), None), - item("entity.other, meta.interpolation, constant.symbol.typst", Some("#8b41b1"), None), + item("entity.other, meta.interpolation", Some("#8b41b1"), None), item("invalid", Some("#ff0000"), None), ], }); /// Create a syntect theme item. -fn item(scope: &str, color: Option<&str>, font_style: Option) -> ThemeItem { - ThemeItem { +fn item( + scope: &str, + color: Option<&str>, + font_style: Option, +) -> synt::ThemeItem { + synt::ThemeItem { scope: scope.parse().unwrap(), - style: StyleModifier { - foreground: color.map(|s| s.parse::().unwrap().into()), + style: synt::StyleModifier { + foreground: color.map(|s| to_syn(s.parse::().unwrap())), background: None, font_style, }, diff --git a/src/geom/paint.rs b/src/geom/paint.rs index 58b034ae8..b4064438b 100644 --- a/src/geom/paint.rs +++ b/src/geom/paint.rs @@ -1,7 +1,5 @@ use std::str::FromStr; -use syntect::highlighting::Color as SynColor; - use super::*; /// How a fill or stroke should be painted. @@ -261,18 +259,6 @@ impl FromStr for RgbaColor { } } -impl From for RgbaColor { - fn from(SynColor { r, g, b, a }: SynColor) -> Self { - Self { r, g, b, a } - } -} - -impl From for SynColor { - fn from(RgbaColor { r, g, b, a }: RgbaColor) -> Self { - Self { r, g, b, a } - } -} - impl Debug for RgbaColor { fn fmt(&self, f: &mut Formatter) -> fmt::Result { if f.alternate() { diff --git a/src/ide/highlight.rs b/src/ide/highlight.rs new file mode 100644 index 000000000..75539a3b7 --- /dev/null +++ b/src/ide/highlight.rs @@ -0,0 +1,308 @@ +//! Syntax highlighting for Typst source code. + +use crate::syntax::{LinkedNode, SyntaxKind}; + +/// Syntax highlighting categories. +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] +pub enum Category { + /// A line or block comment. + Comment, + /// Punctuation in code. + Punctuation, + /// An escape sequence, shorthand or symbol notation. + Escape, + /// Strong markup. + Strong, + /// Emphasized markup. + Emph, + /// A hyperlink. + Link, + /// Raw text. + Raw, + /// A label. + Label, + /// A reference to a label. + Ref, + /// A section heading. + Heading, + /// A marker of a list, enumeration, or description list. + ListMarker, + /// A term in a description list. + ListTerm, + /// The delimiters of a math formula. + MathDelimiter, + /// An operator with special meaning in a math formula. + MathOperator, + /// A keyword. + Keyword, + /// An operator in code. + Operator, + /// A numeric literal. + Number, + /// A string literal. + String, + /// A function or method name. + Function, + /// An interpolated variable in markup or math. + Interpolated, + /// A syntax error. + Error, +} + +impl Category { + /// Return the recommended TextMate grammar scope for the given highlighting + /// category. + pub fn tm_scope(&self) -> &'static str { + match self { + Self::Comment => "comment.typst", + Self::Punctuation => "punctuation.typst", + Self::Escape => "constant.character.escape.typst", + Self::Strong => "markup.bold.typst", + Self::Emph => "markup.italic.typst", + Self::Link => "markup.underline.link.typst", + Self::Raw => "markup.raw.typst", + Self::MathDelimiter => "punctuation.definition.math.typst", + Self::MathOperator => "keyword.operator.math.typst", + Self::Heading => "markup.heading.typst", + Self::ListMarker => "punctuation.definition.list.typst", + Self::ListTerm => "markup.list.term.typst", + Self::Label => "entity.name.label.typst", + Self::Ref => "markup.other.reference.typst", + Self::Keyword => "keyword.typst", + Self::Operator => "keyword.operator.typst", + Self::Number => "constant.numeric.typst", + Self::String => "string.quoted.double.typst", + Self::Function => "entity.name.function.typst", + Self::Interpolated => "meta.interpolation.typst", + Self::Error => "invalid.typst", + } + } +} + +/// Highlight a linked syntax node. +/// +/// Produces a highlighting category or `None` if the node should not be +/// highlighted. +pub fn highlight(node: &LinkedNode) -> Option { + match node.kind() { + SyntaxKind::LineComment => Some(Category::Comment), + SyntaxKind::BlockComment => Some(Category::Comment), + SyntaxKind::Space { .. } => None, + + SyntaxKind::LeftBrace => Some(Category::Punctuation), + SyntaxKind::RightBrace => Some(Category::Punctuation), + SyntaxKind::LeftBracket => Some(Category::Punctuation), + SyntaxKind::RightBracket => Some(Category::Punctuation), + SyntaxKind::LeftParen => Some(Category::Punctuation), + SyntaxKind::RightParen => Some(Category::Punctuation), + SyntaxKind::Comma => Some(Category::Punctuation), + SyntaxKind::Semicolon => Some(Category::Punctuation), + SyntaxKind::Colon => Some(Category::Punctuation), + SyntaxKind::Star => match node.parent_kind() { + Some(SyntaxKind::Strong) => None, + _ => Some(Category::Operator), + }, + SyntaxKind::Underscore => match node.parent_kind() { + Some(SyntaxKind::Script) => Some(Category::MathOperator), + _ => None, + }, + SyntaxKind::Dollar => Some(Category::MathDelimiter), + SyntaxKind::Plus => Some(match node.parent_kind() { + Some(SyntaxKind::EnumItem) => Category::ListMarker, + _ => Category::Operator, + }), + SyntaxKind::Minus => Some(match node.parent_kind() { + Some(SyntaxKind::ListItem) => Category::ListMarker, + _ => Category::Operator, + }), + SyntaxKind::Slash => Some(match node.parent_kind() { + Some(SyntaxKind::DescItem) => Category::ListMarker, + Some(SyntaxKind::Frac) => Category::MathOperator, + _ => Category::Operator, + }), + SyntaxKind::Hat => Some(Category::MathOperator), + SyntaxKind::Amp => Some(Category::MathOperator), + SyntaxKind::Dot => Some(Category::Punctuation), + SyntaxKind::Eq => match node.parent_kind() { + Some(SyntaxKind::Heading) => None, + _ => Some(Category::Operator), + }, + SyntaxKind::EqEq => Some(Category::Operator), + SyntaxKind::ExclEq => Some(Category::Operator), + SyntaxKind::Lt => Some(Category::Operator), + SyntaxKind::LtEq => Some(Category::Operator), + SyntaxKind::Gt => Some(Category::Operator), + SyntaxKind::GtEq => Some(Category::Operator), + SyntaxKind::PlusEq => Some(Category::Operator), + SyntaxKind::HyphEq => Some(Category::Operator), + SyntaxKind::StarEq => Some(Category::Operator), + SyntaxKind::SlashEq => Some(Category::Operator), + SyntaxKind::Dots => Some(Category::Operator), + SyntaxKind::Arrow => Some(Category::Operator), + + SyntaxKind::Not => Some(Category::Keyword), + SyntaxKind::And => Some(Category::Keyword), + SyntaxKind::Or => Some(Category::Keyword), + SyntaxKind::None => Some(Category::Keyword), + SyntaxKind::Auto => Some(Category::Keyword), + SyntaxKind::Let => Some(Category::Keyword), + SyntaxKind::Set => Some(Category::Keyword), + SyntaxKind::Show => Some(Category::Keyword), + SyntaxKind::If => Some(Category::Keyword), + SyntaxKind::Else => Some(Category::Keyword), + SyntaxKind::For => Some(Category::Keyword), + SyntaxKind::In => Some(Category::Keyword), + SyntaxKind::While => Some(Category::Keyword), + SyntaxKind::Break => Some(Category::Keyword), + SyntaxKind::Continue => Some(Category::Keyword), + SyntaxKind::Return => Some(Category::Keyword), + SyntaxKind::Import => Some(Category::Keyword), + SyntaxKind::Include => Some(Category::Keyword), + SyntaxKind::From => Some(Category::Keyword), + + SyntaxKind::Markup { .. } + if node.parent_kind() == Some(&SyntaxKind::DescItem) + && node.next_sibling_kind() == Some(&SyntaxKind::Colon) => + { + Some(Category::ListTerm) + } + SyntaxKind::Markup { .. } => None, + + SyntaxKind::Text(_) => None, + SyntaxKind::Linebreak => Some(Category::Escape), + SyntaxKind::Escape(_) => Some(Category::Escape), + SyntaxKind::Shorthand(_) => Some(Category::Escape), + SyntaxKind::Symbol(_) => Some(Category::Escape), + SyntaxKind::SmartQuote { .. } => None, + SyntaxKind::Strong => Some(Category::Strong), + SyntaxKind::Emph => Some(Category::Emph), + SyntaxKind::Raw(_) => Some(Category::Raw), + SyntaxKind::Link(_) => Some(Category::Link), + SyntaxKind::Label(_) => Some(Category::Label), + SyntaxKind::Ref(_) => Some(Category::Ref), + SyntaxKind::Heading => Some(Category::Heading), + SyntaxKind::ListItem => None, + SyntaxKind::EnumItem => None, + SyntaxKind::EnumNumbering(_) => Some(Category::ListMarker), + SyntaxKind::DescItem => None, + SyntaxKind::Math => None, + SyntaxKind::Atom(_) => None, + SyntaxKind::Script => None, + SyntaxKind::Frac => None, + SyntaxKind::AlignPoint => None, + + SyntaxKind::Ident(_) => match node.parent_kind() { + Some( + SyntaxKind::Markup { .. } + | SyntaxKind::Math + | SyntaxKind::Script + | SyntaxKind::Frac, + ) => Some(Category::Interpolated), + Some(SyntaxKind::FuncCall) => Some(Category::Function), + Some(SyntaxKind::MethodCall) if node.prev_sibling().is_some() => { + Some(Category::Function) + } + Some(SyntaxKind::Closure) if node.prev_sibling().is_none() => { + Some(Category::Function) + } + Some(SyntaxKind::SetRule) => Some(Category::Function), + Some(SyntaxKind::ShowRule) + if node.prev_sibling_kind() == Some(&SyntaxKind::Show) => + { + Some(Category::Function) + } + _ => None, + }, + SyntaxKind::Bool(_) => Some(Category::Keyword), + SyntaxKind::Int(_) => Some(Category::Number), + SyntaxKind::Float(_) => Some(Category::Number), + SyntaxKind::Numeric(_, _) => Some(Category::Number), + SyntaxKind::Str(_) => Some(Category::String), + SyntaxKind::CodeBlock => None, + SyntaxKind::ContentBlock => None, + SyntaxKind::Parenthesized => None, + SyntaxKind::Array => None, + SyntaxKind::Dict => None, + SyntaxKind::Named => None, + SyntaxKind::Keyed => None, + SyntaxKind::Unary => None, + SyntaxKind::Binary => None, + SyntaxKind::FieldAccess => None, + SyntaxKind::FuncCall => None, + SyntaxKind::MethodCall => None, + SyntaxKind::Args => None, + SyntaxKind::Spread => None, + SyntaxKind::Closure => None, + SyntaxKind::Params => None, + SyntaxKind::LetBinding => None, + SyntaxKind::SetRule => None, + SyntaxKind::ShowRule => None, + SyntaxKind::Conditional => None, + SyntaxKind::WhileLoop => None, + SyntaxKind::ForLoop => None, + SyntaxKind::ForPattern => None, + SyntaxKind::ModuleImport => None, + SyntaxKind::ImportItems => None, + SyntaxKind::ModuleInclude => None, + SyntaxKind::LoopBreak => None, + SyntaxKind::LoopContinue => None, + SyntaxKind::FuncReturn => None, + + SyntaxKind::Error(_, _) => Some(Category::Error), + } +} + +#[cfg(test)] +mod tests { + use std::ops::Range; + + use super::*; + use crate::syntax::Source; + + #[test] + fn test_highlighting() { + use Category::*; + + #[track_caller] + fn test(text: &str, goal: &[(Range, Category)]) { + let mut vec = vec![]; + let source = Source::detached(text); + highlight_tree(&mut vec, &LinkedNode::new(source.root())); + assert_eq!(vec, goal); + } + + fn highlight_tree(tags: &mut Vec<(Range, Category)>, node: &LinkedNode) { + if let Some(tag) = highlight(node) { + tags.push((node.range(), tag)); + } + + for child in node.children() { + highlight_tree(tags, &child); + } + } + + test("= *AB*", &[(0..6, Heading), (2..6, Strong)]); + + test( + "#f(x + 1)", + &[ + (0..2, Function), + (2..3, Punctuation), + (5..6, Operator), + (7..8, Number), + (8..9, Punctuation), + ], + ); + + test( + "#let f(x) = x", + &[ + (0..4, Keyword), + (5..6, Function), + (6..7, Punctuation), + (8..9, Punctuation), + (10..11, Operator), + ], + ); + } +} diff --git a/src/ide/mod.rs b/src/ide/mod.rs new file mode 100644 index 000000000..a4b1cba5d --- /dev/null +++ b/src/ide/mod.rs @@ -0,0 +1,5 @@ +//! Capabilities for IDE support. + +mod highlight; + +pub use highlight::*; diff --git a/src/lib.rs b/src/lib.rs index 7b903d4eb..631f10423 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,6 +42,7 @@ pub mod model; pub mod doc; pub mod export; pub mod font; +pub mod ide; pub mod image; pub mod syntax; diff --git a/src/syntax/highlight.rs b/src/syntax/highlight.rs deleted file mode 100644 index f9f359442..000000000 --- a/src/syntax/highlight.rs +++ /dev/null @@ -1,445 +0,0 @@ -//! Syntax highlighting for Typst source code. - -use std::fmt::Write; -use std::ops::Range; - -use syntect::highlighting::{Color, FontStyle, Highlighter, Style, Theme}; -use syntect::parsing::Scope; - -use super::{parse, SyntaxKind, SyntaxNode}; - -/// Highlight source text into a standalone HTML document. -pub fn highlight_html(text: &str, theme: &Theme) -> String { - let mut buf = String::new(); - buf.push_str("\n"); - buf.push_str("\n"); - buf.push_str("\n"); - buf.push_str(" \n"); - buf.push_str("\n"); - buf.push_str("\n"); - buf.push_str(&highlight_pre(text, theme)); - buf.push_str("\n\n"); - buf.push_str("\n"); - buf -} - -/// Highlight source text into an HTML pre element. -pub fn highlight_pre(text: &str, theme: &Theme) -> String { - let mut buf = String::new(); - buf.push_str("
\n");
-
-    let root = parse(text);
-    highlight_themed(&root, theme, |range, style| {
-        let styled = style != Style::default();
-        if styled {
-            buf.push_str("");
-        }
-
-        buf.push_str(&text[range]);
-
-        if styled {
-            buf.push_str("");
-        }
-    });
-
-    buf.push_str("\n
"); - buf -} - -/// Highlight a syntax node in a theme by calling `f` with ranges and their -/// styles. -pub fn highlight_themed(root: &SyntaxNode, theme: &Theme, mut f: F) -where - F: FnMut(Range, Style), -{ - fn process( - mut offset: usize, - node: &SyntaxNode, - scopes: Vec, - highlighter: &Highlighter, - f: &mut F, - ) where - F: FnMut(Range, Style), - { - if node.children().len() == 0 { - let range = offset..offset + node.len(); - let style = highlighter.style_for_stack(&scopes); - f(range, style); - return; - } - - for (i, child) in node.children().enumerate() { - let mut scopes = scopes.clone(); - if let Some(category) = Category::determine(child, node, i) { - scopes.push(Scope::new(category.tm_scope()).unwrap()) - } - process(offset, child, scopes, highlighter, f); - offset += child.len(); - } - } - - let highlighter = Highlighter::new(theme); - process(0, root, vec![], &highlighter, &mut f); -} - -/// Highlight a syntax node by calling `f` with ranges overlapping `within` and -/// their categories. -pub fn highlight_categories(root: &SyntaxNode, within: Range, mut f: F) -where - F: FnMut(Range, Category), -{ - fn process(mut offset: usize, node: &SyntaxNode, range: Range, f: &mut F) - where - F: FnMut(Range, Category), - { - for (i, child) in node.children().enumerate() { - let span = offset..offset + child.len(); - if range.start <= span.end && range.end >= span.start { - if let Some(category) = Category::determine(child, node, i) { - f(span, category); - } - process(offset, child, range.clone(), f); - } - offset += child.len(); - } - } - - process(0, root, within, &mut f) -} - -/// The syntax highlighting category of a node. -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -pub enum Category { - /// A line or block comment. - Comment, - /// A square bracket, parenthesis or brace. - Bracket, - /// Punctuation in code. - Punctuation, - /// An escape sequence. - Escape, - /// An easily typable shortcut to a unicode codepoint. - Shorthand, - /// Symbol notation. - Symbol, - /// A smart quote. - SmartQuote, - /// Strong markup. - Strong, - /// Emphasized markup. - Emph, - /// A hyperlink. - Link, - /// Raw text. - Raw, - /// A label. - Label, - /// A reference. - Ref, - /// A section heading. - Heading, - /// A full item of a list, enumeration or description list. - ListItem, - /// A marker of a list, enumeration, or description list. - ListMarker, - /// A term in a description list. - ListTerm, - /// The delimiters of a math formula. - MathDelimiter, - /// An operator with special meaning in a math formula. - MathOperator, - /// A keyword. - Keyword, - /// A literal defined by a keyword like `none`, `auto` or a boolean. - KeywordLiteral, - /// An operator symbol. - Operator, - /// A numeric literal. - Number, - /// A string literal. - String, - /// A function or method name. - Function, - /// An interpolated variable in markup or math. - Interpolated, - /// A syntax error. - Error, -} - -impl Category { - /// Determine the highlighting category of a node given its parent and its - /// index in its siblings. - pub fn determine( - child: &SyntaxNode, - parent: &SyntaxNode, - i: usize, - ) -> Option { - match child.kind() { - SyntaxKind::LineComment => Some(Category::Comment), - SyntaxKind::BlockComment => Some(Category::Comment), - SyntaxKind::Space { .. } => None, - - SyntaxKind::LeftBrace => Some(Category::Bracket), - SyntaxKind::RightBrace => Some(Category::Bracket), - SyntaxKind::LeftBracket => Some(Category::Bracket), - SyntaxKind::RightBracket => Some(Category::Bracket), - SyntaxKind::LeftParen => Some(Category::Bracket), - SyntaxKind::RightParen => Some(Category::Bracket), - SyntaxKind::Comma => Some(Category::Punctuation), - SyntaxKind::Semicolon => Some(Category::Punctuation), - SyntaxKind::Colon => Some(Category::Punctuation), - SyntaxKind::Star => match parent.kind() { - SyntaxKind::Strong => None, - _ => Some(Category::Operator), - }, - SyntaxKind::Underscore => match parent.kind() { - SyntaxKind::Script => Some(Category::MathOperator), - _ => None, - }, - SyntaxKind::Dollar => Some(Category::MathDelimiter), - SyntaxKind::Plus => Some(match parent.kind() { - SyntaxKind::EnumItem => Category::ListMarker, - _ => Category::Operator, - }), - SyntaxKind::Minus => Some(match parent.kind() { - SyntaxKind::ListItem => Category::ListMarker, - _ => Category::Operator, - }), - SyntaxKind::Slash => Some(match parent.kind() { - SyntaxKind::DescItem => Category::ListMarker, - SyntaxKind::Frac => Category::MathOperator, - _ => Category::Operator, - }), - SyntaxKind::Hat => Some(Category::MathOperator), - SyntaxKind::Amp => Some(Category::MathOperator), - SyntaxKind::Dot => Some(Category::Punctuation), - SyntaxKind::Eq => match parent.kind() { - SyntaxKind::Heading => None, - _ => Some(Category::Operator), - }, - SyntaxKind::EqEq => Some(Category::Operator), - SyntaxKind::ExclEq => Some(Category::Operator), - SyntaxKind::Lt => Some(Category::Operator), - SyntaxKind::LtEq => Some(Category::Operator), - SyntaxKind::Gt => Some(Category::Operator), - SyntaxKind::GtEq => Some(Category::Operator), - SyntaxKind::PlusEq => Some(Category::Operator), - SyntaxKind::HyphEq => Some(Category::Operator), - SyntaxKind::StarEq => Some(Category::Operator), - SyntaxKind::SlashEq => Some(Category::Operator), - SyntaxKind::Dots => Some(Category::Operator), - SyntaxKind::Arrow => Some(Category::Operator), - - SyntaxKind::Not => Some(Category::Keyword), - SyntaxKind::And => Some(Category::Keyword), - SyntaxKind::Or => Some(Category::Keyword), - SyntaxKind::None => Some(Category::KeywordLiteral), - SyntaxKind::Auto => Some(Category::KeywordLiteral), - SyntaxKind::Let => Some(Category::Keyword), - SyntaxKind::Set => Some(Category::Keyword), - SyntaxKind::Show => Some(Category::Keyword), - SyntaxKind::If => Some(Category::Keyword), - SyntaxKind::Else => Some(Category::Keyword), - SyntaxKind::For => Some(Category::Keyword), - SyntaxKind::In => Some(Category::Keyword), - SyntaxKind::While => Some(Category::Keyword), - SyntaxKind::Break => Some(Category::Keyword), - SyntaxKind::Continue => Some(Category::Keyword), - SyntaxKind::Return => Some(Category::Keyword), - SyntaxKind::Import => Some(Category::Keyword), - SyntaxKind::Include => Some(Category::Keyword), - SyntaxKind::From => Some(Category::Keyword), - - SyntaxKind::Markup { .. } => match parent.kind() { - SyntaxKind::DescItem - if parent - .children() - .take_while(|child| child.kind() != &SyntaxKind::Colon) - .find(|c| matches!(c.kind(), SyntaxKind::Markup { .. })) - .map_or(false, |ident| std::ptr::eq(ident, child)) => - { - Some(Category::ListTerm) - } - _ => None, - }, - SyntaxKind::Text(_) => None, - SyntaxKind::Linebreak => Some(Category::Escape), - SyntaxKind::Escape(_) => Some(Category::Escape), - SyntaxKind::Shorthand(_) => Some(Category::Shorthand), - SyntaxKind::Symbol(_) => Some(Category::Symbol), - SyntaxKind::SmartQuote { .. } => Some(Category::SmartQuote), - SyntaxKind::Strong => Some(Category::Strong), - SyntaxKind::Emph => Some(Category::Emph), - SyntaxKind::Raw(_) => Some(Category::Raw), - SyntaxKind::Link(_) => Some(Category::Link), - SyntaxKind::Label(_) => Some(Category::Label), - SyntaxKind::Ref(_) => Some(Category::Ref), - SyntaxKind::Heading => Some(Category::Heading), - SyntaxKind::ListItem => Some(Category::ListItem), - SyntaxKind::EnumItem => Some(Category::ListItem), - SyntaxKind::EnumNumbering(_) => Some(Category::ListMarker), - SyntaxKind::DescItem => Some(Category::ListItem), - SyntaxKind::Math => None, - SyntaxKind::Atom(_) => None, - SyntaxKind::Script => None, - SyntaxKind::Frac => None, - SyntaxKind::AlignPoint => None, - - SyntaxKind::Ident(_) => match parent.kind() { - SyntaxKind::Markup { .. } - | SyntaxKind::Math - | SyntaxKind::Script - | SyntaxKind::Frac => Some(Category::Interpolated), - SyntaxKind::FuncCall => Some(Category::Function), - SyntaxKind::MethodCall if i > 0 => Some(Category::Function), - SyntaxKind::Closure if i == 0 => Some(Category::Function), - SyntaxKind::SetRule => Some(Category::Function), - SyntaxKind::ShowRule - if parent - .children() - .rev() - .skip_while(|child| child.kind() != &SyntaxKind::Colon) - .find(|c| matches!(c.kind(), SyntaxKind::Ident(_))) - .map_or(false, |ident| std::ptr::eq(ident, child)) => - { - Some(Category::Function) - } - _ => None, - }, - SyntaxKind::Bool(_) => Some(Category::KeywordLiteral), - SyntaxKind::Int(_) => Some(Category::Number), - SyntaxKind::Float(_) => Some(Category::Number), - SyntaxKind::Numeric(_, _) => Some(Category::Number), - SyntaxKind::Str(_) => Some(Category::String), - SyntaxKind::CodeBlock => None, - SyntaxKind::ContentBlock => None, - SyntaxKind::Parenthesized => None, - SyntaxKind::Array => None, - SyntaxKind::Dict => None, - SyntaxKind::Named => None, - SyntaxKind::Keyed => None, - SyntaxKind::Unary => None, - SyntaxKind::Binary => None, - SyntaxKind::FieldAccess => None, - SyntaxKind::FuncCall => None, - SyntaxKind::MethodCall => None, - SyntaxKind::Args => None, - SyntaxKind::Spread => None, - SyntaxKind::Closure => None, - SyntaxKind::Params => None, - SyntaxKind::LetBinding => None, - SyntaxKind::SetRule => None, - SyntaxKind::ShowRule => None, - SyntaxKind::Conditional => None, - SyntaxKind::WhileLoop => None, - SyntaxKind::ForLoop => None, - SyntaxKind::ForPattern => None, - SyntaxKind::ModuleImport => None, - SyntaxKind::ImportItems => None, - SyntaxKind::ModuleInclude => None, - SyntaxKind::LoopBreak => None, - SyntaxKind::LoopContinue => None, - SyntaxKind::FuncReturn => None, - - SyntaxKind::Error(_, _) => Some(Category::Error), - } - } - - /// Return the TextMate grammar scope for the given highlighting category. - pub fn tm_scope(&self) -> &'static str { - match self { - Self::Comment => "comment.typst", - Self::Bracket => "punctuation.definition.bracket.typst", - Self::Punctuation => "punctuation.typst", - Self::Escape => "constant.character.escape.typst", - Self::Shorthand => "constant.character.shorthand.typst", - Self::Symbol => "constant.symbol.typst", - Self::SmartQuote => "constant.character.quote.typst", - Self::Strong => "markup.bold.typst", - Self::Emph => "markup.italic.typst", - Self::Link => "markup.underline.link.typst", - Self::Raw => "markup.raw.typst", - Self::MathDelimiter => "punctuation.definition.math.typst", - Self::MathOperator => "keyword.operator.math.typst", - Self::Heading => "markup.heading.typst", - Self::ListItem => "markup.list.typst", - Self::ListMarker => "punctuation.definition.list.typst", - Self::ListTerm => "markup.list.term.typst", - Self::Label => "entity.name.label.typst", - Self::Ref => "markup.other.reference.typst", - Self::Keyword => "keyword.typst", - Self::Operator => "keyword.operator.typst", - Self::KeywordLiteral => "constant.language.typst", - Self::Number => "constant.numeric.typst", - Self::String => "string.quoted.double.typst", - Self::Function => "entity.name.function.typst", - Self::Interpolated => "meta.interpolation.typst", - Self::Error => "invalid.typst", - } - } -} - -#[cfg(test)] -mod tests { - use super::super::Source; - use super::*; - - #[test] - fn test_highlighting() { - use Category::*; - - #[track_caller] - fn test(text: &str, goal: &[(Range, Category)]) { - let mut vec = vec![]; - let source = Source::detached(text); - let full = 0..text.len(); - highlight_categories(source.root(), full, &mut |range, category| { - vec.push((range, category)); - }); - assert_eq!(vec, goal); - } - - test("= *AB*", &[(0..6, Heading), (2..6, Strong)]); - - test( - "#f(x + 1)", - &[ - (0..2, Function), - (2..3, Bracket), - (5..6, Operator), - (7..8, Number), - (8..9, Bracket), - ], - ); - - test( - "#let f(x) = x", - &[ - (0..4, Keyword), - (5..6, Function), - (6..7, Bracket), - (8..9, Bracket), - (10..11, Operator), - ], - ); - } -} diff --git a/src/syntax/mod.rs b/src/syntax/mod.rs index 77411cf6f..4f159b83d 100644 --- a/src/syntax/mod.rs +++ b/src/syntax/mod.rs @@ -1,7 +1,6 @@ //! Syntax definition, parsing, and highlighting. pub mod ast; -pub mod highlight; mod incremental; mod kind; diff --git a/src/syntax/tokens.rs b/src/syntax/tokens.rs index ff6a1a96f..98f244e18 100644 --- a/src/syntax/tokens.rs +++ b/src/syntax/tokens.rs @@ -304,8 +304,10 @@ impl Tokens<'_> { Some(keyword) => keyword, None => SyntaxKind::Ident(read.into()), } - } else { + } else if self.mode == TokenMode::Markup { self.text(start) + } else { + SyntaxKind::Atom("#".into()) } } diff --git a/tests/ref/math/syntax.png b/tests/ref/math/syntax.png index 1000adb5e1a00899c0f09a6c47272cd34b6f01fe..2497ef49e3457b6c051a9c619e698ef1a3063c5a 100644 GIT binary patch literal 53626 zcmb@u1ys~+xG#!|ErJ0ENT`IglG1{N2m{jHCEZ<$3L*m1F@zFBcQ;B&OLt0lcid!KIPQigyeyTwde8Y?fWDa4|#q`a?700;6;IgFDvpw8e{f!*5mc zATtlLG=J|TY z6Ll-&SL#A`wB>5~lJz~fB$79Nmi^jjY;O+>2qTUluAdGBQ=t$jB(t$@_;U z3#*f*rKNy?fP}=&P;xS)TcP!=1fj3|>(^w#dPxZhEQXy4GvW`b9*T?{XNd}5NZhVV zX)rG`*mGYq>Y&+W_wSXn$USM!`iLT335=s%O-LIL4wG#nQ4Cc{q+Pwc68Y1aK#M+h zX~~4p7nPX!F@qRGxistQ_3K0Bj+?dKcdGVhkXkjK87f6)LxrY2Jw4Gn?-G)d{E67j z=6-))R2ymOfN<;$0g*YRvtN7cl|#Sw^%j*jD_qfj~}0i4=Iv9N5rbGe4jEvT*1 z!I0CI2qW&=wUW@n*wVlrS)V8G$4uR#-t@1!O)ZC}SqURXyt2zb|BMW6MQuoodQNCG zqEwr&81KV;Jg41djfshAHL+V6DeL16yBaMK78+`2Z%-w#;7slvi&RI5tU@j z6z|8UI`#0HTthLvE+HR0Rx0EHWr^sb&zMiKP+-D~4?U4wn|vg9v}8$bM)sa8#QK%J zk}Bz%n7baYF*4U5LahqCT1`hk9hYv@O(vp)uIXiN2 za5y^dZ*AEGlFP};dc1!>z!(u8u3Bd2dpOtG+4&3g)}+avO)p0gzBWFC>NDGg?mrFw z^ERA^i5?yvT(PPZPI54{uU;+O^jfpvm6$BwZh9$PWiG9CUo_A!pjUP$b+#4BZoe|T zzcz7UwmK>*ipzeb-0e6rt376on`@9N`uMRpZPsZ@gl@j1lZ5Kkc+^U?*ymWK?#0WZ z=aEP%X&F$D(T}{Tx8JXpD8N=plMkpdE zFc5`6_Fg0X-P2?H!{eg$Y}-ho=}?<{NolDYE3&@6oak!9kLqeishv~p| zM4Omn_j+$oOboAPH3kf0TV5MJo#GSC>bKq9vX#7tzP6G!xKaK73cEoIxSHMFQkMrz z?Rc40mW4vt_hX&yOmZ*=^6842?EFuciQ9{HWmfbYlz7Vxx|j{x(v|Y`VQorFOJnkH zEe&+__J;1BT_Jq{VsmqItkSiagPfDoX{IHDiHXUj;?Zo6(7?a|9o}MEyb1htu{Y!V z{g=T(K{`wkH*enb!X~8@-RMbEfamX!Av@={j*gB{pXKD_DqQvhoAu=0BC@XQb)6os zy4QGOIqz>!Y_l*htdy-*BA@CA*C1SXmIhimP#Wqg2SE|tbj+edMSWQx=U752U^=gO z^jEp_ZErP&&|>mGbcbXIDvtIBqStDoFO40%Uwy5>gq8V+cz=h$dIv!pr9bw6)Vfj%X4$j zoOhPoPxc*BrInQvj}QF8bod3mF-i(YzE-&w7~Z`}gmgn3%}Q z$-xJ5T$h!X&(x?I?d|PtZ#VCV6Ke1$ZAkru$PzQ?!e>;+!PGJ^XyEw$8Q)FmqXwow> zu6j6Z&LCuTaum}WgQ)s?d)b)L>)_*cd})K|r1$NOIa`Z3Uj$0NPvO-)(tHk00?k8{WTkr=L*Yt$otBYP2>~@>!XhQX8bvkUVk_=sP z7EZ@x-ePQ~sW&v5y~a#l1x}6sct6`7%Xl`AFW==EYHE^+27dnhdCcuFgVjr~Ih6YG z<258=fFLJ1`K6#>ZL?3(5TA;&@+&bh#y3Bsx$GU^sPcy6a#;xe@OWaeff{YEFVTnK>X=?g5Zjm8x z-hcL5R8;isSxq``AoJ+aqd@WoKjOn?#wuCYl*~-OF_Wg5sj2P?=iSfOV*D)k_xBBr zj6&Jo@epzA%cNelwXh%)l@=2dduu{?|Gqd*ZH5Zz>b+vOW2dK2bDYF3*&}|S`V#X} zN=i6?b@o{mtH;sEG zISZ`Vd^cWoh1fft&YQ~&Tkc~pFe*}?q;T@M)EipR{JDsvFSazCl*R4`ts%4+8PcSvb40c z^G$wovVVntPR>()oMFbP^CnJev`BpegWct!qEYW>W@cuuUcJIF|<)Y2mc7q(4Q#m+y9|?aMw;J=^2}KYThzE_0 znA#m!H==w)CoK2Z!Vv?Pn;(06dSdbqSGjAvb($42lq=ZLv0rXjNtElMSG$D4DaZz; zLao3E*VZwysEC~(Cu;T$ymK_4d(6RDON&W&vQ+me?81r8;%E+QRBGzyMqNJwW>41< zR}+&Z1#^u8=Up?q3%{~R-S)miu^g=ih#(|XC*n`C9*D4C9<1Zgg&M}J-}3FGy`^Od zhQESVW>IgzNxjmA00*afG~^B*p78PN#KbKE0`H!C1Nl0-GFVtx8H|>r)gGmyT?gBX zYHDf~6&0{-DH#|TXla`ry`-A_h`EIQ?i;qfs}NnAwAEjuV{VL4sN&hzU2UXt4jYa% zIUdw~_i+jHy}3Z=NttO^R@KQtEBjbNf{TO+l(6N2yxGn~vHjzvr;^M+)uiFC`mi7D zLaW|u@iCR|funH)TYpLfQ32hI!E7N2BKn#?8xv2F42s#~?R=*;R#qEZTijMtFX6a= zI>oVyUFTe}`IGXA!xZm!z+t!P`S&WNH!$*xZg&3s=^-2spXXKKGtm~!C4&-waAgwC z*zV`7tOe-0N`E7$QC3Dq=W;rnM(Pz#QWT47Y_*~)Dk|dQbW~Ig_4WGmor&E;J>A{+ z`P|C$w`g~nsTmn#*-RsSe6ClK(zCGSJMXTrn~$0}L{ycPm3{eggK@y7HIj9y``-Qg z+;&TfZ8(OeraW#(4h!~4$zzdmc5Li=zrH?jJ=oHEa?ggdLLp1N#tS=7T$CSDDv$tlK&i7?$;NQ8ES6Dc6zqz{lxwv>sZS9Aw-Q3}= z?$?b46MyPUsg|O{;PgLXAGP+|-m%R69%y`vZ-AxqQ7ilc-D=gb%SGzxZf7B($XSgGf~{lLLk{pM@nsv54M*cL}h#q3hElIaJIFvfy42cd5mOWLUi;C|wEHP-bg*f{E5JzryDMjPU_{QO{|xb0V>LPOt1z4C>Oe3foJBb~IavOxSBRrU*{@gTcN-bu z#@{y96=RIe&(Gi3*pN@&4Qxtx|1I4Y3L{~(?=U*Qu6m+XOqV!YkKI{RFBAIm6s z!a|%BgY(BzS6Pz(;}!o<)$IQpA3h+2Z=H{SM&t1rx7ic;0*S#BF5 zGG1v3WBr=#>a3Q{Au2AuG*VU+AFoprwz0Vh1d4%@ve152-Ghu%n{E4=f1q^FOGY|v zY^ZXe7u>?fuX5Sn@WE%~=H?D%PEgjGX9G}e|m`XSr(9!Cc z)te5B>hjgKoJX5GD?MrW?|*#r+rEVv5Eb>M&cmdMw)x2mL)Z0$pU>L9bl!J#bOhXL zZ)s_`*9lYQiA98W>lS}tLU!)_kt8M&I}1zq@NoGkK@I@{!OYCeg9i_M{Q_mAIh7Gz z^V?i)?@CHa0K6pI%erpPw6YM=!?80VsH&=3YQGv27S^|x$Vn+PVa_w1hS%Mt7v_t5 z(wp`toT+NH$LI|HoO?`%N6W+%cre!0m1oc%1MonR?iZ@u%DaRrgK_1qDP#H6RZ$qSQ_M@(kJK~d&z9W>+$B(8 z1}!e7rlkQaJRPDA3X;jHhV#^sPkVnh)_q}NAx=2}vHw~$Yj6L+z6;@{@`2#q#b|Rk z;el+e8bEB7%ITni1(Ne{a|6S&TOJhR>FMo-F{YqLR<%VNyb{wWff?${SY12&4J+>OSWJ2{bc& z`KA(P6L?@@PZ{Ymi?^I6imIx^87k~F@-(!x*udfx|D~% zlQ5sAeUUwHyJzysyUo?U-?X_UZH%FkRaCet>nFl+L08btmzc|Lwk?`I5&`Ev--<>B zpBA55l^ai$jLwsLXgu-EVtjA?4^Z^k(o#zQzSSyM`vJW_SrTiLbv`VFzJ~(+CDyb3 zIXa83DsrW|{ckSuxb044l~Ve;y_lY^P)-^>2RbK97a$Tg)4^`})tJ!G`pP;jBO@AL z;mxhBqrIVb5fOmdv6@MFoVGwPL#&*9^2sYGNIbE(wl-c6=XlO`d~L_kOY+Xh)Q!Vc zmwe^7-r`8MWk88W9VSMmrWxB=QnA^w*VumS?KuE%18l*7e>+rO&Y#O+GA+qXz1$&y z>=U2}%c_Yv4fkVK)4_bF3lVhk@dmkUws+h}#?ovT&}V>vb$4$sta8BmMP3n>78Y{@ zc?Pz&tYJ*k)6)RpqYO~F)3dXZ;ZL+?sDh{@Nmz~UF5nO3mk><<*=J~TmtZEKtQM3{ zSL~R>O85|t;9xxs=M@cvd4nq>yCU%7MSKbq+c`#<>bUfItdKhGl$4ZPn3h{}9a)us zU_2Gl6(6kK*xXjnkU85xkuMY!c7a+h>+0_;4*?b_&%!HnSl5mpd2MEvN#zCbteY{H znvdE`cUobFt>v-END+dS zQ*~^9&ya+zmKpbDF85{(q4%U?7l@O|X=&GwMk2HR-6h!|34+pE5EKmr73gX#r|sv1 z*hXEp?HUOf79cg%?Ys|=*Bnv)#pcoWI;yH}cMXK8lUtCkrrif+*Dr?q{{Hn8`0(NP@88e2Jo&fG@oR$aa$c43fhwa$WrCe!ZC%|h%!!#9VXP{Ss? zAiC-A?cK50x6qSz)kCq=hT8chqN_-Ba8s7OiW zjD8eJx=-5PRXW@)c$1h@FuntiK{dIf8YEJpP(GKvHP}BFky>tJX{=|*oQEb{UwV4_ zpdHE7^tAiIJXLCZ1PncBu%dzD5)vRy%`k-`kw}nhjBo~Ie=$c(M>+g5-DC;+4&sa6 z)}aI&Nq(c2q2LbfyVvkISEWU#Q|^70zMS;~*GZ z!X_~>GHN1`uF?FJ8e4Kuo0T&E#>j|m`@4LGvRsyhlT+!354C)!N00is(JN5(Yz1O| zjg1|HLbIbDh|1rRqy^5eR$^86`}Y%0PBe@FQ=qW0uv?PDN=iv-05*Alzhd{JTtlCH zeD)XH?gcRt2A#+%OniFfEszn`taL_qRxSI7I*cMq5(PfBiBnnw)bYWiH&P&d{psuo zd#8bihj)ikd|dilax&mc>WirMhPP0M6*thd`O_V!h^**CA-M511NQH7zyugDW1Tk1OBn|0PP^A|>@76#U0O zB34mUyyq)?xImmWWX*;U6`d$2rTNE6>hfy>xkxx(NLbiz*d!8(6vGj$AYwZI?}wKT z1lMU-90$V0g7~(GB`#rhbonMT6Vv$;ARq#4LjQcsFBG?47pzlIr&h+Z4ZBbQk3?4X zI`=nck&(U^REarlt_9X4H>XuVPnIonO1}*0q{P+YyIl9w-U{7)ua(59t#myEXyI@~(J9}I0-gB`n8g3b2Y6A@(mJnC)}hp04|hyuWo1DD2EGVb z)WN|)LPEkvUxqS>;NHExsm7p<4J-8~(Bf_qvRv8z^pB^;^&W5~RLpCxxnM6L)I!=n z=H+dIDo4WYV6ie>f*y?FlAuOiE7Iws{Y^NZg?S$S?dEm0p=%F%Sz}w@#>1n@J;~XjRM^;<)wl>1&EgM@ncPFDOuSiIG5Gbh{JLK z)67gvymR_@8AR94b;N_dIq1T+vpOb;gE=et94+gTfiUn1B@8uxt}lx;T0(^4-|rWxN=2Zi}jEjrgP4@3n;f5ot>h$C=OWn4+378Go z0wvZ|VN86-TR~}Qv{0P>HYM$7;2T$g1y~lDD3>OWh;m%jLC@kPVV_ku|qtck+BbcyEi*{vX1_cDHZ?^Nz z&dkL1{$r{dCWQnAJy3O+u*WCW8Q6xJc$0q`LKfpBX5{NPk~lZ1P3XIZ8D?!O~<+sN2>Xv!6e$|csd zA@iz&pn)2c7uu$N`=7mBC<(C8&sgu7)B9hucGy|}8;}2wXU;rh;Pb%a|F7)&e{q|a zdC;~r#`B~Pf0^gMP|w=n3E0FK(c|H~G}!;c_d{=epqghM^xq0Z^?&n#Pa7SoNx}DnsTg{ymIGT?U;1_ z6#+B`STe{R8)`z})I2kwT{c(Mv{$rvaN_z~mXMY2!1k0GY-S)T+Nb*tICUVOw%BGq zFe{5O^g^zoS0hU9%PWes6h3ug$HRh@ADekqBQfh_O~U&t0tCmEcv_bfag~4OHrJcR zAf({5G#PxStE;Q1qOv$Q*WJ^jr?0OLM`eHiGkW^vv`4v$>GNGl3g`t(qOGH|y|o3T zqyGg^7SMd8xPGAoVhmR?4L}x1dcze+PW&*vcQ`^aP?tDuWw`5orKp)AE~hb@5S(YZ zh9Z{04%gN!0?8Rwi?dCK3VED&reVp#f$**878co{lF7>6ovjWIzWeA={I_ppZb>^d z972aVWrL=NoBpcDqYb^ztPkmHI#)RkrKIJA0;iDJDR%sf^v5yya!YEq5nm%?saZ_pjbFo%mTq#XPFc0d1qAZyfVhx;j&zjb|6Y8oSFiH408 zV_K%!cN4H^tXI_^d5w^AJ80_YfS!zY48IEj>L4I;Utt1+T?7ZSVAiTRlpc!yaD%O- zrBePIDb_v)Z+w9L;AN4Et^jBUZ*yq^@Kj%CrvUL8I0b7LmH?^naaYTiz_2iOfMsB` zfj$2E1?+lo7gEt2ry3hE%dvyCLU$8_z;F_`V zxa?WLxoB-=_3Scu+VJoYYGQ`Q87@n$2{GuB+&FVBMC^&mSsK9&+euef<5;hu7$KPW=%r;e5rug2$R zbb~?S0prSSAorsac+mt>QXNT>`(>8;!cyzH2zukwQ@etb<6ovQM4rx)qJjBq*YB4| z9{(b4;3+bR6>6w6n5CSW>SbDRV9b+kc)7kxJO5FryKC#`!@8<0x}K+TG1BL{`6y$^ z8^gRwQL%f6vw2}h@qBJtScrosR1f6%)) zE(4j$tr9JA`->J6gTFFXX3xk-0S7DQM|n$;+2$yPz$K<59IB zO_gd#-e)o46&ZGmT{9XaNuljH6DxyWj9__~Y|q*;)Am87e~4_4!|nALCmQQ17Tfz{ zKN&5Cuof$dR>B?jrFTCBa#)p4u!zy5y`o7gcCXftF)w}75w}`-2nZ*~>({Sek7;NM zwf?#&LpYOQLjzWs%Hj5@p;}DT!*Eg^cX2a6HGeXZe3$#RG71yPvu;GBSFQ_0QUXrceQ3 zJuQB9v;vuxcB^=m0QM>N;XII|_Gm6I0G_4;J07m1TCbbBATV_5l&$*Ko1Bso80)9c zpHT@3SJ;RcC-1Opl(GJq`nbA7suTO5i2~VMM&`ZC1mEvfs?n3m8^3Q*%1F!odD}Y6 ztlDEXw3>T#PZ(ddc!PYh0%W}?=CGH6+;6NUmkV8yx?KQK%&U&=dQ#=OyReAZZV<73 zab=TM=|Ri2A40F7Ai{7Nn}l4{3aSIBX5DK)fBpmyaFgjH$oH^P*xeOwi3WmT04}M{ zD&B)D56Q?dY(JO`z8VN7Z#-t8=@R$6_9WoK<(pdzJz|1_Q`PS-oc}@+8oV)bqT_yV zWbKCkHA#ejV~ZOyuvcJUtHqT{RL&RVX=_c^Xoi$j%bChM+ugrv3{w20SfhDgA(+dG z$*a;;rRCxia*aaXMFeF znX6rQ4OHOpa1aBC4#J}G@j(I;DAAsW(*g91o!#BOuCAc4u+^?4YzZI&rU4Q9x#0uT z1X#>Xw{|nm>w@}+??DD{=C-${^EcKlrv-4-{Wyx_qML zF~@X7UJE(%vb z=gu7ccN|J2zUMIilxrDQT5RS5nGECifSnQ>ToC-5Db0y_8&W6!U<8@ePVyQ;yOiySt)3^M+ zHEcRGdsEukxAR>|m==TW;;|Qa_qjvA7nfhv_?E$^jIhp+oH=iL>?yL~-p3qm`)Y`b zDbi_yn1E+7cxTlKg*AJm_G+;BJykt1_c}x3iTQoLo6bYsN8C4^X%&6_?{i3l&p*yQ z{P8anrSv=`B4GD`he^U=Rom8f^E&20e#qc;P=5g!Ha=8Z{(kdSYATJ9k@E6#>im{b zOgrstoL^)5o%-po8X=L9uz(MC$K2W7rI%CDaP#h9($SHNTYJ|9-L9EJe7n__u%V+5 z3#&L1QO`OcWdXAMjN~=IKxa^Y`6)8AFH}Edf>x>w@6H|T^&ntKW`p^nkGllXsE`_f zA*309pFk?^6>JYNG4qkqkT4C*b7)WOZ!A7XhW_0DHA#AA=>7j~&;4vd-3EF=f5{c= zIgyzYG1K2{qx(T#3Q(2jKKvRNetRNG+SvcjvTpvHdIhTy1LIrPImpYRgRVe~&~E16 zfmbwHf#Eny{QgCy&;}%s1GJlYW@(}|35>rSJv6yO$7m~VMk6BVC@V7YdayCxvfY7S z7|37FOBvzXoMz**o$;Fr%G_T`mT9qGbpMQZoM5}GNnm&I*YDjO$iE1#%=YroE%5T_<&fj0uGR|zLFKScSyZDNfLr$rAjJFw1NMv|8 z84}Wnu=ICLnslEok49uwm06^&;{c2JjCV(ZcOXc8<2!Rta#0byd4&omehi1Tej62{ zBEZK-44#2MC6ZKG=`JDf252timFI5kWN%d-lnly6Lz)Y+juJ>Vgt#~$SS<*%T)leL zu#Jd^)w?^yKDU1_e|knqM8rTsXK;T-PQBNFq|ecfzPp#tsUcu2NBGOV^~2RF_S2Cv z0i?Id;M`90sKdy}2*{St(O>wt_^Q2BKrjB-Qn5*2JnLp_m4fYwb?W+8bgi8!U%B6- zq^{0DP3<^Y>mBNR9nS}yG4UXCJJ~nzAcJ@qlE(39&r(#hal^{&yG+f>2{|Hz^k!^l zcG*~=kKb;4kJ|z|{D8?%r(V7XGKz@beF9#W;!mGmT1(rC%Ikf#H5nW_3PsL>f(Zd7 z3%v`=r@#3a7nvFL_BI$O&?vNzR2oi^v+2s0TI|cRx3^C^IR$%ZtjgU#9~1OErY^1d zc0m8z=OqHj=W);$;*tO5r_G(A!;x0&5&E;qZ7;lTHvakrtgYbp7Qu~r2(kbSw3_}5 zD#z}P2F)ix>_FP>mVH;e6b0fXoN@;%qwzf~e{!t{jY`(HO9n-w2Zx5b-sA%Y&+`IP zc58La9rX8QM;_I3hn&DbX_4XL%2M7%sj~TGIgarg9 zfd=|kMn*-cDk{DV)D;x`0QT;iH^~^zsi2gV+Ai8b?F}S{D32iv;qDDc2C-hf>Kz$b zAGU@vE}Dt$(t8pSQc%z(c~mh!NZ+R52oYDh+0Z@J^8QUxW~!fw60WYUed$UvvRie7 zxuD2UsKD zakpW~c8hZfDng|CauQEkU)!~B+*Jo{l^AM{R6KS5*znILUxm!rkv)0-lMGdb(fOWZ z^0u6#mN-cG-D8clr&Lp$n6O*-9WY|#5i;NrnoXb6w$?L;$7+sA_UF~UOwP^q|3#66 zIZIM$2z~9=#(&VO6yjj=(^r$aA3bGe4$3OJa`UF!+W5I`K1PB}hzLl=^7{GtM$zwb zGw@5x)i85^b~3`>k_M#esCvE(gAvl8)5Eu8eegH=3}*z3yA9(Z-z*&8(chyir5F!^ zcpEOZDGBa^Irx^DS+0R$icK875JpZ8OBSh^rXF@YIXPSf{fn`dGM%G2VrRYB+GeOkIK9L-@Tbi(>EEiJf@n_!ZgcA|%n3|yt*0%QE`(;S@!$jm@?R*6nN zO!-P(UERUK!Ln&4AYTwV-y^bQ^txI)WjW%{!D&YjvWbdVPCq`G)laMF9L0UIs7Oai z%b3%RINXNsWppw!QLDpN0M+MlMI2q$;OoX7lMsWM!-r0`(bM%wcB${qxAZ_Rj1m!9 zn}~e^vE;TG9wY#6@B$$_`S4+`)3%Wv0Wop3DdKlWhv72>3G;A*Xpr4fe}_eJCq<3i zCHGhUcZ#3PniVz$S+5$Jxrojj#zC0*X(a(<5r=0Te}Cf#JCv4@u_z~}qo>Cesuuvx zA$^&Zp^N^D%vE|0IZf3jU;}vgHb)>p9|qIlU~3+P$pLv&%3QPS?H`I?T5LLRz?YZoRFl>`w{+^*f*SRV9UHOp zuZkX=EuT)@U4ewwd6!ba^jQ#z5+hYzy*CCyZjhhbG+o-d006%>`3XWcW}5~0#890q zk3U~=rB6v+XQS}79`8!N2Q1|B_bf*Z-e_K=RZ5rVS=RV>Z|})NB+WC9XskaFN)Jm( z`@L7WFC3O+Fm z@)kx6K*sV7s5D^iynFY~vYn{`F9M#0O&q|6jw%idSFn{(B_RQ_ft3ESm1Dj zw*_I=Q^+=NZfry{^FuxYSVJ2+9XH>T76!>GFf4%Igk@!AJeQMWrKY}$RG)1G>k<{_ zl6`|&b-z98>ZP$?bGspMsBJo!I?}s4o3)&76%J0SM9TEYo+HVl<{BU6x;tg@Y;JQm zFD*bp!QskUM?zvE^gA>rVrSZW*FzEzawOHhH~k6BV6~vF;TMW@z3m2!%N0Gp-g(>B z&+x@o2oiHo>h0$jp@Y>SBd3HXR}beyXca!FByDp;wi?_g@YmxY_mOM(bsK*l<=56N zW3y9yRQM5Auw!O=I@mL_e@XlhJDamP03LS903-GDV1Qf>V(7;sE}Jm?vku_l8Lg2TcXRSLfx>*bc0t12ri z3kwU6U!|m?La)!!=OC6qEDx+6Vjid9ER}6se0&uprK`J-s3<8n`WeZPcG=FWG7U*g zuVfhZNMH#0R-MDE)ChlYKpwF4n#9av#i}tTUm4!^1C}t|t1$@To2OwFP+c*bQD{$( z776+d1Z?{i&)K)E#UQA}!(W?gzH-yDvlOlQNxlD(K&Y;qF%}}S5VmDs)wm75{>o61 zWU*}%H5u7+0Re5m85|rM!;9nAY!zx%pAlis*!gpM~ZBahV; zo0Z-!$914r-f+*;h%Ud_KI`q<4%gs(4TmT~vE?5ylzL!SK=N1L4!6~WIRL?R4e}mX zSiUz|YCuH`qC_}B--PooP%5r^;OrgtXR4J!#Cj2HxYRaHQ^v>FcO+Zu{cpYkINs&u z@z^TbA`mI3A*&2guBLaZWRj_qL>v?MBZWu%u2dG*iz$pYuFqZH;czhxM1%wfhcap~ zSdb12%pw^yDpj+cFWJ_bG>JZL*edC!9s=CxyuH8*-q?bZwR-M6^kwbdERbcJ){Cjy zLxlx{%iQ0moL$WL@=m!pwX}(+E0bVCi6a6&0OHv7r8$I7M?H zNp=T$I=vxH1XOWOo-jXf5JLr&eksdI1tp8SK>V?x(`-6p$b_mXPoRRVpMzj-Q`jOt%Y! zU!4X&Kok3WdyxE423PgoJ@lqKi-K0U9@;^FNdFe+3$}{mL7TcoF|F||1pNsUzH_2Tz^B*W`}{dx(iE{KlR)tX=jKndus$XW0;0|=OzIckv$QV`pdCr~kdH8mal@#ll( zNw;NUq^Sw9Shv%Yjpw@>G$#Eyj+J{q1L z%TLt&dEoT9Z6cGp0QXC3=in1B!3Bmu`Y^=2%>ig=ST}AcGazSXXZiN~V9pI$2EmN& ze?fS1^Xt2JKj0TQvf6H$!B*iYs-2yz>y(TvakWZ;P5?CzGT3w{3FmgaR~%Gf%LU8FoPMV}eW9ccU25e)r@p)0T|c|6CfYWEUmR}D zGlR?w%HY(@4CGKCNh+tR>H=+B=TG$wtwWishAuKLT3h!zexAQG=DlEGe6RK3;s-!q zjk-ktTVSNh-cvKie{Gu>r=r;EKXHV$qv5@Ls=tdH!TAnEL zlZyPxXNOOF96kw!pR4K;b&PgD#%5d?J@gbCfiAYp%&jlmhuQ{4h7uv$Y*qg3%nExB zeAY>MT9v2($b*Rna$8Q;Lb8kKgwi)Vm%2bQhkDygR!K&N8Bmz8yR6!$fvvP=rMcL& z5LUS)P!a|2K)}2@0`cCg;gWK_iz;s{iGqS#xeVQG0xxRcU1QqiiYpJfC}b_e_>R^t z%nqOI44K1`W14HSKgi&q6pJirlbJD^kFv8dnh`PHD|-#m0bph!fq_O2>Q=P*5x-E& zM(vX@+c&Shul5>I{snTF=M93%)z$VA_ke?jmX0j=z7aKo6-vXpE4DM$`#02t;i&EYd!H4D$9kH)1vo zWaNjD@~gi#AlgvxM?5s=__ci8b>BjxP2f~DBRz$)6unRXOS#3H57A(4i(o0g8wCcrPy;|fjBIgb53vhGLTxgW>@+Rc5LQGZ87 zOpLI#je^!I@JRNWPy*=VZ%C3Ynn~~4cI#`15P8sATU&z>2w7f$ALuq)SmF?5)3l$2 z$HsiIw2vO?fI-r&-suT}Cq*SCQ8lF>1nNY1#tv>$(BlM>Cx;hMV4d1ex3EOAl9MeC zJ0U_3oiPhoF1wlQ%yv+K4|bND9owm)OGkL@6L}-7dCSpg45WHP8|v;~$@hg|R>He? z$r%_%XZVcujg4vH(Hb4Wn^sQK1aH}L4tR&EW&Z||X&%uqzig;t<0 z5K$z%LPd3A*9msmGcK;?=H@$?9cA|Bl?*qGIG{GCDP-xBzJv6#`_2-!@y)P zCPSkt=5rEQZum>uwIEJHZ{;<+g5>OM#dOFIqTT1|JCJ~dl(ioT59fmi?`U32OFv{_ zIGL=wzA%sO>Zv+C&Pqvv4AwF1e5?z!vmMqdDnqcJp^jeTLDEoDTjJSSTL(c&WQu?h zgLbzWI)dA`(Z|Ph*o9O$J@+k2p{SWh5bW1|=$`y?+g?4gfD!78Y-6B-f!v zniJjQabn>z<$CtaVpQT3st(`Do{o%68Z<3Fv(&E1H#IRyPfJ@|SpoXB50k#(7RRkI zU;}MbQDIZCTIisEs5e6eOY$r00VedzgPI5cm$W{(XK6U?HkV6 zUMO7y18Ckp+V0Z;ezQ7O#a9(yWV(P>j3L4Dk+oo9!HA*gB91tm%Cjdwq|s@Sw+thF zbkO*Gkf172d$$Fc*M2K1A|e7Bf{i!JSHJ+~rS)mlH5)B2Nlw1LT1EZIAEXu9px69wX?f`O`yY_a#@h~n zB%X)KwSVJo^b}N7VlQ95uF^9yFz7qUGqkm}wG0E%?ccGQwSgp=2N|$Rh-;}lKvI&E zqw5OiWe$!KP%

JE2jSkoXvKVxQI2b#=-AzHtKEa=v_qG6k$a_=)^46xKvI@89b3 zJ{=QNF8El`r6v$Tm`i>3G#T>RV=5|!wI2@1sqwitz`7gm-02&`Rp{MSH zr{^`c1K7gQN?10t06f|~U9Aicc@=IPakjp%i9o~G+jAFI#;O?m=inOv38H}jOJrID z$SEx?E!kk3SAsw|7Vt%K@6qiO+E-xGJS3YgoF!= zi`S%z4I{_W}X}F!_%_Y=fS(-0bY?(0@nxw?3$6z^Nnxb&ZTtAxaA( zLALlmF*53WU!eYAoW>luL-w!gXydwQAQW8aK~sEowsn4?GJNZ_r)OsD2K@Pe;sdgg zJ_QHIwhM(I7bPShn4X%_9Qn%$VKe0c*aT)7oXzqI3agP~WR#SiWSgLDzp+qxIp~RpOgM}w0}?@SL)gON$?R9KR!K=?8JxN3{|zImrc3r~`HXdx zS)rFddILOX!=>bmHq+J3hvWJ8@89s%Ahq`zI+dNEEjY9EY83m%**VS^VBs%Lr153 z+OGK|H!sieet<;M?CdPQJ49zSR8)MnG5@1$?yu^4*5&oT^{<_^mi-<4{l|s-|Cj;% zFFN;Bn31obO6A{!UO&@fG!#TZ7Lu&SMiI)~q>BHy)^#FjeMSmRj;nj4gD{IsOt zrOM9ZWbPyH$!N~>zMY4s)=lvP0ZSFbprF;u%pxs8Q;G|=O^;x^r_!TahG7$&Wd_Rx z+4KU^4+Gd#?z=~8aSHT47ictEC`t0lZR)&;^o6#14>GvrMU3kPbYQS$wIxyB0)+#Q zD7NtTmQN?`3h}i`m*SIS&XxxOQq5CoH>%uD6L?IX2=mV-z)fvVr@vg9yBKAZI(2a@ zzVl%6mAnksD-{c9B21w=gk-Ku&~WdV+Djf(#0?c|1Gmk^I0WX1Ur&gA>f`iz%;Q>6 zX>obix3*03tD!0bHa>8V`}S?^Xy5wW=rsILR%Kyo3d9~zL@|*n4+=LyriQ8vcnN~g z*x1;spX4Nyx}eR-FBy~jmAE)?whxt+ZkCo$bE&iZip@cz({Q(+*zuyB8M#;VXW|v; z_nT&4d>ValG>u^MV)8=~FN*Dndlvt5jGL2!4sOX4dq+V)Z|pGgM|aHuBcIww{}*#| zH%6OnKAJ>ABLc;m4McSOI#Ejw#km#HbGZj?+`3(C_T$y(2z_@zF6ey2Vr;zVc@f&y zoOV}^N9@Oz_ov{#Ba6^S=;Py4y&4`HD;eLRs&;Ys7DKIFWrP~UczfYIN5_4$4@N6p zjeoy|=Glx4(>HJC6hs)Qsg*!(c!<9WR68*v!xg#$s;jFd)-1zYDD7$B?ibL^E39E< zXGg;0WMg7NmrIRpEM9*d+*SNoL+BO6(GuErOsNxvfJOTu3Eq+lFF#JX$!K(a!*I&@ zU2URvjbQD=ksLfS)<=ic09l}tl8R2^G@mH{!9>Eb3%ZZ( zVsGoupK&jCuRt?Il0-Bir_G!AF%onyIh^+ZX5-=lBO?c2E><{ggMIWBQPno%8}Y?$ zZ0~57T$EE-Iq$HXMmSM3k3Xpk4l3Z8c0Ys}85r7HTGDq5;xjWDz`7cXo(K_Qo!;+R zx?EA38L&-PRa!XtCsYX}k$b_>VY07s_hM#;_k^veL<2$d-Mx8nT^+@mmx2?<%;=c> zjft^{+vj*Z*A5cBe3I*q0SgL>6yuq@!yD-vgZ}TvUr3dk2dY4eP+HC_z1(oPvq~&w z=|=-EIp);LH|Y^KjCk){)4probY$mzX|_e7JJeNOHNDg`HnF^rrHFg6D&(vB4-PZp z#m!fW$}%nc!G}lrqHKCk8<+YgKYUvPuTI!^eCQ^cBhVpSgCtGg!rezEGSf6%(pnk^ za`k-Rywl)%1Vcvm@Szp>nmbx?o&((-9XS)c5()|mguXL#bC3In&ES4J&`;yC5k}ENlC$dJ@x>!!wp%K>5+itL<9xN$;iHigkeB( z4-%Yd6(fMA99mFdbNG_@y?FsyRzUSY=k|_w$Iu-Tt38lIgC#LE=vEp0keeG+`BJS5 ziLk>V;%9PTyZg|racw$GUQ5t~X;SlGXUxWs+wW&p{w+ zZ}-m<9Z}pBR2cO>cCh73IoYj?t&0}i=QWRJ)LgSJV`>P1oSR1u*S;6 z3|mcTYNy2m6O`5x4Jm7qPYohO2`@%xDLn7c_CSkBmWQo9!i7hlqgwr%b+-<4Nt@G? zDjILh7)zuQ$U)VEeP*O*ngWN?x zz&@YzEHPeP2j80O&29YaFIhVJ=8!MN1%Kl#U1SYalv<)7)OmE!+1-!h-G5QYPhIFa zCjV>d^POoV#5cd*6j`<3vO0Fd&QxmWdgfPlq1J`3{n)aIy^O0Yk9l)oAVNt9nseV+ zfR(cRxMe9d17W6ytWVWoRLD>yg^1xHJI%_5JVny{=!E>*^%VxzD-p`}KN0AM44%$w^97ST~Ll zib)EQkoAo zZzBdvPl{~aoW#W)%fT1R@srS+M7xl!$u-e&K+nsKV%-&7n9dzd7U#F6gV;G+;e6{yr;_TM>0?q|dr@ zgC$Of#Y8{Yl<~p7aRJdabA>5`*s+pCrzIIezDVAahMymf8Cf@al_ok#aT|^(cWC}n zNq=;KC!Kt!hQFY))wS;}TB9j!q0a@?YbW%Uee!Out*xPIEV~|cd1!F(+L7I6Kb1_3 zvjL<-|2gAEQdc6H?9z|X9+~e4n$6c0ENbWHt$BIl(KNupS71BCwZ;bfvxI3aWcm^F zOF%$Os@p6-oB;%Mc#w$V6V-G+TnFFi_AXl~PogS<1qDSsBLjo`C=q#fzq8_C7SOE- z++=*zF8bWb{eBf(M|yM^)Hak$Z~i>d{HE>}yPQ_-&@8HjiMA|---bG9)6r|yJFB-b$I1N@Osril%ODQfrGT}u1vOf zWv`qKD(LLqsD(GPe5_+Ne(N-|n3l0lEXw5m8g zBK)N`s>!Zt)cp!|$@N(AvpKo>$IHgWzNgCOZd0cvcNWTWTE!!B2+iImx8m5iIJ7+O zPLXyNwb&rn7kj<+-JViRoDUyg!((Wj_h?>$SB<2%`R1U+srHjDB-lst5ESsUHP+}> zJUuJX{85;o&*BB+cIw4YjciTk(#p!p^0Ip`5nU-5X8i)%Ev`LXU6VjiSrv}Mun)zi zvT{cJ*xDGIOX1|y6ckNK`T6;YiHWfWbQWJp9O)nCh}85B&31L&g-%dUPcN*4A5EH| zpdi{{!pW08`MZEUq6aJPHU+Hjv`TCFQtswWf1oi>o`^quc!v2`Wo6~JZ-WS{(?6z* zhBhdu8B)?vZ0R*M-J_!w4%3@AZw6=ugs-=&>r3Y_cXTj>VqDm6K)!$>%5z0pLrL!x zvPTBL3F2+@6kRB~dmR1}gxHyaZHG9qTlu$*f?)7D-3q2KuV_%(;`Gs}sk_@0XX~#r zZ#CLAZtRds{b<{=@)tIi*?GqYzp?2Fng9LH)$VXrnYFy6@g<#tqQ94vM=!CxYK`s4 z_`}>!5qCbFd1riocYIl1wP1G`hdMDbD>@@hXfMl_hX!G3ltr>GTkW5o-Lh$F?|wpG zp2gs>qjOcL!qal$!i8TGiE{(iZR6`iK3k5=*h>lZ*x1o*4#$K$ZrQ%wuP$h)QWoHf zYqo)|E|=;_BpO5-3mG=>?66i;QNepT0TcrM_x)$hNpF)m&Rl(Ui#hamByLB;SVzZI zv=PxqSt%(ghz2k)h=tm?!6ov_ct@T`S+4}&1>3e+Y}_cs%X+7fW4FWfaCJ%}Dml#z=A_r6xsoOF*$^+|H`D1-pKu<^Lr#iY*z zr~o8SvI3qw$>CdWDYOR9$IATJ$}7&^-l~wZE{@(_USUF3M+GHwp{*7A6Bmfrx^S5L z;=(O;b;xf|BI#%}1pa9(B~;?{NB!K@-65C;gnfcQ0REAUAR<~fz)M46W>qD>@rr}0 z@E8sh1n>MRD=Z`gtE^jxEg&aPrx2~HR}s`j<0t+8+7W2paeKgqa#cnqMDT&Cl+=rB z6h?Y6xPX(Br=icg^w7L$f`|?pforMf)l^kEsC`00D)LBc+Q*ym{}9I5)PsKJv@82C zZ{1d8nJqjfF*I*Dhqi}J%+VfCj8`};7eb%1Aam^+J*^vJABQI@Uj-V!o&MDH(39^ z1$z5%mtW`qZOj>YGTT16eOnZN=vI-qUZ?Z5Hl1CW1_#c@l*!Vtg%_GBPF^QxcmZ(mwd;Rko@PCpRGf=IR!(^JIaPUY~v$8PPC+bESpO4v8n~G1KyQo zjdh)N7TjR1#J))N>(@b@(E#7E44D8!=@u8ln3ABG(hMx8cpK$r@3Jdbu0(ZW!2u?2 zNa^xAJiI`^hNIBp9pCNDYroZB1O}r#<%ovkQXe#Vqhn)_f+;1L2y@fZMPEyp zn3>l*H`dsKWQf;}z-bDb#NgOh8Vgc_AaHpt0TI(PA*fyE()m+eSq)9M)6%k@&?29o z!4aO>pOC-4w)*049onT%!i3I=)`o-nu~AEQbEE1f9>L192C#R?(hhMpX=$fh(w1Xv z-fbdvTAs|VbHzJ4WD%$6>FHTBfe;f|Rz)^}Y5vu;xIR>i^Idakc6wSBEse5rK$j=s z^y&6oTLmZ_z00;TjWlQwAnmzCe@S^E>Jy}rPuZ#E-QlN)0&{k+ys1LR$*mt}9A_4l zN^i=Q+++}PDEHwMwjQNFe6lKBtSqk=8(ndcY*K!-rtaQ_#^w6or{@S2uQFrFt5O1u z-9-zX-VRxwTdmk(Qm>Oe08QM!o1aWv{TmdiP8G8z#4qM!BpLv}Z-mN(AQ4%#Q9GVezq4 zm`YS)WDGFLU&6k80wS(kYv<^Vvq8tKvl{HDCG~?MF4<4DAzDIVxMLtFpZtgI>k(#- z*CcNd)_`?e4|{u2ksG(t?)#zqKfdo%Y%DTs6*T#0n-6_$H@2JTI7dh44TI{q^_7}7 z6!vs0j)T<)G&}nDzzd#bfDRkHhjP3s5W{DDJ0{=U#Yt>y_4f3XpeG;E2U}dy&V2#8 zUq~3RHo~Ig9sD!!go_hj^oI{00K1M3;54DISRNtOu7!2J#oZObgha?AgvlBjksapA zdM>+4o$Uw$-q4+fh&km)MMVWJJ@1q?G&EdlmBoz?&{p)o5oCFG;LvZ}@S)E0`67FE z`M_JTAcyk)=S?f7U5aL2bdpDYQ6$#K1pA-fbFAwp@(irxN~grHS?daAfATt zBY|~wb9MtQK48Y#;}o3JdzL+S*_& z^Ht#ytkT);tqasLY*jhf^UbMO1DwVC}_w8%wCpKW-JL592-q^#?t< zl)U^vhBm};NIiLRT&Jnvn`}5e+iH~_ozM@Ko4O~OE8@Kwj2Y%ieLyGzD#tAx8UIuJ zB(%5rE8{s}(0~29fwP8E^o7N_?dCZK3q~F45??>Abx;N@9IIf@i7ly0Ib;02|8tbP z%R>f+>(jd@e}(O(;~XIdTs*aV>SSAGk`k{DM<#cuMEJd;ZDnV{O#nvdYrKlP`+tV+ z+q;+BjKKL?5=V@Cu5Ihw+#KS$$mNGS_6^pN8htQH`iSijb$+*?LXS z9B?~!oN1dGacW@5MEcN9FL-n2e;HB*2kC+u5W-Xmpob=F5S*s^Xo zwOfLBg=kbH#t!w-IZ6O6^WekS?adn-8%IV)s)7ks4GrlTGu&^3&Ci6877=WIB4bgc zfJlSfm}^IN9hRG2SYY$v`qurM_>-FcI{>#()YF+A!&0cYO6o7vXg3CMHISB~3{sPHR*MvLtrr z5K_1(Sdu!buP>lFMAh$pWbI*b@Nwhir-SdF2iOK0JriW~6WpV|?S{tvnb7f%Vl&Li z4+S4C_f5p{&D1nShW97X=~TX86m~kf@{7OB<@@09yNs-u)Q2U6dF%DAm!3#KgGq7IK|w1D_5m0ybLZbuU0Oo=hh$q*5&(0q?)tcHE)de@5%367&N7 zLqTOERwzraqkHJ{w<=Ujt|7}Y@&pM7QdlI)Z%7{)tBHKk!9r)xLSI5V@`e3wk)km{ zR#MW`)U=DC4MfV^e4P9yW29hw^=32C*MGkD5fQ7|+zrQcyNg_#hQShzRLWw5U9nV1 z{b8h~#gTpqVe3{3MmEmqe2M)58g`i@qTp=3*DN8nw-{|YG0G?L&20q>GbCML8c{~} z4e_#j1&4{)`V9C~*VUmlIw602*Dha_t#rx#+piMF#`pX7Mra)?J9jZNxwKJm>T;yS z#R?n$%a<;_WIEwIpgV#-h~rerbVc5VCdZW1@|W!)!PXf|d9mHBq8u`Tg_a65VS1Wf zL66v0Oc$&?4p8uCtf+6|kJlE|3<8Eq>MR4IC>(M#ou+aV@``Z|i&bKnN zlk3ackg|R5$V5J+uPx%77FuLlz;B?J+koZ&MHmZy0Z1C zUpDAWAW1OLZ`%BmJd@k?!V-Aa8lok_H9(Ip*hWNNKw#+kycg_}va;KUV?{g*!P!IC zGHzB1tQbIp{Sk?KTE_{zyu8pp^)%c@oI6O*pyF-_Pq*GNN3aR{iO5bwbC?*%mvs2K zcIY3V{?)wHZB`9~Sye9)_%dPweT5bONp}xM;I^W*_a)iSbiUcjS@rnI66pz*;&J^7y)>`M*Z%bL`eOn5GacQ9!WH96e zqyYYUz-eW3#esS;eVO|gY%5CH=agutlQ<*J$rUywI_E@)moUm9Q4K=Wsh6)I8Ib|E zUR5>GNF4T1y>A}8C}u^mVHthT0*_TkMD12vY9!;!AM^w*61@kc6?J8e6@;@qs#L^A zuLd4>86xf!sVaJ<79OPHTeMLgd(hF6OXcO_wEhH7KunMvUX~;G+UrV9y@qJT49B|7 zu@O1E|UTw&UJyG1cjrMB3RQD|`N?A+d4A%?A@Z)v>054v;HOnozz zIWjRmqu#FiTE*Ads>@J6act_#%D(Wga^@zj2BU{8C?Cg-etr4)*C*w^Ta*T$^b^Y; z44ZTe-G9$m)|kJY+azJ=e5a+VZ)-^{&75!c&6Q|m9mm>aYHV}a^1fL3QvRI{)4haK zlLb^(lHYA#vlI zpUy)B9(Eu6xa&{xeTVsXVB2_BQ{*%iW{njc9u6ZScAR5qUbm~ zc>U3%M|bab!E%VcB0F2?=zTB{%R@2Y&o5~~lf~*SFDK^@y+TID!t89x_!byDW*4XK zftnxBst2_jz^mpT8Y;`>OOmk}8PSuU1yEyeZ|~@s@8?$!xek7yzpLwU`4P{{!D3G9 z@FxH^gTDgx47g-q4+cg?@GAxS`RO1#j*~MDxza`xA~rAJuNWEI9j}_UWlR}DH4-+5 z78+;}8dE?puS`q+A>M+7D3=BPOEAQq#uD3cl$O0X;8h3@`}+*@V{CNYcRy zo|KW+JM}P(d&d`9i2<6Lh>QfQB50Bx(?)wfyi&k?=&`s3Xz^zh7=fX$vJ7<-xj2jr zC2j8(`&Q3a7;lj;o8HBn6GzGH2L6$39<-jgR+S z4+OX*^Ag2gjVqq)oMkRHP20Eyyf|`^z?Zc{R&A@xMW?s%oQ{=IyY7a z#M(9+evy6Rw0RrlMRD;bk1UxpNd!3Awmej8q$m|=dqCvfOR1#eM?nrN0lD%&?1yA! zWsxfdWUs(t!0XH|0hd39*DquZr=hAZu9K}HDrD{?JAkWr^Z~Fbv zWH7>-D*SzXRFaJB%b&v{!w;~JJo)on*AP;R}NdKzt{O_~>>-{~> zro?;t`(cxg<6rM@n3;6UBopx8@BDd0_V)luAI_h5L^{ZS{XpC9KaU@8fxGy>AKd@_ zmZjh2KD=PrG@iZNhmGvnmTxX(q%+t>-0-(M!NW6(AUaDM8@4#=%&aU2$np?09o`b8 znRNDm$?#~Nw2_FEU|4k7dfzMci+)6Wlz)GDzo6S1&yTqe3;wP*6$S#o8=HsO9PBZ& zGAxY=m-{KI!(c2?^z@~d7b~t-(7Bg77_;Kn9{0Iy_NV*yVC-DTMZwmZ8iZc=eN4=M zE9yY%F41Q!x}0-bw;ydvf)G5s#h~qx;8d;|!*bSxaKi8FJH_%2xkf~EzqKK!qFP`& z&tV{BKf_M8=Mb6cnf;V5Q~j0uE?z8#fPvNx@-COMUW92;>ru8Tmef~Ku_%1G$~Jj> zVZejs*qD>Zlva$-Qi4~Wtc@*Yk_V)Y4? zW3;^@kv7*E-eB?4J!j$M;!3R@{@u2Lz{>;Fk*KD5vHrtS3(o`B2650bJ2!U~*pXOh z?P830%i%s^PfWlf#H;XC^_XU&`z9wR?=n3Do<;X9?T85Vc?udbfU^$_48#lgfg+$t z+fRG=#EI+3xJSGFlP=SsK-oq%<$B4F-KQ)+zOeD%s>+X!PVU)r&-16Z*VTm(XWRPw z1uyfbiMlD)h*uaAf8A;qj!gbmc}j3)t>DgtqZS*($l7!|E!VPdxmJ{upOOu0jeLFP z>z^$7DIVo1!pxq6z)Jw-uLqtweHx2ljsB@|R~fDpZ1=ITFCKN9xn22@*#2H1XiRbV zcHX`+7FM&3eay^pF!~~Off0-}6>tuoOG()3j%)r?j5EnbV%VwkU(48UX>iba4N^eZpWVAmTFR7Xhk| zHZD`Z;=+L;HJ0|rsSEPTcka=24i9qe_8|}74t*)PID&JRHjp06f_Vqk)^AIjKdQNI^CW<^ttHZhsZ3?n=oALkp zZIa3a$zn%chSWMATdM&mXkkRkD_#0S2j3;w0{a1;LSg`DQ%al6b6(83JriOuoU2?> zd&x@?z8x(K$dT*}Cs@|x!bG@>qy$f&t{C;RhuYGs4k}q*dpmTZd^;82 zA%l)X$%`$wO6B=q9DEtu&wj? zFz;J(tXJu@mraDvnS|8qIn|O{q^6{(45wzJdA!*B_wToE*>Ys}cf`e@4gc}gj>+_l zBX^03m8Gx8)vU%XAaM&@j4R_362dU1&6#4W^>`by zdET_Ns2cB5bsQU)Dl1zx91~2r<2YvQeRDT%E%==H{bhM*MvCnhdYndy_D>UZmiCZ4Kz6VT7()~Z#XB$<1ps`pbxG@ zj?E*a2dQ`5m7yN&>A~fK>k-rsu1A}t>Ar>2`9UfWaYeIa#%A`pDiddn7yP2X{^N3- zg(5dq^Nn%A&BM_OxR^}phsSm8YWXH!YpCdoZ?z%AN$upDlsi0i=-R7b|C=_nsU&y} zZ8#QfPR>27tUqUzH6Ps3xkuM)%L2xqf{obdxW^N{LcltB+lgv@QNJ5bU!j9yola)nqt`1~;qr&WCxP*I&w=^<3MI3SQj!ZDTZDmUA zxgQ_Cdn71-ZS2Crmw*w$tZn@(UnS1fW>75;5%;9^WXE>tl^pp)fn2PZl7gTJNt9}t zrkV~8d0nqK#5VjCofLMorIw}Y8{gYs;FCR&Sn^1Y0=0?v+K*6&@9FxEzllLhyhS-f zcZmVo?TR6K%m2E~g3JIy1LmUMdj=&rAcQLg0L3s(PwvYu5vl7K-W9aun0Y)@PF`A? zc`)JTtGV^}#&K+sOTNtkMqYyfjKP&tTM`uO*$)*sbdEoFQp}VU4qGx~D}G|FPXNX!p56dt73ec)1gLVp_3A$RTwvgB&^@1Q@4*%Ed9*l6 z?`UXgFLBQEl+yO1T4leYOS;v+uJ#xoHGfNco0Xi*w6o}fyLPgsq~dbNqu94{ zO4~178(pCk*!aMVhc_Co6pjlsnpPd)G$YJSP3?t^M3DD5oeY-($~OoZ4Gj#qfz0^% z-AOmv`}X5XDH3wg6$3Rt&WTdy$6wF3=<6SM_7hH9@wP=ueR=z}=Jkq*@poN|y6wOC z+NyfgU;mO>*pi?$3!yvHpP%reu{tIUX?dS@OX&a`H+{lhQTCV z`!6)?b2J_f(K^v;xr)1DJu3`|m~}R9RqVmxMYd~Su8JKHqAm!{RGhw9IevI?37QW5 z7$QS;Qa~99_dtF>F9~rv!IBq$i!Mfwg@4?&Sh&DcVSq){OwDgu>mfGUt&2Ggg zkYY6k05a}&D}K4|*t`Q9vfrN#SpcNfJy2t4=AK%Clh&;Y3-$A( zh}n_cF=Ijlm6FsZ9&={dn?7W=!Szk}|1!VXd1 zTRcClg4=lCKE0#2b3XKH3vpMtLYw=1ZBwLFSI51(GL>EmG-{`4gyj!g%GV?YhbUEB z^nSSX>zJS*gE&39TqWx}i|=`~7X+iB|^72h3`}GT1p9sCl!6mB)OZFX(Z%=Gm6@ zqMdZaN>+2uD`IVvh$D!QFnui$0|5(eeZJmMz$M0n%xFzPqVP z1JDfgK?53nNDDDCHolxUv#~z0!Ka@4t=m)(GF5(lZ_3ZmSIo}7^!7$J{aGXem}FFH zpHz{ReQ;Idxmd|AGQysZxqktZHJ?{Mo&PQX!8#NWBx&ym&EOYAXYezR7^Y%4Mi!1o?a=5B(8vw5`Ee=q@uJ zW-ff}m|?>wmFbPiANZ)E&HwHcjt!n9U(+wMhW@u-@o;a2G8O=}N4m41(U zQ3XT$)DU%Rj!}h$hA{LZ9NJ7@ZzpKH`wp9WQO&t&*oqqy`vTIZybG!RwD}vHh%vn= zEqzp2cppo7Dv~lq_wm5t{25GIgr{JrT;i~Yc;G5qGV5PxX3rsZsc+iTAjEMlzIL06 zoI974@oQ_B*v1mwywLfhe!yv3I?o}EU0YlObIs^(Q2h%>AS0|bMxewjWz>MA2~A#V zhFJ&z0f1D4sS0QId!2tMrqqcfe+YuN4$%M43+_cxf8`}p5~8Gmkj^vccI4W^stHsa zFNO_na55I`Jvz5DPyPp}kxB-ygzExY;{^tGh|79d01tsN0*Ou%Zx(R;Y5)zK@z&n0}`AB3yC5~I(QdNcIeHMT)wKH;ui)l9f7Y2G3=C>P|nth1hON3JRz{c8R}&k!x{jskEfzi^2aM=wkqiz=?sr z!4vD`w1G--WpVNU`kDU^m=*~?ipV9sED2fq_d6wlQU7zyWGZxjp(Nm0_(=Zq(fs)x z{ObQR8f97CrpQ2gQOa$=tnN~$bbPk_1MT4>O3}WR9s3tLWWtB{gIvLH$LwNQe3N(f<>0M*5Y1!D;WD$^ZSt|NDsmJ;Eol^9V*JIoQ`d+ImQg zj4YgRt$~CwW)4l7)*im(HkNR;wE4mfiI6*yCzjg}lpl%^>E9()!*pZPy^T7ie1lEfexBW3@X2M%&YzocozWUa-;=(;M;Qy6 zcQR#3*)317m6MrZbK3ng%M5`4qIuAUbLPduy+r#hPoUE4ZgOfi~(Mqo}9@>&oYQi$sd!)dSaV=&&fhDkiLBtp??3Wo{0j z$+?ak*u-_h>6iJ@&jXqVqjNXP-$D*#Bce{kzkiD)CcmGZ`QT!c6@O;l=wsJ$ut5RN z@|3^r<`}w4JVKrKsXj}jo3kAyUGw2r-b#PQ8!`{P40%%wL|eyP3IRw9TlC8SBF1hG zt;F502Tq@!gS<-nE_vqa`voN zla~+oiMFT8i{2wpct1&9Bt*w*{}B4X?q={CPN0AO`3DP7P>>2NZy0<_PY(Uw0Idat zBbz*3aC1AeBVON>cN5yW-Z10D#{oZMs{mi!vaRekWo|K~%3ePb`TMo-aH&k(FJdIV zMB5cB%;!3|B^gO>}Ed_$Cw?SzJo(XYl&DY&Ih0>>&NC=lb- z)M|CB`G)j;p1T%J;VP=sq6v;Qdh0uNH5`bKgyYlR9mshV@m?@AEuAM$@{YU4Pp{ z3Mhc{Go$fWTjPn5g$$~)4uM8r^AcB*lruAm*HlK%?Aw~&U?#Yr;r;7V7U9Atso@6) z@f^7Jo~6;zh+5OS)s_w_e!03&Vx+lbA9s-arP`6%ADwEkl_CdlP{E-CIE%PU-5>7V z-kDc9vFfw0aOl0(F&p01S%v_LEf0s5{1v_jORa=|y8h*Al^_e-&A}>`X%+vG8^IIR zV?3Xizlu(Y7EEosLfB(}dxyjm9PdZXm`vrQ7X+YVcL%Nnu5wo7Kb2V!RQ=)lt{2LR z>aing_6{X#esvhw=s;7zGF7XX{O2k^(T}}=+WFL}Q`FSG-Q7uMy_Y3*P*)sjPkj|4 zjJ_ZuW*@WAaBj-&5}w2%8C9yh?Q0$4CQ$+gBF1sg1J2G`x;Q@9wYRmruav8_8X8_% z&@y-`pj03WISBRN=I8rg z_YJx3YqY%l)@SKbl>Rv*jjXw#LF<3a^KLe6dSnf^%y*>37BS1mS)~My3^CI;&8|F#g7GLqR<+$X?l&w)s@A^1OkDBqX$a^G8Uqu4xTv^D0#@7iv6`D{KD$$>WWAG%C#|U{FI<0Q}tKv zlR)bsfV^<=V%EM(s1Pue9=*)kvK0sDU`F`-g+svCRwd5Em%fmWMux? zyjg{ZVL?OtB)F>;IIPhkG+kKd#i%@JR_JDuqKU-i#YN;lPF|S?6$hy=I`hqT2f&d& z%-ei!&)}0+lF{G4OYeN~wBy1lK|vqMXi(Ldy3FOPg0TT8A;Zoc^<##;=FOYB-mgn^ zn}lb8g0-*NVwkyu!^b$$Y^y8$tO#j`a1zA~V%x@@pqGNK6*(hWjOiH}Zcm>!wX{%@ zlOqg)PQSCysqxkkECW~oKwYGHr6`~MwlZKhO|X+9PaRiu%3q5LuG@A+B3I@vt4USx z6@v!cicuYEi*DR+AQB9cPxT`FKDz~b3r^qa${u0?cWlzTD`LfqmA#Em!Yp-B({(Ns zL7qivT#&~iJbdIzu2L2w>m%Ykwy8E*jRH(Ut1;jUl_>Kk?-R?odP?^*Q&9|Ki?O?7 zXJ2{`!CRwd0&2I0bE`CK>YeHWozr3qTC-Uh_oOnvL9VwC;)KdaHZ?bsLO%vqH|ITALR1()R!B*33^>eA`x#m2Yto~D@nWaI zbzo_2Jv=nTd+YPv$GQTUP8;jct{9wB#ZCwy1m%4V_ip4?pi^2mK^_u-Heh^5kKX_N z?KLzhVi@!N=uu8g%mDN`JIJ$;x`itm*BXQekP)unMiQkf?Cf;HR!Z%B=+L3I92;-R zLy$bl1fAqOd2;8SBv8Wu%JETt$lRFz!4Jkguo3AbAmWKcE-R}!l(NMW?C`%=P7!w^TeE8X4#0%qNyZ9#r+*i5(tK(;^L%d zn)_)3Lf7)?)F8tB_WIy;WhglR2$~>*cqiYAQ~0C(TO9nc&|7a(^Y`%)vK*vuXq^LG zPr5{%)V^uK;x`Hyv+O2jKHP+Y{oyilwX|`0+)BZvm5$D=ffcGJQs0MU$B29kkZfpa zagPrU3VOl*JT{g){WpXX@Jv9DB^&OBtOHl}=a9YlF6C?FprMZ&URg1P4jQcgxbB@g zS?Ia&hB1xqV0+HaN|y)W6DcYfRjaiqLJ zD7leF;B1d|?Y*jWts$M=@orf|?SVgV>MfpJ;irtf7hdqsI?zB3ntImf0;Hk$o| zv1T6oV#Z5BA+2tbzzvs>(VZ|Fa$pEZVLs$Yi3m4j>K5f`LnrCw<<%tb;IKAPu#q1T zA+Dyj&w;$kVID_1WWo;YggLA0;)nQn3Hsky3YrSAh+$tX8+Sr1-cVQ9HH{6&-Q2@v z7=(3^{%Ow4_1I=6j#77 zvPUgTELU)DkQg0yKlaA~W>kn_L|RIZh{pl>`y)@-w<{*E$x^{yqH`VpHNnHUsg;o{ z@2Qyr$c)r;6UG%fVe;N%BR#cHIDM0_u$VbN`d*{V?;5KB3OSe~U+hWZ_|1>)AUZhG z^WDuUo7C0$2i9SvfW<+uG@YuDU zM2NSeW0Ma;OIBg7oA{x2@L=jO*EzA| zKT`U8Nb|DN*RN5*n-60U(#d(n#0tt%%6f@V#$MTTd-A|LWB0W47Jn=%z}F%>hb*)4 z;?C@VNCBR}6|e7-`s~@)57(m*==%9Vn6Qm8=wAKeTxaKhoY}$Hll<~XD2xf2dzKe$ z-I?}O|K|xmKcl(od+p^~DUO00(hK$BMLDq#iq28wS~@)1zEHG0&kPFbK~Wy)n{Ztx zg+i|z%{OqPnaK$5`Rt(i>nc?HWkwE;0_)UHw>?9DYwXvBCsm=+YKos$z?Nve^Usdm z-To$+)-LCIYS=&OLir-9A+tT5KObigk&(9R&D}&apU`Lp218O%Q6Ur7aK@29O2r?a)nz&y5?yMY>&1<- zZd=US-jwRD^&I!rTb13KRt{UR#t`Sr;K((qFdc`wr)|~Op#?tssj6VI%<7k3hI{<} ztf>4~Ap+?6p$lILE_m7;@XB~OT`<0E>k!S9c!Af)sxe9TLY|Q?vQ$N~F)~5Pwllh$ zjO{QaTIS*je_pj`p2vn0gSDQO72|C((ukX^$*znL3s7rdvW)H5egUR!3?7`A1_-zR zI7zol?flf$^+gvEC?7We!-p+QUdhE=6>%7-2(mzi#d`X!(MK4D>F2lS$$2IL-EA!? zH%)VfBK(=tE#A&$uF9MeS-N_*%pWK?s-=Iq3GN{~4G5)%gM{ui}8SK!2Q|^gn z9bOpMvW(nnG5lPAkJtLBmgV#%^;(CsZP*UZR%xBw*d129RnzMS zXT8rOT5d}&+i?Re*K&;_$Z{>|DrQi;Fg+c*8!Mw@d52ESrC+6cf%CWZp`yF~xFvR) z)k0iw?<&@B$d-t=&t)5!nN0z!&03*oXl(RmKD}k%bKaN1FxWFX-1e|*jj1+frl)5I zWy`YGEp@@%d>WbhHI6}Wx%G4`0*eLnmUMUs=57X$(-0^^(eswj3xd3@;m8iK2QYp> z==hlv(Lp2_cLDPqdE*xrnt-#z;wFuOzE#aLb91HsXftqMpyY_Ex=24t#64$bzI@y| zG9|?VanggMcSw4JtepMTLzc4?+p$s}DbPM0H8p-&&z3%9`*Z9X>TR-KiOdDSwU-IAR4kP`-UZFadjpDJ3RuAf(9zH<( z|LOCFrt2CVejQthW=c3HYvm<=yI_G0nwm{pzY1)K%y-X6EO6eFYO3njFe`J@8(-7B z5?%&#L2?rhKnxfjkE+?{6%Og?cq9&}$n*ytFQ}T``Aar9=SYj=3T|1CPcgh1E39kI zu~n1rt9tF!f{EIquVaMMo=vDjL;*yqXn?fKXlIN4Fb~x`p|XiT4?cdNfCFlBOU@S5;DUp)`)zxT&ak=FAy(YAqw9kf5OQ_NbcL zS_?qpALg;kW9B^bqfG`XDnYKU6v$xp_eV?}55vdo>=sam;;%@PVeTy<+YEWo^t*Ro zin#XqoHRWTGui=2o)nLs77(z2l?L%BxPM_g)c*v}7F>>>m!#2R0xGM%E{<4X>_!r9 z37EkEJ{B7W0)>;BjWGBg6@=wuClj^Ha2zUUeE9IZR7*!s4_6K{#)L#fLM}wSt96Db zB0DE1sxlRxXjJukpC4+dt7}Wv+1g^raqwU-YD*M#cqUv@Bu6HC{S&)bPTzl%oNP`q zZ!=ldBB?Y&>L#8Niaz7LV`KE_a#_V3A%y!I$m3gH@$;uT9JpARz*b@e6Y|+P4j*<) z`-agG5FF1wf;bdleoc8g#A*o%#_)X&6S2u&E|WVEBm>*vxEi&og4x0LCaL+Vxw^^r zoFe0|DLl$y1{#M(hz(QEcm$8dLjk+9L-@!0$gJN{_AAEIW2|B6Y?wKr$YcTllve zIW%CJsMI0TBfoX_?C4BJ0&J6Zx+0@fdjgzmkEI{l-FjVB$zHX7MNiZ9_x|-%$wWC* z`HT$qw&_Z1lbAF|L8bi1z2DE^Pg|>! zZ$BDQZPBx%$zpkN{EQAnAdANC#od@p3j_nzHViRYdVUKtGXO=bp@M|b zWkh$wAdlu4;y@#~ZmVk2(C{HU2UQlDfhtV~F# z17kP_hr-wxFAtC8p&NK^Yyr&jaPk|K78PBul`npTAC^xq*}uFN1;_j7S*o!b55_woMe1&=WwWIlKDKEj%a)5}6;U>VW-#ZE9|6 znzSrOX#l?oB_$;!o*HUj#CC|68y8 zmkRk0SM&IP2q}UPCzaFpumqr6a@-MQCq`m(0`+vUkA8rlr z@h{6s`p(}+e_5^n5N;$kj`RmVKw>LM5C3Yv|2#2%<=-F8UrI>vpT5!*p2myn`wlE^ z>Qd%M^qWJR!F3Rd62ZW4l?kp$D&ZXbF;4`tl0aXlmz*kh2OEV|8y^ z`uSQFbLCmgtxO;@K$1Bk3t#EkW?cjnAh1s7R@zTHk6Q!84d$Ir-7^PZhFoY{3vmaV zcG^p#yjKk;3&JYiojki=&RK0!;pu__pTd*157WYXBPI{Xa}}1!y}yxF)rztnsgCO} z%J#O+`f`BKZD^Rs+QY+Oczoe1J3V?C$_F-p;ZB}}$pf&7d9}4Pm+$6({sD3OCMf9a zBDdO&8`GoB0#Gvz5D5pXz%?k|>4$PVM(bDx#Loy$p^ORt@z!0;CG}H^InTAV?Q80( z1GhYrl&S(Iu7@To*oDib;`uSWC@(j+q>VQ1mEt}92Id`GXhyj? zmzBd|u`=?92%Dg9#xN;Z7F#CD7FbzY;yYMdF@q9abzMh?XtglD2@a#8vXYmdzY~}d)PMLxCE$Qf90y}yTC3Sl z3_8t?zIlyaR?uxMv@f}AEnuALyVcOKQQbj`jfq+*AK2B<5AL|hBld{GPtICTdEC67 z$hheo<*}AWtG?z6=Oynme|U1@G=G$#P;6wX^*bTJkmVc7(_F>T+cR97CH3@TE@?|X z4we=P7p?VN5Ly7-2@fe!1>Udt+b7$qJiW(ePGI5dJDSPuR*bpsEd@?u^D_Vw;4o$# z49$N?^;+^0y|!uFDKW7PG+|9u*!9sCn6#uCoVS5c38Q4f{r#V<%Ur#Bk^Yjr$z+@= zFmRAKe@?jZkToj5w&ihu>rdN&n!Wk?%<+L+x%RIi%k@4>q0n+|cV8wLw*arM_IU6E z%fA#$oxu_(kTGC-=1#M1)(=6eot=)0-laXqnFeF@tCCKJUTu=6bqZ18QI*;oAN{g; zqr}ZnxSegA;7U~Zg)euH58nRVY_y|_*>~ys8@o1ImnW=SQjF0vlx+)({F*OBryje$8YpaPdI%eVmiq8NZHhORb{8WU zCfbSt**-rFPO6V72Q6J6P6;$(=q+|D_LnIx9lijDcq{-0G<@~ID!n~e@1j^S1yVtMSxM!sgZT+O_vaVJCV{@r08le5mU zKP~P)wL~=#XJkB0V?^UIR8cYhvr147=Xq|CyTvw8nDzISFk3^L-*HAim6}5`tf`h> zAI=!N-WG0_c=gyv{YSo%LZ3nxJXFV%W$StzQzd1QO;YBHdRspxL4QE=RQh1d6!%0m zpP=8{93zEL*NZMLhU4Gk^(&59CZ?#iE~iBeL?}UdH>z;GHRw(K2MghQ!E(8f=o-ys*JkvOJ_i%TXV>$ z=FsT5;16a8L&a{2C#6Be7pZ9-CTB|bVX)>I>NO~&wr+W^$L;-E%s0OG&~IB*GaB|& z5-=N*WkC>a;3#8dtlii8${dM8D&p;VZGS_ecC1}BKX~k8a!2@{ghiD#hamhnF7uINK z-Etl+BryNIHO+zit3eS${MpFgKJ_d|z+>^ZZxQy?jDVDOs23F~ZK zEADBzgVV$-c63vf6zINYx+mO(G?$kBgHpLmPnpLyw*4GUkrGk4?enF@|Qzp@tV=>3CT(t>5h{zgvB#|8vvt zZyEKhCT|too41KeY`_r>{~^^kr~~DB>zyY@G~RxiA*lB%`!>!Rrz$k8r8zFn@lTCt zWhlqNg!6`XbJ0$i&}I+t{nk{?8=~(zQk~e(CPM z^T1DJ^uW_HXyR0h5ihv#M_ba4p(bBULvdD+N>O?E_zAZE3SsUpjUiJ?$k~ ztmtqsPU$ptKxOjCzDGA zOYWt&RN`cIc#ZxNV(4SS5`;9harP-oMYA;p)?9+j4E>$3p3oy^XP#ml*}cGPU-!8`(~dNUJ2r z=Kj<%$OyF-{6Cd_2UJv9m$ltuY7`6v5d~TSo2Vib5`;!YK`d-2BuG-CanKkSGXMMeTwM|*nd-dLZ=bp3AK6?+?7XY$2 zxU7Qqs^wMlQ5_8_1wvXzM)&LM0%2AC(~GG7P?(`G)DhOu(sC`k&%Ar{2P_9{J>~7~ z+CTE<0I$%=-DT>ZA8t7J{(dC-{n)BVlnYby^9h+vGg-7*)#vj5;4(Wvr?idpL|D~W zeY`(rrEmB7-MM3KW;Q%BQvWUN#nY#68yXruf3}5?y}Z0?)F!pRb+S#Mq4Qcz>0@0T zt6Fm?KW!ERL)p;H#00cT@{xLg*w~VxR)V2IrtLZyj-b!qYt%5W^wGbQ-Q-wl-|{o% z`=_Is{3HaZzE3hwsOC#Ssdi)?tZ5i=V72Gq zHyJ*|iL6ukq$HTR#1!j8&3F8~#k~SdcY@|QkTt!hM>fC%z@{SLP zEv*)Kn#sjazEgJIu`?;D&z$|7o6e`*Rg{Scz57PhuA_(O&#wuue6@9LD-YRnGIm=~ z_W1Wb8*7|fs>wZz)6M4wS(^U{3X9e_ZsXbi@XD9+K{Vd?w4W-us?~J;X6!fLxpkq6 zY3uQn=WQDDTIu;dZu>e^j+tmQ-i_`@Bj5nRvemDKVlREshVufGBmHc`r&{-lSdY7w z{M`;($yO2ZLgDDKVC8WF&OzKSfK?%x!b>FSl6&*^`8p z9Td7jC#hMunW0;#e(6#!MkiNWoMcOo(xu^*wi|!_qpiJ+Cm-+>tQ+BhF+M4j34|9F z0T90x3|hlofoOOSpo>o+iTfi3Q4dQJH@gFaGHSm)sT+b;u8W)7kHr;CRB!W6Q9<@) zZ-0vLaMsO^kLu7vonmx2D6Xe3(Wp4}4_&nXGU}?N*P*H>f8PVxfJ-sdjdI%kv^j?? zA7ilwhsR`Da<_e|vv_zuYXm|1Wta0S=>T=#xm*Vkz=pE*Nm+L&me z?m*4yiK{VfWIlWqOy+p*YRiPj?{Es+{gd}vK!H|!KDa&y)U&QFhxmY69 z?41{A{0b69L5&_WRq)ewDSyB=KiM$GTle7uB-TO%pC=}^o+>cI^cFxy6kv3iwC zpz;fV<(RwvU|^selYm^Z?bjR7PeQ{AR6#SfZP#9HnY4X6@{mG|)OP%#Q+o0QZ}Bs> zhVVN#FXlc{h#|5k2P;Pkv{}ZMDw2=R*K!=rq=xI|EuVlIa3E7+`atBEqRy3lxt#-5 z&$8=+Tufg_#XTnWk!n~X&uHzxFh%d_FyNFv9K)@fy|-tV&U$qt!8*~>ZD~Xxq^0P@ z7lBTs2w1Z`-Q~#%Howb$QKH(aj(Ou1tnf}rYIv9Hh|PR(vc|}X)wYdwcMb-pzB*Mg z?5#n#zRLGcF;z`?NTkRrB9k!*emKZENp-%!vT@bhR$ecCF(q9^aA?mo^t*kC=2Z+u zNFb6kZnd0)pQ7NLcl`WvVF55TCLDZ3{I}OOX=ZakzJ}rqTjObS{ZUf$-3TZ(P_LSq(*hiH*$9U#SaDC36608<9;xoIOI(+r=mMA|YBjP)q*s{$a+^QIg_7vle z9XyJ(`7tYZ-SK~@DCT3itE8OQ(%GP3INwz$h2?pDBpl2SsEXJwrkv4lU0L1cqj3KG zZebQ!4;GcUYLiF~m}|tXLIKfsaq|mLN}Z7iE?ydi0*_!hx6VNbkkYIkk6J-~18pt$ z`K`?Uot>TWtG>JF>HXzyZ5|jZu}GJ+=>kU!oVo7hs=e&&7-?v(s5qCb8TI7J>V z>J<1Ncf6WHJ}GojKxtrS^2Co+t!z3Qja1D{82UL~A6X@54c8_VH_MGub@D339KRIY zyPV(^>|~AE1OQzEf`S)_M0mAUV2v9u*6-xxlm)FLlpDl>kjTit#`_=ke8HVk6?)V) zCbM90Nl8~vJc5|Q$xC|{IXV)nU0uI-BBbJ#gXHs}#OP1b4TQk{t+{6WCd~~slyq<7 zwgW_qp7Zj#S+AMDd{a`{7RJ1vk8=G*1-Et8-*hp0!E}K0^>}@4vAsCPn6nrY5m!CZ$fG9 zNvOu-?A5tD$cH8}x5Phb0vRsp{pOKzST=9(z5ej2 z-0NV1m$KCe>7B=dYF867%t)KE@^Y9ceEs@&5$14TAGN+Nmiv2d(na?BE=9sCMdvRy zVS}t#ymN`K_K+5i#tW_~YMt6QeO)g=;qW@c;g}JtdjS^&pQ(Rc9OZ8~spu~*?;rkB zHNpj37b*|Y&h+|aGjXYmyL-*59=Ogqu{!*bUgqmz=4kVhEnn}#@G?ZMn3$Q%%5@5i zND?s#DnlX+wcDPapLpX{G-Pvx(q!c+R+ygL^Dshv@Wkrn8GW|K_9cF&(byW%JY6`h z_V(5T`+?bO{kI|2;^mY>MkL-aYOaMwa(fMu5QzP&KK|NM>NhD=V#)v4U)QkF!XYB; zyY|jo?{*4z!$im*0?}$pOdon-+MtLfA+ptnE73%>e)or7G)$CKIbSCypGUwzSJTY~ zSu`jzMB0!~HD>F@5Rehdpd%9eqQMIa8BjIY>b>#Ltp+q*Zw?Mj5W&mG!O<}_H9UQb zwQxi`&TL=NvSK?MTWlRNf$2Lt*y)_AY7fm&rzYy*U4v=x>$$(^pmf%47=+; z1!`RXFhFd=UH^M^Wc~$gjV~rWL%bG}>@+Q73JkOI>|Q*ZExj(qIUISmOqNf|mB)XC zT|e1!U$mO!`ncNrBiIPOC{8+^GZw4p`OttooYm&Oo(YE((rl6G)`i2p-f0C3-XH{{71@uiWGo+v+Oa1ws$H)kuQCC(Co0GHBBmfdk)3 zOpTm8Su}qql$4;%wr?M8NDjk%sQyuYK`=Eg^9)CjGirVKtnOuF%k9V;#_Z@ua-@u> zWRd3B@Gz9C5i}_CgfM$MJL=1;rC6-kE|3J^R;s&QB%!+qvs0wu$k4b~gaqJSg}1DI zFJ%Nd2|R}9DhY{i-bCFm3l$B6;1lfdda>A>GxTKvP+$;Ir}!aJ%D|IkVrBNVL4ddA z5m8d++vQ|u0%_#YAjC8O*uEXKIa86xm_g5)caobHj*PlYR%Uj~Og`9mX5@itzYNA?7koQ;G&H z36jEcFXb3raSZ@KHPXn>@^Qlc;mLZgv1=LirAzs@vP(7DTyuF8ka)u@szajezU%xZYWkA z!KU?4ymZ?0_w31XmTeh|4O{C=yuGEQq^7zHEJmh<&z|gd7poaCnTlqTiD=QGjCGgD zHi`AoN;8Rz?7~m^;ukNnt3NF5Exs$9D41*|`Dyg_bJj1Li27PnR?Vjq)Y^sJX@xkA zH%ybpH6QJGm(6#{YDV|ohI2C8WF#b9Q6^80`zH6?4+*gwZ5AqEa>N8+nofagXt&_Q zIG9dARIqx~A?zp%O_`oaK}^HtG3IAkSr5Cb8)j3X68CJrMm0x8)@!-T@2wi!mP?!D zq165EN=`m$vb&9?TI!2#g~fi(r@E3(J!QMI_a0*%s61uWrx2neP;leM4U`W`7cjEc(rE8=KvDO##Mwt2 z%IP`?ghoh#y)@E>rVDQA48N+-;9yj6Bl`?bLiQJ1O@65Fh8lbV-i*74o;bs zTj|HM_}-o~gbH1w%>hxgDsX0ZRQd`Cj4}b{JNQDkoAf-IEi;EpQPEOz1^{ULom^< z2(RJCC^wpc)(v*<39dk^hhQ&H%ze!sxELB_{)snr$7f~Dubea1fz@;|@ZhW~NKT(skU)!X=A_HH=N zQjj<^6-(sh^0U>_Oc;scz>|G-6r?tidVMdK+i!t?0W9ZEF(f+HY`UW`$zZMxjeTt$ z9l_=8cB#MPQ@=K%>uV-dST14E5|q$rU!85VvY=@*mq_AXf* zWPdm40W~mq$7KmB1y=CG>=Q@ME3|x~|JZ`%%F&h2rl+IaR5Ca(CizM;K0THK5Cu_K z#iDn3n40H~;XEL55!{OAo|ret1yGNTInQDMCzeDy%pV0MX0XHyhfhGxn0M=Q-yibI z##S?;?Qbv6pt!7=defe#trnrZq|m|_taCQ);y)QpkC!v13wrlBpqf?;#jjEF1tmCA za7o(+!H0p};7~1jzK7+VkqE?W!E@og7z3fmUhqP4Kdm|=_eBnxpPwHq>+Llv$du4k z5k?%9xGw7&z&5a?pP%UI-H{#R?)IYPP`>;SFN1^n4`t~;n^K|10;wtYnQxgGI|=1( zCy>F$Wnd?yqVC1>0ahJI?WiN@0%?`Y2_Zd@X7(}q-j51k!K4d;-+GF24us;cJgh87TQ zqY;b32jN@k7}eizTa+_b@{VeT}F@ixnm$w?bi)5BGf09*kd zGkIOXK79sqOpLGP)i$^0+i=bjKyl}~3u&G!`iIEpM~ph2{i$3eq7?H-_oUh9FJFcM z7QrO^>#OjSWMxKNdY)jTOGN^P{jz z$QN`y@N<32Wep<--RkqoY5YlLFqln@`SQ@w#qp3UQM!t~R-bU)1vA{>=V`mOE#kD( z6QU!gy!8M1CpaYJ&z0yTtL!9Au+O;_vp~_BW#mIfgS(!rcN5~0v30P>+#t6Tj=pgi z)d6-XUtU*T4I-7jlM@S@p8ng^PYcUh-tLtY1DRk zH?qJ({j2zN?B^?ukf*74dvyvQD>B9!2I23c;)_T6PS_qrPx;oz0(q0NN zM&q00!-cG#t4R&{LZ(gmMCkc|mb0s>$kXhGwc@rg+l~*e4E6t?pP@hWWAA@%qMh!!5 zP72k0tgc=f%dUe@bz3$2x1OFaVCdr+qdi9Te`O`MG7xYqu>?XMm{_))$t9 z-n9cXuVz|M>iV@OTwd^r}r%mzRxq2n}rJ&uzl-7y)MGr4q+wZ6=c5L6S z45bVVJs@Et$f{$X&xtl|07Wpm9RBc9MwL55ZlXab^bwPrCO`VCtY$5BQ9>#z;_`A7 zvQxv?R%7ah$U54D>e-UCSfX#$z~kb_kJ%JMfj-T6C7c(YB|@DRz}?L3?557kIM)!a ztyqNMrWzU=W|C-SX|&|*Mq|=ddsj-Vxf5@&&LeXtif?z)6By>&?zCb2xmNS0E!)C# z>ShXbCICqxr>B#EKUr2m$n^9yiRbevtvc|xb#-)Z`&~f##$AQI-oP2*D)|K^ad@@s z;OA>El=L}bm18UpQ^U&)(lj%lqcA#n_?}w7X16G8#JTRG*De!lV`$i5e=$Xxd#0TBtr%^Q+Hz0#B6+^cT?O^!pAnOv?}&9&d&@rWInxdu)9a(+X(ZWK6&z86GA@zX zsycy8MIk`HwAT$$-v9Kiq`w1p*q7FW=9k@K%P};u)h7~{2gGbfEK0f|5_nuFayAa+JTewLc?c@CQ$m zSl!*y*o@alrKX4v)Q)fa8fWGS>nO z0!k-r93b^}Sg{_+#;A6Vz_mP1^l}^X(6I~VUW7j^o9SJ|WLlBYRS`?9F;~)i$~Zmu zuB^-$%mKBG>nPL~^KCxC9x~BNE9Y8>U?=Za%}uBu-X^u&{ORfYGj;!2c)&53_UDFI zEy#L*xqI``@?VTd`|#U7E_^*a;v8Z9UlFQ0CgbxYZ`d-tidD&T_cwyZ4S8rzR%+A?gPsI15=Zm*&; ze9ActyH8db5yjB`N3XmE;Tln>eQxhYWQq)+l}!R=%KG^3?OQC`IbzJp;)%GDO2zH)>~U9+CNV3ABc7_NSbe)jFz2s>pyEK21)W(4AjxKS&Yw~ zBdq3|l0vy5YG^+r1WXzdBo)k-KRMvdqzEC3UDvE<9ex7cb^BUG!Kht4N4g5%aAZ%6^q< zC0Cv=l3uSFKpVKh_K7rXVI(C3xqtH?Eqk&|X`>bQJeqhFf1rss6rno96Ps}+5=?q;R3|PD}D6PA$(U3G;&&x zR8s7q?eNxKK)j+QOzP^<+x=e_^yg3i$ej+! zted9yUDwtlxeFhZJSl$B<;qHp#?Zm%5<2PNUl?ZF@bXT+_E`O18~j3pYQU;-Nn?m< z?-ro#+@M*drs~OtujV1=ckBIGXM+`$W$0FXP?15gFYVE~Fb~bC!IPVBOW} z_>tvNS&x04{F#apk4q}rqa1FrJ)YD7^=nRwW(~$onXO)S+X^$fT0Lj)=Y`ADZLZfe$Bf3bWyxst>^Edrr=*|gmQy*+&1!a-2{%|t05Jq4az_O|905X zy$|4PbPR6CwQI{J$6SB(LzvBs)ymko3Dqla7@x=rgb$ZNL49cvOdQCoUo&IHWqbW- zL@1);ij57-a)KiwBB1ae`XV4;N5JDV(w=kUgI1+^6FP&v#UIN&!*f@~*@fnpyA9UE zq+*9y8IES|G#fHLmSsuw~m`q5VpgOHT=-g65y(aOYgID;tl1mP&uYC5LWRi7O zy}fO-y{&quk(fnBga7-3a%VW+l-+S#wTT;8CtUuci=oTF;hV|beyLNI1lS!MRunmQ zEHf?e7^2B|CFIdcO|mhd2Jn@ets9)tjt(6c1rw7&3_Y6(x}i`4bo@NO@{Ke^N9Fxl zuC{QItF7Wwv@Y!l+VNuKcMh*BhYhVifBw8z%$#X<9y-Qe3q4!*9e@04G{|*X*L-AM z`7t_K_7_&_CQRuHNIxu-3p_7=oMvqdj;ha+SZ3HEl5PEj^-zq=a$ERRF5jWv;cUui z_Q+ko!MT%W>r4%U;g5)!4pHM@KMqXM)$B7eIceJcEUI3_Tmc{Qq<#KwEk#JsznZeI z-HHDFx3DPj(;uw{$1K7bau4Vxv`Q2U3Zi}!6pS$#N*w>z=2&~3fg_~vxF>Qy;c`G)<9@fVm$XWzzEyx(ZU z6Q39=m3{W3)5RMv2!8mKU0|$2b)2Tszu%blX*oGkgii4!HxIEa z9Akz2(#p2>$@lpVar2CyHX`BfeX@c1b1*kpQXO}Gg+`h*0)#cZSyiuD2>kUIO%wER z0mgocii#@VLhBTZLZNU5inKmlE32#BovLA>$i49@TKJjH!9>~0^9jr{1V$aH!O9!J znRZ-Pjq)D)(B~Zal#o({<}(s%wBolf=g%)6 z)(PV!@(T%Bg<+EnCQ1oH`V=Vj$Rv7RyXZp5`6U!y;=A7VhBmz=H^R`>Y$IXSs^(79O>!blW4)1RXF z#?6f)!bdnHlMSl(UNLy~y2?E7R(5p8I$4A=Mh&kUO3`W)c9P*=tk!hVrzHCkJRiHQ ztzIz7oK_K2(hk`+Y)r!KRv=)n);MOo_42L9uDbu=f0DaYTXoX!^Ob%aeeYLEIXFw? zJn42Ov>%!RUA(_;EUi_BaOso(vnls(3V=g~o>k+4YM>mLLAaLs7SIVgcfNkM1>g_2 zL*M^t2NN|%EQ>F;PQ0ktAlyQ>Dgl~5W1twIXmqC^#z#a5>psaF4m%^0EiKAZyZXuV zcm}K?fUress?1x6;67Fb^nMYf`?yDE0 zE#Qok*bVq84-Q16=bj=AOfLe$Bc_z*zdyE_mR&Z3?E|C0+&NCeia=)9_rlFUw4l1b zlFoIjmP5jxJ0Kq0gY$5`F)9J#dQ+M<&3I^xi}n2{k)Y^5e1#U=8irM8z|+B`W~c`C90)aEus93#gRFaKQ@J|$S9a^$zVAM^nPT<^Lo@j{iUS^ zU3-#>O33%WlP&JS{!URQ_KgT{>9YORzNPS~Bl`&t*5)?=x8Z$!TQ z7%ux{ZC^)0{ZT*1z?<>wv4f`aeb74ZZb!+(yY)ThkBY)zrdb<#EDk-sx}hUlS=>TG z0p*fVi1Z()&VcekCnsw4hOv?&k~S0Ob9>vl61IUho9P{=0fc5>47Bxc6JK0d-yu6g zjqCVpn)2^&t0ZUY^K}96EE$ySbbQ;sW;sd zyGZ!T^o5dV5w$75VOccCN;@CwnacIMhZVh>Ox)3-oG#Tfz#3tDs3)_@wL62zc5wBW z%BPN?7sPJ}1df6{e?U^nS_Oz~wzCS9f50iL_gU`6-{$5c8v34Mj^F-q6Pw2#$dgem zQoFGw(0=tuQ(4e!CC*Z%>Cox;#J2r=_B3F90$n7mwm^bvX>Oc-*RDSoJMIgl5L}}< z4Xls9{orHHFxy_0?Q>@&T$07T-8bbHL5uNd=7QH~ATqrzzxy<%jnOe5^XKPpN*fFG z>nNP&_8g44g(W3NPW6_VsA6idD=%f$N+zeOiEEwo_*3S!FXcsT$LLJ$StaZQ&g6XU z=y_&WpSskf#l=@cPl?U=-N)_>U9O?ZVu?0Sh}xR!2mI5ljSs78^ki%~Hlpt2({+I_ z!m#%+bxm$IOtNY&sODI&v-(x}0pug1`I9R7S#f&aUB!pSt(gfP3$_^l0~XXQ`!gem z1HBwA7Jb@sf;L7^4>WVsZpOoR?Dhe%EX`E3JpYh4#hDf9X|qG=hj`K&=jm4Kl=S)Y@|?~sdXw+`WHH6j8VV0BbSo>-PQPfV`% zkp8Q>4JP9hf#rEHR8s!4yO=|t>Mf~B_p4F(s{@IW7K1p|Ib?cSL5^lY7Tx^F=dH&ylY{C>C%P`it@^5(obFS`45%4w@v^6 literal 53524 zcmb5W1z1#lw>FN7f~W{0ARwWDN=pq&iVBD@Al;xyr=oNziU`smH3BL!ba#$)gS108 z(%to6qmR!y=ljn2U+3d`--lt`vuE#LtaY#ZzSs7CBqw!_h?)ow5AU4xgZqkjcqhE^ z@Q&LO9*1}K%&&Ig;r-~BzAvuq&^JFwpiVYDPO!Xxe&F%*jN;@TkM}()=H?tDcP-sp z&5qgYC@0#E#*o)AXpvkLzpwnv^NJGbMRAfxcix@Fvdts!+8jx>p@T?6NH(|DCPuG> zZ*hh@FAZ&>w7#^%m;FEgd_EcY`!m6BEO3{PSC9Vv=bvA%{=E0kumAl&`TXZ|y|VaU z{Ta=T>cD;V=kdFUleiZKo!3g)HZ@P+-FZPzRc(W3qKBf(W`P6V;Nux6&w7j=6Hd~c3n6> zoC_ghpaieh`Qf%rxZo9>D-d}M&esbcx{B%v*9s$#Jh+g;7i=bXT|-p%nv%Hq=vd8%pM7vi zx!%bsDQsei>FHMU%m~!r&tDP}5~oj}zJ2?)dhjcY-S<eiJ@TH@EWpVbM`hecz-* zqIgakIkp~pxy$m*a9Q7w5pgR*3?4$DP zXl<%RMMZ`7>FaL^2>~<$R?8z5=A!BtH<6`yUtiy%7t?kNeJYZYl2TF$73~N6`xKno z4@j!v{Y<-K*``{}=+wTb$zJyeeZl%|th5N`z${-W{Vnx@+0o$raZ&rP>HK;hb5hKQ zJ*PfWDhpU6RE)MSVGd;x+2T!IWP7$7xIf_)!D;JOZTh1&Pxa9 zW@ih!9||9(IBzYA*i5`1VezHnJ%zm(h(xiWT4Tj9EZFtu!6l_%<`?Qyn4|?I`qGQJ zrw_PE?Yf7p<`yONtT8DUKMF-}iU??owI(N%2O>{~2X(EABTl}eSTrv!Esgp)zq}M| z@w$)-ehxD#EALiJehdu_{rIu7vr{^_tE=lQ5z$zgfsv7ssVR%YOGigX1Eo6%^4lnz zB5is3HeTb_%OXze6>kXGDL!l|y15b1zfXzfbjf*aZVw9;hg$sG{tn+p9 z>JX-x%Z5^h8G@BnRn`NAD~p3dhp%A`2v`jeo;gD{lXG3T$$teoEke}MIO}FcOf`;* zA=7J4Pj{V+8Z#!PwG)u`9ZXSPlqGCNr`*&nLKD`bJ(>t}T<$lbEfD=pO>^}@j4)Z; z+}u~Yg<#iMWLZRohVt3Yc2R7!SZo(T8&nES|Cbt zbCp$8@)8r@J2eapT*i$ub1d@3ix<-^sOuaYX^DxqEcZ$8r8&L;KPwcdVE@5-|3OdA_j{178AJ0x2;i+V&AI+Ir8Lv}I z)8uzp9tmQUx`5wa=4?+uKrlK-3o!s8g)roaBqb%?zo)OSZ`2&|<@0BT4xv>&ozUp$ zmPs2ip~f%{ErewsQ|;^f%*@QhUgHxJxyEgD!AyGPE=5Ky)ZE!DA8Pb@BK^oyQd3=4 z#ynp&CF7xVuQ#HP_J)t%ouyhGt2r}k>f*AmrsvA=f=v)b33~je)FD1-j~_p7 zVPT<~rdeaaBVgHQU~VqtygA>|p?K`6PMMQ!Z@SJH2L&rCm?$hL@<+|pI=K$ zi)S0UxVTs#&CcB`Zx2LDvaqXJ>YabsXTU%QgdoeN0&e}A+;7h`ktB5kWXk@II zyBx{exH!h6JJ+vYr}mSye0`xA%_J>3`L-n|GV$?Gt%}SogU)09i)n>ByAL&x($V^Y zf`a(s!YTm- zk0iGz8D$ZJ`IcG-K0TeCWN|~s@MsOla!hq~hYFvMJ8*Ndv6+8=b*#L+yh}+(N9W2G zO7PaLWjmGT2=1qip)8Y=lXiA?_~LK9yaW&w;Z4!Pjy6ank}L<7L6m?soox@+8goEF zN_xcr5zS|MVTte6>Z%RIYhB^Av@{hZrT)w(CzfVHS(Mf{HnI@q!>(b9slaeBN3>!a- zzqv?GZrmKvUcJU}(pX9CgUR9RD*|M{8htC*ZD46i2bW(9sx`CfHcYL}PI|>t$wmJp z+ca9vqiXc!(vZ%*d-wiX8qH`YC#Q~%j(w@zqy4ouS|PjlQOKR89zM5yhgk+^LqkIY zgKw|0t}-$@E_H`mJPe*Fv0s8fP^X_obmk1?fQ|L_w+-mMt)-04wavNSfGBiE2A4QV zOiWCv+QPy@f^4Km9w|z9x&^IOU}b4x#m~==VniuA^zIhc-InKD%n8Xt%f0^jQysRx zsp$+l_85yI!qxG*cY1T8`)Ft&HZ)TEq1uzTgUAbkNE$ZAj#W~ASbDdgjeNiTV(PuZ z65cCf#d(X}^%D70eohdYQA1C;t{<#ZA)aKH#9xS0hGof#+L`Fsy%v9%3ySLURrskHM zpRd|w(OC8PX0hFZrY>g}Hz(|$69mMed>#Tcca4;iPs2XDD!n?<5Tb9;3GvH=Azjzi zz3vWdHY%z}L77wb$O?3CQchA{9>1UD2R}b@BQuBvH7cGPIpOJbVb(|jn}#FK3dhw6 z@7&yV*qQ|v*sB~I3)8*dVqcn#T2L>1lvFb+-B~WkvgmtEH5wjp6PqiC=HlX-7CWu- z?RRh)GwjUG_q zTGc%jn`11%jG|i~NO#h>QnbwBzR8--8sTc%Of5yOo3+2c&xP5yY5jCto3kK0TTxfn z?Punbcw7PmMFWE;}BAuPFTH#b#;?B+-KUwz%3LRqu2vCW;8m6umjQ7LmjD!+++ z3BYClUT$tKT0U0pAT}}*3p-0t4c*g_ZCmQFa+QJMRRP;|KEBZ1;i@V|R#u`E?rhV& zdR&OTE>`1y;>_$d~CM6K>?3hQ`|+VF%r?bZsFY2?i8z3^_1OVqnz$&Ny(OV&>^LevwoUtGc* zwLZQnEF!YCIM^RALkaQkaPQt}y`{0!>+r#+l!c%m1U>-Ko(XTS}q#KhILlz%<0oJeR*?}P2qETQ%B3A_h7?5 z$(~78NpVQxzH!53{%6+ym5$a{tNrbjt|d7I48O#Jg;g^ISf`EI8lxNycGUnnk$1$j z4>|5ZgaRm#T3e5{6hY1Y`c=UhBniHsB#b-?jW!Y&7e7dX$k`k% zR3INKS~~N7myO}{PL}3*RW_=vc&iY;_QEzZsmUMf#-+!@Idy`Ag0gaQ#_5~t>mNu; z);2fGe%s2{II34~Njt1E^AoV1j)&Zj>83f%x=P1HlTt+P6O4=#?(pp%c(|7AaBo$q zF>%Xh^#NJA@69HuOMne|cz7VN!z|G7n?X$o5k5INxu~ef_92nRQss^1fR$fg7uzMu zzKfxYn(*%Q&oDqvfXrSpr8n1`F`R1}Qd}%(P3WFd`S|AH{+hh2tE--#-XUrl!04}E zw*VTRq2y#@=6BKx9vBz^&;UCHzAzg*k9!>vfloki#?j8``STS>762bp5)!7TrlvNy zbZ?|CjaGS;p0}CpO4>c?PcNpMP?g;F{rkv4`%U9%nEO~k+gXTd8(MvtnKx-^qZy_A zw|93D+q`c3^YinGB`Jyt_&@vm*RuB@VrNk^qVhK^Sc5AoD+>z?ccnO){A-?Q;74m2 z2*n5cjpw(NyTHxElFL%|D18`4no2i%0Q@if7iaR%1=RQh$}R4 z)gkUTp6fX%AaUg=6qmSC^7mQ)r+5C8tZ)pJn-)&EI{Fpy1vnRKKONr0`;mVIP69vK zEdDw0%YWv?9fDivfW{O5*C+mK<$8zU^na>c|CY!1^-e&|y$NUhr#k)L+|#;VBy-Xi zs@I8!t*17Kad!?If*U1Ro~>(kRE8h^^v<2{FpWY(y9$p~7wO6LYV^JNdf=TC$B*}o z)CD<|oxl@(0OhyktgKpQBbTs9{>bdN(69Hs*{dPF`Ch)wBPv>cC<9@9^#rk3CtYs< z@A(0YP;%X*&D>cocJ{Nx#Qy&NM*J7G#>dB{d@ns8`F`xl(ATJ%bfc`37fJSY)6{XO z;P%sL0H$7Ut*s z1{*7;o}n)b8;(rXh}{$sam8jE;)_3uO;O9xg$2G5VsB$(6D#U^_Uu`FjD&$^?E}lf zpuXZDQ>qO;^3^iUcpR=|!jlemb8|x=5Oo3cdPO#q5ZW{E1R^CKwWRM(_W7Dl-AmKG z^y7p-dp^pEvC^#D?>1Z@F===;Dx|u)I!44!84Gaz2V#SX3cV3)79{^#y-GtB8^^y*?#)by|Tb}S?cAetfteL(0HNHQ3HUhjc z^wgqvwR*3!qFI)@gJD$xB{O7iASw!F^5YzASC*&;LvTn)mUP$uuPf1}tbYRZg9 z@|3XxDm!(b!>k*>maBdET`A*#epWP)n0RB>9m@K}!4fr9RsAd|%9{8$^Gm<5Gfttu z@%ThWYGB+BX7#S$uTdS!n$HhJ=H%oMoTFyq;%e(Rx^=l#UhIGm@N9E)^EjB6sX8)Z{=&>=!6qyPhET8qhG2d-dwpuzN!1OrolR5~*@#qkHLkH{aS9 zwYz?@$K?e?;!<@=?53I{V>x;#aP~UmiYu=tmv_K)f%{eC{lJMtY3Rau*%J^~2Yw)OpxND!Muxo6dQ%zqfoK zp{1pzwe?buPYui$><`HC6ciKyz2R#F`1y4TtZ3b{e*E}hJJ-WsNS5pm6~l^?I#h4s z!n{u2gM70OEtx~y=00^<=tWVek-w*<;OFD(lL2^bb98usFFt^A7h`8ng^wLyTv^|@ z93!+GjPOlulT(tB`M~fV@Cl#loqPA<4lOzdOUs8`ZzUAIb$@(UZqX$A#Jaro8HSF( zmugZ>c3tig4NXB$$x>h52SE#UW#ulwGpwp+CMIX;gbQ1X3?K%%AMPZKB%LH6&?|g4 zdQfwgUG|%<@B8{>3zD-59G?Z{EoJ~sC8GXzEarEa~n)g^Fr>Bc9 z>WPSrh^VNkQQDeWAe>?RA*a!cx$Ost9ja^f|619_qz`Jk46Wyo2|I7H`$>|Ok^t$4 zfKpL#Shc&AN+3e~{9tjxTdSTC0p%w{DTcE+dgCtHAjaMOV0R;JW6{*qv{dUd8jbES z;e$oGg`tgzj0_7?#q0w%Pfbmw9y}nWUm6*?bFj3yIP^2p28czf(lugw=3>AqgLdxm zm&hU^CDXg_x2IyeT3Z(bJ}yf7cE_ElPA|V(ZMJ5T$UVBmb_B5|(gs|gkqC(swOg$Rea$~8@{`rn;GM0qAFcv$*!Jh zf#u0ER{!=N*Yi^F03fUtBX16HUa@YwGdVS_F(Uns1wv7%xrS*#{)u`9N(zd^4Th={ zJ#9Dk=&WM&1>eiqNJNhu9_-cmQg!-gCxwTHL&cetlmrE1Xy`>-!nksY-D~ds!xYP| z_8YU^I>j%G99F*Gv=#*B2`2o*!Jy{97r~GZl?>3Vxk1sugfuoa(Tg~R?#5P)@@-bh zK|Nme?p#%y=oQpM2lSTcz59FQbfy@$vCM83AHEH`JY1UR`~kg(WF4 zkc8Vvy=%)X>-S7CAb`^2P7e=ErR36mR3bb!K7QKcnZ13&J1tGkQ~3CNh#tU>{pbuI?jM9Rjh8;T!OJEvzcLK$^Za2uu4f{!U%-w zmL8j0IuoIO`&Wt5E8Tv>*Q8&?(Z4VIG1V4}%PzjY0b*M8w6udc#_}pE-GY>Kw6<=` zoegV#NCSYleAJdhrH;iL+Q7`Y?Eq2f3!t);iejToGy8W~d@m&-QPb0tZ#ylnp|P{K zgh>#Lf~gd9SboLSFfm~uA|i6^X;DcD8!PMAQ$a{(;Z7C_?~*|QS$>+-e>teRXbK4< z%tdFpbUh5`_3Pm=F}lWu1qEB*Yd?mCHUy%&>grNpyS~3ZK}<~CC4Zafk%B^dnpQz!;jJ#lY}1@v%J6$5 zK37NTd8|#h9qmlVdKPh8_ir)q>F2h-9=LG&zA>>EP|u%mg?`fc8x?`Nyp@-JNgGCNC1`oC zrb#PowuG*3`NF3K&Xs@8d5#8QF;JLQ5l%!z#K+ISwKROxZ;gStj_hLb^71P9zCSlR zo1B#Ng)Rt*iZ8p7&ia7mVQAOg=9ZT3uC7wYHKP(;^2U^u0-Ykd(7>*B>A_M*B_$oJv=;sKF$BWkBW-w+2N=97n?71!@xns z-e-*{doe8s71vJ-MDm5dnoquUO-&7eJj$AaPK#ZDQXULL<*pz4?*GO13tA>7H~b{` z=4mtfZ4gLl=}`!Zhy8E~b*A3aI}LC%UYGBmV=F=mV1nCm@HFX}Rv zAQvk-_|szkf(fkkdi1~g6E?J(+Z9ACP_pzoFYF&2nDX@jN`-rDX>GkmSc%0_<$3=_ z_x%N3UCPvcQ{&@|g+IN?uHyg>B4-9_z0)4s^J%!E1?~l#n>KD!1emK3D5s|O{-xB)?R#oar%COgT?i$I(Niu*+5Uwy4_k%g5NfNOr18spWgU*qD&$Hrg~ zX~@Xdb~olAwi~seFB9V;=+Mv*gt5xdf~+j6n~(8kN&ilR9X@c>-90^F+XgAg$(5zb@W66NXi?-bEi0KCM-3yLWwAWg)WF-{xF zkcohTArTHkqo+0(`V|8H4qh%JC?|73C;?ZN($?_$1VI?5PE>4c8_n0`fwtoAK`Zaa3u72@9S$}5n5kgFY3CR zsm`u^_3xZ6Fu(}rxE~#=#`=woja`?ISw6o5d=R8M&d0Io0DjQuYi1<>j=|+CSFY%} zA8Z(B2%0?s#sOd4qCX#bClb=qP)o}>{{Og^(0G|}pswSPEge4OY}e#IsY7g3KSoa< zOYgRQ%+~AQi;e=ajhQ(FJBFoZNOM!x22rKiB_5r2Vs7m2kQ*Zp+{*U!3^+|5Lfcp7=j%`G4Q}BP0JV#Q)KT z|N9F2zX;G7X~sAa8Shu%@2kRz$aNaN0%!^LEqqMCp*J~?z*K>u8Om_y zRXVx7n1Udxdw&n^Z$z8cG-xexsNJ0B!0FFZ>h25F&NOqc@wr1}^aQUf1jwY6Wms=n zZ)n`beaO`K+2TMEl*vzTGobQO7Mcy|k8+|{2Wv)qE1UgdqPHje)=SzqsSBo9E^U@y zFng==<@QhOHR}xvAILQZopwx6*tNFG>FHsB$miu<15E|ME}-66+MuRMsGrkd3C*mL zP*NH{eoR77-$nz4Bm^gqK5@jyW!XKZ!g`uU9{tPG!7qJsb!?v!O9$r-^eF`#x_z4P zSNRfWq|_w@)J;BRIF}xXlKj%akV3JgjyYjr6d?`Th0ne~a51jS%gqH*Dihy{(|PaH zr^{Me{ZQpDpRxjs4ELAFV4!rmEf<-XRrFkweE?YF zwSF&v;-v78jn#Xq^ugO30`{m)k)GR5d{BGcT6uPMHlfGz)|S+tAxZi9QB1=R1*V7j zoyart0sPEy!cOZCG&P;zL|vUAI?2e$h&eI!`SHrwuyS#(5n^JSX;vpXXo`8_4u?SC z(i@V7>lbd5D*SZTl`X(Az^PVC3e zpAlQg;(u*1P+y_=3k`4Kv zIeh`L{X9%DP%(j%McRvC#sDn9%zpw_!p`B|k=460+c{Noa`LV-*`~a$FBQf2kF{BX zXuofE6z%b3DK@pX%&?r)_UdI~W61Cz@Kf;``GVB#Rb{G=e0F;viU^?-IciKgsJdq zMvb?7t4U|}41gaKzNmzR>l=Ka2}#BQyPv23n@};i24mgD?FxdN2ZO`(OQ ziCg-ab?;jWDgF{wJ7_B+v_L2%DJ47-uSd7^>n^tnot1UuYxs6VZy)Z%9rU~4!)dP& zg;tChIXoP<9%oLnW}I2mb})WVRFAghd~l)McMtolnCOjtQfHlmP7_SSK-)Wa_7~TD zpI;4SlJ55lAUlx*b{&nBy+Ed&WsAbS$V}A+H0*TP43mIQ5)*)?qvbImT(bDqlWdO% z>8*uS7TDVrprt~Xip;uM!AxW3ATC}3&WpE^cQrJyfa+1@Desx2&zWh6T_k{t=?RX zGOP_gEM{nn-FkMP^vcI-?lwfnN{YkMD;*3dBt%@T=&dmer%Q@^?sUidYN#lvBh{WL zf6TsY8zWi}Kxutj;DAmMBHKJf2rDa2TXJQxrSn&V{?t0p*(uCHgM|_Y^KvE_;$ya9 z6WAy8pFRcoTZ26;kgOdbZ9TaR(6q6_j@htZ0Q6;N+hpjLJp=4-n$yhZ)zrY*lo+e9 zDLTL;Dft}MA>mj@ybLVGD};A_wN`hdB*CH8#SwdW=0i&evTEr%&JvTd%Cf^^_>%n8 zl78wfjBKYKoslG^uJ+-|rQ({08KF1PFp0M?%{`514Gj$#q3+&Z0bX7*Ysx%>KYM_e zg^kU5f17)W?p9DxP-#lgTV-|idYUqCP)r5}2Sb8`-N0P|_^yi>cbV&8k8;brOdCzs z8mnN_$YZSOtM2Ul`awuzbMxh!kH3R$Eh)oE2`xJ_jB$5zDt%58$SHG)fB#fb0DiwQAZL@Xf*+|~46DpFr`h#Sy ztRKvUXGmk#31>x>TEaoF*9J1ZSI<4|+qe51%c`lr*AZj zI#1_H^Do$?NCa(WNS0B--n$~Ti#R}0VUrvDe7G0;rBdFjYIGl54<}BY9f?NM($jM> zGOl&Xi+R6{l6iP3B)#%kA6dl3&=Bg@vvv-1n{6^BV*8hKkH_fv#Wxz%Ts%4KK;tsL zF!-iI*&;sX)UZR-nY_x-E7Cj@M#n)d-IQ1Vq-XR=58W^JPlZHi&AGUJcYRTV$ zsX}EOSW|sp&ZOV#?gv$UQZHr3Qy_KTN+y2k}7Bk9>ETxpRMj7j~ckplGj z3qwA)j6xrfW##A7-L{#4XtGV93pSpK`XC@*uOeCdco#aXb(gqaD?Yh3E1bsqB>wFb z_F&XFuNK9++{j;J=4b!r{H*BC-LNm!JBEE$PA*T>p+^HFrYVv0+j$sgy{3a#wa zHAim?*O~bhyiq-I{grVY1r^6jUd>-&v|7s3@t1~uYp1T)3fwEDhLUz0{AM+xRXSIH z6a8O!Z*p^IWn~rFFAWWqIn&b8W`R_ql~|VPYP#E$N2MLyPci$s*taIxpx|eJR*LzY z_C;noP9Pp~tB-?e3Fw!@=~(wD(IkWlkSG>JmSiCf7dM1OKw&a-9{odKBp%w0E{|5h zE`Z|LYWLft-$%Z(=%dIn1zV9SOZkO7Q@99Yu}i`Z%TTd0^B{lYzT*J>YT%r)C{#aO zHrRl`62;Wa4E!T=F;2~ne?`nf>ym1XI9LXiG-iY9{bij_NkH4JKROVclPA4 zcr`tDF-&taAG+8njw9PMWN(e7ebn7gXY5W42#{}!5kU!2(m@{dI#2D)sHWBn2oF3R zgfViurdT4z59E>*j`4<;Pi9;5dY6;<6zH#ch*FljCHC(SWZ2w_h46wE zSoh1ouQ5T*!`reBsS5;2nopG07>t?!MsFV{MxL8?{mtaB#7~+23eiB3FiQH~a@l^i zR(3MHX)x<4FfL+;+l=BQ;EeJ6DE#u*kN2dEjg9!8ayoTFA;h2djoK98Ra(ifw@2ER z336b5lpv}0IC%#6qcYfAU+#H5l$PdaR-rUj!SAbym$-?tjsZXiQo+&WM()AABe;#q zP|}8!(A-g>Ew3^e%QTC=(SBKj&QnP#DPk_$fxAaQ=ew*;o$I*3fI>9MdZEQa1VZ@< zZ#@kDru1zgndZe1eKk8$%VDEGN1phl@9aRCbAgA)UC@1ak+CgCDJdyr_|HcxPYMVK zR8aW?HG1O)4uoYLU%}pvvnBqyLqILMPL=k8K~yLqFAVh{HpQ=NrUfMc)E1D-4)=gZ z*xg(Z0@^&kl#Ww9^9~Z3CSs)>s}t+V&KP_`U@7_Vg}5&%b1+iq9xSxJ&!mi!p{@oV$=rumRFC&mku$Rx#{SMD)c_r6?_pX=XW& zf?FwH(VtqxGLzq`d{U`!)(lqCP^o0)O7vfAGAMT*CQ=U189rrTSaZ=wKn(mRaBX2> zVdu)DK7G=D^yp5o0XXM!a$Y=m@cxo>GLWFa>)LG0ssu9)4h#UG8#!wX=HTns)pQ1z zFX&o3+P1O?qNiOocJ#=Nb_jDmp~hdFzBl*gn%w<6(W2nW1Ivl0XKX45 zP<_`3JsS24$3vPNF>JZTz7iZ|-$p*AMpSC54mxqQq_MXqkBH2&%QvKZ@ftP%=;{i6 zOx9C9$=+di#le-L+&7TbT%E`{Ktqf;P#J-glaoUtEo*SgRmTDLB$%cXk6c|`RMRv) z6Y(LT@^{Jw<-?j4H=o~yZ?x-=OTQsiXP<5jEU2;JB)G*(M+5aFm|w&AW#3qfKn^54Ca1a@|5ps178@>;g3kj>8O4)}SA%WQS#$qYYnaOxZ9GIeD6XqShn4N59*&|}p<;Gg8Z3$di z$2aNYyCWIpyR+cihl&j(crbW_pbKRG#K-pD-r)g4oK2wfB2N`Eiq8~$OB-G((Y(4( z3@V%(M{TBKiay)5Mu?%@>~Y@~}gTA@>T(UDKX~dBZ;2~5XU|E=7SeSXa3uqn$Dop_t z(Gcfb?N|v8Mqh}){ps42*4l>_ni?8OXmn4C8W#wbJ!ZT?$bM2lp|c~k;39F~Uy;(& z8-`Z}2U!32?+b0`!X8MSq6X70aQm%|jYt0PVV^`C?QH_XnfQWEGv>{kd&Y$Xa?`~W zvsSqWOd*G`ij`X4HD_Noq)MenQL@b5zh$uqkj9Oo-S(Z@$83kAGm%JFU$OEM@LR{V z)|E~gE;jBJ0=z6xQxg*t`NCD!L#5ba z+Z3?ZrKK(8ns%1&EtWuc16uZxl+<bpOH62)o#7kE4}z~jKk$T%`*e&$C{kKDtD zmFV8*IGeys&634kzi_>yC*UT8#0!*99$hMD3aMqA-^P+?{%=MCp?as@qVY^&fjxoX z!s-3(gL(ZfhzI&Ee2$JgAa+`8*Dr&!Lc5#db??3=S;RIk3&hWi)?-%a6 zmLuP*sg>sFC;5uY^46~=MG+N;e6D=X`O;}B2HbPiGlGnTRl|}%lBh3 z#6_uT45Ey~rvMYQ1?%G&kobUk7j;@Ufi*NcYew9sJ+xiwP@f&!%pDzfE)n=u*_vgasGDD16+F1WnyAlmP1%l!osHD(rw=3 z(NI;r2Ezqz+)ezDkPtA`DjI(VT`D;l>~2b13;owS(sn`ewy?Bh-U|Xj#dDrA5ZR9{ z+e#W&qGDz-rdxuHDstcuU{b>8VFL!gU#w@%ZDWOs#pT)KhCL^OwO4YII%AHq!(%0K z9k4G!9KUL)^z`XdYCj6f>r?(z(E0H8G}-J~*(VeRl;pi!pDNkwZ?Io*+sVzdD8{MU zhs;~YmS$R`g_yMx_QC59ivh%gh>*30GGbAqPIKFopDsxR){YN_QA9DuoZ(v2f>&s0 zXkcnO{KlB`KGpo>q}GnDxxuK;;l;c0!}NpzS60GJi=UaW!To6j(!r$(8m!B~t}R)K z&$WEq8m#%qruNd-w!i&sNnxRE6yHqE2g=eb*X2Gj5Z;|%dJ6WB^F&0+yw5t($T1`b z^p-62?O3WS70}g#Y~s4;Oa$6{oSfQ&hYzWt zNC1F0Slu}uHDq)Zl@C7C(^qM$O>7|xFcNymC9Kt%doZxGvsXuGnwlmB2P+)7uTO>s6011sS`;$znssUGXt0hrsjqn z{ebK=3i!65Bf3w)E$B-2X}f6T$u5>jAPJyWhoGJc_Rb@-H`q|YCw=$CN+YvpjHiqI zx3?W&+BVapC|c0~?({R(glV|2$teDr*^nny?^+_b-xSxR1_T7;=Ds9b!e?56?0=C7 zXK?0s5t}VB?Y!o}06H;8i{OysRv;Qe9m&wf-0D2_wQE&ft)pC`_{sVquHf1T8~ZL zaDRavRi$enWSBLmJep87`D{G4tE@)$utf3DnMPp{)6^iJF7Eh@{hLNk(uWT+u)usi zd|>V%kYTDKr=;Ba)m~Lo6AyIu&88w9Tx@-KP{}Gz0`!ULeCmBxRB_DV#81_`I3AI7 zg`o%zeC62M)T9MfFofTOjb+dVEyYkoIidoF(Fqe5!+m>he|OkP_Qr-DQD=Zo1*SUS z=T%K16Md-x#}^n_!PXlscp@(|^BHVxkS_$dxfN7Y_@Rf2hbKzNKHb~xim zV1_V<2EZR#7#M^G1_ploxB+5#w3xf@7`Cgv{)ULi0qjPyYqGaqOvyfcNVM@BjJvd# z)VFS`NlQ1pI(8xxH(Ik$$U=;jS-@b(46QdRA7eK(GO~3oN-&B;k9t@X-zt3^k2Ro9 zEWWkm9CIibtI~j8yx@LRf2L|D{iNy9f$C`4y^2%GoY3cI)`PBsyGw@&#f5@k z3EmYNDk^?GTvyc4k)Z1?pPyuZi9MI~gM;B?K&s3RW5kZSZ~s|)Q`_2=>g(cU1@bV` z37w}s)PZ-j7bzu6OSEvZt%?goohFyy=cjio9T~HcUyG+pO+FG;exgaWro*zPV~XQ* zBS)<_-Z^OoYF@)S5`z-koznZOJr4Z-DEI*<@yeJ4@PELlzCS?4BQ;vTT2aFKMQTj5 zObrEGUldblvFhMr=xP8-SxQ5r2=e1qo!To&xaF(q3oSelt(SQ0z&!lxm&xph6=(oU z{IGkHsRF0W% zD_G1r7!QXo&t*V@a|~cXzkzN=Z^7u$n^W<_rHRfCj8 zFk1q=YL4z=FKWGi)J-Y0L;-&V8qxC4tfzBF*ZjU^v*gKVaobucYv|~RfTQb_yRwc4 zc0H#_V=OkslV3HVudnYu<5X*OQ!MgCMvX|Gw=2d)RG5>~-9175P`XTh?Wnx*C~({9 zLGT1v{K|KxXby`GCd2h$!ZZ!Bpk@)mihdrQ&@7td-W=Ip9iVz-|0Nr|hv(^pq0w-6 znz;a1w)deo*}=QGWi3szm#M{j`uur%K9fKU%=n?iEd7}?XIS<6e*PQ)$t#N`F*%uN zt%?ey3O(38C$J36lhp}!ivzb!JH82?0LGK%a`6#A~)O#f(6GuQMdX!MMO~@ zh!TZPt4%T=gxjnRe+-*;7nTa#O{))ZyozBxijGj@0HdQHt&l48nI6gjhiS_>*VNV) z;OjdfhMdj;rJ9jOZMuFHwioo(^p7|OR+6~w5bCyGIMU`w%@S;BZnm&^=eQ*{CN`Wa zjA3o%;$`;LP*Sk>(iS(<&{dQ^kb05o6$1-c6YBdH8%SA`d(x~JJl`d&L%xQJ?1Xu#VAoLTA zE>LC_+s@U_RSQ@T4cLjQf&Kry*#4ab<}`q3jyV0{Bl-Slo?F)LG^K>3By`lhbFW{Y z>GV2Bqw2m6EoNKtu%e|UB;s4Yt7TA&K1~4A8C3iGTc5sm&YUYJl@11RX&fVT3{kcj zjb!=Ll01CHobTq%N2;p%-R?cj6&2#}>QIB{N3d<*PutySV-bsn4UMaF`+B`r9HQ2J zr^4?LSn&#JA>xVophw|{37-eUrL*mJ9cpT7kkN0jv611ogE=dR^Q@UDcxiA|2JLGc zySzGadZ`;MT;QTZ?Yggw)f{)5hk#1EA>TyDYa|=}>K1e#fxxd?FTt^IySuR!42rE^ zF-6g#>0MCIEDc5(Q4dqg-anNrsva`i>yCTkw$uM6f!f6+Lcod28m#8fpQXi3aqHHt zv$TRBklL?M~@R?}V`T!Cn#h z`0)r>3%A|hr{^iFshOLat_<%sLW{|f(|uqrhM0GtkN_{Ym4#wYPY-xA)S_R*9fBW= za|yctW(P|O0uvVBhaxvNHo%V5;0*l_4@mHBN6K3VZNM?LEd$+t4A|VVOt*{AR?}tP zoS&0=;PwNZgHzYF(CO)NHJ!L#HhXS;JG)Kj5UeiIR8}n1UTplxM#-t2xbynmyIM%S z&}0%F7-kvqu4zB8 z3~~v;6)nRWg<+#Oyzdy4J%bxwt_HAX#DEF6J4J0Smce}W*q^5QJBWoxckkX!G)H}l zkFODBl=yx!4>p6vnS%EjFS5}iTBXoynO(6*mZQ$@?(VMO&L{H?S0e6UBNK4!J#Ys9 z(5u+oxG$YEU3Hg5T?!Moo|(wn+2w;c56)F?XhH_NtB;`596B9*ZeSkKQB(pM`@%CV zycK9xv7e`Bm%y>0zq(vopqxmOXC1jOyE5NjAm3#X6&VRFzfr1fb70}J%*h7JHkf{( z|1k?1`f*&UX&v}Og$(LRW~<=XJSzlJMn)@3Um}Go1WZfDMn?G+jUBzc0e*fpf1Wr{ zkEV?*C@28M4SI&aQ}opS-I6jkH$T6pwicbH(g`$$V1rIo5RTpzbk>VYNs)0KvM%3w zw|hFi^%L^gU&~JZH3UioP{S-EG=_tb>R->9`9nFmu#k{AwxEYQAvN(y7Q5M`D?Nlxzh z=lKbNNTF0{iK}mHl)QgG_YNZMJh)eWo5x&Rq!bhsKnMl>>SKKuSX_R;ja8O~l?P2c zdRSO)}iePs;=7FTG*2iR4XgTz%WP4f`Z!afsBkf&}7jQM%(`yz9#2~ zF?!O{NdQEU7HI02~bbaMACDH z_j87!JUwfG3C@hfJ?;TF=}FblmgKflLkW(pF~37-wh$63X)SWv-|V*ra<10M5kGYJgD|oSx-2`N04Q*5cZ~-+T-V&(LxVJsD)y>rk5EVk21A zU!>E3-2!MaAVa(I^x(GNy?b|Ir{ef;%Kq0&SEQ}&1|$xKAr&c*F~Ir^6LE#GvaT)x zJ_?;z&{@MIoek`NeVK#YZ+p9&W0V~S|4}?GKVdBeND|Iv~9t_o;r03 zPK7&IQSs^_KY)f!o5A4fwEfS8h1-B*VECA%;UN`ZrNz@a_gkmPPBMYuA^D&ZmbK7A zG56!|ul#5Pz)7fZ)&A}8$$Zt?->Y5xvf=&(AoYZ%eMrg4fvC>F92P@)4T1Hsj5y-= zUNlfL;Ri1dkRHs^JpBABa&n8!k-X|KSpPhNL$eO37NA~}jv&PxLfdQzQ)GBJG@8Bh z{O88{ItsO+MbawaU>l6q7?&NMjUzM?)svwoAN&pMH(>baIrnFUb%sGt;S)>Cvd0x3 zaIAeRGYJii49R^(#S0rn_C0Ood*x;7Yax<=3HxXZbEH%F>@_uyS=SAU4-&!Oyu9j0C1EN4=Yub8 z(4cU|>Y=x{_YSb9_oLuM|FLjO-43FP*{(|m11Si}IPNgO$EUdWeMH11+;b}a8T$ra zZtl^^b}0EoU@d_^0#Gq{+S{muVq*L)z!&h(UU9@6Y@z@yZXCg6R8>_$BcUf1x0u)w zsO3OLMIkJsfazL9od5fYK4oaaEIq)VW>iSE>W+ zeTKN?09|ECIz~#2{~^JNe6j`)Ax^HF{>KjdKdWf}PpyIfQzIbr58Ye8JMBc0>G3|t znK=ms{MNt@vu7Y}0Yn{|d;_9Ku9K}%9YxWnvwoYhbB|MII?nf1e%fXh5#BHn*f@%; z+k+l2YBs9K1Dk^W-978eKN{aN3G@EyiW@Ag`}imh-7AsufVg#o+dnnwah#kdA3R$k znPXw7Y!AK!LO5gr3B+XZfRMr_O?0@d06p4-DZxl+5Xg5OuavC7>e zknk)j+5wSF7vnZaml9K>54ifY!s)l65fKjC%TMmztNQx&s)5pz1=m99p+~9*J*6C5 zVFw2MR&!;O53e1#Wm8iEm0a5ei3y(I!4qj|oOh$~##Vv9^ywCJ^vrZMr4n|l^)C;AEseUVw$!HNCmq=K`lQvQ(EP>bea7g(knw?rxQNdjp8_A4l&tXczMuywj_HXI9PioR-@B+8X{!*r3nrZZsc{T4?o1K|_I z67jg}qVf}bq0&kE?OHZJaM;-KtNy;td?7$RqA18)@K~S^T^yDJg+UC2(0ehP;&5Qm zsGoI;`0_1?G{M0a%pL&o0f`D~qCokM>e z3JT@==!WALiX+ndF z+lhG4I=+7Ou-J7hV9a2>wCNT^_b8#oj7VNy9&Q2mK#JOPgoM9fMZg0Bwh0#d@?7IHPkDIvKup_1F6`2A{ zSwF4J9E<`Vyilx34+RlmZ{oZ3unveSNd=vyBC#4lO?u5o(cz7TjzjzV4l`^4+s>tG zdWK%hZI;nq(jzR%>R`Csjh!3_c>@Ah=`&L@vt}_Xn^7%E-?;1zfi8k?*_FoAQr|3g zvBe~kHqRF0yN@hI!Npy>W9XB$Fo9vq>skJy%l~PKdN%ZiB;wL->eVYKPgci_fNl0EwcUJ>g|&c=F#vf!+*N<9#;3jhb@I7LvLow%R+Mcd%vE@Dd4K;!XdELFU{SPfAekcx{ z$nzIe7>LuH`?{OmRZNmpcv7M=<|;fMCGqSrtWwoGyzDFU(V0?qZs&EK{Z79P#3$K1 z5Z+-dx@{lh+`2Q6lb)Bi0j9*Z!5$10LY)cnZ%{rCKPFq4m~&1G(Q&acO+RS-|5$tL zs4DxdYZ$u`kxAX;2iDP(nf}K}sZ~8$qQ6ln{^-R7wHq6i`YUM0(RmN~h#E zxA!^cInN*881FmA>tNjX1~%8ea{bntYtFf(8E*!Ltf55T?Mtq!57*VZB@XpS=c|q^wXXb8 zlO`9c(acNOo|4W*_R!y-wI5#&>0S2bO((k(t0xNm&h8o4v9LJD$Nf-lWACzdkekEV z%v=rQM33P1k@rUAdLo8wXH1wcp9-zvp?Bt)-c1#o_(7`Dq2H65|M1!So%-yT7mgO$ zuC1j1Q7Q{`xFEuxL@C(u-YX}`kIL9|<>+dt!Xc%0Io5)(mJG$1hg~lO;yi+F19iU; zCRdBDWPTbr@aXVljAe-k9ot&z5rSX8tLdFv(Qui$#^eRiTQbF5Yx ztf~tr|2C%KAJGl_34KqsaLLQ3!s?w3jXS!#lRtdObXvDFH=o1p^nUY-rDf)B<2)!~ ze+m&Z;sbBONGaV9GHz_|%6R)$6SWZ|fBSavf|~o|n~7~zmzl%-Y4(+R8u3LGLYabF)ypB}llm7`Rn@$= zZ(YQqp=Y&3gUX2K?%+UlVD=ufuE<-al3 zAIo8JFJY01fAB+Cf#fH3rbXPbseY#q5jDl<2QE5Y?h7JlIUMl6YAP?;^$`U*1bW4N zra%SoO!aHTcM~iiQy}t-I*x07dlEm=Q8!W6SI6NGDoFqi@mC(J=@) zv}x~00zgAc3;kbK<`?HRZLTBmuYvtWOKa=W!otOi6IyjS{r&e*6>r<-hPE?b1Opu% zIwym_f7djvGC}PD5fh*&1S5j%eOT+EM!!U7jP|x)&lBIq%BrgKU>9+5!3*vBmAu?s zu!<2zwj`B7TX>P1dlm9eL>YcQzVL{MTuvuV&9^Ww!$rpaEk6`|X3+$)`}XbIfq|i= zpOwvp3d%;HFg|`aeLLLzJn28bt`8fDxX+3(ofJd6k2JeA%M(kK46Qi!OP zyr+g9&UJp*=97NkifWpUGQOQZrF~)+a;Q6)3G$`Y3KxRsv+kUJcV!D_ZF-AHj)CbD zKQ6uFy*4{5q-~?<^78IZ=gNC=8Ju2LUs=!GAozB6_55U#-Od~I{mTk~fZOk`ts~!x zj*j-vJO3qj6h3yhc!8Z?H6Mai%};44@tD5(;wW$|x^>~X0C<7-5D)W8P`$T?2(h`) z`_*l&I_cA=2CE5Fy8Qh74-E}Lm%<-u3!bqX#9M3x)CbuDE2N_Y?X6&{B*0Jvzr8K8 zTOIQf($l$DrqhuNqc8@}0ZbJbBJg-WVXjvaKU-R^k-bk&CZ&vkec9U`XToZokj9}< zu|H#N_z+$l_z(~c)j(i4A1W2sbda7e1MAK~$@4-RxBw$dBO@c|UEg;rh5P~;0`xt( z_$&+m^A>&p7dbdMa5SaKl2TGNXoiw)kCsaqNg5d%;?b=+f`Ein1Q>X)X%0k=lSh}N zq#}hJy^_JVu-u4a(IRBLd#8;QbtGUI!u{n6maL47kdTmD2?~gOoSY_ldMMex!1TkQ zDHbW~?x3$$R&T<>U?!!JZzcWo^khw)!SH}89*`kIyhL^tp91q7d>zgOfQ8)so~7{ywsv8 zP_L}~;o6yBkJc@lGzaD%pSUa>+cBu*tl@U*(6{}CVK)}}yhmfTo^1$+IbW<$xYPWg zFssKYy|p!fbw#jK!q3>t?zlDkp`gZJ0Ta4M97pf<-lpH&_NH(Zx75DM%Yw!?mIsc~ z@jhr!HgT&ynUt>HEj4pd!Y(@M%!{zu_w*@q+dobeMAYT4h9w^|3oi^=V$EB@^JYgU zd{%{54J2=*c8ybgQzAvEO4KrrkD(I+z5vV$uUGtu6n1uspS3+#O#}23>qd=8d-gQ`{5iPC6eR8P@}(qM zR4&&}Hda>?VNIA5y7G4a{An>aB#jzRfPqu<(_QB-*q)M$lBsq1`Gfv**!7seIR;8f zgv+L3GuN=$Arj^I zh1QR{rgW1}))GIY%ZilX#)Kwj*g5U;k@0cuUrQo6qj=z!?cbYS3dawp_m7eL;}K_5 zNxK@(1Xi|HIfxH&yyb4pfnu*<1 zw;(KXVBj}tcfFDDv%db|s?$irajotlN=8P%T!V)X$AM^qHTw(rA;+PH8(hvC4wDlV z<>e=KyIN*I-rYY*5&iC6x_;w{Lxi8`4^>FRg7K>`wVZ;20(yUo<^ZpWgaXSZrkk%d z$13|w5j7b*V^KOq)XA(Z!~$^L?P{t) z76^u!Nk;}s63M6PlD)BX>twZ2HHA9nSARR^Am=g5Nci;02+SWeausgh4&~Bv4OyVu zHW4c@5YBg3pX#m~;ez%mt?qP}LRzbe1Mhmg)3XvQiSxIMZ&n08m1vP>-Za92mFe6pm1eR` z$;!+GGBWDTSr`H0L49)Ai=ab8?Yg{4!?P@$uZJz$yxJ7y$NHwe;_r~KhpQdlUoBnF>1+;(3B@|Je;T@-~x zRlkCz-9bG(W(=qb8nRnCzG1z?^Z2ra^2q+@mztL6=6RXOJwf_{@gwTO@{X@%W=&~n z=jlkP8GDwl+7OJZR@~8bfki0T-cpeQp`H6yE#!aCK7aO18qNk^zix5d$!|XNf`s=M zkERykXKCrvVNIwnVPNa`pgtf*||VbD-91u-X4c^`z7PZl}5zpX@ze2Gl8%?SXo^?C`mbJ`dEIL!n-|oz&bx= zzJ9?W#3-xjk*y5Quj`@_T1LX0YePkgf8`7R(}-%;I{T?%roDn}Akt8RpO z;j90~H;U;Wx+y8|gi~iEQ)V?#sHODf^QJTJpik{?xV@xQ%y>ihu-BP&o02dtENWsdo2@Y?@}v_Q8tD;LeCFBy2l)KY6I{ys`~2b}TD+3thw_wbEzd0;wx@P^ zFR{dQG-c-IEZfzGO*Cgawwc7KKC-8@Ih|P;FTR{{W$M1F@xHXK!*b!bs^6yS)4%vR zdIxTZ!j%#E9qNlev%0{%|%9#y^v@`Mlxh=59>8W@dX(}4t#z7@FU0L z1&-WEGk+VVdn~hrRsY)IGPcA!DeARN+fJ%GhhA6umSM zCKsoAIN!>sN$|q-l!n)suH}hn@zVr?F;uHqhl|;Bz;YO$P>kA22)y>rhf%n@p@D2w zNllI3QvQ=t4RV0g<`lL3mas6?9!pr#g4>~cH1Y&dXe_pEa(li3sA`-=^V2^aL2qMN z9ZgnAAHs6bChzsqXBBb~JSk{565;hx_G7+bkpi~_^YzK4}lmJ94KfXfHdh7R21 zotUHx7>K@qwnFeqPFh(j&&;(L`sX22Y(5?yN6y{fUSHAz`j~jU$FETP&62DAoAXa- zFY!(!&)LhD2s&I1;c^>|B`>J^R?NL5wAeQ}PIYCky7AJNt?H_kM&HhNj;2djaAy9g z6K+k{;3qGa4mFB>KBbQ0)uDQmE%ncxN{9QZiUpPh$N3nAQsNa)v!zA03=mdFGG2v6 z472n<&<*odDy`OEnan?I`KnWzkvYt)NZMt!DP>@$%3^Xtjig(J+{u1#SecXA<*znA zQSGrLH#3i|tpqEoP-L)o+xTb{{gB!5$|!R^2%%;5VScMmmgCuPgw<_!DafvG-mG@| zGC-SjcH)51?tKw5Jvb{%8m{h6OP-ge*n*6NIA<=uhw&nMMx6}}x0nMiYnQ(OXE&xA zE}$#nWnkiEqXkGYQ5J^UbmU`qsxOrSE0MemZV?2$TX%-LI9lemT3(u|bUNefr!L^9CXoG!Tn2V7Ker0KRB> zX)I8aVDO+Di#l}V8)A!)&9q3dwr74m|K{TpuRNqBM}Pgg_@F8fD-75Mpr75pJ2^!s zr@-1=UapI(8oGJc@$Y|-=k6^E!>xsmDb+`&2kGrVn}(fNx78eP7S@+C6tk@5{%DJG_w7q4K53C3Vmef?Bx?3lNz;p4DnVapwx7Vovq z@mh6U$k1s*|9#6K&y18q)AfAvAeDg5pE8sE<}C+T$(jF+ISsbx>9)L|c78nO!Kfxl zb+S;PgTMNhL9D!yWc+SU1s(IY(2Fe1NsJ33h9mJMiQ2-0*3F*XDjb~MLgib7c_?*T z=BGQJk=ohIIPSEn$$Z3E`}Fz)i?YC{HaeG>1Fe?;f+c9zZ`eH`wqD}w0U}U+> zW0OvU->1xXx+MNCf8p}ulhQBctp=a;Qz{>gnRJXAexR;sEj++tk~}KXW1$+*S=zK` zAs|m_^?h#c-js0$WKa}uab-K4{O3Qm;x@ecB#H_7nz5&h#C{^HQfb$L;16~w! zh#o}qa)uIZaY!Xcf-{GI{ZfO)E>;k(ixqi1i84T!C%7SfDN1uIXY@MrNXn!a7gqQS<*89{3cggX@BAg+r)WYRky3gAXPL;n?;D_m-As7%<| z*Yqw8L^&lGJN>(oiH;G57ps!^Ya!KTKDeV^J8Ci?VL|fO9R?dsdK)=_4nu~ z%kptAiBrtX%y>G>D=LD6f}o71rl0`*29AXIoJAfzJzS6{B4|T_Aplmw#h@FY^jygf zc=^)hvb=>wMrNj^hzJR5JI*MlM&Y0>7Z*48fE8QKMK?FMuCA_1oyU@ro>(@5gOzZu z6%{G5G1${!V^GhjwyqXFe)833V=ec?2PUiF*tocNvJU_?%*@Q7)r1cf6cW$K&fXW| zyv_3dPv&jgwjnQTv|(XmvoJS5Y|9gWFln!o6Y*xAIqDMD*4Bnw4jCKkO*m`OV&_e zf#2xUW`uY|0e78Z`}JHbT4Bvi|I40ded)G(EXB3OU0l7fy9vapD8>yX^k@Pk95*68hNSrPU@Vxpn}6z^b9S}3gl*m2iG&f3LQ5kTO#j;89I@m5 zWqRq(ojV`zBw=1ag>D$5Iub>rj*LB%+eIYMcLSmVriSxy9laT|?oQsn9r!J54-xX8 zCxpc)#+jZb5&MC|?_|^L{X30jIw1#I*?(S>81Kcae_m5ybPaX^yG4RGi2T_0cUx~= zwv%ALXE6+h_`YZ6sGh=AVD~XRk;|qL@m4NdNs9FlN$r zl04@c6?Oi5o`~PQE&89W|NHnJ9KbQT{{4I6e*EkB0xuHx8GHS&pZtAA^3M(uPtM;X zBA$hRy&;F?pVvE1{r8Fc--jF|;xzMgiID-H(~!?DBv?Cs+=y2W(1 z)_2`^sZ^ySv{~~jZM%Iu(wmbgqnrdTuLi2*Q0_T=o{!HC_avu!0hz7FVAkTc*9S?J zg^p!sE}0%^H@bfPI$WwCb2EhhKQu$Y?*bz6=*U$8wQ(AwU^G7tBee1Id;Ef z^k1G~V%dM-Kx@HC7{OMMkb5@uh3(ve>*`X{$93cddJ9KrXy6%ZdWnvakx_tw=op@J zzBl$nvXjtA2+9MO;XGlD-^vD?18A)T)tpYw*gTglGLB2g6?)*o2}-=`VYtg5uN7pW9R|(4=Sy$*Zm?FxtM`8TemzW?6qw_rD-#KjbuTHQ^U;lZ2{ zHa#|TLp~66fVXsy(X`1aB~niER%!K-Ya0Egm()Y+>hloamPucrhDQ^VA5Y^=>cF_9H(0nyvv#7ia) zDz9-IVC42oxy2>FX4Bc^Gn~LZ36xf`Roj!18k|ced<_Kds!(*M{1EgXLtQK zC!Wk7&t7;RG^-k-2+U&AxiA!*aeMSr_cK3vx%O8t8zmA)7AE~A96alh79v4_66`Xa zOq4OJZukv>16xUQM)mf*lGr~X3<|+EM@=jVZSr4G`(F5kHl%%nEO!K;8&AqqfnPDZ zFJv_=Nc9*up3;m8Xl*k0x|>@PsA$blgsUWatNEBwljqW&6en`!=tNO{BipGf^;bSN zI5*0QKhnD@w%%9GGP3jLN4{B!M}#dlLdgyTHbfW@+Uk~;I~&`4eSGNQ7Xbh+hdT1I zxo)Y)A%f@S=$G?JzQ!UQt1XJH%HOj2^7cGC^;PK#R!h;BRaG}OiqLn53o3U;1WSbD z4g37(*B9iUz1Vj_dA2k5WU%~a&0U<#6(1Hg2lpKHS*<^<^;L#e_osaP+SgJ)PEYXd z#{2r7I8m2NmwC$Xi4{e(UB3q!`Q0=fPxVb?>Md{SbqozzU5_EBBGbTaMQ>rtEs4Si zeUH7Bm+!y!wu?16s4gW_YaH`KS%L3tQAX{w=mw)5%S6P~`1zyz7a4=)79*t{D3$Iu zi6q63S}d{%TAtSS9@@qGNdNr2dM zx(&bACrBvqN|ZS1Qf2(~x3wIGO%2$bU+CwMiC{Exx zC0ol_*i!b9yL$_1uzta=#L{Gwm4yY|X1S-{MxZ@36Mf6RnZ(6D@lwkWo|nU!(G;GO zcqCT7!@VTo-L34=Qd;F-Iz!oL1bd(DsHfF?)ascMKe~3Nq{^TpMl$D7)b+%Xw-=hU z{b@<>N&F~~)R}2c^gO3S5mlk8cRaz+ag*muJ+E10s4ZQHm}XIf4dhXbjC<}$QbsLnpO+> zbxNPZiOSX|pRY~te*$4b;7Xng#_to)wNWXWrgAgA^AY9PG5? zTE%_KAIOTD8>KloeyN{5#l3o$Uacrl-Fjkj(zm1!f8Kc41z<01L~m#Omi$1C%;0Li z`O0q-)=M1zX>Uee98`Lt&={TA$eu>fvM|=u?_qwdrX*u$Y#}v`{9z`W{r2)w`NyZJiI6JjD&Y0)iMW-cr+?=cs`=X z4COW4&D)SH1N%opnk!9=Ca38c=Tb5|Ypn2EQ1!Nv(Qn9|pb-}NAZOn>3IaCpOyO6Z zfHx@VsE;Vn+*EX%?rnFE3yh`8OWfHf`Sup~3D3hCSH=-Y6R!R^hQ;3LbvP7c%N$q0 zI_2P)1g2nX>vrz=TW{}ur0($fC3>#mDxlfc6TGae3sNwdb#H9{5H*&7{4OQ5xc7gv zz)?QGowu$U@lvKe`EZfq$NaES>HLE0P7gwNuoJf6qB`dn^GB2hh=`(e?z-GyjClQ@ zR+5d)rFxBLnU+C5f-llpl0R}LOeH8i5CbrM7|!%4pLW)1KQEQG_ufYnLCK&o)vNY+ zN$V^7Y5{Flu7L4MR=gq(lU3%7Ck1!m^OUd~r~Zb&;a#Cp>UiL%@7qC^g%5*D3;dDA zk14_W+js0>*C-U=KBN~yifjyjvSm)+YOT+b?A++AtX)5_n^NNL>UtLH?hFn!ylFx^ID zF+G5@Ov)gDj?;OqZ%+ZZHrBPax7+@Vzm10Yx0GwCct433a{F0|{) zOK&ePvhBxTNthlzK6-$g*HO%2S~yB@M9ND!_qz^vwvcL0yRCYW)P-~Dua;C2W91dy z$S76|ztspQUQ={?8Mtu!^J?7=g1LkwK^mSCXoUDk@2lAsP>J>hk)I4$24XFAvx3?0 zK93!9GDFHwM;eFfNQxAf|2#w|@HLekw4$z%mR8$`c=I{Y%wkZ;FD$K{&eAPo-%@&x z()$ZdUtG_II=DrjIznW~qby&To1@+SH~0np4SsV20GLk5Qlrr(3U8|zoIG5jlOADQZ9e9~x3LS4hpY$bH+rHj zn!j)@YV>Jd{HOKdfQ_6$|G?&}@6!45LpE+-Je~Z(EZ^YnuJpvhkBNojuQaTiObx9L zui$&{9_`6XgHZ*MzB}R*rwktr(@Xf){W8|lY8=o4ntfAJQY&5C&c+4}W#Y)TaT?S? z{iZp<#VTf>Tr@Y;*3vpRXg+0qTcu5$KQYR#`_jJE_L=(CeNR2TT}Ixpzj-&S^uowzn2u@(5u27Q$t{8OQr3?8mTyN?k zR!1^lg75R%-+%9(J%=_*k#*a7*J4!-I?WX!6Lr}8 zzMCi7gy~mwlH04m<|7OmesuxB9evp6*M4L%2nz(rYAraIQBEiyd3-pj;<_wIJPdKT zLLk!vF%Ym+i-?H83pBpJMOi{OFUL78+h?};TLo{_T6s@;<`Mmi?qqHrrle`JS2qp! zIjK=!i%&6ea6b2OEN}K^rwwqQl%kFpOnqP-x+5S+MyTFrcVZzQrn-a`WjE#>Iou2`x)>l@t0OdkE zAN&raiTkwg-$%dnDV3}nS0e+7F`vtyvcoYYR;?f09FlAa7A_vXz6>yJM#ua4VmVM+ z8sq?I?Y~cb;+yjBx*t(+122%0voh}gEEl&9QBWuVc;e(N()_wLvIzM!1lRRNRdB3q zClFrP4HKLC!24d6^ci&*sHm$m9MB|A@ftmf67TR~V$-&pA*@m-?aiBx*M(%x9;Zo+ zS?@T#lE3co`qzp|9!tlGH4v@g4}Y*(4ZYz-d?SAKs>oK_r^|A8?g)YN``NqcxFj*p z;LE^dqLaJHj~?}8*Wx;YOhDgc*m3omt}ZhVM}Wks6TAJx!wFr$V8rn_RwLb`<4nq5>6-v<3#A2$_^IZ_$u7Mt_EXg8|1Rzw6AR0RpyVd7mjfpi{Gd?CTZY z{Bv-TPlPoH0lT9|kV7R+M^pnMxr6t25h#G5;2-aLYxIW?3uV+A&{A?@%uBXexR#a{ z5XzAZ`Ac-ZA~wQ`J?QVChqtel?7u$nC^Y@>gG>eI4i|rsN*Amd2)mI$;=_7MSw~6Onn~!Mj~CH>PCAmj8i!o`;}pHI+A&|4y9$O9BLh zK=D7j{}+l8a{@p_1Y&w)|GkSORWx|te}PQA&))C)4<mkN zp8vwGh&%kB9Va;@_zyU@SAq!e94{j78xj5b_mL8DtN+?(63K)AT=uu0w&0Zf=hXcD z8~iDbo`iSDU$pHnhW7W>zhJR{-7i4d{&_`w1Hqz!pg=|Z(4G4Mo@wq5=>BZ+7X`y9 zO4m`&OZW?1?LPuQtC);gaD*toA^8h$&HvA(`u7(9*{OdHi1-=*ydvUh|Gp)NKlumT z`~TTh;v4>T0RMsuiJ$l1XXGE?jQl$=Do2N(_WJ;lkwo#nY$aleIiu62O{cHAPbA+g zYZsFf4_Avhx6*aI@>I0I&|%NUBXZMjrwY_!Qt@>+kKWnk{*6MdK;sLe&3fjO-x&Rt zhc^<=ISgz)68`Xvllrb5r|#{--q5$X`LgWEJ@USA=*hSGAr1P)4x?aw0-^cLH>;W+ z!mZ+)?|J}Db^CppWw|=+c53aOx8yj(##1L!yX1j`=KQm+Th;B}H4(ab`a_Jo{POu; z)Tu2GjLs3<=}UMyT%Hs@_pcg%>q1vpK@5)|&YeCT2a|daX;hDgE#*r_ZhF~-`p8tR zMtxGz<#((Yc!2Mv>*iSR-VpXXZxh_FXU;Sx8ooZ=E(mrxI|N7<>i&y=R);jX;3Gckj&_{Yj#B>sqv!Iw~%LXFu$_MfpnGUl7L z#vKH4+q+>cZ7d_AMX3SdieapmWOh_g2Q>yMhIRZD$6_tT!yV__*6FC+E_cI_P1C$B zO6A^ep%kY^y%lm@4aahO{-n&e$Mau?SL<+>wJSw+9uk&e3TqYJa+%Jr;QjmUe^C}A zNq9H`v%`?ET(=3Bt%@9U6N^R<0L;{!U=q`&NLw+7w=TiVcTUd^wr;zrb`IOOAfTB4&GYa6nG-5^X3fDv1pYDGK2S@1^sQ1|Xs=7emYGrb>bdk9Bbgib9J z0BBLali$Mmh$2bvu*rKJp+i0?O`OgqA9&`Tp1O0|*eVkIan9j zhhoT9oMH!S|AXY`5&i0A%;42?x~Va0{Rrk-B|qN{>N~Zo@7Yjkk?eOyGYf}I6y>x< zix!#ItV;dlD~Bv^iI7&Dtgos^mSY zReA9H!rt!-KO8N^4sp)0Ra-_k{|peyPk9zq$lw&4oJ4a#mm(=nN2qarA@jwX!543I znp#@}YfjUMk87<~CDmWeKKyb#^V^0yKnX43lU`eMy&Wu~<-IN!MP0PM{W+6|uU2hU zsUxK5F^nK)B1j6tTyX zhVCka^>cLoQlJp@TcLVLh{%OfdfZXu!Wsw!4Y z{>T>tQbc6;iM~W93_VC#FJizJ2IvSlZxkda16+cC1sb_~4l}a>OBjYk%Rfb)lbzki z%WHOV(fHwbVN`;GAwWD45fKLm2Wwijo8Hj#IyeY~)vkW;YH6V&Bh$QppZv%Xh|_X5 zPXtsVYQRzjHNsb_S(867w@OiW4Dn;Sc(ED!YY2`uk0IN6sHYeF<_+IlUO7x7Yvpga z`6P0;=hehdpH97!7&&=WTl*xw1CGSXim~EIU|?r5()>;?0aMC}9YN#pO^VNFdr%E` zMV&rb(%PDxIQH(k_56?-!ls#70*L5RQiB`3Kz_Qrg?M>`?X~Rf?cqL|l=KJ(0%r-A zMYRoUpJ!>lyb7h&XF_G~jbE}4aw~97KJEM=_^L>?%))S|u$@G$DSo|uXlAhh3Xmk1 zV4<-u&zwWVROD0r|6Conxe}Rv>wJ`Qivq^BYpoEa5_a?4FM0%==tm^=P+c!Mav~u# z>0RvX%zfwkxb$w2eP61cA$Y`PY6}aiO$)RULqAk3j3jSunCD;B-syeZ!6AAfc4SG- z_$CsUsvie`VcIsI|6y z)J#9Wh_wia)?*E;f1Y~g?oqZCtczWqdEe=um+6{Ww~^^;d^5W4x?fd&moY18U0ofx zM%T#((K~@}x2&`@e4GBj&mT5wjU*7P_P}kG)P3KsGPhHQY^%^z^kl z=ef_H=P_y{!|;)f1=KaDg-`B|iHp;_f8QUpr=v%0r+YKpZJ+!n)dmNK}vLL-m6 z5##4zi0NB-mcb7uwl=V;zkc04BBBfS0MF}$8#-UhhF`j^s%i*_DeMD1{dz5L&(r76 z@ADfP8G)i?h9^Z&FD^2&8(Z9|&*KI*9;&3MYwzGGQy0ozfr;o5VxmBXH#ep>0ngA= zP?YwWVsEbb(p|;^4cs;}I~zm<4732$4@eioefV*&{ljNL5B&EW1!fR|i|c(%LQL!% zoPRv7-bc9(7!(s38z~$xL`SA*vbU74*T_7t z)=1wbqJ!_>Q!p_2D((l}^Y`y1$F?6$O^}{==Fzy9poA190}W#5qeo$2j#x8&#O;B0 z&vqk~8#l&4OHnpy#br;@DB4)pKJJ}~IeRdPpuejI{s*WG{WGg*d=RNk%|BrO2G1#F z$M?a(t<)M0uU@}?z7q51jq1aPXS0k^`??-OYopB{C7JJ0Zg8S`9V5lSiTK-6lp0!f znxLVfNlcuIDk1tVU%Z(6(en0R32$&P(XnB%6}cJ!o`&Sgc*S?n=D3925GtCkdyJ*+ zLbSlOY7<81af98TxL(dQBf`wXNKPpA)FD^)R- zugqhyuI68?ak1QmWCW>0q%Pkc;`J|^h^>fxgo}Sh^`LoE{<&b#qKCKofqhvaPF?0TH^8#FNZRv9oLavI7gJ9ewz-QKf6_7?vD%p11`H@4`B#@fJ z4dacTJaRmutA)Ke7;h(B!@MLhmCY|~V+M&ivsAI_7#J<2?j?qgFv0w?G2xO_9D)nl z+l^M!n;T0-u&N-?%F4)~eplw)y}|x2$X9u}XmjJPq~xBv!FpSt!1Dy^C{K+iXcByk zk2mF1f!^}nyOWFZaJB|yZKAIab;7l<-rN)h2nyB@4F39c`y{o)UeMKdyAm+nYZYa; zH3Xt$prKh8V3c~M%_&Sl|1S-2V17-w93Fh1PR-q#g-wmoGM?4l84D|JT84M7K z&*7SBre6LX;iu?i7IOKLapL{6OYW_)3|)ag4|9*u~$drpc{ML3DSZA+Wj}rh(@pQE|u+(2FP6NsBnpnG-BMVq)#gJ`~yfd z);dMw=s#y?534K7%ex)(c=k-(7mY3s}G+y++nW*&h?C* zBL*2_I^@2U`*6TnYdQo5kRQ!OLwwV6Z*65frKN?j>KK)GCJ1Zbmx0{2WV2vHu-M#K zk9XZCwBx6ADvds=yZPu3CS(uu{1Gxr^72>6h?5}Ev9GGyoAk1!q2b6yLrjXN%&LVI zD7$*Wk)#kMm{pVMpeqj=4#3nufhf7Hn1krI$F3QZ^N4@ zofC)fX_C^XuH2*k&LucYI)~SxYrYAsxwhLV0x4(C`&Pzo&Ek}D*fS725|UJJQqI^{ z|1mXS&AX%qWaY$Mj*T)c=K7y9-~K)^1!0eyL``_TTI3;62)^!pSYxg8=q+CQw*{mG zi(>=@L>t`r=JIr;!J(m*^0XCGvCuX}UNG?2H)gfDTBOru0X?RGvDZR0@jTi8d~o8` z_o>);C$%D{FWKxTcYo{RpM#l}Fa`#$4ohy^wq11R$_EmPz2XRTSXQa%YFb(rp&J57 zHB@8=B?b%~8NtlJ8rv%`!bxhKzKUUMpX;j5AQQt9clV3k0uhErrqEUU`}-@5u3xYU zmtvknUlr62$l|{CnG(7W8ndp5x>FWj*xe*LOfguOVx60$ym`yu*qHPtY4b|_mYDv` zt?F+yjJN;2p|^0-2X2PjYaubh(iP2SxSTh7>$q=NTH7ZLI^Ee9MF!D4e{}Pg&K5$l zl(AWy{>d-#B`x3Bnz^9+!UAqvnU&vnQiD!f|D^UeA5xX#o4K#&+(fK{en|JU#4gyJ z6g)08(rUYqOD}mY1R-b?0vjyPJSN?2#nOQ4o*JAf$MllVX5#CX@-@>oId%(UCytLK z6&W~p&1d&G(F!{W)VDe8bo+Wg6?3P-r!M~@z|MX^^d%;>A0k}9XzqXXX$O9cT6k7W zgwYMV__StD^C&+e#?kj5FvNxG`eKal#w)$9PHpG zd0+GMfvaM1eplqXU%6Kh{j)*mHFg1|{S|_fMHez!)%OWQ2|Jof zD(AqfHhzhAoHbbfI$`93b>T0H-$5<=son)NHdc<9O7SR`RuBF>)EFgjg$Y8YWZSnQ zpKN{(LI*U{k;^{~_^LV&&XIljhcmo2Ym?7r@7b&k)LRK3YM z>dp9lqmvOYNGFf~D0wARuO@Nb_RT0VjMSSKu5lWfD-FyHcjDY98hoS>B3>s__jd!% znn+a}-!C=2rMRFoWu=vuix5PAPb?Teu5K;$nvnC{?+Bc!(08uISo?xB4lfvqL><{D zrY{=CaN)r6Y(3L|eNLB7z~*Hq4U;QujG;Edh~lhM0s@5c@}29jK}!CxuyJ%1^kWrZOG^budi(GlRZ4&KHW;am7t z3z72KGsfrk;ET=h^X4RYd=!@AkrYkD# z{o}S&0k+IFQ`}fGnua*Mpn}{{Fn?m)0J8k+MVe#W4x@7gD56-mr?)o#LCE*{e?Z<3IkqmUrUWtYT_T(^w^c%1AwJC1^HAj_;rupqN6h?mJ+xhovYY%|(#2Q4jv_rcD zlrvPzi;GtC@z88R1pE2V4N!P7-mKxaC`egY-NfCKL6Sfb1M5BvbBEc3u&^+uK3ljr z6W6q>N=n)B@g8OOAL!}9u~J1$^?m%?{?J2Kr~+8^1}{Rz$~A+$^zH4)QabAC)s$;7MyweGQ8x=9b0ZsVU7l?wqX-BU}y6+ zHf;lEId)Vi8A+bWdY6&7oRPTnNbA`k-A0Z?ij1jjcJ?vCY^{|^T&5F`c%jQ&Rid<` zb$h1}Pf_`Fj7!ZMioUXTnE1JEzdO=HbbLm-GR;H$(GczHRABfc4eNpMJ2!9*IE%0JDg4ttzVycj%&jDB-{`t%8rX>5GFwzhTx5n*Biqjx1v$zj{bJnX_z zez$qSsUG$^xb&yUJ@vx+`uf0C;o{;lH8(F|J-JFaA9Mo)Sh7L0#$RP*ls;dywy*&G z@m`_BW!zuG9XF`9J~4&H8Wd2A8@DsMF=VR+8wNPzz3(@Xd9NAN1L;0&Iq)$MTtdGm zaCdTs0(_Fsw7qB;;ocir5S10i$VjBWpv42k0Ut3fHMMWlAASYc?F0Mw<3QqnE;ZE= zXFFnSDG2Z&Tf-rUVA+Q_T+JCtM!z%T<^z)fk1ZrF^A|(*TM!Y3S9VQX9Lq?#q(;ry zC{BH;Z3B`{noG7R7mMA&U(vHJ9^png0H6Kmf?>;Z9QJV1G50?g{r zb~N~yoz2;&VeD~PMOGGo7Ouct!EXliViG(WLVixiko+hvn%_aP@l0f8tI$DSNQ`#l z-=00Te`X(uiEX`SN-_XK_Q)4ZO)KWkrucVr=bv84f0{Ke|J9NDKcO-IzwM*^t8wVE zm7K)IIXA3|$gVDS*#dU+eytz0um5R@k&rmN-hY$#;y)DdZD=bU`SyO-`ro!5v2)|H z@jrbuVgruYr1`&LLjTj&`cKD=cqxeg@ZtX_6mo^Ff672*zM@Whd}T|o{7_H0jQc>Y zv(wCuzZ-B1)(|+(XJoCmlH#+Fr7Y$)7qGLU;()IoOQg^hdoEPZ=x}2Fyl?D&jrHRf zlP;>8E(+`};PS%(J10MX$yyxG0$!t9zcI)qB_$Q>AO(GFL#+H`$%i2-x_#qsWKYG~ z@h|1&@kQPQ5H;(`$W83z_Qtw;oY^ZtYr0JB9(rTw@Ikxe^iu@mu^0yiv-VeFp9=1O zkCn^c*Ks}aK%J}|hnt$fY>N?RcZ#o5RfeVe;%C_iK9E8XK+6a+NePc8)1=E*e;!v{ zx_0A+7v?8I{A>F^ig1{={gNKjy1vJAUm@B=rk@Qn6O-u3sp z4;(sXFD*pKmlC@pWopMbjqU;F{l8sI**tn&x5>pYyy~ zv7dzAi}5k<`ir^d`Wop31*~slXnu!C=>qVBSpnFzyX@k?@W9AGlsu^9p+$8Y>VZxL zKS9LBr-fn6nTZMGNCbWe90gvVaD9M$+yIJ5{Bt{6g!PW-?3y#mW!{8ULcHLGlLvEH z$s!PxfsLEiZjaSg_U0e8`?|Sm5%d1@=g)87iae#Pu2&cR5YW{glz%UCR9wXGtJfmK z=6k3-{NL;})Rd~N9(f~^cqWrRo)o(=yBSna$z@RTNQ(zx5X+&X1 z^}-kxx|p7rXowMuI8d5~2*i1C)j&eYDUk6#}7)bF*Jn8$${UP0J0UuMlJV)^;CZo}%tyyPE=q+1SH zz#A6)Qc&9jH*PA&$O>p4AGGA+;UQMSA=!B(yg>?lWuLnalN&^o!Q03D%?qVfMO`O~ zRmjuJmZ$qZGXb^7-7n8V`fa&C!CCw8yfgTUE zmT-tbc95%)bTH|*8N1fGTG75-*08W`VrUTuIGZL{4KYU*zy2IjSMz&v-e@2&-$>ps zDkj1`*UxS3JGaS%@4cW}{J~tyGx@RY`iZ-qASM zz^Zs)>taIugjAK`&)kSq>C@_pZnspMpX{t=F>WptFLh0zeg9$T!pul4_`YA${VO(p zfpy)e$!lcZ$tP507|OO-Lj9rBvLD<>u+za||C#fu&RIb;HPgPHIY!GWQpWUP{7B<- zB4)nazi;mcJr=)L!U0JGrv@!Syw-4-5r@w?Np8aX9|lfRmc}~2I$u79Gn9&G*B8S1 zZPhPYmk+Jqe0=ik$Fy#Zy{qfd@Q3*Akf#~yX(Ez>@U&A{ z12#w3$>8J+@7mKjPr9qC_lc5`dzP*{xR&%0Mf`7$p~=#U38-;#%f-0{Dk`DAzICWO zkx6YArbX|XQIu?QCKGmDVq~W-Tu|69N*qmqfw50n2&g<$pTp{cZM!JPy_{ojj=_-c zAwCx!F|p*wz`1t10Uo&~E)FY6Fh+^&w_7HB@w?QnR)%S_+83Lvsol*Cu^j;!8+CHa zXo$$M7j&0rA>EC6^L)aMnJk$jSQIq>pNWG#1gKv6F7Dt_@%5bai$6a}4;89~FFG z9w!9h`h5O1pJ)}mYgULt5oK<;A1^*%@6>+qNa-HyWsV@DG1YkRb}3ugpYcx2{*Ls= zS3_RC-CoP#(WekOnI#O4tt8JAbd&CucIlBD(!>iGC)x(+Z{(cGkH1*-zIH}sluFw5 z&%lYvuH2R2j|OGenJzYreBxlO=8duQW0k*j<~vf6TtAd$V&ay&-Xe zZ|3!+U|SHxMmTl${F&30r}w7VnkySU9_%#q>WGkX5^lQW2P;HqvLjP<_}_u5c& zd4W^9n;$qN@K@Qg1n@0ToGnKF}S4v;)X21O^)TsoR)7|)?m=m0DgnyuYMuaNi% z3Vwlb70J||lOAwk!QgEvk8>anPu|%Of*)6NOAAq{nxAi9L?c^jhJjAuNMBGd{^;q^ z2${Y><8%Gs!6u{={{->)9cseDr?&A=#Sh>XDa>tA5o|;#M0Dtgauy%{t(5L8_TIMpe#QPdCRyvR1pB9`44b+)=0=#6k6an2&GpQhvv5t9 z9lai;{G==E#>(d6B!6zU$ zLr1&1!r+W+Wc1~iJ&Hyc&K$dX8lXlw0@Oej;2gEIy?Rx8+g&-CWgx_yRu5l=gxDAw zo&*MhoyMMw%Newwb($?L_8;eADzSJQJ(R7xkAH+6!smYYY23JRgPxw=c=uCih`vHI z09Ehz@9*DVc$9i;^Fz!Tu#;8gP0q^Fs@77Bv%(e%4+6Z7vSADqTOh|F;hKgRg|;^M z;g)(c`#pY~bJQ?^sL!8$wDa88khu|kzsyVQwn^fjqWb{4gSlEq60Uk9t!)&za z@K97$R6KWLK=lm#WvR+*`QR6Wr)-Q%Rr1H(RWn8gRGGJ$rCsmwS7fJkF+rucx zM`3l4IG2_>2j#=p>1tbD&9egCY+pXqNcFnO67r8)x~jYwWc|u&v18e1U2cZTkdEhU z=K}y>dD&KRA16-Ds;3xe#dJ)Lwo0t@5RKJ}LdsRGbHzR00nr9M~$EeYLm3g_@iiL?O1D0Z#2oM8%v2v?BCJ{j4PxBS_I^$v59ueSa+%9z`Wf#8&P zq`YVeFs-_de5}pwO>5V$CvnQR)dsqpW#N#D-IT4f(|%?yhht)9<;Ud?Jw1x+m-)t8 z!TmQa4~8A8ijqm|IBDAdyZPpwpUGMY4ui*88J`m)Eex8!Q0hw4yXQ0WN}h_4H?zEa z#P_6FSuP>R^~g$VJ+-osD(os%n|jS!mzzYqr@#HXK+>!RQ=0H}--B@fwT=gf6<5L~ ze2Oaza;RNS!&QgKMoL+xO9RUT7i>&qGFlNUjur9=tsy)G_m7GDUqqHN~oh zPni(;xeuUDY&0z9`jFNoen*IR%#2-wtIQPNKfpF zEV$E1fbg8}j|Q%GZ|E0vHt-#H(%lZ?h6I`*c%pE% z=!Pbo^Ll$tF;Zb#H&BGl5sCAclpHby(Az?T+8&_fsi z8!E(Kqd{wYZAbOx^&A<&)jCvS6lQL?rH*2&aD5DQw#Mv zZY~phCNr66Qto7Xp1@cc_}3O9Yk7BRdB!*P8?If>{ggeStkLBsO=}*mt zGHN(tEvV!+RAmjmoBil?Oe^VHthZ|!Ettcn}2`io7jDG9lnQ4 zNw;r*!ttCVJoD^^CL0}|64TU*OQFt8O7=-J1f?Gq8tw3PkTRHus?EcXa5p^NOfrqah~woa$;^r5v!h9Bt$7px;a_A z^BO#=@WB@P2!q5Ij=^1*g*8?mjBQ$M~`Qxde!BcOcR7*?i0_?{c8!yFa!LF(xAs^kW_}EzFkq%=u&@H?a@@>C*%ddNM z%$q}Sc21NOll+0Yg(D`lV%kE}0z#?TR)Lm%kIFmxoZWecTd{1*`mtzSzWh2QMAEn< z0J#~Z6Oo_7cy9F2H#q_XajoqHq8?o$)_X>ku3lih^CyA9uZP`i^Fzs)+ zn`UXRw{yoU+~ZE^lPR&Bl)Co8*bo`|^D)Y5E{?udl)AZ@U?VeuoGew9{P*4?=?kjr zDixc3w%3YPG&bJstA1y=p`Ci_l-bavsYXWbJk{mg@%9tnXCCj;xwwT*RK3z}b8bo0 zW^v`vHvTa4+G7)!h5W`Xf5@aJzCMqbxnEL2CQVLr#qCI`T*RIr6CGgG)g{-rs|`7( z^BdPjL~zFa28k%uYh~Fx^#>&1pL68d{cocG4o?7^=CoK}3z6;UDqwxvnHU!SO$55W zr#-_~gaueE0iHqz4$skmd1|fkAYFY^Q(sRHtXpX$7ez*2Xgd&?`lD_#PNV?I*{-fR zcavw)+5xKt7!#@3aNs?&-d8AR7qD7)F3p2I1{??KSs0$`^>VcD6?guizBFkvs9sFP zyztjZfUY%o^abE#Q!o;p5VX6n_~R=#CQ-br_Ep*1XL@y;imZ!O1i4+oPh zG@-AF;NBY(jcO9K0SMtM-$2W>Pe#F1`MT2)UN%jd*Jm3UR^R=S z5FgE+U^J>Tv|XIh#$evCr69We@wz+HLWiRzbWM3!ja_({rV{N(irUw zq8<;flMVc2PLm=M5_qT7Nlb&Ev$kxh+k7h0EM0TlRe#Cy`M};?WTZ>$c^r%`2<&El zR%q;SLDPn93JT7HO*i8B1cZB&^0ah|B|Z8n3h~a=4u`UMortn1Jl#^P9=q7}=l3NH zbUuwczo(wxmqlj%T&83B$<|lfo?eko_?Q|rrQ;v%UMQgyasPSFSG3@Bv$Gvr6U$;A zi!C*_ldW{wR?@7Q9TfU}-f_I{V6!Z;-mbPV(%Tz_MTgMK%}M4S6Zgvx9?lXDh|8W> z?zFk(_fjvDcgs-ke8YJaSwzL%TKfRP|jQZId{ zp{>90g>+&;QgRZXg#OSkTi}uq`P;KobvtS=mAELRi{?)nSymac2aS$d8?>67SlUlJ zckxP|!rFt>lr-9CNJva%7roJk^-w|4gmtTu%0j$<9n5iGgZABAS;;3RMwSiN*3o%z z?_O!`I!OY7HV2c^_VtWAV|$#DoGh=Xi20-ydouospzrVjgef-+TnY%!KtXu<`ZbuX z=ZQpXEY@&)g4`|Os*gDPC}wx$62T>WG{?3USf142X;2z7v|tSt`|e#bfapf2ryx}~ zqpHK|j%2kH=xhU&EO!!0kBu#*P_&7}VGtyDEF*{S`E%HdLcfv#Z&1Wu?rGkIrTb#C z7Rg2xxIO0n3UDMrvB`r~6;4z?*^jtj=vF%rr6Akjs5n1Bp-M$ZFZ5_Aw$+Mrart~Q zc&I*wicnxT{oMK7faF~lh_+=B-1%BlCwvZA%f?nN;6H{OLtQ%p=}sHjUykfZP$<+% zV2l~wDy%83Vm8q!D5#iT35bl|?#$VT*Hu~g7?b1Du0fZtlt(Fm#2PuQ|GqS9qSiK$BW*ZcGSlGe$>pk=@4VZ=LxQO zE0IN=oT}lx;5^rX@ktqv3-(1@&vWdt^0zciFAt(*JKhZQ_1NPQxXI+R<&P8IkJ%;W z!At2XbP&qeHCH4lW+%|tujJy)5?VgUqxOVd;x)_b@d^{Qd%@8O%++aSUGEz-etpQQ z>Q)#ido8Lo@mqy5kwtpq-}*p;a3)%vHfXHP&F5fs)A(My)_SnDIF+m3YEr{*)%g>f zB*C};{(UGt{9?M^iIh};Y`auz829eAG&bfewSB>T5oCCf>cb?3HW`g$6L5|@LNq?_ z0v4+a7oJJQgV}&BHN{g~!L-i5qhR{*agAbWL1{RxQQ$0VD>k(p>+#N=q&t;wHn!R| z(&18QQraVC2bCvW^{EfHm!^~G=;^_k`HSh zmRCp_%ZsAq^NPHNJXWL`k%(ajxfZ7bCPf*-;rTxPsTMuKE=ES-^k*3fr%shnR^)es zcVf9!OxOMZ#~Ul7)AMt4D!h51&2zW#-=A3r72mnzuP)#TL#rNNH$9L<_Lj4oxQnLS zf=wX*!78d#`*2KG&vy&Ht)ZKb%BrYrzw-&++X2@5ZX%(pFFl%_7A!|o-x;f2p=mD> zAo#yMc20ZEEvrX^Xdmx`IQ8tbI?2Xr{}vC1Ci1@m$yV9k{5u6K zbH|@|<9BsQ!aVF}h~%ogbu*L66aODiuC|b|p%(+haOUjj10%*i7p1)=l<4tigc{7u ztjAr&aKCCD79PIRPu|JKMzmHmHa2!~$zBxrn!NcIa>LX{d8?v`L$VLt&KFEwEKe$Z zKGAKI-Z}1^e^noiHq4qBmG;8H?H?q?+5L+QRlG2U31nVV{ZoP-09WoTPXm#76w2uP z#mH_pzuUpIk)U~`x6X`dOt|&Q3eC-M9eJYj0S7@)ur!rt9eX^|74esw2UE=LbZ=|C zEj?E}^Nq4KoV~*}=AImqQU)4znCm`LF4r z%h>N@#rEH9hPMLiWsBa#z;JkDnD4xdlCD~Cg9^&Z$2aLGBo4Yc`M##(eo8;Ir^mv= zqIYVai0q3B32l5WV?Fg5b*YX?{&=2B}d7x}|V|t`EI$RpX8{9jZ7frNV&Qu&qTFK4TpXo9l~Jo{Bm=+^4ctG0oFNh! z1e?}bR5+?$USpp&zy@Vdc*~tn`!_4>rQp z7ATgTT{5Q{NLueNr^ltFkZ5;+f~p8QqC(1M-`-wYEyOf1GJ=AXv&DpC{u*J62a|B6 zXH&X5KcLZ>*{-qMVSZGX%je4Vvl>OxC#Uo_ zxSb^(VDlA3jsk4l@TsHV_-kOWPtF`RmTb}TMB<^1-lfKmM5uJ!;RVfm7TfQaxxI?K zy_HeTwybl^#Cj~i;YaBBlg`j5NqnN>Oh@d$XBaRFB-aYOy5PMJjz1<^FT$Suxw#T3 z&mtJT7itHuGWGDx^mpn@R(nZQnyQD6i@xdwAeX zShw)PRS`z*&%g5NC;ue;&h^zC{A9=FMR?O9n=!-0$oNLYK{mn=t|2{PcmPezta zAFhIq;9;#mMzk+_2cj9Lonw^g*s^1LYeL;6^;Ia7_liQ8ncR#QJ+G)wbc9NMSZFHyBH&;7K*y+@}5h0t|qFo4w$*6*hIk+;^O?Gk@rq+op%Cy2 zl3y?$C?}2ll0m$Pw`6CZbTUw_OQuCAdT^4XA|kN;+H8|FF}H{-xqa<8gib?L=ppj7u+Pg{egNBe=Kw;H#V@ zEs7j@8|db3=GzPb7YDe4E^urOdSZKmKp2_#t`|$?%6!EbHE%Te6~#*=Sdpj|CW1RK z+u^)y?FfwEWw(3Gw9x{se9g6ZH1DkCywZiVPY}LG2M2xG{H(a&O#XOQ#C$|8KcrA{ z={AMKRZre5j?CSWVg)!=(|cc{UOsnyE-*VQ(avAL4h@UKfD+l$&scOV0lDMqz9FI) zJ`0hCj<)tvcS`@$1a?eDbV=WCEYiG2i#fbt33PPgJEQ0OzmOf=Q5qEz5(3rNV}Jiq z!`Ik;Ry_S^nY+c<%#1_y2C{6+(SCUQc9j@zD^qOI)|+b+8^tGT+-H(-gUO@I^`Xxx zZJ|Uo?TeSJ<@SD3bBSw>NmKz3M8eHr4+{&bXH{N)xLsL6j&t&MPR=~in3t!Ly!==M z2T-Bt`a2&|Ch!U?lxwH@xEfmwnpq6eg)p%`_c*#H&a%#EV#08x{Fgnp!TXy|BYlNk zN^|upN?MSa8iA}^9TFW)1v+w0&)r%V*wKjFX#P#i8aC~xA!q}p3UtQ^&r#W#>ihh& zTppzEv5HJhM=wG?v{Ua2m!kcC_G4BtW{84J0W%UPm@|;Fy=ycDUtwiw)N9V&Q&x7p z^fpw9nCR6rJwBbM;va?xSWXnP(0h09=DoAJ%=VGTVJeDUIVj01$36e2x#KFeX@j^l zQI|KVO`S9NB}iB`3-!Pcb>YHLsm!}~H+2_tV+Ei7ZADWbb+luI((IXjhsDQRG7F%} z3>Gj`Qf||^gz8a6#oXNd(+D!r^7E(@b1x?A)q+>rmMH2k&y4irHV1N=o0uGG8CB?rYr+rPNBy1LJ`+E0%}bm39@eK}fesi8--t>3i_9uqLAESWIM*!<_l zPbO4F(b}JKa@)l7k%q!-B!`}BLeOcPgPFr_NCf0bkh6GS`u2oPkz~wlyV|(cY5Mqg zYL4f4nz(LOUeYxlvg35EU;&-6&eQe)B9fq>0}uve2DgtXQg~TQ3whr|I5t}dH=!+Z z^F%U+c1p@`AUbX?gkN=nMf{8RM7~DMHVnE6OL#3`fx6|}H`xr6d>?Fs0*G$nWG4^b z3zb%`Jtf6zQuytwKcGgCHg zKGd51bl*dOe#4`ud!6F#o3XUwIg2TT8)7Q@(v?x~V`6rnx)zY1?@{bkZ^mRiJQK+- zAJ4jbbob$bCFQZrnXe9gdGtJFf=A*=H?z;}-b~3RszrXV{@TT;I@|$jM3(|Mi zYpAQ2eE4Tc=tiW((&8e_jnCt02It1i%nZ)d*xVGELd2y{;*>G`hOR?CKAVcAQr{a=J`OdB*3 zoF-&VMzUKeW#V{EgLff8irDdhl z?1)pi5@9a7( zjvw0T7DTkPYwzTKCf-zrJ3^H&DH! zic7N8Cf>c*6elqlQ`k`UzTc(q&bK*l>C-SO7X~ai=y(JT@S-w6TVwx5LvTZ&*p{j@1(P%nb}W8_{|Qz}yr$p!T1gG>%-FOpq{VQ}?Glf@z)Xu`vyulkKK|DpBnA(f^2_BfeGfU4$lSj6nV%?m$Knr7u?llXwIAu zPj+bjVMyVdM{8ku;-)tV{<)909>?RN)zo_IBJIVT1Rf-U3o!8HNaCnO=>=Q@)qAsq ztIfH(2c9fky4iYjPO`7=ua#>vH~6SYt=i)$PoiX)`>DG+NwT$JbSe9u6GvT)uXHd| zO?M4kW%9Imw-S4And^2oThL3^0L9v<+O+=C)rQMDml`G)8v4}emiTqf=~6ta?Cjn? zFxPUi$;}Gh@lvs(;|ot~#nH+6f-E=oJ*TW)J!DdQ$_<4au3et|saDEd@wv^frNQO) zO8=ouI@M!$kHmkEpINlMyA-xcd19mTM26JzUX@pul$SD(rk1J95T-tmM{R{V^vCK{ zW}F@e?V5UHm>TQnhsU9`v{b_J@oMad^#MA3Gfl-~04SC7ReMp933xW2lVDK~rfS)T zK2YJYCwZ8srLGQ=OqyZQ<{=hiwR;IS*2FK99YR&CS1Wf&9X7M6uC7K#)#j-gwA%}i z47|s*%XF7(e{t^ns6tCtm&GIBgM_wzqqC3hp-i@No9ZcuOeqlU!W*OHHoUp@#ARGY z^;MgDPMiC@Z$!$I!HMFKCWrW!ks^ZLb6MoOF0apzEhoNzpLETsded0*F0PpF?}}Vf znUA;#WT#{vZgPlj>8`sqKgLUy&ots+vHL#IU<$8*q?<1aT zGd?oR=>^W20j@0F&t+<(d|UapI?25=uPLfbO*K)WJR7%E&7EtCu1@RsjtJSQbD=g$ z%GdlRf3Nn1L0^&NBHIIG*d9;WhDSu4BSkfqnZIg=20IhQK|rv4v{#$R`YD{dFeHlTUl1To+&NpmX2Y9Rf#ag1ZYEAIh+=0= zYBvU*s$r}SyR_WamEoAtJbAy&Db+g0D$3lqe>O6}DhCP2GX(S_Gcz*SPZ)j$i4x5= zx1QZ=RvFhymNz$xN=b#zyP=)6RvNy!dDFb=67i?4tlq1?iCGJBJV>%$08Wbu*dHTj zgcfRMa*SaWihS>kTb&}AM?@G_I-_o@+ro-HnM5KXzId4cpm)E#{U`5rKN4jzq(`US z68ui4_o>I1Z463l{&9Gnv6|${_upa#Qu5>ER~K@P<6N#4pa044<)JpY)ZhNOLab$gFAf|q=3+)jD8Ld*Vqd2{8fl`~x7Lvlke$vG zeof5jEHx_Gu^*aqLtU_b3(G0zv7eo1)}tkeScE4Y^PI1*YO5(-u?y=ExNp6qz9a8l zoXoP-K;C1!Hc_SD^$*2o?nV*$D`I2awU7LU!^>cUU1j<1wx`4|!5os97s+}sv`jFL9f5!_JTpXAAZ z_wFj>NnnbM%qC$!-rv_}uwg%$+dk68T~FJ?uDJCBdAy@k>ENNzD%cjwktV07nLKOS z+7Rsy&|hTc{K%J+ubGzQud`33Wu(QXZ(S~;?==7HrO4Q#tnd8##d-o!CvCe$BYTIZ zbZu175~W^QKaId!AC-A3ZST&wRL^;P)7pr=RXU*s*Mt;K7x{|5CP?&un;0pLLem|Z zh=FAzdhF~LqCm_?dAzaE9tvOYeOGjKb3Kg!pg?#@N4GM-CLLW%W08H?ymrHeooj3C zCO=}q!QzD02*bigihAI&{D}<8&_t-&i^$E?`ziNHd-ztg-Avx~OwjNaNRYL)a|@_- z)jMb{T6alD6XJKZ(gVX>bRp_L()#+}&3Rv9W!|t{Aef`e(6Xcc1bN=dm&s;5%ji>L zZJ1QPK4(gG6pQA=?(S{H#YDldLaQ3Bwyv~ic2uunn;^3`UJS$#gF~V1w!zA>6@h+k0xT+GKn+o@YMRu8Pudt4PNou$=0FB{qXtq!>kNcq(;GW*0k7* z_(oI%?hD7;M=gIvYi8{}UiE%s4mEImQcvZo>#yz>{wscGDiaI|nuRRu4*s?pWOH8$ z_tCydC-C`ql1{NtMO5Q^BU?5lxvdpdIXb(oLJfsN`A)L${8f`cRp0sJd}fI6!f5Cz z>v_L5<9j;iC^a(gl>FHWwoESXSIw%4#=@05H)*i&?0xP%T>eakBUe(NFp`P6S}!=k zmpkLYRc<3G(bp4hHsc%8#=lu~t_0stlU^#x?0>>#cIhO?V&FmNhxE_6e9L&3IXR>E4?_|?N9pt2{dZtCV?_>_ACI^xEu*~ z|Cwfy@4+H!$4^I`M*8D<4v$mtE}~o>S)F2jNl*RPkfGJfu0>mmha8U4+oQaAhS^hmz%9y86gn^+79>V#13?a!`H(OQVUrk$sT8|GTYw{=`O(ktXe_k(+w zd0i9#=A&{uJ35XZNu2Gv-w-%v-h89D==P^+t^+s6$b(u!Tfb%|`V*GIv}Y%>cEp|a zD7I=YqU{tLF18mWoKZME@`_Q~yXL}*g4_2Xo53@&cB*X+_av_t>{^l6By@=H_Oj8i zY=~yJD>PHg)wxFu7Onx7hl{iD_jcP7^$fwfc@oL6)Sk3KeH9pXXlMbjQxLv*(6$KEh-GBy4H9%yS5wnd79L_-^O|rB4U`b*?d_-RxbcQ^*CnBCg z-c%T!crbEe8{WmlT*H1%OpL~bJAHbUtp6Fp@RPxN$|>;$GxS5A_xcWyr%i;vVUBvY zP`W4gB`qiRw~PjZlT=DS`3@#9%B~!ugF`CXB0xv6%%hDw^)=gVhEMXSacw)9 zD1CcJqNG^r0XgH3sJe~S`jmhqAQl3KN?uUE`Uod2b*lZV%D(s#=LkD8N1WBz;X``;h)fuAU4S0fsMD0M%^KKN6;|JP$UJN)K< z>m;IjT}87&4Il>6Km(jYdzY0cs`Q_J(%NgP??ksto&2L>{ixH=@q%~|?`}W-fH2Ft z%Jr)h&)@piKehLt${erKDr)@uk7NHYFa6sOq;UN&zCFtM_X*Jc;Q!*^t-H%o0rfYU Ud0SPSXg?+|qjWCujDh$60TW>mVE_OC diff --git a/tests/src/benches.rs b/tests/src/benches.rs index 4cd7d9c33..2c693c7c2 100644 --- a/tests/src/benches.rs +++ b/tests/src/benches.rs @@ -22,7 +22,6 @@ main!( bench_eval, bench_typeset, bench_compile, - bench_highlight, bench_render, ); @@ -63,17 +62,6 @@ fn bench_edit(iai: &mut Iai) { iai.run(|| black_box(source.edit(1168..1171, "_Uhr_"))); } -fn bench_highlight(iai: &mut Iai) { - let source = Source::detached(TEXT); - iai.run(|| { - typst::syntax::highlight::highlight_categories( - source.root(), - 0..source.len_bytes(), - &mut |_, _| {}, - ) - }); -} - fn bench_eval(iai: &mut Iai) { let world = BenchWorld::new(); let route = typst::model::Route::default();