From 2bd827310aed5b59b3de92dd1f5ee80ac50dccbc Mon Sep 17 00:00:00 2001 From: ythong Date: Tue, 11 Aug 2026 17:47:41 +0900 Subject: [PATCH] =?UTF-8?q?docs(deliverables):=20add=20PoC=20=EC=B6=94?= =?UTF-8?q?=EC=A7=84=EA=B3=84=ED=9A=8D=EC=84=9C=20PPTX=20(25=20slides)=20+?= =?UTF-8?q?=20generator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 5-stage PoC plan structure: overview / goals·criteria / method / schedule·org / risk·value - reuses proven design system from POC결과보고서 generator (palette·master·helpers·charts) - future-tense plan framing: KPI 8 targets, success definition (3-grade), gates G1~G3 Co-Authored-By: Claude Opus 4.8 --- .../POC계획보고서/_gen/gen_poc_plan.py | 852 ++++++++++++++++++ .../킨텍스_AI_POC계획보고서.pptx | Bin 0 -> 101731 bytes 2 files changed, 852 insertions(+) create mode 100644 docs/deliverables/POC계획보고서/_gen/gen_poc_plan.py create mode 100644 docs/deliverables/POC계획보고서/킨텍스_AI_POC계획보고서.pptx diff --git a/docs/deliverables/POC계획보고서/_gen/gen_poc_plan.py b/docs/deliverables/POC계획보고서/_gen/gen_poc_plan.py new file mode 100644 index 0000000..f42a275 --- /dev/null +++ b/docs/deliverables/POC계획보고서/_gen/gen_poc_plan.py @@ -0,0 +1,852 @@ +# -*- coding: utf-8 -*- +""" +킨텍스(KINTEX) AI 시스템 — PoC(개념증명) 추진계획서 PPTX 생성기 +- 목차: PoC 계획보고서 표준 5단계(추진개요 / 검증목표·평가기준 / 수행방안·방법 / 추진일정·조직 / 리스크·기대효과) +- 결과보고서와 달리 "무엇을·어떻게·언제 검증할 것인가"(계획·미래시제) 관점으로 구성 +- 디자인: KINTEX Blue #0066B3 / AI Purple #6D4AFF / 맑은 고딕 / 16:9 · 슬라이드 마스터 사용 +재실행: python gen_poc_plan.py +""" +import os +from pptx import Presentation +from pptx.util import Emu, Pt +from pptx.dml.color import RGBColor +from pptx.enum.text import PP_ALIGN, MSO_ANCHOR +from pptx.enum.shapes import MSO_SHAPE +from pptx.oxml.ns import qn +from pptx.chart.data import CategoryChartData +from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION, XL_LABEL_POSITION +from pptx.shapes.autoshape import Shape, AutoShapeType + +BASE = os.path.dirname(os.path.abspath(__file__)) +OUT = os.path.join(os.path.dirname(BASE), "킨텍스_AI_POC계획보고서.pptx") + +# ---------------- 팔레트 ---------------- +BLUE = RGBColor(0x00, 0x66, 0xB3) +BLUE_DK = RGBColor(0x00, 0x44, 0x7A) +BLUE_LT = RGBColor(0xE1, 0xEF, 0xF9) +PURPLE = RGBColor(0x6D, 0x4A, 0xFF) +PURPLE_DK = RGBColor(0x4A, 0x2F, 0xCC) +PURPLE_LT = RGBColor(0xEC, 0xE8, 0xFF) +INK = RGBColor(0x10, 0x18, 0x28) +MUTED = RGBColor(0x66, 0x70, 0x85) +SLATE = RGBColor(0x98, 0xA2, 0xB3) +LINE = RGBColor(0xE4, 0xE7, 0xEC) +BG = RGBColor(0xF9, 0xFA, 0xFB) +PANEL = RGBColor(0xF2, 0xF4, 0xF7) +WHITE = RGBColor(0xFF, 0xFF, 0xFF) +CARD = WHITE +GREEN = RGBColor(0x12, 0x9E, 0x63) +GREEN_LT = RGBColor(0xE3, 0xF5, 0xEC) +AMBER = RGBColor(0xE0, 0x8A, 0x00) +AMBER_LT = RGBColor(0xFC, 0xF1, 0xDD) +RED = RGBColor(0xD9, 0x2D, 0x20) +RED_LT = RGBColor(0xFC, 0xE9, 0xE7) +CYAN = RGBColor(0x0B, 0xA5, 0xEC) +TEAL = RGBColor(0x0E, 0x93, 0x84) +NAVY = RGBColor(0x2B, 0x4C, 0x7E) +ZEBRA = RGBColor(0xFC, 0xFC, 0xFD) +SUBLT = RGBColor(0xC7, 0xDD, 0xF2) +FONT = "맑은 고딕" + +EMU_W = 12192000; EMU_H = 6858000 +IN = 914400 +def inch(v): return int(v * IN) + +prs = Presentation() +prs.slide_width = EMU_W; prs.slide_height = EMU_H +BLANK = prs.slide_layouts[6] + +# ================================================================ +# 슬라이드 마스터 — 공통 배경·상단 액센트바·푸터 +# ================================================================ +def _set_fill(sp, color): + if color is None: sp.fill.background() + else: sp.fill.solid(); sp.fill.fore_color.rgb = color + +def _no_line(sp): sp.line.fill.background() + +_mid = [900] +def _mnext(): _mid[0] += 1; return _mid[0] + +def _master_shape(shapes, shape_type, x, y, w, h, fill, line=None): + ast = AutoShapeType(shape_type); id_ = _mnext() + sp = shapes._spTree.add_autoshape(id_, '%s %d' % (ast.basename, id_), ast.prst, + inch(x), inch(y), inch(w), inch(h)) + shp = Shape(sp, shapes) + _set_fill(shp, fill) + if line is None: _no_line(shp) + else: shp.line.color.rgb = line; shp.line.width = Pt(1.0) + shp.shadow.inherit = False + return shp + +def _master_text(shapes, x, y, w, h, txt, size, color, bold=False, align=PP_ALIGN.LEFT): + id_ = _mnext() + sp = shapes._spTree.add_textbox(id_, 'TextBox %d' % id_, inch(x), inch(y), inch(w), inch(h)) + tb = Shape(sp, shapes) + tf = tb.text_frame; tf.word_wrap = True + tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0 + p = tf.paragraphs[0]; p.alignment = align + r = p.add_run(); r.text = txt + r.font.name = FONT; r.font.size = Pt(size); r.font.bold = bold; r.font.color.rgb = color + rPr = r._r.get_or_add_rPr(); rPr.append(rPr.makeelement(qn('a:ea'), {'typeface': FONT})) + return tb + +def setup_master(): + master = prs.slide_masters[0] + shapes = master.shapes + bg = _master_shape(shapes, MSO_SHAPE.RECTANGLE, -0.15, -0.15, 13.63, 7.8, BG) + spTree = shapes._spTree + spTree.remove(bg._element); spTree.insert(2, bg._element) + _master_shape(shapes, MSO_SHAPE.RECTANGLE, -0.15, 0.0, 13.63, 0.11, BLUE) + _master_shape(shapes, MSO_SHAPE.RECTANGLE, -0.15, 0.0, 4.4, 0.11, PURPLE) + _master_text(shapes, 0.55, 7.02, 8.6, 0.3, + "킨텍스(KINTEX) AI 시스템 · PoC(개념증명) 추진계획서", 8.5, MUTED) + _master_text(shapes, 9.4, 7.02, 3.38, 0.3, "2026-08-11 · CONFIDENTIAL", 8.5, MUTED, align=PP_ALIGN.RIGHT) + +setup_master() + +def slide(): return prs.slides.add_slide(BLANK) + +# ================================================================ +# 공통 드로잉 헬퍼 +# ================================================================ +def rect(s, x, y, w, h, fill=None, line=None, line_w=1.0, shape=MSO_SHAPE.RECTANGLE, shadow=False, dash=None): + sp = s.shapes.add_shape(shape, inch(x), inch(y), inch(w), inch(h)) + _set_fill(sp, fill) + if line is None: _no_line(sp) + else: + sp.line.color.rgb = line; sp.line.width = Pt(line_w) + if dash: + ln = sp.line._get_or_add_ln(); ln.append(ln.makeelement(qn('a:prstDash'), {'val': dash})) + sp.shadow.inherit = False + if shadow: + el = sp._element.spPr + ef = el.find(qn('a:effectLst')) + if ef is None: ef = el.makeelement(qn('a:effectLst'), {}); el.append(ef) + sh = ef.makeelement(qn('a:outerShdw'), {'blurRad':'90000','dist':'38100','dir':'5400000','rotWithShape':'0'}) + clr = sh.makeelement(qn('a:srgbClr'), {'val':'101828'}) + clr.append(clr.makeelement(qn('a:alpha'), {'val':'15000'})) + sh.append(clr); ef.append(sh) + return sp + +def line_conn(s, x1, y1, x2, y2, color=SLATE, w=1.0, dash=None): + ln = s.shapes.add_connector(2, inch(x1), inch(y1), inch(x2), inch(y2)) + ln.line.color.rgb = color; ln.line.width = Pt(w); ln.shadow.inherit = False + if dash: + el = ln.line._get_or_add_ln(); el.append(el.makeelement(qn('a:prstDash'), {'val': dash})) + return ln + +def text(s, x, y, w, h, content, size=11, color=INK, bold=False, align=PP_ALIGN.LEFT, + anchor=MSO_ANCHOR.TOP, line_spacing=1.0, space_after=2, wrap=True): + tb = s.shapes.add_textbox(inch(x), inch(y), inch(w), inch(h)) + tf = tb.text_frame; tf.word_wrap = wrap; tf.vertical_anchor = anchor + tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0 + if isinstance(content, str): content = [content] + for i, para in enumerate(content): + p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() + p.alignment = align; p.line_spacing = line_spacing + p.space_after = Pt(space_after); p.space_before = Pt(0) + if isinstance(para, str): segs = [{"t": para}] + elif isinstance(para, dict): segs = [para] + else: segs = para + for seg in segs: + r = p.add_run(); r.text = seg.get("t","") + r.font.name = FONT; r.font.size = Pt(seg.get("size", size)) + r.font.bold = seg.get("bold", bold); r.font.color.rgb = seg.get("color", color) + rPr = r._r.get_or_add_rPr(); rPr.append(rPr.makeelement(qn('a:ea'), {'typeface':FONT})) + return tb + +def chip(s, x, y, w, h, label, fill, tc=WHITE, size=9.5, bold=True, line=None): + rect(s, x, y, w, h, fill=fill, line=line, line_w=1.0, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x, y, w, h, label, size=size, color=tc, bold=bold, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + +def card(s, x, y, w, h, fill=CARD, line=LINE, shadow=True): + return rect(s, x, y, w, h, fill=fill, line=line, line_w=1.0, shape=MSO_SHAPE.ROUNDED_RECTANGLE, shadow=shadow) + +def bullets(s, x, y, w, items, dot=BLUE, size=10.5, gap=0.44, lh=1.0, dotsize=0.1, tcolor=INK): + for i, it in enumerate(items): + yy = y + i*gap + rect(s, x, yy+0.07, dotsize, dotsize, fill=dot, shape=MSO_SHAPE.OVAL) + segs = it if isinstance(it, list) else [{"t": it}] + for sg in segs: sg.setdefault("size", size); sg.setdefault("color", tcolor) + text(s, x+0.24, yy, w-0.24, gap, [segs], line_spacing=lh) + +def lead(s, x, y, w, h, txt, fill=BLUE, tc=WHITE, size=14): + rect(s, x, y, w, h, fill=fill, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.25, y, w-0.4, h, txt, size=size, color=tc, bold=True, anchor=MSO_ANCHOR.MIDDLE) + +def titlecard(s, x, y, w, h, title, tcolor, items, headfill=None, bodysize=9.5, hsize=12, igap=None): + card(s, x, y, w, h) + if headfill: + rect(s, x, y, w, 0.46, fill=headfill, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x, y, w, 0.46, title, size=hsize, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + y0 = y+0.62 + else: + rect(s, x, y, 0.09, h, fill=tcolor, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.24, y+0.13, w-0.4, 0.32, title, size=hsize, color=tcolor, bold=True) + y0 = y+0.55 + g = igap if igap else min(0.4, (h-(y0-y)-0.1)/max(1,len(items))) + for i, it in enumerate(items): + yy = y0 + i*g + rect(s, x+0.22, yy+0.06, 0.09, 0.09, fill=tcolor, shape=MSO_SHAPE.OVAL) + segs = it if isinstance(it, list) else [{"t": it}] + for sg in segs: sg.setdefault("size", bodysize); sg.setdefault("color", INK) + text(s, x+0.42, yy, w-0.6, g, [segs], line_spacing=0.94) + +def table(s, x, y, w, cols, rows, colw, headfill=BLUE, rowh=0.4, hsize=9.5, bsize=9, + hl_rows=None, hl_fill=BLUE_LT): + hl_rows = hl_rows or set() + rect(s, x, y, w, rowh, fill=headfill, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + cx = x + for j, c in enumerate(cols): + text(s, cx+0.1, y, colw[j]-0.12, rowh, c, size=hsize, color=WHITE, bold=True, anchor=MSO_ANCHOR.MIDDLE, + align=PP_ALIGN.CENTER if j>0 else PP_ALIGN.LEFT) + cx += colw[j] + for i, row in enumerate(rows): + ry = y + rowh + i*rowh + if i in hl_rows: rect(s, x, ry, w, rowh, fill=hl_fill) + elif i % 2 == 1: rect(s, x, ry, w, rowh, fill=ZEBRA) + rect(s, x, ry, w, 0.008, fill=LINE) + cx = x + for j, cell in enumerate(row): + col = INK if j==0 else MUTED + if isinstance(cell, tuple): txt, col = cell + else: txt = cell + text(s, cx+0.1, ry, colw[j]-0.12, rowh, txt, size=bsize, + color=(INK if i in hl_rows else col), bold=(i in hl_rows), + anchor=MSO_ANCHOR.MIDDLE, align=PP_ALIGN.CENTER if j>0 else PP_ALIGN.LEFT) + cx += colw[j] + +def content_header(s, kicker, title, idx): + rect(s, 0.55, 0.42, 0.62, 0.62, fill=BLUE, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 0.55, 0.42, 0.62, 0.62, idx, size=(20 if len(idx)<3 else 12), color=WHITE, bold=True, + align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + text(s, 1.32, 0.42, 11.3, 0.28, kicker, size=11, color=PURPLE, bold=True) + text(s, 1.32, 0.66, 11.3, 0.5, title, size=18.5, color=INK, bold=True, line_spacing=0.96) + rect(s, 0.55, 1.26, 12.23, 0.02, fill=LINE) + +def caption(s, txt, y=6.62): + text(s, 0.55, y, 12.23, 0.3, txt, size=9.3, color=MUTED) + +def kpi(s, x, y, w, h, big, unit, label, sub, cl): + card(s, x, y, w, h) + rect(s, x, y, w, 0.08, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.2, y+0.28, w-0.4, 0.62, [[{"t":big,"size":30,"color":cl,"bold":True}, + {"t":" "+unit,"size":12,"color":cl,"bold":True}]], anchor=MSO_ANCHOR.MIDDLE) + text(s, x+0.2, y+0.96, w-0.4, 0.3, label, size=11, color=INK, bold=True) + text(s, x+0.2, y+1.26, w-0.4, 0.5, sub, size=8.6, color=MUTED, line_spacing=0.95) + +def timeline(s, x, y, w, steps, cl=BLUE): + n = len(steps); seg = w/n + rect(s, x, y+0.5, w, 0.05, fill=LINE) + rect(s, x, y+0.5, w*0.999, 0.05, fill=cl) + for i,(date,title,desc) in enumerate(steps): + cx = x + seg*i + seg/2 + rect(s, cx-0.11, y+0.4, 0.22, 0.22, fill=cl, shape=MSO_SHAPE.OVAL, line=WHITE, line_w=2.0) + text(s, cx-seg/2+0.1, y+0.0, seg-0.2, 0.32, date, size=9.5, color=cl, bold=True, align=PP_ALIGN.CENTER) + card(s, cx-seg/2+0.14, y+0.78, seg-0.28, 1.5) + text(s, cx-seg/2+0.24, y+0.9, seg-0.48, 0.5, title, size=10, color=INK, bold=True, + align=PP_ALIGN.CENTER, line_spacing=0.92) + text(s, cx-seg/2+0.24, y+1.42, seg-0.48, 0.78, desc, size=8.3, color=MUTED, + align=PP_ALIGN.CENTER, line_spacing=0.95) + +def divider(no, kr, en, points): + s = slide() + rect(s, -0.15, -0.15, 13.63, 7.8, fill=BLUE_DK) + rect(s, 8.6, -1.5, 8, 11, fill=BLUE, shape=MSO_SHAPE.PARALLELOGRAM) + rect(s, 10.9, -2, 6, 12, fill=PURPLE, shape=MSO_SHAPE.PARALLELOGRAM) + text(s, 1.0, 1.9, 5, 2.2, no, size=150, color=RGBColor(0x2C,0x4E,0x82), bold=True) + rect(s, 1.15, 3.78, 0.9, 0.09, fill=PURPLE) + text(s, 1.15, 3.95, 7, 0.8, kr, size=33, color=WHITE, bold=True) + text(s, 1.18, 4.82, 7, 0.4, en, size=13, color=RGBColor(0x9C,0xB4,0xD8), bold=True) + for i, p in enumerate(points): + yy = 2.4 + i*0.62 + rect(s, 7.55, yy+0.07, 0.16, 0.16, fill=PURPLE, shape=MSO_SHAPE.OVAL) + text(s, 7.85, yy, 4.7, 0.5, p, size=12.5, color=WHITE, anchor=MSO_ANCHOR.MIDDLE) + return s + +def add_bar(s, x, y, w, h, cats, series, title=None, colors=None, ctype=XL_CHART_TYPE.COLUMN_CLUSTERED, + maxv=None, show_val=True): + cd = CategoryChartData(); cd.categories = cats + for nm, vals in series: cd.add_series(nm, vals) + gf = s.shapes.add_chart(ctype, inch(x), inch(y), inch(w), inch(h), cd) + ch = gf.chart + ch.has_title = bool(title) + if title: + ch.chart_title.text_frame.text = title + r = ch.chart_title.text_frame.paragraphs[0].runs[0] + r.font.size = Pt(11); r.font.bold = True; r.font.name = FONT; r.font.color.rgb = INK + ch.has_legend = len(series) > 1 + if ch.has_legend: + ch.legend.position = XL_LEGEND_POSITION.TOP; ch.legend.include_in_layout = False + ch.legend.font.size = Pt(9); ch.legend.font.name = FONT + plot = ch.plots[0]; plot.gap_width = 60 + if colors and len(series)==1: + for i, pt in enumerate(plot.series[0].points): + pt.format.fill.solid(); pt.format.fill.fore_color.rgb = colors[i % len(colors)] + elif colors: + for si, sr in enumerate(plot.series): + sr.format.fill.solid(); sr.format.fill.fore_color.rgb = colors[si % len(colors)] + if show_val: + plot.has_data_labels = True + dl = plot.data_labels; dl.font.size = Pt(8.5); dl.font.name = FONT; dl.font.bold = True + dl.number_format = '0'; dl.number_format_is_linked = False + try: + ca = ch.value_axis; ca.has_major_gridlines = True + ca.tick_labels.font.size = Pt(8.5); ca.tick_labels.font.name = FONT + if maxv: ca.maximum_scale = maxv; ca.minimum_scale = 0 + except Exception: pass + ch.category_axis.tick_labels.font.size = Pt(8.5); ch.category_axis.tick_labels.font.name = FONT + return ch + +def add_doughnut(s, x, y, w, h, cats, vals, colors, title=None): + cd = CategoryChartData(); cd.categories = cats; cd.add_series('s', vals) + gf = s.shapes.add_chart(XL_CHART_TYPE.DOUGHNUT, inch(x), inch(y), inch(w), inch(h), cd) + ch = gf.chart + ch.has_title = bool(title) + if title: + ch.chart_title.text_frame.text = title + r = ch.chart_title.text_frame.paragraphs[0].runs[0] + r.font.size = Pt(10.5); r.font.bold = True; r.font.name = FONT; r.font.color.rgb = INK + ch.has_legend = True; ch.legend.position = XL_LEGEND_POSITION.RIGHT + ch.legend.include_in_layout = False; ch.legend.font.size = Pt(9); ch.legend.font.name = FONT + pts = ch.plots[0].series[0].points + for i, pt in enumerate(pts): + pt.format.fill.solid(); pt.format.fill.fore_color.rgb = colors[i % len(colors)] + return ch + +# ================================================================ +# S01 · 표지 +# ================================================================ +def cover(): + s = slide() + rect(s, -0.15, -0.15, 13.63, 7.8, fill=BLUE_DK) + rect(s, 6.4, -1.5, 9, 11, fill=BLUE, shape=MSO_SHAPE.PARALLELOGRAM) + rect(s, 9.2, -2.0, 7, 12, fill=PURPLE, shape=MSO_SHAPE.PARALLELOGRAM) + rect(s, 0.85, 0.8, 0.42, 0.42, fill=WHITE, shape=MSO_SHAPE.OVAL) + rect(s, 0.97, 0.92, 0.18, 0.18, fill=PURPLE, shape=MSO_SHAPE.OVAL) + text(s, 1.42, 0.78, 6, 0.46, "KINTEX · AI EXHIBITION SYSTEM", size=14, color=WHITE, bold=True, anchor=MSO_ANCHOR.MIDDLE) + chip(s, 0.85, 2.15, 2.3, 0.44, "PoC 추진계획서", PURPLE, WHITE, size=13) + chip(s, 3.27, 2.15, 2.9, 0.44, "Proof of Concept Plan", NAVY, WHITE, size=10.5) + text(s, 0.85, 2.78, 11.5, 1.9, [ + [{"t":"킨텍스 AI 전시관리 시스템","size":42,"color":WHITE,"bold":True}], + [{"t":"개념증명(PoC) 추진계획서","size":42,"color":WHITE,"bold":True}], + ], line_spacing=1.03) + rect(s, 0.85, 4.62, 11.5, 0.66, fill=RGBColor(0x14,0x35,0x63), shape=MSO_SHAPE.ROUNDED_RECTANGLE) + rect(s, 0.85, 4.62, 0.1, 0.66, fill=PURPLE, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 1.15, 4.62, 11.0, 0.66, "무엇을·어떻게·언제 검증할 것인가 — 실증으로 도입 타당성을 증명하기 위한 PoC 실행 계획.", + size=14.5, color=WHITE, bold=True, anchor=MSO_ANCHOR.MIDDLE) + rect(s, 0.85, 5.95, 11.63, 0.02, fill=RGBColor(0x3A,0x5A,0x8C)) + text(s, 0.85, 6.15, 8.8, 0.4, [[{"t":"검증 대상 ","size":10.5,"color":RGBColor(0x90,0xA6,0xC9)}, + {"t":"부스 배치·설계·배선 자동화 + 나노바나나 시공 예측 + 공사 옥션 폐루프","size":10.5,"color":WHITE,"bold":True}]]) + text(s, 0.85, 6.52, 9.4, 0.4, [[{"t":"기술스택 ","size":10.5,"color":RGBColor(0x90,0xA6,0xC9)}, + {"t":"React(Vite)+TS · Spring Boot 3.x(Java17)+MyBatis · PostgreSQL(PostGIS) · Redis · 나노바나나 워커 · Claude AI","size":9,"color":WHITE}]]) + text(s, 10.0, 6.15, 2.5, 0.4, "작성일 2026-08-11", size=11, color=WHITE, bold=True, align=PP_ALIGN.RIGHT) + text(s, 10.0, 6.52, 2.5, 0.4, "수행 · GUARDiA/WISE 팀", size=9, color=RGBColor(0x90,0xA6,0xC9), align=PP_ALIGN.RIGHT) + +# ================================================================ +# S02 · 목차 +# ================================================================ +def toc(): + s = slide(); content_header(s, "CONTENTS", "목차 — PoC 추진계획서 표준 5단계", "―") + items=[("1","추진 개요","배경·목적 / 검증 대상 솔루션·기술 / 검증 범위·대상",BLUE), + ("2","검증 목표 및 평가 기준","핵심 검증 항목(KPI) / 성공·실패 기준 / 테스트 환경·아키텍처",PURPLE), + ("3","PoC 수행 방안 및 방법","기능·성능 시나리오 / 데이터 준비·적용범위 / 시각화 검증 방법",TEAL), + ("4","추진 일정 및 수행 조직","WBS·마일스톤 / 수행조직·R&R / 산출물·형상관리",BLUE), + ("5","리스크 관리 및 기대효과","리스크·대응 / 보안·품질 관리 / 기대효과·본사업 전환",PURPLE), + ("부록","APPENDIX","기술스택 상세 · 게이트 정의 · 체크리스트",NAVY)] + for i,(no,t,d,cl) in enumerate(items): + col=i//3; row=i%3 + x=0.6+col*6.23; y=1.5+row*1.68 + rect(s, x, y, 5.95, 1.5, fill=CARD, line=LINE, shape=MSO_SHAPE.ROUNDED_RECTANGLE, shadow=True) + rect(s, x, y, 0.1, 1.5, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.3, y, 1.4, 1.5, no, size=(30 if no!="부록" else 15), color=cl, bold=True, + align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + text(s, x+1.75, y+0.3, 4.0, 0.5, t, size=15, color=INK, bold=True) + text(s, x+1.75, y+0.82, 4.0, 0.6, d, size=9.3, color=MUTED, line_spacing=1.0) + caption(s, "본 계획서는 PoC 표준 목차(추진개요·검증목표·수행방안·일정조직·리스크)에 킨텍스 자동전시시스템 실증 계획을 정렬하여 구성.", y=6.7) + +# ================================================================ +# S03 · Executive Summary +# ================================================================ +def exec_summary(): + s = slide(); content_header(s, "EXECUTIVE SUMMARY", "핵심 요약 — 14일 집중 PoC로 자동전시 파이프라인의 실현 가능성을 실증한다", "요약") + kpi(s, 0.55, 1.45, 2.95, 1.85, "3", "대 핵심가설", "검증 초점 3결합", "나노바나나 시공예측 · PostGIS 공간데이터 · 공사 옥션 폐루프", PURPLE) + kpi(s, 3.63, 1.45, 2.95, 1.85, "14", "일 집중검증", "2026-07-11~07-24", "기획·아키텍처 → 코어 → AI/시각화 → 시연·QA, 6세션 구성", BLUE) + kpi(s, 6.71, 1.45, 2.95, 1.85, "8", "개 KPI", "정량 성공 지표", "모듈·화면·시각화·배치·옥션·데이터·배포·모바일 목표 정의", TEAL) + kpi(s, 9.79, 1.45, 2.99, 1.85, "6", "역할 포털", "웹·모바일 분리 검증", "주최자·참가사·공사사·관람객·관리자·운영, RBAC(JWT)+2FA", GREEN) + card(s, 0.55, 3.55, 7.55, 2.75) + rect(s, 0.55, 3.55, 7.55, 0.46, fill=INK, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 0.55, 3.55, 7.55, 0.46, "PoC 추진 방향", size=12.5, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + bullets(s, 0.78, 4.18, 7.1, [ + [{"t":"검증 가설 — ","bold":True,"color":PURPLE},{"t":"“신청하는 순간 시공 후 사진을 먼저 본다” — 설계·시각화·발주·운영·분석을 한 흐름으로 자동화 가능한가."}], + [{"t":"실증 방식 — ","bold":True,"color":BLUE},{"t":"개발서버(kintex.zioinfo.co.kr:8021)에서 E2E 라이브로 기능·성능·데이터 파이프라인을 실측 검증."}], + [{"t":"평가 기준 — ","bold":True,"color":TEAL},{"t":"KPI 8종을 3등급(성공/조건부/실패)으로 판정, health 게이트·보안 불변을 통과 조건화."}], + [{"t":"기반 재사용 — ","bold":True,"color":GREEN},{"t":"WISE 표준 프레임워크를 재사용하여 착수 공수를 절감하고 본사업 전환 타당성을 확인."}], + ], gap=0.56, size=9.6, lh=0.98) + titlecard(s, 8.28, 3.55, 4.5, 2.75, "성공의 정의", GREEN, [ + [{"t":"기능 검증 ","bold":True},{"t":"— 핵심 3결합 E2E 성립","color":GREEN,"bold":True}], + [{"t":"성능/안정성 ","bold":True},{"t":"— 개발서버 기준 충족","color":GREEN,"bold":True}], + [{"t":"데이터 파이프라인 ","bold":True},{"t":"— 크롤·시드 폐루프 구동","color":GREEN,"bold":True}], + [{"t":"운영 성숙도 ","bold":True},{"t":"— 본사업 전환 시 보완","color":AMBER,"bold":True}], + "→ KPI 8종 달성 + 게이트 통과 시 '본사업 전환 권고'로 결론", + ], headfill=GREEN, bodysize=9.3, igap=0.5) + caption(s, "상세 목표는 §2 검증 목표·평가 기준, 실행 방법은 §3 수행 방안, 일정은 §4 추진 일정을 참조.", y=6.62) + +# ================================================================ +# Ⅰ. 추진 개요 +# ================================================================ +def sec1_divider(): + divider("1", "추진 개요", "PROJECT OVERVIEW", + ["PoC 추진 배경 및 목적", "검증 대상 솔루션·기술 개요", "검증 범위 및 대상(Scope)"]) + +def s_background(): + s = slide(); content_header(s, "1. 추진 개요", "1-1. PoC 추진 배경 및 목적", "1") + probs = [("문제 ① 설계-발주 단절","주최·참가사가 도면을 읽기 어려워 시공 결과를 사전에 확신하지 못함 — 재작업·분쟁 발생", RED), + ("문제 ② 공간데이터 분산","부스 배치·트렌치·배선 정보가 도구별로 흩어져 검증·정산·분석이 수작업", AMBER), + ("문제 ③ 공사 발주 비효율","AI 설계자료와 응찰·낙찰·발주가 단절 — 견적 비교·계약 전환에 시간 소요", PURPLE)] + for i,(t,d,cl) in enumerate(probs): + x=0.55+i*4.12 + card(s, x, 1.45, 3.95, 1.7) + rect(s, x, 1.45, 3.95, 0.08, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.24, 1.66, 3.5, 0.4, t, size=11.5, color=cl, bold=True) + text(s, x+0.24, 2.12, 3.5, 0.9, d, size=9.5, color=INK, line_spacing=1.05) + lead(s, 0.55, 3.4, 12.23, 0.6, "PoC 목적 — “신청서를 내는 순간, 시공 후 사진을 먼저 본다”: 설계·시각화·발주·운영·분석을 한 흐름으로 자동화할 수 있음을 실증한다.", fill=BLUE, size=13) + titlecard(s, 0.55, 4.2, 6.0, 2.1, "추진 목적(검증 가설)", BLUE, [ + "AI가 부스 배치·설계·배선을 자동 생성하고, 나노바나나가 시공 후 사진을 예측할 수 있는가", + "PostGIS 단일 공간원천으로 검증·정산·BI가 일관되게 도는가", + "AI 설계자료→응찰→낙찰→발주 폐루프가 성립하는가", + ], headfill=BLUE, bodysize=9.6, igap=0.55) + titlecard(s, 6.73, 4.2, 6.05, 2.1, "기대 효과(가설이 참이면)", PURPLE, [ + [{"t":"의사결정 가속 ","bold":True},{"t":"— 도면 없이 사진으로 즉시 컨펌"}], + [{"t":"데이터 일관성 ","bold":True},{"t":"— 공간 단일원천으로 재작업·오류 감소"}], + [{"t":"발주 자동화 ","bold":True},{"t":"— 옥션 폐루프로 계약 리드타임 단축"}], + ], headfill=PURPLE, bodysize=9.6, igap=0.55) + caption(s, "배경·목적은 docs/PLANNING.md 및 OWNER_FEEDBACK.md(소유자 지시 로그)를 근거로 정리.") + +def s_solution(): + s = slide(); content_header(s, "1. 추진 개요", "1-2. 검증 대상 솔루션 및 기술 개요", "1") + text(s, 0.55, 1.4, 12.2, 0.3, "검증 대상 = 킨텍스 자동전시시스템의 핵심 3결합(해자) + 이를 떠받치는 확정 기술스택", size=11, color=INK, bold=True) + assets = [("나노바나나 시공 예측","도면을 못 읽어도 신청 시점에 '시공 후 사진'으로 의사결정 (image-to-image·구조보존)", PURPLE), + ("PostGIS 실측 공간데이터","부스 폴리곤·트렌치 포인트·배선 LineString을 단일 원천에서 검증·정산·BI", BLUE), + ("공사 옥션 폐루프","AI 설계자료 → 응찰 → 낙찰 → 발주 자동전환, 한 흐름에서 종결", TEAL)] + for i,(t,d,cl) in enumerate(assets): + x=0.55+i*4.12 + card(s, x, 1.78, 3.95, 1.6) + rect(s, x, 1.78, 0.09, 1.6, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.28, 1.94, 3.5, 0.4, t, size=12, color=cl, bold=True) + text(s, x+0.28, 2.42, 3.55, 0.9, d, size=9.4, color=INK, line_spacing=1.05) + stack = [("프론트엔드","React 18/19 + Vite + TypeScript","반응형 — 데스크톱=설계/에디터, 모바일=조회·승인·현장"), + ("백엔드","Spring Boot 3.x (Java 17) + MyBatis","REST + WebSocket(STOMP), 룰 엔진·배치/배선 엔진"), + ("데이터베이스","PostgreSQL + PostGIS","부스 폴리곤·트렌치 포인트·배선 LineString 공간 데이터"), + ("비동기","Redis 작업 큐","RenderJob·서류·알림 비동기 처리"), + ("이미지 생성","나노바나나 Python 워커(google-genai)","gemini-3.1-flash-image-preview, 오브젝트 스토리지+WS 완료 푸시"), + ("AI","Claude API 기본 + 설정형 전환","AiTextRouter/AiConfig — 조건해석·검수·추천·조회·번역"), + ("인증·보안","JWT + 2FA(TOTP RFC6238) · SSO(Keycloak OIDC)","6역할 RBAC·테넌트 격리, PostGIS 공간검증")] + table(s, 0.55, 3.6, 12.23, ["레이어","기술","검증 관점"], stack, [2.2, 4.7, 5.33], rowh=0.4, hsize=9.5, bsize=8.5) + caption(s, "확정 스택(2026-07-11, 소유자 지정) — GUARDiA 표준 프레임워크(Spring Boot 3.5 + React 19 + MyBatis + PostgreSQL)와 정렬.", y=6.68) + +def s_scope(): + s = slide(); content_header(s, "1. 추진 개요", "1-3. 검증 범위 및 대상 (Scope)", "1") + # In-scope 카드 + card(s, 0.55, 1.45, 6.05, 3.55) + rect(s, 0.55, 1.45, 6.05, 0.46, fill=GREEN, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 0.55, 1.45, 6.05, 0.46, "검증 범위 (In-Scope)", size=12, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + bullets(s, 0.78, 2.08, 5.6, [ + [{"t":"부스 코어(M2~M5) ","bold":True},{"t":"— 배치·설계·배선·시각화 자동화"}], + [{"t":"공사 옥션 폐루프 ","bold":True},{"t":"— 응찰→낙찰→발주 전환"}], + [{"t":"6역할 포털 ","bold":True},{"t":"— 주최자·참가사·공사사·관람객·관리자·운영"}], + [{"t":"공통·시스템관리 ","bold":True},{"t":"— WISE 이식(인증 2FA·코드·메뉴·감사)"}], + [{"t":"데이터 파이프라인 ","bold":True},{"t":"— 크롤 적재 + 데모 시드 폐루프"}], + [{"t":"배포 자동화 ","bold":True},{"t":"— CI/CD + health 게이트 실증"}], + ], gap=0.48, size=9.5, dot=GREEN) + # Out-of-scope 카드 + card(s, 6.73, 1.45, 6.05, 3.55) + rect(s, 6.73, 1.45, 6.05, 0.46, fill=SLATE, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 6.73, 1.45, 6.05, 0.46, "검증 제외 (Out-of-Scope · 본사업 이관)", size=12, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + bullets(s, 6.96, 2.08, 5.6, [ + [{"t":"운영 HA/이중화 ","bold":True},{"t":"— 개발서버 단일 노드 범위"}], + [{"t":"대규모 부하테스트 ","bold":True},{"t":"— 성능 SLA 튜닝은 본사업"}], + [{"t":"외부 연동 실계약 ","bold":True},{"t":"— PG 정산·전자계약 실서비스"}], + [{"t":"보안 인증·취약점 진단 ","bold":True},{"t":"— 정식 모의해킹 별도"}], + [{"t":"스토어 정식 배포 ","bold":True},{"t":"— 모바일은 EAS 내부빌드까지"}], + [{"t":"실 운영 데이터 이행 ","bold":True},{"t":"— 마이그레이션은 본사업"}], + ], gap=0.48, size=9.5, dot=SLATE) + lead(s, 0.55, 5.25, 12.23, 0.55, "대상 환경 — 개발서버 kintex.zioinfo.co.kr:8021 (PostGIS+Redis+Flyway) · 운영 kintex.wise.ai.kr 은 본사업 전환 후 구성", fill=NAVY, size=12) + caption(s, "PoC는 '실현 가능성 실증'에 집중 — 비기능(HA·부하·보안점검)은 조건부 항목으로 본사업 전환 전제.", y=6.7) + +# ================================================================ +# Ⅱ. 검증 목표 및 평가 기준 +# ================================================================ +def sec2_divider(): + divider("2", "검증 목표 및 평가 기준", "GOALS & CRITERIA", + ["핵심 검증 항목(KPI·요구사항)", "성공/실패 판단 기준", "테스트 환경 및 구성(Architecture)"]) + +def s_kpi(): + s = slide(); content_header(s, "2. 검증 목표 및 평가 기준", "2-1. 핵심 검증 항목 (KPI 및 목표치)", "2") + rows = [("KPI-01","모듈 구현","부스 코어 M2~M5 100% + 도메인","코어 완결 · 도메인 모듈 실동작", ("정량",BLUE)), + ("KPI-02","화면 구현","설계 89화면 + 트랙 셸","전 화면 라우팅·데이터 배선", ("정량",BLUE)), + ("KPI-03","나노바나나 시각화","시공 예측 E2E 라이브","렌더 완료·구조보존·워터마크(목표 ≤60초)", ("정량",PURPLE)), + ("KPI-04","AI 자동배치·규정","자연어 해석·규정 플래깅","3안 생성 + 규정(5m·방염·리깅) 자동 검출", ("정량",PURPLE)), + ("KPI-05","공사 옥션 폐루프","응찰→낙찰→발주 전이","역경매 스코어링·상태 무결 전이", ("정량",TEAL)), + ("KPI-06","데이터 시드·크롤","실측 데이터 반영","다수 테이블 시드 + 포스터·행사 크롤 적재", ("정량",TEAL)), + ("KPI-07","배포 자동화","CI/CD health 게이트","무중단 배포 + 공개 API 스모크 통과", ("정량",GREEN)), + ("KPI-08","모바일 앱 빌드","EAS APK 산출","현장·관람 앱 내부빌드 QR 배포", ("정량",GREEN))] + table(s, 0.55, 1.45, 12.23, ["ID","검증 항목","검증 목표","성공 판정 기준(목표치)","구분"], + rows, [1.1, 2.5, 2.6, 4.73, 1.3], rowh=0.53, hsize=9.5, bsize=8.6) + caption(s, "핵심 검증 항목은 PLANNING §8 아키텍처·design.md·백로그에서 도출. 목표치는 개발서버(kintex.zioinfo.co.kr:8021) 기준.", y=6.72) + +def s_criteria(): + s = slide(); content_header(s, "2. 검증 목표 및 평가 기준", "2-2. 성공/실패 판단 기준 정의", "2") + grades = [("성공 (Pass)","목표치 100% 달성 · 라이브 실증", GREEN, GREEN_LT), + ("조건부 (Conditional)","핵심 달성 · 운영/비기능 일부 보완 필요", AMBER, AMBER_LT), + ("실패 (Fail)","핵심 가설 미검증 · 재설계 필요", RED, RED_LT)] + for i,(t,d,cl,bg) in enumerate(grades): + x=0.55+i*4.12 + rect(s, x, 1.45, 3.95, 1.15, fill=bg, line=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + rect(s, x, 1.45, 0.09, 1.15, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.28, 1.62, 3.5, 0.4, t, size=12.5, color=cl, bold=True) + text(s, x+0.28, 2.08, 3.55, 0.5, d, size=9.4, color=INK, line_spacing=1.02) + rows = [("배치 자동생성","규정(높이 5m·방염·리깅 6.5~8.5m) 위반 자동 플래깅","솔버 미수렴·규정 위반 미검출"), + ("나노바나나 예측","렌더 완료·구조보존·워터마크 강제 부착","타임아웃 / 원본 구조 붕괴 / 워터마크 누락"), + ("공간 정합","ST_Area/ST_Intersects/ST_Length 결과 일치","공간 연산 오차·좌표계 불일치"), + ("옥션 폐루프","응찰→낙찰→발주 상태 무결 전이","상태 전이 누락·데이터 불일치"), + ("보안 불변","자격증명·PII·스택트레이스 미노출·2FA 통과","민감정보 노출 / 권한 우회 발생"), + ("배포 게이트","health 200 + 공개 API 스모크 통과","health 실패 / 스모크 미달 / 롤백 미작동")] + table(s, 0.55, 2.85, 12.23, ["검증 항목","성공 기준 (Pass)","실패 기준 (Fail)"], + rows, [2.6, 5.2, 4.43], rowh=0.44, hsize=9.5, bsize=8.8, headfill=INK) + caption(s, "판정은 3등급(성공/조건부/실패). 비기능(HA·부하·보안점검)은 개발서버 PoC 범위 밖 → 조건부 항목으로 분류.", y=6.66) + +def s_architecture(): + s = slide(); content_header(s, "2. 검증 목표 및 평가 기준", "2-3. 테스트 환경 및 구성 (Architecture)", "2") + def box(x,y,w,h,t,sub,fill,tc,ln=None): + rect(s,x,y,w,h,fill=fill,line=(ln or fill),line_w=1.2,shape=MSO_SHAPE.ROUNDED_RECTANGLE,shadow=True) + text(s,x,y+0.1,w,0.3,t,size=10,color=tc,bold=True,align=PP_ALIGN.CENTER) + text(s,x,y+0.42,w,h-0.46,sub,size=7.8,color=(WHITE if fill!=WHITE else MUTED),align=PP_ALIGN.CENTER,line_spacing=0.9) + rect(s,0.55,1.45,12.23,1.0,fill=BLUE_LT,line=BLUE,shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s,0.7,1.5,2.4,0.3,"클라이언트 계층",size=9.5,color=BLUE_DK,bold=True) + for i,(t,sub) in enumerate([("주최자 웹","설계·운영"),("참가사 웹","신청·승인"),("공사사 포털","응찰·발주"),("관람객 웹/앱","등록·현장"),("관리자","백오피스"),("모바일","Expo/EAS")]): + box(0.75+i*1.99,1.82,1.82,0.52,t,sub,WHITE,INK,BLUE) + rect(s,0.55,2.62,12.23,1.55,fill=PURPLE_LT,line=PURPLE,shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s,0.7,2.67,6.0,0.3,"애플리케이션 계층 (Spring Boot 3.x · Java 17 · MyBatis)",size=9.5,color=PURPLE_DK,bold=True) + for i,(t,sub) in enumerate([("REST API","6포털 서비스"),("WebSocket(STOMP)","렌더·옥션 실시간"),("룰 엔진","규정·요율"),("배치/배선 엔진","PostGIS 연산"),("AiTextRouter","Claude 기본")]): + box(0.75+i*2.4,3.0,2.25,0.98,t,sub,WHITE,INK,PURPLE) + rect(s,0.55,4.32,12.23,1.55,fill=RGBColor(0xEC,0xF6,0xF3),line=TEAL,shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s,0.7,4.37,6.0,0.3,"데이터 · 워커 · 인프라 계층",size=9.5,color=TEAL,bold=True) + for i,(t,sub,cl) in enumerate([("PostgreSQL+PostGIS","공간 단일원천",BLUE),("Redis","작업 큐",RED),("나노바나나 워커","Gemini 이미지",PURPLE),("오브젝트 스토리지","렌더 결과",NAVY),("Gitea CI/CD","자동배포·health",GREEN)]): + box(0.75+i*2.4,4.72,2.25,0.98,t,sub,WHITE,INK,cl) + lead(s, 0.55, 6.02, 12.23, 0.5, "PoC 서버 — kintex.zioinfo.co.kr:8021 (개발) · Flyway 마이그레이션 라이브 dry-run(BEGIN…ROLLBACK) 후 반영 · 시크릿 fail-fast 프로파일", fill=NAVY, size=11.5) + +# ================================================================ +# Ⅲ. PoC 수행 방안 및 방법 +# ================================================================ +def sec3_divider(): + divider("3", "PoC 수행 방안 및 방법", "EXECUTION METHOD", + ["기능·성능 검증 시나리오", "데이터 준비 및 적용 범위", "나노바나나 시각화 검증 방법"]) + +def s_scenario(): + s = slide(); content_header(s, "3. PoC 수행 방안 및 방법", "3-1. 기능·성능 검증 시나리오", "3") + text(s, 0.55, 1.4, 12.2, 0.3, "핵심 사용자 여정을 E2E 시나리오로 정의하고, 각 단계의 통과 조건을 사전 명세 — 개발서버에서 라이브 실행", size=10.5, color=INK, bold=True) + steps = [("S-1 신청·설계","참가사 신청 → AI 부스 배치 3안 생성 → 규정 자동 플래깅 → 배선/물량 산출", BLUE), + ("S-2 시각화","확정 배치 → 나노바나나 시공 후 사진 렌더 → Before/After 비교 → 워터마크 확인", PURPLE), + ("S-3 발주 옥션","AI 설계자료 공개 → 공사사 응찰 → 역경매 스코어링 → 낙찰·발주 전환", TEAL), + ("S-4 운영·분석","현장 체크인·리드 캡처 → 정산 집계 → BI 대시보드 → KPI 리포트", GREEN)] + for i,(t,d,cl) in enumerate(steps): + y=1.85+i*0.82 + rect(s, 0.55, y, 0.5, 0.7, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, 0.55, y, 0.5, 0.7, "S%d"%(i+1), size=13, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE) + card(s, 1.2, y, 11.58, 0.7) + text(s, 1.42, y+0.09, 3.0, 0.5, t, size=11, color=cl, bold=True, anchor=MSO_ANCHOR.MIDDLE) + text(s, 4.4, y+0.09, 8.2, 0.5, d, size=9.4, color=INK, anchor=MSO_ANCHOR.MIDDLE, line_spacing=0.95) + # 성능 관점 + titlecard(s, 0.55, 5.28, 6.05, 1.1, "성능 검증 관점", NAVY, [ + [{"t":"렌더 응답 ","bold":True},{"t":"— 나노바나나 렌더 목표 ≤60초, WS 완료 푸시"}], + [{"t":"공간 연산 ","bold":True},{"t":"— PostGIS ST_* 쿼리 정확·응답성"}], + ], headfill=NAVY, bodysize=9.2, igap=0.32) + titlecard(s, 6.73, 5.28, 6.05, 1.1, "검증 방법론", BLUE, [ + [{"t":"점진 QA ","bold":True},{"t":"— 각 모듈 완성 직후 경계면(shape) 교차검증"}], + [{"t":"게이트 ","bold":True},{"t":"— Phase별 QA PASS 후 다음 단계 진행"}], + ], headfill=BLUE, bodysize=9.2, igap=0.32) + caption(s, "시나리오·통과조건은 design.md 화면흐름 + 백로그 인수기준에 정렬. 실패 시 원인 분석 → 보완 → 재검증 루프.", y=6.5) + +def s_data(): + s = slide(); content_header(s, "3. PoC 수행 방안 및 방법", "3-2. 데이터 준비 및 적용 범위", "3") + text(s, 0.55, 1.4, 12.2, 0.3, "실감형 실증을 위해 실측 자산 크롤 + 멱등 데모 시드(Flyway)로 전 모듈 데이터를 사전 구축", size=10.5, color=INK, bold=True) + # 데이터 소스 3분류 + cats = [("실측 자산 (크롤)","kintex.com 행사·포스터·관람안내·교통 정보를 크롤 → 멱등 시드로 적재", PURPLE, PURPLE_LT), + ("도면·공간 데이터","제1전시장 평면도 JPG 15장 + CAD(DWG, 트렌치 포함) → PostGIS 폴리곤·포인트·라인", BLUE, BLUE_LT), + ("데모 트랜잭션 시드","행사·부스·참가사·옥션·리드·정산·결재·공지·알림을 폐루프로 연결", TEAL, RGBColor(0xE9,0xF6,0xF4))] + for i,(t,d,cl,bg) in enumerate(cats): + x=0.55+i*4.12 + rect(s, x, 1.82, 3.95, 1.5, fill=bg, line=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + rect(s, x, 1.82, 0.09, 1.5, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.28, 1.98, 3.55, 0.4, t, size=11, color=cl, bold=True) + text(s, x+0.28, 2.42, 3.55, 0.85, d, size=9.2, color=INK, line_spacing=1.05) + # 데이터 준비 원칙 표 + rows = [("멱등성","Flyway 마이그레이션으로 재실행 안전 — 라이브 dry-run(BEGIN…ROLLBACK) 후 반영"), + ("행사 스코프 정합","데모 해소행사에 시드를 묶어 '화면이 비어 보이는' 오탐 방지"), + ("데이터 표준","공통코드·view/mview·배치 집계 — FK 최소화로 이식성 확보"), + ("PII·보안","테스트 데이터는 가명 처리, 민감정보 미노출 불변 준수"), + ("공간 검증","좌표계(SRID) 일관 · ST_Area/ST_Length로 물량·정산 교차검증")] + table(s, 0.55, 3.55, 12.23, ["준비 원칙","내용"], rows, [2.6, 9.63], rowh=0.46, hsize=9.5, bsize=9, headfill=NAVY) + caption(s, "확보 자산: docs/assets/floorplans/ 홀별 평면도 15장 + CAD. 데이터 표준은 data.md, 크롤은 kintex-crawler 트랙.", y=6.5) + +def s_nanobanana(): + s = slide(); content_header(s, "3. PoC 수행 방안 및 방법", "3-3. 나노바나나 시각화 검증 방법", "3") + text(s, 0.55, 1.4, 12.2, 0.3, "PoC 최대 차별점 — '시공 후 사진 예측'을 image-to-image 파이프라인으로 검증한다", size=11, color=INK, bold=True) + # 파이프라인 단계 + flow = [("설계 입력","배치·부스 도면",BLUE),("프롬프트 생성","보존/교체 규칙",PURPLE),("Gemini 렌더","워커 큐 처리",TEAL), + ("구조 검증","원본 보존 확인",NAVY),("워터마크·저장","오브젝트 스토리지",GREEN)] + n=len(flow); seg=12.23/n + for i,(t,d,cl) in enumerate(flow): + x=0.55+i*seg + card(s, x+0.06, 1.85, seg-0.4, 1.1) + rect(s, x+0.06, 1.85, seg-0.4, 0.08, fill=cl, shape=MSO_SHAPE.ROUNDED_RECTANGLE) + text(s, x+0.06, 2.02, seg-0.4, 0.4, t, size=10.5, color=cl, bold=True, align=PP_ALIGN.CENTER) + text(s, x+0.06, 2.44, seg-0.4, 0.45, d, size=8.6, color=MUTED, align=PP_ALIGN.CENTER, line_spacing=0.95) + if iShY zpnyiC?3X$KWXu8?cElo>Q}>m62S}R)HpKe6=bvyK4+lj=>lZ~;JiJ{LGZ6*-SwSngF@|iq&bHL*xJbrVK*~)Qv{gBcH ze`TCj_45{+of3OR6lWrgR*rLSruUb1dTX40#_odpRgm{ej!k8ve-cd zJoDC$`~Z~u+pM{PWjhA|1OV9inmN#4vqsn6$kKt1_RqC)wnqY(0Re2gO%~C9MUl-4 z74gKH?%O@70=}M9QCq3Fu~<=^mxp|;#!51t`{Y!P4Wl}B2*y0w;VuQsLPfR;R07G7 z;*yfh+0lq#VK|>X0=d58MXl1_%C2Fr5M z1cgQGm|$;!xalvB?l!kua2t3|Wl0u}IxT4`XWV-v8^2auBV-L-5ECM`Zs_tBuViQH~#52_!Me zGQ$`mh8TNaWimbT+AOMIz+frx*n!M@TyHduDleUXT>n62k(m&@qa&+)gf& z3L38wZwO2ejcnH_YR*E~N6JdXM+F9}W*ZoJl-c0{nLmJ!E^-hshjj}4+mt&rp-qqp zbFFb=ZNM}O9n=KAiS21mnQ1S$3}sxXP+2?}OK%U6O_na#l&u6J-qX;4{08-PQ8bEE z9JtIB2=ht^7A~K7dIT)0JYjlnwT&9&l=5+aGZrh%@vOm(HJ8raPPQg!U*Y?b>UkTN zrO1Eo>vp3AIIKjtP@6x9$tR43hZuvE~$_A3Yq()wzG zYod7Q_Hr7lQ52tfB~x|~)5MgjtYPEecV0Wb*FLpS4GTtH>Kzf7cd<@ad=Oa(k2%cw zG#0k~X8*CVKww!9T5l@Os-Q*VzGkStlsB1a+X5!D z{|e8C&2)NMRp+%D9xhmwp*W&csiqP##iWookuG?Wc%1L={mdCuA!(IL#{-IK);d(B zRS_sys$)zq{#6kQ+J?GojOoGbji-gu2Hc=gB8^6~#4_H``A}npS-_YJp9W_7W7(OZ2wxt_3!`yf6Aw=ts|YS zy^+ILt<-lkv$6g&M=qA6t#|2Bz^~skdvAjWN~Cu^*$JcyPf8RDqXQ*80N5B17VN&Q z(NE9C-~hSlMa=^nq90uyrQ+|CjN`*K2zlg5FOai_UG_mDm6?u8SS|0rU!2h95d3JN zY_Uw#ODLdE2pNcR#r; zz8Wxp(hu}9Ph^1+#kk3`!pm4iO*2wn&O!^`L7+Rl7$3fcXHz*ox*b@~U@D=+B$XFP z;F^rbA>wv0xp%pw-YL)h!jjHG7z^zEqiCJ z7gMRXjG_UNgySx-pr-%YIwqyc8WrCU+p1ouc9-?bW>-)3k$k{la--!y;YqYwGKyFg zJ2cNkJrM9tTJQ7#D5FKKgYj!9V7^oT?bdx_U71Zn9o53!)tgO8J?#& z=it~u;KVDwhb-JIF^bP536C6#IW*Z&vKAqQjIMc?CO|_-5ZN;-y%h-o^Gj?*(X$QTPxUox*0MoO&8`R2-Y`W&opLbzpYX@KrZn0SdExNE1w=xv7fzX3 z#yyD@Jru~(mGmG+8ePS>?{=QKV!DYhl4?>^LZ8Ry^mXr%C06OuVXmsrc7e~h@}Vz@ zq0{;?9^Fe*SA=dIi3wQy5rfLhW?akR0fe9}slUCywTLzNIfLurAc8VdMP<@sBZ+p;LdB7#b@DeIdn{n)~UvB}}y6dAyqoXD2aM~H58wcLCixjO=jb`PCk~~>AiABs5(*rsj zz6%dGdXSbpBpKTy{iu%2oqQdIDPg+rKOhi6(ZeC)Zvm0qT#r}vn$lD$e>45gdWj1pssSnG$B zEoKF8=Pa=Vr?sYet0+JCqT~9){0wxokdLc>lZg5PXP2@;8nT&_fd~~(jKpZi1{CM{FhX5l^t5qELIS*odd~s8!Etgwo!AYXnfP=y=NRz8gFh_T9&&C6+0 zP7+u#!DZCg!A`_35a}O=>T>GxSHZDQ-M&ikAt$mUkEh}|z!O>))3-e|12{`6DK+T} z8`IPa7mOpr&M%rn{m!}cvI@FkI_3_?HlQsJ#0guSpLtu!Ujq4m6r>M=#cNk-jeI<6sTz4BIV)`!9m{KWbMR)fjmS>w6n^0 zj)(~~s~8jL*-w>_qC!T%KAjzkMk%L=I|7Ukg(QaT*2qRPi@+paGM?6_q%-uClOiWxFcTAfAB7g)QbtcwUZrXP+ z&8PzzO}K4rXtXVs?Ml98I6NoG6wm3DZqtxkG#*}$H54wo7x*{jR;*+{b=7ZP&?;Y} zC9$dlX)kecLNi8 z_*-zcV zdUJR`pFi(Z55?f&^8OwmbVYVmLi2p-OZoJC!hC%@d7{Jjxfm>G{D{fn{d{k#Ugy&W z>wG>O$(hP-e}0VU^7cIUt(L?{-0@0B2(nHP{6&SdO$%&Dpevh?4@@IjaVG`{PPE5o zbK30R$qfburxl`v*-l0QuiYIZ0#6BdHDLd<6xfwYhO*m=P)$_KM5-yWk`bB+uO(_s z9f}KMM;1U9&3^U_YKMx^X?OURX>qe0uiUbTxtE@bD zNkTjiu4&V>bUHvl?O2aD461eGRbI3n?F06HZa4@YphGEfg}|OD{cJ2dcW_`*oM!Hi zlmw3-m`V_;8bC1+$fiuh5-o<8!*&B3n%yNHt4%BHrQZsR-e~vHAml}?L*K1o#82n7AF>?kz7e8+$M|Jey`;87ED4q+%D*1VLZ>aY z)*Xzipuv63s?sZ;rMjQA0LRa*Qcl<0uqY17H*Wemn<7y$bcLtqz!c0kpp z6OnbT`k?Vd2`%Ld1CH+uCRnLeB3ocPK^=?UaXUaa5ycQae== z^;>`(1Qj-QE+hRh@?52)9EfOaoMsE&GJ^!C9RuJgi!H3#rFl{x6@wDOUB6H(w8n$# zExSn^)Cba;mQ0(bS{I6Pe;9Up;>cmvoZS4Pa~98)ubm>g*rO^cOH)>Zf%DXw0%Nie zS@3a!qCD^Hss9mneh5@2%j)7?w+2_WMy7Z%QCyKj-ZDLT4Y8ae!_D4;zX zaQ*}s0Ml=cn|@wT5ERKRHEFBLE(^f1yHjBJ(rPOjSDPFmdj_y>Co8gWB$nUcgnpd0 zLV`m+t)&_BdCDzQ?8!+!o5BwnbbK%2;u>f1jO={oL$jDZlIX?gWilCWDrg)Py)3n> zEpn+>?h&=dQ)4TC3JhSOKJ*-`NJkJW_JG{_6~3nw8h@E?EGhiWzuyTiRF4ji$INZ}h<4w)C8b#Do8W@JP?#X5rw!1bxq6?-kCfp@>= ztW7>ZhIE|i#2K;%h^5rdZ_agk2QPfxVu-#+i({9StweW(QVM%D%DfZ95aC~ud@v6t z9*JO(;>94POXo9FRTiG9Nn%dYAJjc+r8r*|<9?=s?0PUy^5X9x2=$CBGb=A7ZoKJ; zY7BbycBhGI88I&=K3={%=V>Jh9Z+-YV?-cvdvwq4ISv~_i<$_6eQgGqLFMQMtG>Yu zqX(sX{xqqZ?o{&9LhG2MHmrS?=|vdV5?1bRdA5Yc%(mM;66i{PO$dQ@d>{D$x^Q0M zYnv&-P~L1Q@3WgX=ZmSC;{HyG0in;)8YEbLL5rg#IY%=w-lmy+1XjXtcslLxHbo;H z@;&paYe`&v5PzE(EPtC4=1oiBBn#J=OO-~MxEC_apI<1{Q*Tcm^syV$5xk@KH4`gu zH-U7Q!zWA97Q-M1eIl_yiW8HUjJ;Zw$r7=HYilU+2!-lbkO~H(g7UnoD)s#to^sO8 z>8LX7ioL+usGSgU<1j#}=H$cO%u#_1r{|)izk|F@BFK>-7zWvUpcs(*d=Bxrvgf4z zPw~MRVd0n9(HKHtJj^)>aR72na@eub&g`lh;xqAnNHD?O7uWb$0491_b&mFX`Wsm$ zz65Y;RJj9N6)cY80hjN9zqtmgdV^L3=zLn>w&L{pS&BJ-#g?w!SvC!R@$}$TsxWk}k;VByxdPcD*vVNcB7qU4kzwuDahM^^ z=^Zm%&5(@o#>==1lldtpNMExq6O)QjEQK`@BpH{Lk<*!=GUo22zP?SBVIzxEWA95X zT5SQ<_MeOE7&-KhjySZ4Uj$3z{ou_5BzT5NU>WbjPUlS%vh+H8g{_2-r`Stqm?+3d zkLe9sv{@^ZKbiHw%h@8hU$Z^&r6Tayr9_Si46^8Jva?cTliFzBUzMAC7;SKxo6f!Y z@OZq%;7gtgRS^Xca%Sz$1JIT#COzCU$6&+HxmL%sx(U72GQfOL(V)c@q^y8S# z8Adzc*nO%7cQ4>El5yGn({s<6!z?+Ii&WmXXNDP1+n~q}dwg8XmN^PN4tXOrvq=B= zb8C#%V=LvNlNBS?L%X=J>@nBqDR#qNZ^`mO3RqxBBzXf{Y0Q~4RkZkKwfteM`19lB z>(a8fuqwZk9|_am5INq^f+4L8i@l*tDWWW0ubQpUSehCoGr(Tf8Cv|ReS=aeM_qm8 zUv!9f3J0c{?v24LJV7i=mj*~^9*+XyU=)2Q;>eLC(kJp$15Rat}^t7P%JI|*Hn~%rC7gcm! z@3$E`xM-P2pBIK>Jl}||&gSRaHMS{TU;GcyVDZla)lb)(*Ox2WkJpK_F5XWJt>1TN z5m(tAuOBNJyk1T>=L7zh!_pk4S_ipyk~qI$hhoom8IexQ3epcgJ^T2)mBR?Cg@(WD4jZ9_iDteh1%37N)UXvHe&K2oE3u=>X2z;lQRUu_qKqCj`hI3>2 z2?LUnLd1nHod_8$1Gca_$}BFw_vJAFGg+y(>nI8Iy6IM?xX)lcaH10 zvJTICggs^%*Onu?+>Fs*ud}>(VYNPe!eb0+_FOBqLDHU^5Gq?f58!QI794k2(UMtfmTU5=dp3+1(2qQ80KAgHzLFc?GW|U1!M%`AYf>B$*pL<9 zzUkPP9vamQ-w^dZeU@umYH4e4O|DG_Je8;rFOKDn-J8ps8VjyWFuX=9>u2ZAJXZ*W z+pVi5(Y{{^*O0~w{0!YY^rDp*8w(bz8b%*VZe$RwHq#eT+&f7LHCZ_WqO>n<5f{Iy zd4WdCH!nbFxD!lSe;HjhA^+M>BzRi>8i8Lsu-bC=Pac|)Q*Mg5ck-(=Q(F^W&4^&m z=qYTkptk_#MejXKWFVyyv)!?PpGWVH@Afzlf&A?I9r2^hOA#C!Cx#zG1TMo)lJvJ9N2vfWa~b;xp3dMW@-k z{8-cz2u_u%S{I;NyZp5|M6~wpW+;5RTPV())X;xaQ~8;Q%CN#(Xo;P0p)l&qu)TJxj+%h0I2z5Mo=w8tpgy162zFa?p&LOEnX6y;n*F=I3$C$j z>-AqGv}Bl^YWJ7NRtW<&Dy8pcXACc!kYaOH3I3#hBgH~=S<(AiW>a8aLfs@pMz?Y1v{pnkgNRyIXryaqIs(= z6m~GHSz(P^f#XsIq}dfMzA43!PVyroQH}q4@WzYZgv{j7q<)Au4KIeF(F9lXXc9JbTH-oY2frD~rTw)6VDGAsp3BjVN5gR>qfPCKWd>{%Pz!0?k!)tO zoT(u~Fp>;XBHk9~Mf-GzTq5|yp-O-kZ{;aCfITXJJu)WkICns(i9?ig?>($wLo3~Q zHZ34eyfdIsg6=-r;EiB>0F2}aNp4srEg^cs*d zilhbwz=%LvY!%FykU`LaeCJAZSo^qlaAU|q(N%kBM-mrS&;g37{SZYTvR6{fJd{%b z1z{d9b4rypTy%%3m(-hH#;2&Jm%gho2I@mLPkLR&CR%YSDN6AAvZerIW6MZf%XYkVMyYxD9lmT0gaFcbMs4&CBo}IeT)@wDTKbFPp zc6u1ZHSGO_hT*6bVVvRFKa?wx05pm2Jd8$yyb zGj`0nSz5m}CVWB3@SGV#`@1pe3_-dQ(wf~9+dTXz|Gj~dwHQguZbN68Ykf`&cTbld z1$*rem+dR?0~%)DO>u9ZRXU(d5A{#CY=h2)zp&_7VNb#nBs z2x$!$AQ`B)0IY^P)U*RM(jYc$K~3G58C$8PNu@hjqf5xSs07fIXp0-TAWJi(s2v2g?W_b33opTm-UwKaf#9p?RQ%l%(b@Q6)hm-{WE4!m_yz+xr|^3`Y-KrfWeqGgs856?bpIzTBs6~jR!aRP8$Leo-LhnY!ya?^8n z6Vy5O=spbDqDZOpA$#3&EZ7*;CQ_q~>40!RQv0sKMIw+-)kj(a~*!)m@6ShPLU+7_Rl#^v>Py$cw4TN%8vg41np zn4zX@;$BV>mg~{SWb_gi_j#IO`E^kY_N!?B1S^xLf2^} zwxG3+LuBuehHBwAcy!n!bbR(l+s{Z3GlTWXlZn#uL6i1`;i@{S3k$+!NI4a03x3q9^Tx`8(Gg-)Y8;8@Ul$zjEq5`&P zq2{fPck3hT^IBPXW>)BiM5_L!S2)ir;4m%<0p`LH(B_;vNS)QC&n&yAx^Kxn3{~Dq z@YcNpb>F+ZVyWza!~5K|r$kJ6?9KuSE`2}q%${8tG+Qu9B1|Tkw@Hos8<)+aiO)!~8LuT)v9CE=DRh0ya--k5V{C@-II zy~x?$YQGdjCmScqEgs&Qx_mxAE^?UW%N*RbNIaaVl(&F1<;fOPn6pH@gB3U*^sM^^ zm>ZAWP*&YA_)-f^vq9N(A8MBZ>ID!SB0man;I{F8??7zM2W`izo|bJ(`y{()e58dY zFCDU9wY&qaQ*Zg96SBbx8luq*)xfF>mIvvcJg=$q4|uF^UP;9<8~03%%W2j-=@J!$ zMSDGe?!Nwiu=Z~f_Wx4m|IOMztoipsEuiXggx#0mO#bSM{O?f9_~-E(R5q*&*fBb` ziffi5wB)^kD8eK}{Ss#+vRGFg@wx{{U5A!+)(nTEMbiJE)-65>S8P>ARf6Rl7US;a zne&Kq`|4DCNv@_(0daCx+;&G6z?eid&}wdED5O`Kl+SD!;b-QKW8IMX?d59tHuIsq zOe{>b-4c8J9#F^tie*P?L8t^!Ix~QjSS8i0?bS`fozC|3dWaWCFJK?8SY}&GH%z!C z4}yMqd)|#8-2ea+h{FVn$qG2pH5MZSajhf8fM{{Hs%@>3gkX64{tUO;XC`Dtw6Pxe zYT)*QJ}{yxKC0!e3`qO*8E!eF+~m-r=u~eXAYm0v6jNh0<>21y3GEzM{0`J? zrRw~ciwo21M=0~(zxYC3dfucq`v*KzN;SBeYIzp+4qXQ5zc z)7_aX6Z)Z4ID0FX%&SSxk}PN>@*6&?eArUXP!O_ryUGer_ZTTAFCzcA%1S4R^f$g# z2DmVTCe2aR6^sD-_@9$0)EQH~TqEn$p-^lZ6LcF!3=tdOvPI;xNya?g?-uU$_xp}9EW7r5Ekx-tG?#%OK)kp`}+(k*c!ZzbzgDz;xdc&QHK`sqYR4clCEP;7F$a1 zumyLiB`SIQ?s}U@&n`RAHYxhoSY5>_hVJk%&o6xf{aqUUvq1cxLF=zo`|ky<2)zpp zgD-uk_CL^vO#h(|t=Cvle6OBR0-blLgnj07{%n$)v13U^vUmW9e2DMgYJ9rfY?N;#+~Ii^MOtWS-b zf&>cv;tQ0|jC59u+|+uvUx@^zu%3>tBw1bz3}=vtOiG+st`q9)WkEu(=yB9ch`+%S zx9fSHrDT6qnlX~5UTOp`7eQtD?&TfMLp4S@q?lZ7A!TF{_`~0DphQhM>bR1nSj~bR zEmflO9Yg#QD-#3gs7qf7gAe)^Rt9FMxz%#;#UI5tAB$`d=;%vm@sB@f&#XH{E`(Zd z-Wt!0x2UvkjB}Jg8U0jbt+*5+E229Qfv+HXFya;3vl_8*GB$#24AaNfD~?W1@6&|5 zb!NmjzFXKpu6sFsg)}SI?f$N&pKC*iCRr%1`#s zrj)HC!@<z{e1OeU<*MG4ElE=-L@C?dy~vp|foo~y7$=_6-XI!%LaGpo)LEFRXDy1d^X zAFjTnrBn0UfTkOfAsdi|4$0sVa}+RJgaVV(_IThNJ2P2*H=9W(xPG!o!g$+9zVi$m z&JoU8<;#_DSEB0#M1ftVAh|`(;o~ zKE1SxS1ijIi?qjXXM+83X-_mWKNNH1d2}ttlXA7l0!VY1Z@`S_ihc>8mtLQrAK`j^ zLs(w`h=4Q$geYRiwXDbB>hdsV#Dw^>nIF3`UQZjDl9aqLS%DRK2=N7JNldE-Y|cqq zV$gzk0CW$!c>B0EKO&vI^DI~U0sDEyVg_r2PG#`G-Nz#fq^( z4GRvmRH06XMf^H5d*eP)+uMBzD06fZdn4D`XnI(elaWrOW5RtPlw#n0B)2$d3FL{TCBJa*rwO z1Mj0vw3LuM1cVIWs~7|*g$knPQOqPo1KhjEPw3-W z;ZdxsYR4FmKGgfu5Gy9g&1B?5k|I#!exD9?;avt6VPa-}WokA(ywlFI$vt}eZQ8G{ zd1qxeGQIpR7(v!KV)WMmcI=*MGPn0?VFK6DH1wHUHDEJ-#Gzhk$m9Mc!sb5 z%tmbC7rmlczDAz0&Mubq0DhA65LN)jCI^PpfbnTCeh>WmEdCf_5kO3GFr)^zdj&R< zM>6T&8P@OWR#q+x?K|0O3&O}vs5MP}4=PKWpo{rlwA5Z!L8L1s7T4&Q zZ2^ty&b9SBFO-y@(>k7z@s8ge3c5R^i}G-V>1z@&+Z*RVicaQX2i2jv(s_mcLh5AM zK=@u;((9CimJ-(xKF6jlc3eElQH;2$K|Di|%+6g2$Wf>Sg&TS@uWG2|xU^yWo$z6M zcx2=^2L)7&^{P`@I!DN$@oY?-Y6u_8$IK` z6<0&qdit7rJqZ1Dp*cs_cV!kdF7^?Q#jNlxsJXrC?Q&XC?So86mC=aI1+TV#vt^<~ z*mB3Aeups0 z7V)RiFNNYtutUK0e!p{e=S2n-XXe@V#ml|%gbEx8KqzW$HM7El;O3E$DIWX}hw!bA z98?&o(hB>Y0xDN4UBFS~xI<4AZ7;k>X-`l}VONRNZRXbWxzp443E8VrnSogkMs#FQ zW6(Y25TQY}(z+k&%8W&zrB%Y>FBN)ev7qt`4Y5R2N&6&61^(*MR&Of&_SV!}DMRga zb=0!Qm13lz2j+lriHJ$iI#G9Z=B5V>zZ7P}?UlPaT8LTb%nVD=88TsY`}gju!AhbI z5=Fq6tv8dh47(M&#rcVd(1gVebs%+kOGop5D#bkC2T+3_Bvk0Srt*l#7Gu?T&eSBs zCmTQHcxu2`R4$25#5x+MQQs>YVx|fQTluzp{JQ7%#TP}Od}sG0Qi?L`5QmS*%&UCdC8~jX<08+A1^MgQykFm*E;1^DV&s z?yeg^InO`@Qa4C;qn}!~6MzIj+5wa&UP2!7v@k#dnMHfSVP0%>j_lh=G0m-ku+fFV zUd#fBr_b_+^0L!p4u<%#T1}$Fb|w+<_iV7?IdzLpGDJ=ZBsaewbmp+`Rp5DT>RH1g zto^R?PMz3bo%P!8(6?tWz`Y5zv2iz+=aQ`Cq3zWX-;XE`B;YN&_xWwj8yW!0wut)p z-3zCpGO$VdipI_SqEtoYFP4;w3tMSe0wHiEgPvIytV&A?1=xH)X4F1e&>GZiU?XrN zWqaId7Hw*y1H9f)Dz*#)SS)?Dj!-P84eTNoq#U8pnwD*0&pdj>DWIPy)3XDmS0q|x zl-N6>Ed0t@Q7&^zFwB*x(X`|{DGV>o1d8^UNvSnQQys!1Iq3P=ui=JMvE8S8p4D*Q z-fYTLvK~)nX(v{SS=$l~bAr#y8oYXKr=2aD@PBQr_JUhAJs$9{RZcihKX%myG!_Ti zWZLr~_b7HBC)N>NPh#Kn+0n)nx7qxB8W1YGnQ^^W@yx#XnbXF3_vmbL?75LfyS+vF z)wZ63b=0Z7=efTU?NXx}z`w2S-XK}+e6sMd)RFE}qIxHDwZK{klSORw_S&E_O8dTA zsM~gLk>YKYXT@J&)g&|ntA95&Q(ZW^{NaMKTKv&zR@s|T`|EMHd?})>iS==ubNxX& zGS1}DdL|3=Ne;)witc>qSo7}9Spr4bjsNY%^xMgv5ay6EsD_Llf7686;OyNI2ph)< zbe_wOyNbVqA&H{BDl+WOUz$5mS_q6%nD0E86->Tueb33@|(vi?G^-Trg!L2LRRXTnhYS5`1dF5`< zaY82Gi@&f}TKp{OI^2C#NxPe=6VgDwaCg{txkLZomWaO?`R`RCXnv7CV18M;&0kHc z|DC1F`lm!RsI2{IA@JI&CTNEDR&cDf91}_GjW00pV`ezL2Ud%#3%hM3J{YBex^Hsk zE!I_tO+IIy0CKzT6q~m-Wv^iYEG+xJPVQjWSqiBqdk zmRG5PaY}PL5sS0r?Ie_A>wp;!%`Gu(Im{e(j`O1bc}BmF&_=Y z9&*GX$r>VfAe?;L+7H?L^ucUP=JGZeU_f^9eWFL8?HOwfr}D_VDh8h_A}5~-wj~P2W4{p0U!Acen8s^)3NAFSUW+8*b@Q^61*0VNGub$oDo0s zid=()AVuRE5=nyfY~X80fy=q*u&;>Zw7KCvKZTQ_P=Sn2@Vh*u<~? z)2Jnq^sY>*3)TihBw1}#T)3%{6uvU3I*Af4K^-GzDx4WcS0}-7`e*#?L$9LpV2WH} z?JN1%7R_w(F@M^#{is%Q+(`Fuu)I{a*BCF)9!UoXUGUCZa+jF&Eibbbrs{%YLngR< zqB6hAPj!0P*6X>-nJh6FSwkc=eS&a{qoY}tMBW-gA3bV za8dpjxSWgqCtMzZG3*SX53IyTldw^aZ7#fJx_;(TA1qSGf?q{2V@<#uWinytw4bpH zdQ2C^eai?m=>hR8A-3vg&G7tCavuS~lmsD>f*K|Tr%!N6@zE*?(!Wo~F|?2$N~4F4 z-^pq)-+3!q1tdF^qC~(oX_(Jcb0B?KEKc{d>Q83kh4OEi5+}Njt=@{KJ8Lb~BPmY~ zs2Tc(g;5)YV!TAoq@rk3TEvWj&^YD28P82Ve2q)A3oYW6x+xee=;@Y+wh$~&3=slz zKUgvBy{0LQV6?+v5>UcCGi{Q1p`Gu?1zA-%1s!eZWt zz594OyYr6UMBd3!C1%sy)G?IHP(imi0!oHVyYmL?VL>eT2;;Sdrj0e?Ua|#I>>Mn8|nBQ`1K76_$by zTmPysQheP+cBp*!SfXz}N_$;je@~E}sGu=Dr4%NUCt>vFfggFsxEvTwIrIAec#aHoz^DDIiP zf6zCL6{7X)_eA~c-4L(O$M2h~uRchhRRAUH z^+^*Qj*LOOII=MV_lJ$jC3+nttXJW8bX-+WjL*h>H$^iuL#rvuk&v}s)mti4l8ldD zhyeY8D@cdiK>73{@l+T_{v&!`=d-{q_TT364DWs=YhJv>nHbQm$J%9xYx*L1f;f*i z!R^06|F>%7uNCv}1&oQ&@P+2D4QucJzy)Og1B?l^8T+qZo-Z{rT?6m-jQ|0|L*hGY z7$;`}Y4-Pb0MNh*6|sug(hV7tSIxGZIl7fNzGz9UA@O#mHv=kL$Da-{j{CG#)8~>Ce4JLJB*?%s?V_z0ax^C z7-h}=f4F<6Aj_gQTQqI65|y@Xv(mOIZQHggZ9B8lwrz8#Z5t>1?~abs9e>~3_uQvG zPdoNn`(dt#wa5Iv@r^NN=Oyg?K!G!zW+wFG2YO<~~F}{1PN~93o&=r*pCN<*L>}#t6kF7f^W>lbh zr%_QWKyzk8vSVwWNHY!$HFzE@hSq}OG*i59DzvEdiMc_m_MV zhB#bqF#mFIR!JQ+7yc(-@Xt>N#Ing>IBfu$>J23e@Do~xAF`zNH?r_47Fhc{fI5t+$@bN!w^u`-%-s?~Q#zDEgWHC60#;=vb){6XtQqcJ)+O zp3cy63MuI(>=h2S<{e+ZXUXii;OU2j*PRQ>e#*!jA$HoE$@TTzg&<>#B%HX+E=h7~ zC5cxr;%|L@ehfeP%GRi60jMGBl9wCLHGh*vth{oi!3ooclRbjvmqpWsf_n16gL+~= zLy;z!Wj?EIEvSHt6euHkL*9y;*vJuhIQc4Klx?$4AGnW=UlI+KJ)06y=^nTLICg0! zhga?PC*DWsV1SZo`qMb~&Y)%du6c5DK{$0nJNDoRz^^>#^t8&4-!2AeU z+YW_g=n z23b>a9o6-f^X)n8prP<5S}7_-2ZbnzJTgRu#}Zu}Zdyk`Ey6&nVFzJrY7cs}p7q6IV) z4a?}j!mcbzzPQzgLWCA$g30NF2brLTnQ~xF=3yw=gqN`;vt3Lv{Td;j&0*b~IA2bn zjK%j9=u}QThZqO^7BJeuok4G#9X^?oGA+V=0iGEcX`#|S$eXm+>~JY53Vr=pzV@)R z8*!v(+4C$;+3=p#;XNQ*&lh2w;8Ua^vvDcTe2j5tMb^P_;~f+w7N*Va5L<^LgeKUm zfFq`Wn`=1A-SDG)G8I#c_az&1Jq;}NK#ET3%qO(4u}wuwa>7l9H&6IDpa`S!zBOQi zf10GUyD0hURBE$%?CGZc23Y(Ukyv_)8qYr*x?XPFpcgHLvu(PVTm7g8({RzbhbV#%-PriK{C#cWcgnV$}< zx2j7x)GIEP9bDt`yL9A^zh+{5@c+zjB2$`j?nJCWc~nShjc>1eZ|ze=UR51Bt7iHz zA+ce0kQxv0J5zD?O-w0`?O14N(N&o)9{NH|XS*w&H)E2tS{7Bpi6*Q=^+j9VqqzS7 z>-`a3@>X2g=+IOyd%38`|MmK@Jl*Yita5aX&%0V$p~*^I6K`zcjUSsZGCi|`=V@or zFM+aNV2-vn&)~;^Q=ovM{W-%8iidj`pGq6bAK_Bp7bw?6UCxx!ap>rrd{@5uWC!L; zpm;rJ$Msq?H=sR!ps#jkH)&nBaYB|bSpsZb|6 zPplKRw0ZfU{r;bvP5<-07@kwSMk%oq-IoAt8l^cGkv zf76xAfNq=%qA^&NZhOcSUC!=Pnko82*lb*u(4}PsO{@nnjV}pL$yyWM5na7X%2t3A zhwVWy*-F5J25}1d`Y|>1!O`ZiPDzg!fz&W}d6(=9@liCt*}UZ*JUq%`l}3U#en8MYE{y(D44D6e1lbxJ5;{;5$s3BI~2 z%m-cP80j|Fppp6$^oi)AzcmjJ%^W+uXOCc1G5x>EKk7)*_up+ z2rcTL;oamJ7XR4t!Wy;S9X86-vt)jS`7R|jll(L6GuA_0H52zW9M5wq2Oq2Rb_85G z0CnIu>^a!;bJDl7NTs9zQ7>FKBAV$eVJBg^Z~j&E-ce0xPOT3Y$4wEa-w_Rn5pT}d zcoVz6P445`%Qqt(8FO%1L3iR%pX=6kZgoX&-e~{mZhwgWwvfVP$4n7pwE1(1aK$eV zKGCUB!LGYDWz@V}M9>RMq`!cOmH24cXu(nuM!({^mTHt!xh#5Z{PqZf8nj%Ej4Oxf z$k=Fux$bu&P}@37PWBBG7bJapT)WI25$ny@p9WFoWG-B5kaSM%(`Pm=8D4=5hW( z!-%i--t@q2KczrF9?hMLI)r`8Y8ZobUeezZ(wE$u7>ks@F&@4$aVDP)Gs&zio8`|g zECpq$rBp$UB}wy&E_?z-=0Hk9Ep=?q%Tnx=7WI4I5Pb={(p7E8RvU@=2CrHRsl-e9 zcw9kvbmvun_1FIc5%J%275(Es{eKsx9q&uba(-i4JqZvH#lLy0>>SL$)1w`fjGdg! zZA=}%12X@^cSbq`bDIkdIomY`v}u<>+ZwH8ZpMbcPD<(Jf%$}jIOwGfN(W>%hiofx zck07@b6s1PN+7_fP(gT0B&Xou!#*z`wR-0%PZ9YYN@xeu-zwxOUm2bUa%A9xb7{+C zXBpCoLj>c?G&VeE%aXNL4OTvvs`Y}arJ_?$7NA9J-;1ZUa#i8uz9-%QdD8`jN*`Me zMI4WxdE?YFi#|ZldPp8VK1=p1Qq3~f$|AIyOoLv)va+OgDIOcYf2GFF5L zTQgLk?}blDXUJjndI@43W4K79L_$LVu)X#IJ`dq)T!leEgFh;g+@2qA1TM%y+GwF5 z=yn;=iGc*usGWWHpYFOKG&j~!<3ZB2q5MrNayi~{bSni^bS0^ADWM)Gmg4;LBk#>% zMSy=3=peQ`z>WE}h@?7$4yGUrG$g_g)}&a!5$eH8{`j4nnKT?qTWAE1a|Uxb7?Bsv zJGODV@`s>78!8&NDo~5aZ;fFobshA#Q1jF=%u>Uedxm|LW3{!DhD5|0L|_0rtiMx|RmwrCPU_Jv z+=+w%w&VDLEviOj2A0+bLK3CpMt(9Bi+D^&+wMV$ zgluTDktxX1B7nTxORYPdUV9}U)WOLdO>)c0c!}05NIqoJ94Lv93}(W*ze^l|Lvu;T zibih;FPlSmh-Z=e70~5M!Myq#{eg%-`D)L@a4AgUrUuW+g-T9TD#=q~H?%TmT~~?h zDkX8_s|rj95}2x2F1kxwrG*P;uL``D-Wr_mQszlV$f*U z-x7t4@}QzyA`_>cq6(j?QrCmU{TC-eHQ;+S*=LTIlPVNW#&ocZ=CvWhWj`0m{#^0= ztzJ{3$qeZh1`$ZZIbO=0^wzxJeUO#p{0OQKcV9Zp4)sr*j3lYHqX?rEbid1$5(Uy9 zqe}wC`5RG7@Y)ijOCm7}gU6a)d3bUoQJ3DLnJh!lz2 zg`)tYQCn}3A=0=3xQxpagYicmB^@r`NMMVrHP0fV+%^K}aM~%b(?;NKa8&9vkozX` zMigAhPsr0ZosU$Ja+g#6EF?TiGY#qAdOuQG-YiRGpeP`4;$i0`m5EdWYHdn!-7s)C z?H_!p7(#;zKRBd4Z>8XDjOr_Mt@=7h=SSV;DNU@wnNpY7!6W>XCPH3&k{^XB;l*!F zLZNdL93|Rmz(hlR>3LnTk0j0X%P%FBOx}a3y#F+xdjp1vlcL#myR?@LnCG~G0Us7) z=kY8H(njHiMmm)3_l&`ZS+0Izc0o8=wLPYXfU5nY)rIxU$&Yh=ynbK>l#nFZ@q9_Z0QafTFY>`w+sTh}`Q345Fx2+bcf z5F=E7K=asDC<&W&M$LL&Xx4j2AY(UFgzG#9kTEPdxPmeo@8Ye`2weO5`ooGd?$0g3 zV30Zq>WoLFS7t(uAqv@MKbW4;dh#9P-5eX zq^BeyBE&GYl|qNW{VD+Rig$Pa_+2CXWma9VKNC`QTa_^BkV*2M@~KuXCW@iqD(HdHAO=S06c+MWR>g}&Rj?~@*q$Qm7mI
  • Th-~YM9OV3~~1v9gUe#)__0KGOV7M7`Y^4C|3P+LK;i5 zep%>$l5Fy4d|iUsJki&F#0w$fukqIi)x(J?7aYva9sf;%xG!OSwXUpHviy8<)T}_H znTUTjF=m5QG%-uhH~ZmDv8*hyOedSZ^EZC!h-{7rVU9+kbB!ik80E-u+a-VMC~qpC zOY;=hO&8b={LiB{&I_1P?Eym7^flD++_gBNyh`p0w_Ku#ieh^PZrk5+dnGsO!h~iH zxx_8J1DJYT!m*5}Zp$h!S^jl{JCQbxf{KTsGmHCO(%cH?*Hu-=gBHfo!nSF3K=g%2 z!);L4N?4a(YvRLPN+>^2;ua53BE-5FF98EgPy|f04@g0H9Tn9P7f2$S#v<8U$sQw! z@~a(n4s~;JAq6Jng^{RvRIW;F)M282CBEAxQ`^~R0jp)WZddWw z3p=3n;%d&cy1=xXMVHs0m$yv=GFnaL)u7}=}7Df+)~)4v|py8l9&h4yCLDbxQl0zzV#CxiE1Fz z87Kn23L3hMtu5I|dij?G`AtEM@}fr*JDap?BpD-8CZiUsX zoJ!L(lC|x8&hnG1xphUY()yP1a-)nu4u3eF@9Mh)yf*Oc$Ag(M{hF?!|J#|BcYf_1 zaqb!7$)?&ijM@47ud8k_rw^RAI)wDt91%U=W$g<1O-d~B^fn&^8NdPw@uepMi}RxL zDmI|7OfKD{z3j?*J~YEh|FT!?E7>NZg!&nr^&Z@4b$@OPH-Ju0W1=>Yl9S(VgDCZZ z2W0IHaW>|U%{-xuDjUX!{s zww9DTm||M*`d6GG=v>Vd{Bp64W?flAUR&l5ijAo1HTxU48q+lRf5pTeVC#x87_d(f;=iOJ>!XZ^Db{x&4|Xv#eIx%@CbXM+BoMq2;#BIF-txr;0v zxpnpLBIHR4_rM^nHFfC9Wu>@4=%jRQ6#+!GzS(A1fMob_Eu>Eu99v8}_tZ(WsUZNp zU=poVoieydzvxniZ%lh=cuU`D${vJdo5>ljm=}uFhx6$9`T2=sdTZM7?Qr>y^yh?m zlM+kxIg)1}7D##=^PQ+67x(>gS-T#kaF4wTarJ3&o^dD!i|O&1mT!wWJhunlM2b^C zmTG+&)^cOWyg500L6Y)Oh`ITYmjr#Pi-dC)PBCxR)cR?EKBLauJZ}H5lXy)QMM3W~ zq6bilJD>uS77OChq>ynVrx^sIwovyEnds|0Us*H6o_ zB^DOr32#HKgr$~fwXGbSWg*b>sdC3{1|7>Mrw6Pi1#+I{c{kJJEHtn3k?e|iS@LLGh zdaD+*EN@+Jw$jL|+eATIV3Sql9W~hwE_i~qjA!^Z9+xb88P)oiO6*U;QnB}FI`3Q*A;}SDRInd3~^xtJhrHact<_}zNBne&&MK)y1=W09#2uQgGt)~Fp zAGFEDFK{|2L(CjX{a6k z&Pef$Q}K*D1i7)~BYP*@A+Dq{ki|wT%DpOG7arUV=AcEZ3C0Easp*=KI;?T*NWy{; zQ}#l?iiEG+>xD6!`Gp>ni<$(~Utf`R<2&)7)K{6vP3_|cK)(Lv%{#0wgL`BW=n8WQ zQ@g(M=`t(WAwYntk$HN{=VsxZBRNwEldARo@_v(2AvP=h*LqQ{JfrQM|&a|Y`dZHdx$BA^C_PV3!s zNrx>W&h?uTdtT7Yk2{$NNIU+`rN~09B?%iz;Rk1>4`!?yn%Uji8MJ^HkKAwFAA5AI}j_!W{AAYcW-BhL55@MXN`Px?emJ=(FbX!xWRwwjuqZ0783}Pht1>Pa9QD8AYZxji6xuRl%1{ z?U1+wIGY&B-&Fo(nH>E{FG#}s2CM^87`=oFxKshvIE~)^TFLkwaC`}xRDsoLa9xGR zw3q<$)5!HYAvi^UQ}h^8K8(d)Xb>)Qu9m&$?zOud8<6T7uxB|REA}xUi9iodu1iJy zO9R{%seBrfYjD!?DAXX&zQkHRPgu1lZj0sWk7dusr@@@zD{tsIAXVLF#I2@uyT;4v z3yAkXmg|(|-;I}Qv3_4(pl25970*)6-}!$$D`7SSgbD^Ozx53Sk)ERhI?2o9%EXE- z_TYr!!cprT{)V`%`tR1lRsSwYu-Lbhv(_t2jV4s~B5PD8)@zo(d2!+YMIIS@j+&=E zfmga0h7QYAaV?Fw_)4Q6Rn*KnFU%*PRC8Iy}_6&BP) z$B4Njvp40nOh6Xt3>tOhq98==qi8WGX<7FH6G)A{vk3m`fN!Jp`vLISx0i6b=YVQ- zA3xR1S$7_ZylTb!hJFcG+ce=se%?LU2)GM~p`iRa%mI7@m1l`N?nKh27@GYdV) zv+?rF4~%IiYkSi|_FaKi!#7=EJO%q2P~800wRq2NaXoABCbR0-Vr`!P6O?(A!ikJOAWWr$|3Mg2zavL1R>0J?=Ka+t>9SE8{L4#uZH)-ulB z8s~OK3G)-b%fB&6b^hxJW<%rThtO*xRzv#c4zl)I=yWphM%D9lfvMUZp}(Pzoxfqa zt_(Pn3ieL&4-^hExxwgZ6nYH;N8-Lx9x?D+a)0Zu{(?Oy+*WV6*Rr?10bdLQ<7BBU*)lY0|30$T zFGT(|kn35ZzqtOYs11lq@>I?bP(2se8*2jN+r2ox_WbhGiv`Ca1W#B2EYGg3zi7yz zVNf3joMbWF;`v43cj{TeuCAe+^q{v@Ml(PH*g@T%KY;bXuHbv7jjUKlX~FhK(JIL# zDhZyp8q!IIOB2jyJGbviy&h4oQ(R^{UlzIizCK4iZ*gtZwol1ktCv0wWPsGpj+cUR z>9x>}{5K!F^w#~R9|hko`2Kcu*%R*d>+K&Hoa{YCA2_|ymp=e-H?QJPThe(WFf~LC z(}BG5p)7=_w_f4@qxRvyS6=>Cxdi`{%S()MeSHvkAfUMHe_mex!{vLSv!%2yhUeSe zZ7@vVFb~$y{yMsFf+We+s#}d)xZEy2h_PMv$GcAG7rsrV^2r|o^8E;$gf&h_(rzxN zAz+kt=KDckNxaI%FT479D?{!dn&UBqoIV6Gc9+Hy#-I*kECwM%SIK4V zzb2LyvGyxgip;qw5gtmwNK8$V8mtYEt~82H*1QWz%RIrz(32>hj07Vp?bT}V%JR>b zQ5P4_Cf44Er=`otWNe;v)5&BIAjgXR2K#ZEj}a|06o4woc2!ZkPdc(vVt&eb)x@d(XzUL#6X?!&6xd{d8L7Ju@deWO4zrzc9=$(Y6>% zfN}Pov1U3~6|EM5m|SFjz&=zMz^u@`chW%7WbIW%iVh?_OiWsnSF;(4w~X$C)cWP+ z?B#gJNl|Wqp418OW-z6fwIEYdcsdI;9KI`xyOB?tVKeh37Vq;U_a@%Z%1LVi-dy%I zw&1qbmS_3t%)EyCYar$1?B-H@CztiIbjToG-+g+9+EFZ{p!E=?ZLA7G*!Zn5lvP)(sZB; zAj$%fx0_?@A?J){)&^D3)iFn&0A;1wU$1)0%1V~r-vy^tVJD>R5~?b%J?k$wdJb0m zNl9HvFxKmF-qEug1-^`km!g4U!{k`xk=bsDx(rUb*Ixzhl}^9ioHMw+TnwfxrbDs8 zm!{`S4%8OD*sTNZmvzNnL2*=F3rF>CKR3;8%aa)VoQaDj%NS{~?Xx$@gW*aq(6geg zuBR4lj)prHi^t_K3Fp3yCvo z6T7PNGhY*5QCiqdNIDY#4i&WLeu2N3th>eGsC7Asyfg)Tq%0O~!Y{^}X$0ICTK(X|gIM5@Hucu*rldv0+9L{3Lu)` zwx)bwflvZbz`1UlLa6YM$MWF`yVMDJzBRa_-n6`+Jik|qAf2|JC@xtnlOz`vg3v-3 z5sg2sK=lD|=wWLNk&ISh0rh;z%zw)<9s7$s?4?pVbp~>G%4zJDn0nNh8WlrUI?v!o z8np^gx>$(@^viS#n$?Np-J&){!+p5Kav=(5E!(kf3xP&HVJNFWwbyA|SC2Y{ahrs3 z9lU!u=tpr+LvCDMe@MD{BBhAp?+jD2C?s-d9CP<&X>lI83{qOp4A63ACsto{lC+{L zu7WHwrOFmp%F#^+tZj~Kj=FSF&jM4li^$D-HM;_H;I1zTZy(YCPFvZKk$2 zJ9>WzgG+>kyOSNJF>v{l?$RZPL70VqEZVu1C7dkI412^lzDgmxMe3y2|wG)a>YJx-q5;i zYaK&&rRAGOd_FT)NRE0x>oiK&HF;XDcYgd_o%CPc`h@(m#WsTYrt7eK`vd*8DC6=l z#Mg#Z4ll9%pj##rl&F?kd3IU%66sC!YG`(l8PU^mG7<@vXg4j>)FJyMA64A|^N1($ zd+DHm?v!AXd5eu4J{S6%`uP!s9cK)=s9F4I6YffMr|_*G^dD>X?H1mDQ^8sk@jN@d zI!u3XSb$rbl-~EkrG??k663NV%SC7$b-M!9>McC#g50v~ZB9SM+#pPMAU4!6P6hFx z-VV1P`uZGtbt}@gXW&fTeOR>StyCD7C=+!bmK$$9>C&>l-)>SqZOS%ESJPR~Hj02YwpQcN9bYh8c1!U?h0a(Kw4x+q1scfwXY0s8U_>&J_1SL`@QrwO;8)2 z+*LX!o$SjyX-~!yBSUUMrTj)w(hJNAwmJm-pKJNrx~o$OKau8W&=z)z#D(~4K27X> zq0Xc?nC<0!xCrR)_GdjBr6tkZTuzr{8_(s+o)X@$j%GD0m9G=zT;4knpCm31IT;-7 z4Q@O6eccZ}5NC?QH)#tZBk_WpJn)EhgM4tdSl|?PuJda6|6s;8!jYYPzdIFcrIDd{ z5`oMjc=ih!TWS)%PO$+Juk#S=2#B3uCc+3IKM<_sYV+|o?ZS|th0zi0xj3OmD&TJy zAY@Nk-}?8m-+s01e13XKECO3Rcz@}tOCb@TPoECf(LhYMLR*60dI4GRucFVVSCK24 zM^}1zEaMn#>~s(5zf_|~iL~N%qY{?(G==<-_!V!@&;Wx>etVVQm$ape^EXTw9h)R9 zYdaMDW*5f=$Fx!{8z;uUbUBSjgEk(Zw_!Ea+73J-*`-<+xOmg^F$tY-?dX-oR(Vm)o+xOOxu2k8v2N6TGpWq@f0ZNrAR(bsl2K=u-7vLMdI zxrKOsY;xDAXwu+{B1}sXqOVReWGE`uHOP!&NV0?z?kuAEBrF&zWxzAUgVNDUD`rp< zI{?vuv4mJ8#R{fDo5_Y!k#w8rc-~QO+5M!_SJQAXTa7vz#F&B`O)B2aG;EB}`!pKp zY;e?zmJXt;z2jX{CniyUWqu|Uj&A0`bAMeg+7tNf{6)eJL0FsU8 z=NAd*Fm}3?9G+NmI^J(}O|C%i@f(xTNGlRn#^i)FE+}q6HFIp{(Y2_CCHx?YWr0}( z*Q*je0a38*DvP8rS$aEvcOM1*$&i6yo2bsBV_zl zt?aIu!;q6(2PTgDy$A$FM@FPa;3L|j?pP7jjdN`olZ%fLPPu;$ee7`lBL|N^W8<`*v_9lMF!a zJk`=jM&MU$b(nTs@bK*aDDHLdE-_JL3o@hTytVklMs1yS9m!|PI#Uft(68AJVe4H1_D4# zVuUt~&rT~eyy1;~>mlKZ=NL#0V*H*px*uKcF~;lUb-KR|niD7V-&vk!tKFV*uAcIm zG0`{FLF40P{9@{hlKGJl)Jyi0`qVuS--?JZ+|;UXrO>mbqo9~Pn@uxMcCgag_Qdbb zyQ{Sp4}RooWBoi!t5DSjS$GcvSYPz_MqdjloJ|~ei|8q6GnD+H=n!p`RvR_C?I^}i zDkAEPDPC?g$+X@5@WZ=f>LMp;PQnUz0dh&3$1WY}>V~;+T)eEX2nt3neJ7Of{`?xu z+A04&P*wzQEJ`*cNjAiYix6O6!FTkNqrxeJ_FB*p!P9W))dDZdi3QN8X4%-e8`dmj z*}QLs?rGB-98(Gmg6Z>&5%)dH9HWNHiz;&r1oy}F*!!Vu)M0Cb(vBihSz>urA*TRX zKgR!?tfktXSrCZ`z`vYPNuRPwPS*C00M-}$Rzy&NUWH1ZK-9D@^JOr{46v3=g zWm&CNKG_d0u+U>=Ebe7j9v_-ooZgXMnbMS-OEHso3YP^jUhUn;V`zrpbzlD{VZeW{ zUHq>ClKv;RiwN}?a&X|^r;?NY^LFuHQ<2iYB@t{tz9kW8L3FDK(V`I^%;jj|8E8M7 z27lFEPK+cH`{lDl*k5ERo`ZA4QNS4WFf<7G0iQJ~%>b{{wV&?|d?JBLtj1)~jGmI< zXuc4{?cVVej^uoLn7v(g`V0xgMlemfH-M#FkP5hGx+-o)C-ZHtwxH7ZE23-?(j2j9 zV$V37Y>sieMw*Or<>oNzvPl?SNNBL&L^Ev`U{R*r1>E`!#cLahB#*ZqvvCFR$hxx| z!W*sY5))H4Q+@4HeFo=}9>kBZ936opt3k(;OJL8xxp(9!(8(YPrXgrv7KxfyZqTOR zu$`4UYMet!s)Rq`g&DM)!2;eDs%Zt*!fDKaWtp%wR0}LhC!CU=obnitHhGN|F@~btil^M;{d|l7{xOKW>mY&Vt$AzadI2r?8c6!n zf_!xXJYh8WTqA;Og^bZEVTydY?hwj^bzsp&MO6u#kVP!ThN#Z16B=u)zp&=fX93oX zz#c)O$<~JF)vB|m6F=0%vn$%n+0@M9XVg^zQCD?l$qqfGH|zP(zqn6j?^9VIoaTtb z4abVIg?~Cml8sSGU}bP{rEsf0&LhiY&K^vmA_5$zN~Sc%9PM?1*e+IAGTPZ)by$pj zX|LcCw`?}C8o-g_8y#4CF$j1z$3=|>6;qQ;iZ)bZ+7yq4wSfBCybKC4Y;(c-#A^}>6jZGg0FdUv$dDg?ff`JKh|0`k0Dlb?XI z1u;tHJybqfJCH1y&{MnixbHYYT)d59XGPh9bZdS`FbvvAuB1`=(ELKyI4F4&nK_}6 zf~^VdSYW0f0_UVVR|W6v8$9irV4o}ZMSZAy&|gcsxgcU=+;yRWCz?^sfnHIHWCcyH zOEP}w`@!!}qNRq)X_akdU~KZXg2c?daI3O) zh{3+lnxLqPa9Pppe+tAAZ|`h;`Sh@awBpm;^0>GANC-Yb7bFGE$A9(L@lFf*9R^^2<3fA2 zpf1T{&FJ`&4qAlk%3_MrChmXyBJMXkqLnws>fhT-Q1cDgxlv+xKRBA5O$a8%>cf%= zd3*?W@YA+pb84hm&hIFtC~#K@xh7LyeIh_OWD3_zvQ*(K7$dJn5aaIx>bFG@%i#wu zs746oe`k5UZSVHsf7x@pf0%W)hRS2Em_A;+U$qwsiu;T!S~}9q!CW-;63fZLnK2y} z1P*zXI?>Fr^!9OSs<}bh(o1FOlDE6%5^9{bEGLk2k0<;U4=% zS!Q-3B|6p)k*-8W1#$NG{r`w({I5cw{wHr7`(iHxJ1{^%_Rjx&=SXg=Fr})Az6O{7pXMX(*{%>IvkK8h&WhPTT`5?Na`$5P9#pno13As0Td<0|L%j( zMulu%E44JpefFPb?varAC(5EgZEKT|KXMMoe01m?x$7ORxz3xTOH&pn%{8hc0;C>* zL?h3_6WQ?2Ufw!0)Qa$auhu31QPEK{;AM_jyaPORYcs#nvH};+mzz9{*Ny~P<9v8~ zt9l7ZjH_1LP^>v=%AA^LHdX2ZaId6NZvzwAvQ^)HM4-IRIY>r=?L{X9a zwYe;i97>SQCX6a;x8@C#&qtUfNJxtgCTOBk_D5)Uo7@i%FMz!^M0pnH=O(i`kFyL# zA){V(F|!&3C=+4i5ep>DOVXg6z`B3|uGOqz*k4aWV)0K6unGgz| z4o*1s3mGY=tYLOw(Hw5R&X&>xJ6DXxAb(!?2t$zjpzMk^nJt!Yc{|`KZ!o1AlOnY&`l@a@DK1qV)1_FZ8XOdXA@pLH+7JE5~AQfY@ z4I&?2K%gRLK5i^^dUQ2mwxhB{zV2vZxhh1R-nY@eI$Ob*;qIU}3Hf=XP4#D{ta+RJ z0+_|aNFo2r!@e5M$K!o&cB|78Q^e$>s_*MGc#)wv`4(zHc zP$f14{ClE|Lr8>%j-@5LY=MHGHLbA*eVQ8g)ha zll36e^gNM>_!w{&nOYiRq5kn6Ck*Jzp2RG<;TA7ea$sRV}k#?Hgw4hgj(q;+!&4G&0O!2gg)R$4R)p z2_dce_HGpSdGrB@w0QWB(ANFbFRb?8$4ddFA;-b6 zT&WRvBOgCYO0Pw5vcD=CAYvg`>R+{tdGBAu=8!;t|h8{C)a}Na<-{ zCB&8(LCGN`x@(z>jp|U7RBiE;%Wb1JwSyFLa}sQ@B4a@DlRjkkBs_0qj%QwhumjoH zh5Nf$o(L+=%hwDwM6 zn1K{tIS*Ux=Mi=j{9k$i-CD|CVd*b>{cU?>kXSONt+<{&R-nx#@oDGx9BuU#I!-!) z?D@azZQ~0)u=7^rNca%=`q%a#J-%Z-B^6Ad2hY`axyo*czJQQHoo#EAZB2b&NQ`>BB~suJCBI;6pq%|*3$tw#*D{$In!7KS z#$x&EarBVq`l-kvSb5z`$|%8P@gq6;BrbdtX7OpLAy`N7O$LGUqz$7d@jrA$pk4G+ z?ScEEl*WcCg0Q{@^&v6=K*m0Mt|j*lKM$9+p3({-Mk2HPyndJl*$<^4^V@L~+-{HM zf0+Q&nF7)9gwnzMFi9CDPX@v@{~eFWjJbITLBl6vu;Z=0u_cIV#1E?OBstDG;6}hS z;0%|O99rA7KdQ#*aJPjWO5M4w%i4?WwmxGg zIo>Sppc|t3sKuw)@+WRnd%3AR6PrXQgnD#fpfuhT=FZ_)Zi0AbBY*n^zYfSXwBpuQ zGUvq{HDvwj74Cr7+nHxgD)8r06@RzKAIf`3G9zC|%a72agQB{{l`VhzX8lWj=a*67 zA{xzN&HH8C)Gc94)scH1Ejn8Iq&m?C4)E6#Ra5=vj-lnyx8SQO^KM4RC4NpP!4su!9OH z5~{l#{`w-t7&~s9r!!;9j&9WD=}a`F3!^EzEgB691WjF^bsr%O3xfsLkKzvjJN5YgDcTEvnAiiuz z{F@H|(uLH?yzm&fF8xdB4R3D>#m5{vcbj5oWBLUu&o1jRKB{Xc7UjphI@`cH+uTU3 zJkT*dNhK>@XAG)0`PF6GBF)Fjb;DFN>T__7vg<{njS0xJ^am`rz!jdJzU=0#8%)Q| zLl8Q0i-gZ)i-+bFx{pc6fS~7UdEe02cH<9#{Dd@EW9Mtekr~F~V9+b~!WQ|I7f0$_ zFbN;-#D@?QzI-6bS7J8ptL>7M6vEQh6r}HkBV~qV!mddfndMHS)y?u)kieZ4S`i&? zd-+H`oQ{u?+K6QE--V(kSu0eJ)FN306gmH7n1oV#B%8Dl^7J|D+j1_y^*%9g zXRokW@*b_1))zX2L1=Wmj;{Lp>%QFpF7ClPR$zMf#LFDD8JcOO(vTw9<1%@6Jp#bS zbHj;?3OXzg^=|5^n~$VHTpxn)W<7#?`@VZe%^%@d#x*B>#>jfGLmv=UkCt{~m&6*$ z>~65_NKPwRC|ZodxT+7RqdTC_THROoJm6x)Wd`C zxh)HQo;#;DuZBAb>`qJW-A+duX5TJ&rY?M%>#>42L-T3(B=EFOkfSvNi$P@`@|ua+ zRC+5c{3JLN3%tts-xXkCM>uCp?DUx#TsD@V1O}*lOE3-{RVmcG+Jc}*+6&{U12%v~aZ%PO{ zs+wQieM1*$a($qAZ62b%`0b9SF1VXL=Aqvq1zmkxn0a1fGy414As|CO*D_?a1*cI) zFn7j?{H~ZN=AQJ9I|^+(=zwK=L2ua-FE73hQb``rR><-Um6YLnfgLjX#z zF7wqobVn##CdD-l;LSWbGXz%qkFWm|)xm$2_xC@!8~7+A{2Kf|FfcmjpLYZQh#~tH zwJNQv{zKH7c>`~RB5)O-#`TkcFu|r>pAn!<-DJg*L|RP(b&gI*)(`Y^q)JEH&~zf? zPlK@OPlCZT6WeEs&W4z-{;4=C)IWBeN$1;#Moj8WF)^Dy)3aZ*j@gcUZ(f82e(nB%>O^YXcq%P|&*Cxymfim-@^ zs2%xhZXzx&7B%oU5jk3)mbwfUi?rwjYnCO1m6tbuVKB5VeTsq@P0)@QOF@-5`l3F| zDrb>YSW#v+k#(^er87aYL0MAvS98OFwwR(!Gm4I4rew4Rr=^IEPx4Qhfh3YwmOAD( zk~~u9&zS6J(-J4s2ff1*CjxRqWF`=0M&d!DxVWJRF~*|`t}B`-?G>I6L1f}HjC)lX z){5+6SOP@yGQvn-DnIBARI%M$-mRKlNZZPqA!o`-4TD0O$* zTf&-7r+YNni>a~#szDB{rfuAx&H?pPG3l^-nhwa;PXbbOvL^!UNzm{*+fYc01AmK$ ziJ+BSuNnX_#OIIC!ZPH{_tR1P+h zVx!M(XFP^BuynJ}-sCasYr}4yI2BT+^bB%0RN#;L&L+X@Td#9#w>P%WS2D|F#-fSs z&Mx*JTM~!sp_`Kjl>3~p2%+z*MISZ7?Nh#`tt{9f%MGoF%P~b0kq4!!!IKZi7Ojw{ zpWmywK`bHQ>P=qMvA9i`;@3;Sl+ge`G*Fccho;1+)%{=Gy7<3p$n(li$*W*T1? zIX=?1f(`K?Ej{kQOcIH_2aXG(4dDfbQhd7J52jkSl;Bx|93j)q)&6HdDX~?lSN;#b2g~^auOgN-@m9FO z)hSstJ(P#{9JWJrTHZ-v@HGRc6?l$L@0daJITKJa9)+23WEe!$wh9{T%ayNxq;tx# zMD2h1IJx~nnMzJ$CgtVJ^n${paC~h@ixSO`Y4t0Nk_|({@k^}3i>!^ZloVK=c&p>Y z{)1YtIBwys=ThyTkd2DnU1#dDLUBpc9J3P`>gVY8%;}PxV>mlLDSup!34?-q;9(kM ztu0vD`5L8>&_dCbPZ&<0gPKosAT)mGlypeP!%Y#OCvO;DTf~{-x`?@?!@Hofu;}q( zNQ+*ToS`yV5PU%7cUJT|s|6HUQQL&AP8z>2x*$p9wL}?F7!+yCWgf9Ja#%r7()h`u zVaktprZ6O$-GXHk(wJWF!x3_TQ|t2%-gE1_<2t-#g3$8-!}AUuk4UX$=LrkP64m3A z0&4dH)HMd*Gv{g945rr#m5O*8sr%Fo-UO~!8G9n7UaLvXqO4q{1?nNywzNj_ZZTbj`7pPJ zFZ}owuvZf}qV)F&52d1^9#5bvQMMf(?v37U>;iYzN;C8XE&X%dQ;uqV{Xbx77Px9f zx}r%P0F47WZ|Kbh4ck1ae|=}4R$%Z32SW>6z^J4gqhowlx{qDIb{#Si8_`E+wOYJ@ z^lnH`*Gz3~H0X8KU$pJAQ6BW@oPZtA)%Aw+LC1zKLDJSM@DJpdOVP2nm&w1tYTr>* zE2i=rJLWYjQ??_YOn;Z2XYa!6p-c79*=oGCh8O~Wbt>}1U3wFX(I+z;^{)#mI+apT zw!j?J;nm{u!d`PLR_bGIcz`U}xGpew^oe0+SPok!5oAL>qQ)`&mZNJgCn6iuDVt!b zsDl|FzHZ;!hG#ke&V+-uiXi6LC)bf;6NY&w7k*rn$?Pz&Y6sK=23|~pBT!?eMItvO z^14v2@C^Sz3G5xx^PERN9hR=GL(RHUU3mN@sN`e@v*zDa6>w<&bipr6*gw}wTbkoX zJ?JFJ^#&4IbT@1poEhGwwm%q_J+0A>>RAQRe7Dps)w`}g70A904}3AqjyB^h$}xNs z)Z>zUZ7%sM%@0LvgrWuElPnXt1;GTZUXdqnT!We8CZ|v@;w+@@kra>G@>j=`vqU4* zxZH&S@OxVlWNFRHTF%FDkIyaHVHX&_|GJhcpY2gOyWhi}Wkp8l!4qSPR%7=T2d}^7 zm0qihhXK0d^~?D7BjGc}-AsZvW+vx7?leV zV<|5D`O#=_QT`5h{AZ5=d7Uqqcum`d>Q>M`-&{@)k&IKX_dO|gd#v}MOYDFXPb61b zpuG$;FmDGCME8#)QGr{tg{&I1VNoTv0Hv#Nt~n!gZ3*Agzp&wDPhBjnxPO3`d%aHt zwWYm?(*tkPJ#}S%w*yzAs{l36)~4EE4Ylt|5M%d$u(r_7=)hk-b|Huc&I_SDzztyG zSYGF1ZE#~T0>I%fVQH4OKjsadqypKMgsS>sPT?Ax&^ss}gQ(1lzp)BLdzzs)m|MJ2 zp^RCcRgJGn=HKfv<2?@>PfW2c_8W)^5ajW|=d#}`bHrLa}Z3EyJ zNA#W;mww%QV(hob?>jU7`blaG+H)kg^9WOm4=%^7$8#gezDjDPJBx0APHiyY{X;D= z;WPMg`yT92YH57;1e(T5{q0JyLLc(F*6acwEcDMUl@(b-tDHsxQOl#osk**lFyQ+l zjKo7=boJjrBT-$xSY~+@SIiuWz81DCNP+NE^)F?vLsouz7#-6=S?l)vow=kQ@O&70 z?eoG=iae|=26?su{j6h8TWV+^f-fRfNeYa;o^~UbGH%Q5{WuxM!kNFyX%@jqg?p``fPFX`oZDH&B;QP{Luih z9O#;B>{YC2ER-poYz&4FjUNWerd|Z8cEa~pG~|r1d?kAz*9ENHbU-!aDuDas`$m$# ziCf=W(Ts0X_5KWS3YCXn_rDj$;*RqMca9~w4j7ANOfqKV@v8Ch z3I-Nc<fu)RUHl2ahB!&yr9sL-L069$2)|N~fK1($V9&Dc)u@A2 z+(1{S8GI{wxzsQ!Ih>#mCaa;Xgs=_awU`9ykvE69yLVG*rYcP)0nUFAEr2`yED5E5c zk}=AhyfQh*)2vudS$6NDUp{94GA4knKv%G2)7TNlk2Kx=v9MV-*+5aqt@(vtI1J2qGzm zCUm^;|92GMziYz$KUwjGv+?8VeCL0Dxc%3P@1H)h|CBL~d@H``5{v_g^73t0?$VP8 z#kHyiUeTF?PM4pMm0V4+)|-#J6bES*=<0%U!myqRR4V4xmcJ_o;J(1eTy#X7F^Jy;RS9>w^7b*DRx8g$x4_`?#J`oNKG;xp`3p?~HmOj-M zle82QYnT9@OvCwwxm#H&Ymy`wLD140MN#p$wqsM)9T4|RvQb2OX<=H$pg}1-MRr{B zBqSwkN}?Q9*+3#fw~UkY%;bDc#hZdNuW+WMY>Sx$x@aL?D}*mE7W4DccPa`~K$g_N z2(HvXOlrU&a3_W#v%75SIlQ-cH&MJU%_Ht_qeZ#qLkn9~aUlvuYC=k>EEO_=rTE)< zUb%DnX9)*ODjU}f z+2V1CIUu0{P9R)lLSRzZIx;VNcLK2(b-(6NST{3+sKjP0V%HWU@kty7bRtZONbCoW zYc>MnY@Ce3tgnjjdhg{nHf457f~s5Esm7^rF>8&4V5>bP{Qd$?8}H{$98TdH(x8!| zBJCH}t8zk&9&je6NQIy#+$gp22SqTdPG{6Xma!fNtQbv%}v=?pMzl$LO!l3KKF<@ z^PiK~8HaYytcEKCY(wZ-cfLQ{T>u(9FoINFtbgZwzm^;%*@wg#VMl`SzX)|hq@@gSoNAcxvf z7fb|`QQ}eLNnjat0F%j1FRZ$R(c~;~ARA>nm;mU7bcbX?0=>rt+FHrm-(ELs51*Q3 zE>1cL0&oQD!5kCXFjH!_5^W^`_Lp#jw6z!E|B`zl^K=n!FuXui?HbQ*KpOy@iS-_5 zRsZ&c;4g2eSMr1my5FbjH`>+`zpY8LcIU29zz(Hq?rv?HQB920s)aBu0;e%zBS}q}Y%dQ=lOTdS)u|jV&z z5cuY0UY7-CO9rmBnl}4GS3jJp;Kf)%LZ;OTJ{cOx;nJ;Ohz@-HTt7_?gSaD6Pv)P<9t}pk@PgczPKt@{JHSwF&4wDNyd|?MnWuwODK;vHI~y4-o?kJxe+z1T4h3xyafs9$7k_ zU+~c$&lNW-gF1tH%vmz$^EskzCsfBG?lj*qXHLgE)Yj3?U84gu7bGeAeDS2Y$XN4CNMsHhizp05 zw0WSp<1NdO=l!Oxa)7kfrUBn^k|#Vj|7H#bcx^3WD(pwConHsT!sLzvw9iD3Xjxq+p<+BUXIV^RQ$dZ0?SF4y*@192Q)L zAum%mS8eUpD#Ep@syvlxdvI*+j3YD7)lSTt0c_8%@Us`BHpFF3%$o~#&q2oe{fiFmDGC9xQs*e~(0Jk6|6|Jr;}IN< zjpyq{E~_yM*CpKMqk~g=E`mfCX{MD6S5n|5+XM&froGvcAL60i+1&x%Z)G=Co1G9` z;w4G<0JsHmhD{^QoLlPtTzH+N8ektD_`}F;{hr4WCamXzoPBO7=@Q^&U7k~_S9n;c z6mS%Jc0xfI=1=Xs=gdrp+`-*`+Y#I^SohcnOuUOo6pxR0*#tEDw|Bt9;`_I|`7L<` z9(8g-!frvK(J|F#Isf2;7zYQ5oB=`Wg4OF)c*dZ)pn0h_qAudO?QX@d+k6daZVBj9 zPw|+lfVyzKoTFyA>1Vi3xxI7%Hm;G;;WCx(h^G~Dvf|w1@R~@8>_^Km)0ghRw(9kN zPNTK{rTGnFBWeKs;k-O0yX{qZv}*Y*TOMI@`JNvxZM!j2^@i^?cg+%~G&|KE%BH<` znnusE+Jl}E7DaE0>mK{!;QuVt*s-5-4x(#!%zG%!?U>r>-SWu{)weiKs=gL-_D9bi zzK6Z3y#rvGB^akc2lRBoMq}l6_O{taX!m60+IW}Dm|;^0i;DYuiem$B{s3gQ=mGWA ziTzvmTrmD#OY5Yuc8`s?KJlqCM93%hjH0?+w_Y9)yuhK4#`EUliv83GT{HYnmUJ|@-JjUF-P>344oP#nX>5YzsdaxEp})GlN>39W zPEJ#>RXS~>DS*(~h@5%m$+->k;;wREV)_$kh6G1+xGCh_uRC(X#!l7#2S~u%)lhv2RHL!5)&Gx? zjOzTFfFib=9vn27Xuv1qWP=SLr-g^E$ms4?#@I(St2+oJNH{E5)YMoB>&JmVB!rot zz%v)m_Qw`P@)P%r&oU>PX3kVe`}M0wOd*FD2NEpG^o*&Q&eo}0jEyb9fISak?eFF) zM(cs!WBzxE)Q4SaHGGjI6={*>cZetB3c zGG2y#zrnwpnDWgfhr+&+=_(Ta>0*rpohiyJeS!ZwTk(HqZ}2~PD}Lf8Zp`(~@B)+l z*IV&_+InC7Cx#b6+SQC!aUrskDmal%wAO|-;T)8K=>jU3BHBRPvqbM0!4lR997_*d zRWH=QG7{|=HsYafoG-@EH`Kq-YFIYK$axN-$}3Ld#vM;_U(T05$@@l;T|ZY?6t9Fw z+YkL5T);hv&2SR|y=zmQ6Q9OU8+nt2=72@}c-CuYZkHUrUUMoVH?md|qbvDGOLw zW*#_gkED?BcsUAuaC-G^44tyc#`@c@+X)OjxM;DwWit|JTV|N;mQ>+(jKPtI^o2Is z_)^C;3x6B4?9hKO-cHHZ{55m6fKqJD{}j}LFlDxtBd9*8=LFtep&2IdM1{ujo(9C@r{5>-JgrvhNfq;6QukEdzF1Q@H1 z8^QGL$0um&yRR&ch0aHImlX^C$ zpvL5F1|^`L85_L-a*8MB|DcQ?UCu1jCRo6f(0WzcA^6GyC<_5EjspAdVHqr!N zJ<|jLS|7g7xWM0D4>)s|mW93y1)}4_(Ke;Ct5BJ)h;jZG#|!%p$J)$Te?m&3~!V^p*pLbvWZt6z3WJJZ_J?v`Y2zLHDf|nO*1=XoHg`yt- z2&x5D@)C}tX}Gm*3eQc{NI}!9;8|v-7X#;{vO@djcs0DWimB~qyTd&;UKuXNo;}dg zF%*asAdt)|rZLXL2NQs0R>wM?`!IMN-n7nWIW0@N#)eYbeorQ07IU(Ijda7)9-pGF z;P5+ty^a(Zdyxu+^4*FI;f&~rX_4gTH9ie@_6Fk4_&%&}egF(cM-?tmdGU8DtJKH*f=pjuJ z-WJauEYG%;5{&)?9yBgSQ(IO%w0@V`LUnHv!ht!G;^-{8cp0JK5VG5KVwMs<;$WkD z@+t8pn2)Jv9W?yn;(IIvU8@(;<|QS3%)?(9q-F!FSmCW*7go`=zGi7KIeXd+QlH!& zrW_n$RkZrzzm3_sJnOwE$(7&_X`g<~;o*A{HGH_@hwR?C>h|G!zC5veS~Yd7U=C8c zg}a!aKLTo9Ie(V&rh9PL@fNFph1=19YPb@_nIJ(e5=aH{7RZHU*S**6tcJ7U$JulT z3vuBS^$Uo;$`R031ick&|la5f0y#$i7nSU7n!}qEX?4BqYX26|`db*kfp%}?UeA~QMW#aLs}_;=oM5!f z-8LSypAcc}O&RIFzFj{pGN?B>_`myV|DTnL{5vOw|H+@3xfL0msqbdo_AUSQXXc+C zVepgSF5FluhNDE}4;+QHh!}cHr)=Qa2_oGCohK@9N1YP#rMYK%I&z51G<$HY0QxzpD7I=%Wy= z_+0bDRG?u(Dni6nbXjdqz#D<8%iXnRk62J^KRS_Iot0A$x~YD`iq=QzMjIf}>@$IY z*2j(d4QhuZx`(9NTaN{`=>_uW&_-xbmR!NNCIim&Fh$rs^+tEOC3yIg&);WK1o zo&7wSpD+J&==uWtsrmZJ>UbDCRk}?-fodk^2`34W&-=QJ`sZUGctLGgbGtqYnyHN5 z+FFvooE-#($7iwrA(Q($Ty>+#>hg8SXJ*8gk;jsvM&FiK;|s%*FdH??Bi@- z^k#ssKXqcW)t+LRE0|zsNh=TV!7|lLZpypWCIW^&=KDPPTgyPOAB*- zh0!b?4dfdtUe&NEHOI{MawT+S%}2m9=;Kuz`{r%xJN_Hebjkhc^5 z1&#mZXHI+TV*BA(?Ze*Z&bGs&d)O9usO2YP&Wm79Ynq!0Au(gryI8J9$X;$x_^^bq zpb^LOR9sUcxTdF^y~(Q5E{)DUxw!uw#xb9+5dRg>)5*^(AKaEHh-r)<(0UMG1& zN~Wtmf-5hOjz~CihIfWdcR{W$DSYHBjT_uuI@pr_Y-9D-FGM!M4Sthhzh-B@r3~>6 zPp$42xj%mOej76ru=dV%8mfLY{1QClV>sh|er{f3#E%-A zUcJRH=H?y|kF{TLyjCZZfkKRII-C?EOw3VgI){VJj}pf%af;aT)QFGNg)KwD8aY2h z<*7{vw}!1EAVaP!`MIb&)C&62BjdSYR|T^UTG~d5`nT_1#c~L#!{uKE{Cs?6hCM^> zEdhHYPW2N6o2zNphejGWG3+R$C&K16l$+g%S9%TTxVA1oY*WI+ZIL3fMi6&0Lo0hm zc@8pfy#s8Oy_W#|K%1|;4b6*6?xu!L*e!y%1UbTKK0P-gRyae4f<`Gw0jHb$f+R5ytb~g$%6@R*tSFL3tzaln(CXy^o8D*C zd$3LgU$dLeW(W1F>9Lq>9%tAv=yhJmL_s2~sDx!8S}3GqXvmQ3-mfbkpKQl?ES;Kg zov@4p&2d4{gtsy>PzT%-Pm!cf&A>A?na81M&mf;?u)wu&cWQPBE!ZkgqhxEGQ8Aq; zeLBB{;^Jyc0)h^jpPDwl0O7JODFo8{Ek@8m8auRzoP)skKO9+|%}?h<%cVcz+Q67mg;=?T zl*^V2a&ur7`VA! zznx{URAz_)0Qca}J-4%p?54NuKo?D&Md0ea+*2K=YvCKo5%Rp-kv+-s+c^=RHf21L zLh8PiThu%fW75&s7kPf64+#=}`-ZN9dt&YTC3X~|AVp-K?Gu1aHob_2}A;4A}7nCivWfU${B+> zavZp`pLAWEDtRM!6Wc*P_mUJ;@}E%UL2$! zwKn(}cJ9(wxGYfMYtvwdk_#@mnLxGgd2+0Ob9gA&?$*N{g@%>#=Y5hy@b`KL`;&2G`tcJ2OMgguXl^OI{v>ob z8xIu<<4FwSCsdI6kSy=PQ-Ex5_w`fF09y1Bs$ku=-f;BwI=2>^rrZIp52>-7dzz*D7RK0?-uA~GRVa^xrSjdG6sF7yEZbJ5$o z+LHokZhN%e6vfl5LrHX(#$#6*X!B~{y!c?SFU97lV>rdn-5-fmi7YqMzfA2dlaY=4 zVD*iWjo63sez}d<=d(B|TE9A>B$JhhB*#IH!V-%lukpg1mI=U%V!eRf5`_0Cwx{OA z^if>oV00Gzh`_p)+!sVHD|Y$UvqGg+%pVM;S<$|=%>BJOPWY@u#Cek-M#07{g zLaKVY;W5~{a+U}hxe&z|MGx2jG_*RE?A-iojAE9=tk#zNx%_s*4|0<7G7d@9m4Z`4 z?wID;b7Ry2M%$zxV_7KABtg(f_Ef(pb_oYcOomG60y4|+5W;0%FiIlCnGH6gt>)M zDB_C^@W7J4;g9g&6aq1i5z#A~mR1ng58{)H*--c)Y%jzZ&LU2G61zG%_#84I&Z-hJ4-N~q>p2H)vpK2CIaW9f^uNY%^ zk{HqU!hu2$w62$CMLysU*M*JcDBw3D)?ISSn*pWST<=!RBZ;olqcG#Bz`{V)&4{67 z`OO@dZyQSv28?KgeK3(62Xg#@yCe=*GFy@x-LuEDD@fCaJ_2X`#@k}PEpBdOF~9xR zG!9~5SZdCP*X>wxI(4exQ9Rs?>Y|ppTg6u1QKM{ou4WOZccpgEJP@BF{!;se z@clMk`I3LTf++o|A;I%4;(guWCIIYrNlb}H=@Q^*v0gXDN$WSpTbohReLiCf`%o7P zxe-JizW-%jAeOXYNn7uG>REC5YvhZiW^cDY%N=adZL|AVeKP8}>LlftTyg>*x`0PM zRJAa5*4KY4+5PXVi2f%_A8AsBOSEt4;~WD7g!aF7D|WOpH!^1Y$E)N!+ikn1{x9vL zhC^7jX2H7i{G3?olvF%wRkR8yJ<*BPW`Is$th^{5)v25dQB7wnD6ZEJb;*@-Wy)?E zv)BjEvagc?S&M-H=6T1ar z2c`#_lsK5zFeG%}sbM$eSE2(NSB-8cKZ2)q*B7m)^YS@xO@&QN$$=Q>1k{o(8d=RY z!6x3cBx^1>l(WXun+-Y0PVY}TOYwX`mf13 zIIYHdcj8iH$2h6m^j~a6zsE~#j#&C1sTf%SRSTLEXq79;KC2;-b>;_hzTj3aA&0=xNufw(*<2Oh(SF~*&V0*F z7xo6Yk>b>o6Z_uKM|xC| z)jaodoALBKJOCa1Nq-8gyi3mscJ}A-WuDSs&(b&Iao4!c?=h?0jRR$apw5(U)ZhM% z{{X5Qp1|EZ;O=t$)fgA0;oDx7v34R1cYhXgfag|Uujh(p(}=$DQ#-BA`pC5YLT-DJ zd*tMX;tzdcho+(<<+@=|;C+qsqkVVyBi1Nr8@DG!f^4#ZR5 z@2h=n*NXG$wOM$8d(n8JXV_QawgmDl$~9g{N{QO}lM{DJWp-)1SEcxtRq?Sj42TsT zUse0zec-Kq=ewuDG0u#SG>sF$6eJ~=%Q(@|M=6WbMj)%m zvTuRHE(d6`Q{}b}<~nn^iX7E1dpP&u`K-7eCLSYm zc6zR4z*Fcotc7}4uf;J=sqITIH0;gP3?y!M{qVD$!@XgC%?(@=JM($Ag6-VTDpjHp zC&Rt0V)b_?TEU!U%ugipEaU7wl$^b|VJ_YjLhGWZvJ51X{dDugr7uJq+9z4aq7k=) z_)>~%mYR+M`+FHgH42A(u+R*osq1Z;mhHX%mMPb?l46usUjM$D4j2R zhv8=O_LsQV3K8{36WhC478AIJyg(I7NPGjwl$RhEztu8jnFe0d<$@WAK|1bB7`xu@zUj5B| zjp(GSp_?~@yO~}@U$8QB@`6B(ic<2zlMjkhu;Rg z3b`&HFj_e(ObX)c1|gey;9Amyn4$62`!c7fC@+ED@ATWX2o`US+6!CeH)5wcetKJp zgqL&TNy-O+oG;5s`Gp-7?XZnJ@p=CeANnOup>A5eqR^-n0qvjqY8M$tGTsfn&WIOn zr{hgRm{XAlbwTY^agYCg=zJW>wClBJr6*!n5HvwqiwFoH3Cns8pYiq?Udv+cTKAS+ z2!o_6KFW)LCacPc@GjAy;#Xh#85YwsMf!MG7FU?g&EcZcOhHIq@c zLb}o3!~}@+p-gZ`IGE4==4&Sym4@|CuKCrp_ z@FtK6`;sRc*dP_45p*Hk{__tmZ{W2MtvL>+~J#W(gsZk(* zfI)GTU_yh6Q#ChsB;)20;?o2+u0-^`U#wu$t65ryqoLq2QnNs|Ys(B3_kG^ujP62H zk!T&&4^cJzXIE>&6RX;-9mb2HJW1_)yr_@>VtJ#=ZHI)E=*(N`jjsTFC zyv35m!RQHiw6XgHK^mMxTdjO2x%PN47rBfLhl1ImISX zUGFkX*heC>OU}s;Vy?D?4n+PV(ksiu{a}3z_a9#qBbZ;EHCJ1l`#GQz?x7qtSkAXs z(MyRixKna5iA-8rt<U8@_OGCHa^nQzgr z8xLpET<$INniWlWc)J(QidFHUm*+gspM;#HET?8JFb#MemY4X!u@Jg%MLmf9!-4t! zFC38}eia|n;xeX*R;kxM@NNTv9A!)rsv0a~u@7*Qg$uxeE93WNLhd-ai2(h_@3UTu0)bcQ})~xqX81`(Saw9P>Ds z<`dMt=*32B2S^bCzqynN)%6s}IYL~;a>f$)Ruknm3fd;mJn(!Ttsm|zqjy5H>;ZJ+ zBRpsA%|V=eHIH`jOR${1YS*Zev7N6jxmGu=E~|7LT=$iaKavfCWuur<|3J9eMk+@D zaesky^E{*BeDNi-L(`Vw?4Ub^nIe6u=U`BDZIomd7q>>1x$|BO#oByI(!LvyepqlW z*0DOSc~``-qVb5yq2xIqpHO#${QE3D;s3gm{?EQ2|IYjGf3k?^$HU))_^y$}`}RHg zFGa+E*pGdSi247|`2%7mVu^m(7FB;C1m*8I93W&-J9EIi%Kp6aBE_j12BzZoG1N>- zQ9Vm3F;`Dany+WPkeo=JnkD2CmLZqh=%{kNSm~I>PxdGP1i>{!d*4 zjKu;AAS2!;Z7S!~uSi!|2NCNelj{W^m&b`|fuVwvxb4020G zD$@^3HNzU+HdHD3>vdIFuWwY0d&&mN6&4z;MoFm_5jK#?X%UBN7PRHg)UG!|-sReJ zRQrqNy6mXIG$-S!lOAP!rmwobjXb7AjS17UoQ318q<_X`9=ncF@3v0IKl}DqPGN;b zD?Q{Hv{~nCJT}$msHMOssg1Rk&{@D|1FJe+l|I^NzEpB7lqa#=S<6)xMvgcl;xVW~ zRc|>}2T;%?t#6a&Y8BGGChw4m59QsBYkyJkRTkTPXHN!83G3pf(~X`+x(-HCZ*Nt; zvnNmE@v*eRO4Rk`#V@uK!PwxFBI9)_(+Vil)3u#4Q7H3Hx4P^jZ`)_vKZ`U~#$0Tf zKXf(z)SaWsKrdygl}l8yeDAxP#rJdJnkZ7oBW&J=XKEaE$`TY+ROTV5>xOGqsC`?+ z1C!JD)bJ{IY*%Lx)vC+d^t)<6F6_nyU$&PayW9AT*-fIxU^K2m6g1MA197%- z5*}{z^$#75*WsqVb0?&A`CrACUzyDDm9)o!Li=E^TE}YV_@`#0b>5>oYFLj^vjP)g z@_jx3{vwD{Vgl_8}4SFGu43JbZ0p-_})~j_8z8tF%_`J6=YH>R6&WZ(6mU#d;iR z$GrN?ZQ&|Tb&bTi_FiUm%TBv#Pg_ZO6k|%|Qrt)g&ZCSofhh3Av-IDfjC-+2uCKyq za_2b|pQJe)((jyng=Ue0%2JJDB6a$d(l#*7^+XU_w(q=F<`*5~QZGr12jz);^lRJyjXoM6nVCU28 zC7zb5*Vmpj+c&q?!Nj<1Gj!gp4ff+=Y{mvfWH{*^h!&MNrVT@|u5=#x;LNnPum2v$ zSCYmaUqjMz4sYLUI(!MxtVU>PR&I!}H;_8&kcqD^Gnbd{L;lU*YOg3Y;Tzr&I2~a* zuTk;*+d#3LEU4ZI>HT4tyNG_US+b#@dmr&O9_Wo>QTPD}6g_DUU$D*tfVMYl7 z8NT75f|GO2=WJD@9UYQW>|XY4y6Obn=kN(^Cc1_z!O6r%W){z>u?y?R?>s{}JF4&B zm{QuD5L;*wqJw>A}sNhHF@GvN&C$3O;v zdl^O(+yYv`?5KabhfZ?{SXwrk&Y3P2WZbX~paojz=CKbeb%k-<{QtJ#Wy){u=Nb~1ZP&~Q)* zV2Qz*=C@|GOT?n4X!BFC^#%$N++98>^UU=Wz%D7pDB;P=+kr44y1TTD;Mto|8dauZ3I zn_d=>7sz)+zzoEtXGo6A@FIu#$@$6M%uUGA|273!lH#A~2?;O4rTRAj{{i}AaNM?1 zik&!kqUfL@u3nM8(6Ihcwa>erGhn+JlWQt5FJJp`X?GA@PB2xN3-ge}n@GZRT;Vy~2g2Vf5UI$_T|@AcOSS7!RRWR~7a9Af5V zPw3=aR8Q31Qdq6w?_}QWz7V=Qfh8|HarWDc%*%EYtbPQmAoNU`<3Tjh2-0~*V8MR{ zE_zsA-i6-bHp@hLzdsZdI20=NvRBmx1?GV*%A3{6Ya{(p!qejFb>)T?1Po*fNJ<22 zWmDs!PqR<$k@dR-owoZ^Q>SMpZb`cK5z>?uTRL-Q0T>TPEKniHcYIICj2(OClHHR8 z0f-{7;-EC=G|oP+&XZ1IoRLtDRm!x$I*<~O(qEgK&Gq{xym(BI<<7~}(M4SSF_Xmf zI`ELxS^{99f5rDAAyi_^Ori87`2m~KKl3U6-uBgfeuQIsEi6MKW)cya)OP{2kxpCNyM|9Z&mSDgRsm@??Wl z5XTie{^89=l3)kgL8%zEwaV`VCe1Ew|o|C+{4n}E5WO|=hZ=*DC&;&WQQF4~* z=y|MVycpqM&}p}j$a#@o`E%2fXGDpXe_@LiU;7ug9_hx(8h6^icMcxpi3;FJQykLAaUH zCc}7LRc{M%KQ}6X_mki`gT?Aw8^r3xL6AnEM<_Q1MlRr=WY?XSM*A+JH`OI>gMNOW z&kBtTG6^IpBJXxwN@h`IztIKY+uVs>G5Ub3KXjOo{x{V2f{#^TaAG?^9xN9mR|>mS z$i#|{mih5}DaixN51uvJTD4!W+Ey%fu8VB~E-wExkNj#f-_M%CaACmoSyO~81}To< zorOQ`aN)8|;1>>vtTk~Qtz7MIcK?Hwn~zyG(x0seq+AB7GLkV_WIXvjY9K10ayM_+ zMO7o^7AB3BB#!Yoq!vbdX^k-KA22_tmY}vkpFW?e_nfY-aL#F|>P+a#mfeErGfU=f zQS5Po-5KYUf;e}s2aJRj#eb`w3eV_=`SBkY214T3G2WH&>Sh$RN&pmzXlpk@kJ;Lr z(sBBx=ZHk+8F__}K1!UfX6c@pce`zf?(a^ygtkiCs#wUnRNz%=uzngF?qWMi6=GoJ z)#IAZJF`tA{hY0Aa!}F{yo~I2s{%~vtOJN(zx#_cH_C+&tXY;CRA;fL-q$k^j;nRO zx<9b7Q=S)hqlROj5xD(L~C^so@|;tEycXO`<7Bwti6<5t%h+V`K+8*R}Ff* z6nr@Vlu>;Des6Gnl+6!Q9X{6TzAP>4jHyj}ze=l5Vf`IKBjUIk#s+nP{#&By|3jcAmogJQ`<_6gNJYZx*x=VK!c|1>CezQ|r9 z0Bu9)mnXoj%LDf?<3?HOJ%gxhzuXhKbj6T(C3UGIsYySd`PM9xjHEluB+2#Xl9Z^Bkq;;8g_KfUJEJXmWq{Rs1qsRF(hNU$q%WD7 zY%2+q?2EnNfJQ)Jl`76`GD};c{C{*P&afTUu%Xo%wU~vlEO*SYhWYML>{=aeMQjNL z@T#BxL0}Vt)&N8f4NqIaWQCD&LUna4WIWXAJwh@awKF?ohVqIQO|oMx28{FMV1-_Q z(faL>)=Y}*EUQI3179UQbCYMPmCH`4rp$dI^}|^hmgt;wL>w*5Bkw>Ml2am6nd~o9 z{J15Hj2~4{N^X3^g7e%9QR)|IaqNMm7m-D7)ql7c%DV;Yp$>&^_RsrZt;MYcv`R4aH2I#0bBQ zh7C;}J01NEz2rRjc|>wp#z6;^d2e+-3CL`pvZ!m%V)GocrM7;=0)ZMmEz8h@{efp) zLexM+IU!ZAZ9^gcd-Oh!5J=yek4+J_)Dr`INy(e3dR>pkq|AL!CwNf=5mSnw?qiLPn zGbovVIhsMm`QmEMEK=99`ka0~#EUz3VC5R(yAv5A7||EdBG1lH`M9&Vc_8Ave^#z| z@@P9aD0+&>!LZxs@dp5Qa|a!{WvzB1`R(`DT+(yN^{v)9yYfw8Ny^XuxSXI`F$T|OY_6Qohk zUza!S5fcNTTK&%^f#Clht+=(UG9UbOFOC}2kR7+$Q<`SW<)!Xhbo{4dF|Sv1h#qRY zc$0hSX+?H+$kO@CCo_^N^RxLFgF`gj`d4hw-nLA)+w<->#oXSFim2-sxcme`|0kf= zRW2g?WA~sY@Z-o4_M2!PgS)s(Jp32Yd@E&6SLCi^E>=GWwYN+jdg1Q?YH#Bo*7J*v6lCudn@W?}POntiyFS+Zb)m(FbN5{ptPg z*L{Fm!k)h7^D{g8>Mgj;ziaa%xc|<3SijSYk<-J?|N4$rp=%45cQsc(JJ-@y?6`C~ zPFWP|ufDF7Ekm=Xp6!Tu(`q}Ats5SiLHV{)`kIc_T@h-Nr+M%5k?h>Ia%iq^Dih)T zRquzTeTs1JAPyuKtA47W*|Gvm%p*^9|vD^ltfY zv`YKc(n?g$8*8t7aArsOdu>Gcz*Jg$X1(tWc_l2B;}156h1iEqo$s*F1vTIPe;Ct<3To zte)C!_RJsq99z5Ue|hnj1aS@jNbbPE{uN$9TwuY(m$y(#D&pVieU`-uCL_JH*HCFK zWnv-36yDQwlYRDAQ8_mFC8aX6$cc>ASo7~(A~FkmQL%}$hCJ<>kCg0*m{iM@;bsOw zB<}4;F?+6(_&3E^Ovy_MTlAyw#DE%vLta!UA5yLS!T_N<@5vjB{!T_EeZu zMZVbZeMdWQ7^O%GhpJBvt<*CK*lNI4`yVc;pc7(dibnSd5&MNI2o>Xo(WY;&3b&8& z$pfXxlPb09#{7DWntk?TPE#{y)N7Z&2idJ-Cn}0dalh?&+2dj+_p3(La|xP{MjxI* zD&6Jd8D+5h>KC%PJNk)c>0{$irVo%pK_w;(xv zZ{MZ3UT=l_REhfuDi=Sk^;%={0O!z|%S#Y*Yr!3+9Vt6Z7lWK7?C)yAAr)g>T-cDN z$<~!Mox8!4R-ZM=^Z;S~Hn%xI8TB1a-+P%plCHt#DS+)o`}5n9mr+|1UIW&WoOm=v zVr+doq+N6e<8Euo?ICmW;xYcYEO1asuy}ks`U1m_&R6V!5iEIK-%;d z-^Lx@tq1#D2eFSqfll7>q7QJhJ3`taWsn{MJJd1e9_E_$Yq-Pxf_SNJZm^G@XX|uw zpVXrFK}{dz$pHEC5J+dzYZBYO4v3{w*I2K7bmd_s3z4R!)H1KI-K=`PY3vVc@b9=w z)AYiLmw2n7Y$*8+vcLyZsOrIK-$o=K16dXlQCJmNJx@I(>p+PNs5#Vd6*x)@XqWR1{89xvs-s`*Y2h?>)5RsUodR|lbK%zO2WfQ$cgHaBKz#^&}=MhmS`XO?IDXD1&q4Pj#D6mGd z)jzOheUIu57*kMxp}S$nrReNHc~Opdzh3(poHY*jzOW z@PA_x274i`yu@lhCph4Wv^KVD^9LjSRt5O>v|h)XXI&cY3oH7Zgp$S_IWd2R4^|Js zl+hzA$9#@~KWucv`J6V&3SyT#w~K)SE#F@6P^KWPxkkG^ZG~9^bKxV6aYY$w267V~ z7|Nkk)VmxCG2CE=J4Oy7mAwY5h?JdkM?17D40Ao-fB5&UkX>)l4=n2La3T2Q1Jg~s z4Ei4yd@M2U5SSYJ;r5y1ZWZAxtZF^wnQlBGzWbI(gE_1QUNvlL!>^mE z3|M|!Q*ZS<;Kgv!S0e0A1Y^uLLAARmNZIX_n5nLiHAUOdfl9k*ymA2TnVM!XdsbLg9X=iC(P^Ma+8X~=K22BzyjeRdyW z5~!ne6vo7m(+vY{d9U+rT>FR1FVnW{U(~6j!2scts$Xt7twBw?7)&rrOS2BbVph?~ zOH`k%GZ;>S63#S9Ou8U89U3U`^mX$Yezz!DHscS(3wT;75#)6EQ5Qn!QCnoXq&HEt zhfH~Yu^O~YF&m~G`-%qD9|EJN&%{#)n@-XJSw#GeMg%g`8-UEb?3RsgnYtI&=11KR zVL~0*2)X_(82~9ul>0o)?GPPan>-BSbc3X5LdJ8w^lwOV^GOV>&Qy(fH{$DDVBva26aA(Jl^!Z15xGw zgzw9{JB}~TtnrH zOez^bZ8R&%r;>tZRKUU3f#VupIaP=6)hkc$bM)*ik&ie!5Rz9qn%*yRszDx`YTu<3 z@k=?ShR8CHIVFesY>Bi@uq6B1MzU=UYs#&dZE1=bdv1LlquHk*O5me^5kadCHK0(k zvFOR6Xx8$lrw>7;c%UC^9xxt!9jqw?hqh_>OjFXc~#bxuNxO6n7Pf-%;VnrEg;@#ZIf0vWUp*>8cm<`WSIb z5BM;EmS=rbe8o}t&Gw1EB=!>ER@Mp2IwNJ#f}6BQPOZ1cDPSEbj4OT6TR`p?h{u?T z_=vLGA}Tf77zd7Y{Q%TTHtr3c)U|ldpqD@7op;4Ag(A;#by;j5c<9MGR8PpExhZbd)bg#-tZj|ISTGzc(QAC;cyb%{tQd>w`aftE>SR@J$2xgZ&BFfR>3Ze zB)rnwG7tvdT{CD^)h2_Fj7rT+ly9PX+;ecE#Xhi$x|($}wCidW!FGD^hd@MhqEBY# z`Vsr~$m7s|L;$oMm%h~z8MK3`G1_iBmn1$7f%iy^`dE+Y`&#~?NBW@G ze<7w)f&Jvcdb#!J`tf;<2>59ioIn}%R9nt>fB)ZTm1W>p1LgQlylQazH_L^8d1d8Fe=ipZ z`mWxnJA8;MB<4jHNB+{O5mNzCq#OZ;5j1_%w;|OQd5a_l z>M)BTl@e8oHC1NCqB#u>9Oc3Iy(FWROp7EN(@KFDa+mE*p2))M7`*;%ue}}$Ne`*a z>{%3+Na|^=kB^NM2&2S;_ZQBURr{2hjXTdeyS~F=wk}teY7L3!HtZLiu5ch=kdQb!f+zf5UQnvJe=TRJkyq zhfP+q=FA9VCU7!P4-4XnIPF4e&-a9xHT(0UqK+>XA5o}rQombe9E*)IaDPXB(XD2}tQFA(>M79Xj?29u05mS-oNwW9V^<}&D(*^33b4at2!BCK$g^S9bsLYvK1 zE9~*&sVkRgK-+uFdAfZcA2lh%VnUJG8X{V~3&b$WSPQUk%cB_U5hJ9Y3oF5W4MiHS znyYbHJVdN141HxR1yjsZwMcwGYxq=HTK*5?n5N;W1l;(iF3ICh~#Ac>rrB%I656`EIGfEQ!$=hba z9L10){aR(E{+n_9u1?ySXEa0sU&eMX)nAp?erFwCBxcNAnP%w9*Q50qxJIaqGy7#n zK18WO>za=7lJKzHFcvK)13Y3R92I3qeG*)kU#NqU67ROF*5NcW>~{9Cw7cUnqKh-L z8eZi~Fe5`c(% zBFR(~0o9mHVafy3;T7D&1cbu#LL<({8Jgo7nsWp3h|kjXHwEV!zP!@EW*HzlERS{c z>BYJx5rwYRSwm{}%EE&@&wxyzPpbeIbd$X&G#H3?#?Q?_0uk61+DtIr=}iB&wwvxa zTp}A+BAXxMmV{xIRAN7S*5X!4owQ%%WC6s-dl`L@N3d;caD3|$*d(FBzBxo)4Rn+$ zq9NuMr`FZkb?QGOwkmVx*7VxzEzSM_)m#*Q;C&O5CQ7GV=CmAcQ3}52PgH=8_IZ8U zA$x$Yckq2a5!6qJb#U%7{Ffr{1(lrCzl!1DDLG$YtXnmhg(F#g<^;G!* zMNa^5@wP6ZQ1_ZY$DCm#I5v4l5=!N1#7Rezm&rl<)v~5OE;?;P66inTqq*gg@-3UU z>O^P0w7?i3bx){HKt#dYE)BPi`X^a(_>I%ZaL_4tlJ>5vkqoGDwF1dBlB~*esl!OC zwFc+Yq@#6H{ha3Os;Wzs zH0BujWOjtjsG@Xm$M+orawfGe-QH-*@s(PPjU2}|utVGR>+xwa@ASVM(&6Kx?cboD z$mL{Y)4{E9#4tsN$};z?O$Xyg+7pfu2_!_E6^`cRMLqRJ-CM5*xTZbW!M>BHc!6w( zufWI}4R(^TgP<3*Pe|+M^*wd=>FXWoqICJ3ZniMhLm_h z+fsg}4bZc72)|0UaJ{MyfuTGU{-YJbTsP}4{|Sr5{SI`V$`8?KM$CU`AcfY``C2v&Br#`&%O zBy7o5pHM;FD3*3m2F^o^V0VGl34s4GwJhX*<@WoGsb^OS`NL-i@7(LT(F_~yFw4{d zZ?yF)yno&;xOf?Ua6Y=FfE}Edx&zc}4n{+s(W~&arYZe?%((dD6kV#@Sr3#$l+(6r zLoHg(#M^34-NqSD9?E8PwZ$6}_}L5mFzWCR^u{o%1y^uGnVQI`96`;+Zr&_acMuP> zuZ$fqt&?U5nd~SLc#-=#+ z@@qVENZ)+UPMhmN<1{%d4i0>*=h3Zb2JAM7YHf76SJXwI7r8>Va1z>8k5MbwlJYtK zpM+X5D0HkAD9L@7L2Fk`{DivYtk7jy0h%VA?uCy*{daOj=>WdO%M&qif8( zC#|@r(C4%eO16NVaosK4^mw&~7%y(Pb#GFD$Q>S~5A=8n%xMs0LoEYoHbqtVN*)Ef zQOaeJCA0npD7AttDWCG+#xhVpEF2tYLUXtjtLL17EQheKLucC!x0uiSin^!Utm){D zf__!!<>2}`yTYcxN)cfDNOfi3j~bD=+3jDz|~Irlj&!33ZoLpb5@PK}@y~IPSu* zgOUG}3nkxDysn(mv)3sd74+F?$3K}Cuf$dCW_J0-SuOd?|L8OR ziOh7#BVzs8;1lih&9eE8jEd0y*8pxh4CFkk3jM{BM)R@i@as2dhGxs*eOc+pNgfSW z>0+2Jc9k2{&xQI+OjliI7k?EsReIv+s7uHrHxzB;>+D(C+uXQz{!M=V|63B`j^gwP^co%DDpm9W z&N(WTg``Ma*3g8!DxFnr&)GDzu3pdWpmJ!_ImOA4$maqla@G=y{veUW#UUo_m0!RM zl%#L1ekn}X+SYSmQFcPugu(JY0sww|SG-p&S3HgRzC9UpeL+@QmLlG? zsoXnRHAWeX^$R-#Q^YC4KLU*%akBg|KHHg|ahO!IY-;=bMhGMnr& zuB-)l_#5=Md%eCY8;u|LLK1aI-Zt5iq~|Gq*j|JQ**U;bc^Pf}*#8}3`#Pi5c&^z{ z^hAF4k^220w>x&$;CQ_s@BnlUGI$HO41JErNFea53d~KjO|V+p z$6X^FE+y-HO{5yJk+e^fffKPx&NLS-4Hl>l!#ee9bJ|s5eR5a5q&$F;75}0%cv}3> zKxB+`tQnL*I5HIJC4iEHwYb;m^)BmxVt5>Pp_2gYO3UV|AoQf$I)V%WMh2*kmr(-V z{^x;)3p&rq=d~E1BK%P&u~pQZ9@62kxiNqA(0nI;gBy!v^ZrwN=Q9J+!xPi~7?`1Y z=X8=-XCl}|EK@n$)_8>$$lVq`9bx04OZgQ(y|V2&`>sLbYHKt0S7QfyhkLplp&0Vu z!)+IpRE|Ac5FB{zrWILYVu%>!%#W^v<&#wjDM-zd;J2X`(Na5X!YNE4uj|VpK5aJh zs^)kfq5nPgZaa>VBGChYi|9DDvg)^q#$$M^HDB-QNFR{}8aC&5Vo z?SuY{@qU&1)5Nqh=iHrlnfUk_b7Hzr2e#C)c^C=oOJfKtKARf*>6)b<`E4 z35Alm2Z$5Ask$$EppRQ8-JKVeSvP7Aft|2qGW1Tn`GdEQk%0R!U*t^`sU;Yfd9DbT z7(-a?B)|?qSgs@MB<&>{w3Y06g@2M54Jd*aa;lW4dm-V%V9diaHEo_QI-AiaNr$9*H<_e{=Py^2r)TtmE! z7}iYXj7O@VDy>Sd3Z<(-vfPid>fAK61-p)*C`V)S2Hz5>!5BlcvJRq6WBaDNmZxk7 z8VS_3;ktZxxlhxFD8>2pb*-0#1jMxsnxGsijc%t7On*SR|Es&3_>|Zb|ejcd3ZSiskq|?wKkBTs2vsxH;!Hkk`AL&i3VsILU7ck$}J+# z6FG2GG9#CVPz+qZswZEyvGr3lDO^vkF9B)2GHxx?_D#{7qi0KAn(w2oU=rPA3^`x!)aop7pEXK>G>4jy5XOitKR9sgGq3LpT=lLs@;n0Jmpd#EMX)pJta zd82Ub$=KKxqjf`1yZ{CA zJRG;9#zvpptg=R`|3biplw(>11CUB0f`uPyNIF4OCLm2qCQmD0oSY@q-vQa(7{hDc#T{m(1!RW<9&sEV zoiELvp{=SnCYY2=@CJYD@O1_|!5wBO;EBXE#~L4;aD^F*YGSMlJEj;@jW$8-NzLRg zwtmva-TIC)^*{_}dmfju?R2d==418~#+g=bz{FjryW zS0zN};gV_5a(cY$^VJ)wBI8dUr3IINQgIt_hFhOtqN0i0O{4<5MWP;6h0eHaH z0EG*4k?fXWC#_UmFZW)etYQD$77u?f7F`Fhk14S4j?5{eR0V^`k*{OmnO9L~<39(T z)TB&MAg77oGNGiB%RCdsoXIW5LRNurWmny*^pK=R!(*b*G!yb1!)=U}c|)B5pmIK~ zw}tZtpM6D0T}p>g)!Y9HA-p12PLOAg#lxQ0ad9Iv&FVMAX^7MORx-&jW`vcBE0uEb zV17+oA4@iGQ<(uK`v}d%cO0aYt3C4#!x~FF64b83kC7J!NO@!8#2Gk2lWxa=ZlG{? zkQYD+3aJxP#5+77Pi`^F@egv;J3mIqTPb?8I`|$opYIpk{d3=W95`T`ySH(~0BW5t` ztZNUJfHGSwnDaV&zdtUc?zfKG$NN7WE^JfmBR#iMYugn@`BQ_qH)0J(H+mMP>O7B) z9sWutpl*jlY6lbE>6!&~D%6Zm(dme2skUpkt_y5T8!S2g5Tm^e#`8-Y#r1sO4=xgU zH^QvL$Sr%3@5X#xtVAzUB3exV%uj2jcAXkiMsd8~1VVpyVST*nbxr*SUPcn8`kheR zhIcHeCv?|6dybyjt#Ve-kq0W;vL05bS=8|h*BxDV4qY&;^{ZR>Xk_`(Z*=&!dCd^H zcm3T2Y{zHyV|NbP{T8F^hz>I+T(zu04rUU3_MTgyzXbHVab;o$BN;=DDc;dQe6=4} zQK`qoR7K8*J2zFAa=r|^_17Hj8=``{CBNFlf4qPF6a7zETGuD#f3!gRZ#0PFd#;T3xrClNMm`cVl%1`_Xiw! zRw0&J0qA!fNF)GZv!u*7XXFI|RB|;gmu~#D7+>p!C~@zOw|Ff7)62qp*NV}&Kw32O zh&Lp zXpdLumQ2#PBWtvk<$ox}letY)HN&C5u44E!zN_ZJ=HOBlrM8hDNGIF;={!TXK`86Lfo;y9Tp}db>WOtUS+bnf0~@; zP(q)GE}@@1&o2%FM4M5+#o+Y9X9YCXT>gxgG!_)+OX4imIptbl;;{Htos{xBvB8j#a*Nl5VJD>f)s-+Q~y7ZV)JV)Jp7&P zZ%FZ^9Q@_mH>4O_$DG1paQ1E>5dc92Rod_BxUqN*!aMl~O=K|;acj=GzmM?o*ErI$*fvF z@``b^DQH$hs_DZ37Qd6Yb~*}|ZJC}asq|*8*#z7?o)$>T_D>9#2N;|9ybgcggE<&I z*xAT<-b8B12L0KPA=U2+ z&E#Oql@Hk9O~e5t%N3>;UmM7>zDti<`-TLZ$JPwv9Lz@tQ|vm3bcDB~iDT=k*4nzj zcu6%Mh?b=^yD2yiPOx{g^dCr5DfS+P7tdo*oWgcHUdl2e=UnWyEk30_G=EaQ=M61$ zoqbNYAe+iuIlGAP|3MTla@atHt?;$1iWJs8y5ndy-g%pISDRfAsu&&MkhgrrTaHrd z)7uC2et|%GBQB&8=HvT)ozG{cVh=!DhCL2jItS?3uzNSNFR$@du@_m|hFvoctv(SU zl%hmw<@SIJj1Q%qb8lg>Gb2PD3Zl%$>L#~Y=X`6B3Qkp>%}@US4l*|%l(0>=-)}VwbZ2L~ z#IR~i%BALk4;yE`XW zfRoA!xQ2j$C^=>z+*Se+(AMxljVW74ngOb#V;Z=&x* z9hnS^Di$qv@$0z8l%=Mmzbnm2)p>3f=v?O_HQg%x5G?=nz-k2WN1iqrxN1D4j~Lt$ zx;{SQXI6hxxj+mY3ZjYxh!(jA92?|a*w7UHz@;EXUnb+;6lcyit@1m0?O)2Xg zGH=w*$#I=#7KS~Z^q}|mG`@WO4^((f0Q5x_DVEIwgka|5W;of@IrySvv5G){?7M*m6sIx^Wq^ojvygbv?ek zHEq}2^>z+?j(l*)Jur`&d-eD>+^3%9ZDmzeeM@aTh|?8@j!9=L2BT z?*_I1V%Fu7Ezb|ue)-ebjn@HbVU*l z9(NV)u9whZ|JQb)lO&IL!_@Fcn+U>0E`nQ#LobXsu>Z^c8Ekq2>*Pq>*D4@& zr2v!1&uz39BkWLLgolbetsh6Z!O+e?LWZbR|w}?#vo_<2X?^Tb*^>9 zPbz7uAax<6!xk2j8?5fw*t_iAm>i`uUh_>LlPB1QJ8+Aos%a|%B7{hFuD>)PJN!Gv zRS}Ts#PSp2u~`zguD9hLp)H%!$BRdwg{}Ux8+AZ(rQ?jr(8fMGWG& zu9h0H+$`3;gPT;Rr^C zDt;HUgoRHWsWdPK5UOC6hJ>hEh}K}9hRe;cya01yh{_J}aXr^~PmtnGSPe4*4Tg34 z@a=|NOEB@nX~y&t5-8q=48mlzwmGyC2M5uo>iOG>)~0=i@%+<6Kk(1`g5xee2mJO7 zc^?#pa)O3u`vsl6`%cLfU^NmwezUa&l2hezreMkoo)=MoU2y#T6M6CE$l%)afna5{ zx_BO1a?j_mtkH6;dO8XY1!0-XkCX=5lD2eV668i8lw#XXcy{?`ASr8}yYwFB2xB2I zQCms77e;s9f*f%m*W07Q62UJ1f#JB)JyPPAgGN?)2vV9>SOmII6sMvFlBuE(ZrH-x zBLfWgpds$15Bxgond;X%Wh~Ar;0@9JU0iAg?*b&;u#nJT7 zCl)3EVV@a+*iVU&HVTCjmNc9*HS|*r;*(>&xPcGi{o+^pHZd+wx+MA4#Uk*_D>gM@ zg4EV_IcUWDz$^N!&u{VD-nhVaZRJ+`nXNp_g+EzEj9IZ+>K}`5g$vb-``VEXAwq*i ze@@SEAQ%;DkXT@*b8?(_4k8i}1hJGL1AY$(;mP3{;AJ_U1ah%uX+wfDY7(0<5LgK3TTEKg*JaIbd$+SZ8 z&4S&}yyzzpLp;b{j5rGcAJ9PeK*!V5j1bf{)9i--Ty@&mAfFQdHOFb}+5(*gLACcb zW>=Z#t?lAl2|tA08MZro!bFSuDlVwWcMhBy@Wguc(Iq-@L(Q7Ie9ashS0*g25tsyr z9cuPDz52#M^-DPX&M9p6Ia&b&jr(`C#Lq6|3>@er*cDBzzx z)zN?LBj*;|2a~>Su6_q;r;YuyHQ0qoxiL2Dss4no(tD8}$3p{b-h$gN9yPHDnE)Js z{eAjgNPMqv<_BjqFQ-5ri!?9YQ12I@NsRG_6yxofkzZy3|<14o)5x4JX|yqMIJ${wyb1A3Rt;jJpit2SCS}J zoHP=8T4uCV2fEZbOR+M@l6k0Y@f&wCAzw60H2Fle@^#AQv^Xa2=@Zs7qgO4XpNV3F zO2z17)F`@+qbICI^PqPz(YXVSLIqkC>6MRDLivRfNLCJ#aP%P$;?~@Rv@>Zk-`Dz@csfeFZ zMB0N~dl&`9ORX}=1dJ*u{0hT}4i4_NO6-6Rlmm&=8=$j<@QWMtY7m=gSqm|oK%i(bElIr(vaP_pZTk>z4 zFW=1im~=tWvs@T+2N%$Pa3g#}e8ge9O6Pu=iBsQB4EQ?4gdRhA2E!m81|OWgo6|+uNe~1wAFZ3+6k+` z*I$D1^seKVXFH{zrXzo-6aXtA#;}w@@2HzD&5JkkuF@PVOCA$AUqg8*TwtI={Z1R1 ztD){k%}tkG&hr|bWwpcMy?;hIB3l((pnenmY2S+>|B=?WQG*&Uy#K24%PA_&1BT8} ztKaDdSii;qF5>!F$7ww>A;5?zlfYy|V*uO$dNli8K@$X`?`>IL&ow#)vHyMn@mebrWa2?n75YpE6JrCLx5{q}=J zkll~+ko&rKQW<>U>-6r~Eg=3$>A5KA_N?v=x!})QbjA(%2xi9q;x@_)e_Dk69E$i1 zCXrI9Xeo^j+=^JdAi)y$7|c)?U6aA&^8oHN=4-~gg8VApEtzeHMkWEY3Ef-jlHbqv^6cRrVz1K96p;TMvNM<4ev+e)GOoBiV-Yp6^HUYqOPG z(m+dsO4pT@*j;BFrz%|5(ypk%$MaZaL>bYWx(w0DM)O#!Q(XW_msPJ)Lee5pd-LFu zi^?^RN1kihX-2diq+FGS;jTuxWvHb2>ZXTj#B~^Go6y|9(Wb8!ddjlgPDfmwrS$$d zJoVe0dC83jii*0C`HCt7ZDP~Al)LG-d{N7$-l_rn zQm_k*R9*#Vav$&an;&>7fQTeI+KzpFk=_|m^7xwD%2HPx<}3S^hARTaGA1AYeK}Zv z6Ok)+hVl->P}c%iafI{WMnu3`j*}Ee>;{fqtIfd@2Au)dT1+6L1B^t6&rE#-_3G~+ z@0wKrirvXo#-~|7NK(r$_n2$=dvOc*bNy3`G3M_TimDVqwg_woy8vV()n8o$UdESDLwz`fXBmTnV6ORIs^Z`!%3_5j4+0*9!9q&t9gEZ!BkvFEo4QX(u0W zORkLIm56CV*#{-N+l$c9iNOI{Y^XhIC)@Ry!=uZS>+W@7P&VlHEfek!gvbVmUD1CD zdj{iawA)F^zxxs{>pCdsc36@jXB?MeKP2E6f;=mD>DasEx7~E6uH?TUL}+ogtM_2! z)Hxfxo_gHNl>8nkEM`U{hXZ4kWrCYB7&4X+i7Uh6WR~C=1aD$5btwJoJdoKtET<2a zLkaBF8I3Rrgx@8STGm&?2XQi&_jHaM;8$HZ2>JU4@UWMQ5Au!o+NENLxuQ$|yHz59 zvL)&l;(*z9*PmNzQFs@CPqIQKSboiasvr8KWlV3Bt^NIQBXybeBI5BE;0 zbUV5mq=Q76U$XyIcNKIrne|qAp4K{NhR%8l#7FOqShY3Mx^)D-W#7Yf`#8~d;QIuH z&o9;4ob~h!r6ZKu;Ozo3i^y}bgQYsLk{7o1$o&k~R_8X?>)(Tuy&u{SBSpbfdn}q| z?tO$167)re*p&%43NyHS!`8ILK%rnn$HQM-qi*pq4f`~mZM#w`t@4`qvuOgf? zrN9fiO10sX5N=DElW=Pxp=mNQ0sAGqh+pC|O=r-`U52Jj-e@pneo|gw+*NK&0qV(5 ziV((4>O?ZwA6<0PFRy^VF}h45(%kpnnTj!Rx<7O3+b_jkVPPt^eL^R@w?ReXRvQ_Jb6p!_~TV&_vd}Noeotppa z>Cvo+*p$MuC+%};PFkKXDa8<&fXb* z4E*{zXG+|GIX%M&CCcts29naJfzoBP)}MDIv}A`3lwp(mYF@Lb@q1PbiM00%U4QS% zZ9jJW{9mL&F)kEL!(?cuKbeTD{SvFUFtdt7iK!@d6)2;i6=l5mF4AMU*Vaav$4C5% zwsM3W<0b0Yme6PdWqqb(q=9?9vlLI%PkKSl< zkwiiNJupfB;e)ywGJ6X-@AUO5$qBbghSvI%9h;9aKGTK-H#DeFf0A01E{#t57Bebu zaJb9#M6N1FyQlPowz8H=&1WwzLP(f`i;3I@1c@os;X~BPSAPSgVGv1KxKM5gjifZE zn_fm~umz--R4)}A0yARfBtF~y`YA08}9rVjJJi3fT478@?7W1K1FU@{N&|K=Lym0Bn4+6Ku{P! zR+<$eoLx>4k|>ao_%@K#FTWq6`p<1y{4RU(npKWBWDT~X{$^KFv0Y@M(@BACVfONswKCV~I#+!^G4~hW7lEo*2(RF%tX@Bn^%YteFh&^m~hy7J-GLcBwL7o@;f$#m49Mmcx|hom~UN=row$7B31P!&T7e426P_KiTJb;i`v=}4U71M z((rGxe94=gCgKA*YSO~Nt%IAsM6#q! z3Au=KVp|Cq_q?M#Aas3le6?s%y8aOBFS$ik6smt`@B4vYFXH>ucAs}gI6~ZJvhCAw z;@gKGZIOFp3qseG1ICq^?Wk{8VBVEZF36=Cx@vv^V3Njz%-;Khv2XJg8o$eWVZDK? z@|;z_X5UI>%U!-@h72nHTYuCeHPeNXEMGPgNjIpRI0Kp_=bzH+GCG7Vdx7R{H1q~*haJ(XEgn+pIO<1LUfe^ zeJL`z`3(Obb!`6|E&uKr-}J-2CAH+W|EAjhKc0VA%HJvM==Qe$?|qI!XXqt+X_;IE zq%l(la)#Nz-DgnV@L3Z{G?Dtg;5F;J0Xk0b_YyNEV=1&3aJi14)Gl!{=FiHnf3!Xj zIcQfQ=nUJWm^0`Y>*;FL8ty&wHm~j^I+ z)s><;jVEQ9QAtUpn}|v;K5;NK_8JPqTD92Fc3`MQdS*)98!3(t zdVBeGfU&LD4TV&ySFn{}shwVSis}2w(C^4kVsQ`;Nv}=$&SSASm9~1CP?&?1B>a=X zj+1A|mi&2ue=yoow;j=zXg%lmtc);y1`k$ciLDfWu&e=sH9$ME)y!5QF8H>n<5MYO zn0!llJBl)c_CFma$(Stl_=i>te$+^tHamH5nQHnLx zdh{(%2htlWmGSX<-ca%=;=P+~__&RA@@Oupk}}j#RK1Gk;$kY#G7wX1q>e%f0sa=# zvJ9)he=WPbZ*HI01rC!;tv?L1`jyO?uinwzKjDUo7N8wnU);onI|fXXPQ36g*j(Xw zxyB8UFsQ1iG`Ev_-^4xKQkpMpWVU-89}#RNx?Y$ZC;j?srU8CBp7?S5S@-1MJZC-w ze-i51wH>0DG4pM9u_%PEzk`<0{GMWGrtG zO7r;7yxS^7!@dK6VD=cu8R8$Czsm_#Qg7fI%BkEP^tPVHQX3QHrLy@3=$Y>{mVcJ+ zY9Konyz}=DMg42L`Z)pHvq7m3xOXo`XK$a0(U>lMY5w$9Uoi`qFSc=hYNnm!u*o&G z&1)QXcQ0%IIXn7MR$3dIQT2a>wE6(BC38KYchGD#_u6qpZ~sCH#`P$Ob5Br=L*A*< zoLv83)8Gp0>rP8cXHPnIt$Y``2n^=ihu0imF4F=dEXxxtxTxP~3{$FaG=@c%ktRj( z_qZENm*DTIRAO67*d{Mo$I`#jdvqK7uRMXyjDo$@g}Kav+2R(~_?(NBK=ih4+wb@V z>8eeQSefoUsqPHGTi{WL)V26mc==rI()OrVNe-cH(eH;2WzhSS9JU%*-Gtw43dM&?{oY&efJhs>c zzeT~D2DD(zM*n}@y;G1b&DO5nwr$(CZJV=a+qP}nwr#t6wmI9j?cV*a^&@t~{!Z4} zUQtI+9#mA;Q<*t(%Fb%lC*!o>)lJ_lcXeCX&DG#rhiBD=I# zrIbvIA{cWAj9GYSdmF@;zWL3QkStwEd~H*PX$FBD0)KE@W5adT2Ntds82}q@>UD`(MB%B6(LE3~0}f$kocEf$`ozgf^obFB zVoK@Vxs1+0Tt26w6+H|y&7~-gBuE^^KuaE2Lp%$1FBuGYirGM=Yi|L8`&DWO9%J8{ z0c*?$H0~JZybe$S1BxXPR40^`;FtnYu9w}r!S~o$VElV`F%SnI0Q}YrFOG+=nNgST zM}J{_EchGv_uGx4;eKJPScn)u9v)Ul=*n{n)ZC>Y#42#EUjU5jy@()^C&X%C{zL}Y z)QJ(eQd(17P!NoGri4U*3&3SSPV4+!KbkO#kyW{bm^ef4%Kbt6qJj+^I>J^NP{ER>lvAu_*-PE*2t3^nrNxBKZ=iF~*4oG_@Z{c71hc;4~X} zEyWZrA}l0HK8GOWAvA{&rCK>;G)+cT*!3w5Nh3@`7N5o_@kih&es?c5ZMP38{4eiT zt1{AkrD_w-r!_iR9KX>E2#E>BvdC{2)K%OwH4PI!UczI3f31AeKMbhW^T-Kq&U1^b z*tPh<4qH!ZsSl8%!MwtbAy?k5&brO>8C9pq4P=%MPQZ{wgqVbY!I)Ri;R7UKNKY=& zor*5%=mm|mV5`$4gj9pOWCaO*xM!cS@Lsiefo(A3`fuKi8bhQr3OJI@$nKbv8fGdG z6-wZWr1l6vXT<`rB&3>D{u~k%btG`}ytpB7!-5&Yp(0l_b^ba;(&UIxki?lmLLCv8 zaLys2ORt*lcpTi)W{$lsb|+T5pbv*)@N%8LJ(m|WxcGTf!pFBWX72AV0M#m4rl|CA zdvsS^^sRtvS|ao=-87$jHTR#H97^$41gNL*Y?!VhBu$_Mh={+*`(+M>aLZ(=u!hW^ zyC`QW7`uG?z{DMmks)J(9OMFsgYFTg7f6lgAHZ^Br`hpQvS`pVcaoSe{U0Bw5wk?> z#E`Q5QAj7r2{?rPNdp=^v+P1aO5Y!m)-)roe1P3W)g*+hLkwgWO@2O>{HnA4dI4C}Q?>LI=X)&EIUPS7`930@ox5+i-?Y#>7!AD!8|MA_RisewNSj4l3Aa{$)x%d0O`DjlYFb9 zhBuv;w}U?vv8CezI{c@^ZJHc6t>ZKPw|unhIG9xd`n={-jlYG=_+#@&c=lqX=j2bV z04a0#0xOzJEW2-i!Z)+Vv9fNvkFy?F$KgJD>W<`xHt*95O8FI8u&28nu}?~v%FTXRUC_7o z(`2R1Kgt7m+%CG`ZIr8Rl6S^yqv!A~blj*|RY&&C6>Mw7F9$c#&1t0ykfoL)o9VhK z#);J8%WI*}cVw+}e7LTc*Ene}?A81%R>Y=<;3|~B-{g4{@%Ift7M`_=#?Wn(p&E^g zdiw?l30%55p zMTGtjA2wjE{vsUs>O?$%Hj+`#)?v3Ewv+*Dm8v{kaxk_Qw*#7xc(nJlbv*J0{SL51 zT|>y*1oAj;l_|03)mr|h%+bekl3}S~H_|-Pm!SNBYgDe82(|D$stm{1X$u+bbxF@_ z*S3A$Juz(XvG65%Rcp$A`DG`xk!~%<<3lSAI`&SfO*HIf#*kf$laZ25G$dWpS}BpC ze!k6qDQq3ps^hZbXiiTPJApoN=lIybzF=->i4$lZw0%Ac4VOR!D#810(< zU`xO2ls;y3U$0l2y^)i~?W*`~kF`ze)TzcudGekf-5EADwT0<(3Z{g0hIGFnz3U;a z&beZ&mP@Crx;+A^w0Wm6+4`^by*F1w(7QS10r0*ZjqkI!-as;@@38DvsGC>#^KGAO zfgen!+|?vkl*u!p0jy~XY@a;ojb*k*+aU8>)9{s{bAFtt-y3etM&5Br|2E`vo>ViT zSkHsssUYfvYPG%pXPlD%MzcaCQK&PVADQj<{~)tv`nOr(|0c67ZkOGj;9m{5H&|RU*k3w21n5j%^!@g28DWHXyQIlAmDwdlSkp+HXxu}uTLa1&vp`~ z#wSto$_YhzUD$><*6-Y!#5hq>Ea8kr+fnrdRKPpFOmZy<=GHz}4**q=8dwiH%o2n4 z)}qtV|2WY4KdWq)y7IbG>q*ct;}4f~oUp6~uZp`8>%khVYvbdSw3B`9@xFy-6C5Os zGVT)t!tO!F6G@^^E%3IdC{oG7@?^kiUFQp$&}vbq+!C9Y+G$!qiYtaX*+uF#n}Te< z8rG2rti}HU=3++ER4THnm~>2ZcFd;PU*j-RLL0jAuwVsm<<*mP4N~~+>&adGMk!o0 zoxdO@QaVmwru$&YClL^e(?ii*a~Zp5Yj zH!j!eU%1?3JbKIuVuz7~t}>nbCH!u;T}@yB*)*a`eXz$w7~CW)l!(fUb!IhL`Vy^+xFe zx9e8zYUhCWGJP3Iztxn}p7!L`d$R5*XX#nZ`Al);)z0hI&1f%N?>aDetqb_fbKlM({m#zg zWdGpiAh|F8#W!;+6?kLYJ9MYGz{J+XcN|(*1+ay}l7zzl}$92-@g-G#Lw7b+pp4 z{*-xDsiQPBSDfd1epz*dH=C)jcN4U@5azF|WVim8-1hVzxvl$;+!pv_W>I5mXS95D zjMc;HdwV{1S6&|c{n`1A(XEZ!>kR_uVw>OV?tWtcW;cmR_|U`BkKPs+kRc<>*s=a1_3Y=tm>_>t#={Su{&OKHFSW483G52AL@8 zfu6pZXeENDmT2EF;zB2Yh#L-yVbQk2QnUv3buJV2^~94ik@EV7bJWZJ@d?i0Os-)vb`O^UN2{G+xVEBZg@|Cs(?%PQq{HLTI=XXUJ0*zsww z2fFm|1;Q>TrbcVbF}-Vw7MPrP(pnOVi(xoP*-=oXftbzUs%(3g)vhIOXCRQ$%&i+m zE>Gp$!s|Lm5{4vVifWR;wL#F7V#k;*pW|D{uNn8EOne#?XNFo$mwpx|;0pp~02X4) zBd8G>lO1_iavKWZJ{J|@(zB9$V=y#U&z(T+-cC)dmPZ^7in9>jDifu~7-cLxtcJ!$ zEyZT=sRR=ml*cY}RMk;Dmg@BUtYRN629t<4gi(fh1w~qn^1-*_$VGb1jB3o7GZY!( zGQ@MD=(JZa!pi9MzwHGk96rP;C7#i1jll`o9nOs`S=q~uFAH>=%`C9=nD_Wv#i#Q{ zht^+iKJ!4qI%LBoe)(w4GE}TiZM$`8&r4~~Xd!Z{xtxkabg!V}CGCYJrGGeyOAq^! zQk+!`#Z~~;*R^+QV%8eE<(=IKZBcJa(`N#MWu%PSSVoKbev=JT0})fSu{vvL+Xj#7r3yU$p+QOXs5^!+zsCIJEsa^@T;7yV5YdYZEiwz+%N6*>SXzIe(WI zr`^{&x{g00cz&rkWx_gmTa&+Xl$0`BdF!HbOJK<~O7EXcATJKlA3;CxnV$=1(fnnD`yJ36I$| z3f1W?ihtrMe!x~x0q8@;c z1p#uKXD3=bdqF!orEfH$`<}Q?T-NNY$GtxaI`8>dZuiXhf-%BUG4zar?!(YUUSIe= zf5b-8sSsU6dN6J&2FY9UR#AQ1zvPKx)v)bKF9_jRQWOkv zTqc?oE~&M8-YOzrk1He&ajK$ zOo<()FccJw5s62$gMJ(XY;9Whw<2m>=}Fv*JY+`7Tq+m|8Z8``<1)>7{3bv>F8gCo zS0+*wcW8*f72sDaG*9_FQ67Cd6aY`B{jY;~BoA7bOf1>BL(`E!$4s_Pu*P zb)zx~vZRCqC4sP{0+_FosM5K_lvj%xLe7m#P)?yJNtM-iyE+QV?SFtCNrhbaa~Z0ryt0N-rBMPc zIpHf7pW%Z(3gsaIip7NMeL{nzRQQhDqr4S=+2?12#Dq~eSizj>6U?c6N~0`#W6`^~ zK6P9&d98{?>$Yxyo#^R0?cWoUas&K|LSxVn`G5jSGAV}SJix(mp;Z~JzY>kD58w(2wI-58YP zjH|`Z9ivb<9(>2Sw$r zBVa;|u4zG>nxZ+}+o!^pe>dW*h( zU^N`o%4YSMGfjb)&KP$jK=rbH@*$VNx^x+m9@lPo9r?@bWGtaeX=~nH3>qzFkcMHxIjVqL@Gtudos~qo6d7ufLxowr}LlB_L8_si+}am z@a&{_y{`MmB$`MtA(mK>Y4tYGkWb2+hYKGu;9y@O4yGvM%qz(v;SAFIR@oWxplTR< zIct}czot5W#Ix-UXlb&q^~mk9s^n~%=A=h+P}xwO%PspG8bF~jV2ysj6^ z5n`)aWC+f?h6qg_D7<9vpMNWHkkit=ud67H{2=(Hh9$LTp5zln7YUbjXt zg~kgTYY(mn+rv3MT<@L`$C;l2`2Iq;bwGJkJLn2Uv`Bel4?(uLOx~-`uy3x1n83s+ zg&^5K;1mROYufTUPmDUDx7Y46>`zC-rED?`@s} z#RE_d#RFhoxXm)+7xSfrE50-wzwe^ThDDD`; z$oxf==SUP4o~bjfOwpI9R%R2$H`(du8o|7pz3TYgkKz0#aUWWIczNzbfQl)G^3p&& zaTg;?#zyaIc;hAFP=+y35(O&Ce+!kvF&x-Z+nGXEvkA273Qut@i?oIRz{xfLy6{`N z!LL5ym3243?y%$j$PpZi@vMMfx&k73-CXP7drw7@#AuKNAx0h~6m0P(OJHizTAQ?!U&4XefgdK`$Ql(N?Ez9gQ-MYEv$Kmj_1PeV}VpAPI5! zYWtR~{k99&ycWG1Ss;8~JdhtMbTWU#Kb0Pw`z)2bFQJdB!asTTQk8w-@l^vqpkgiFDAui79Kg6==vDw>BRsSD z_8%p${vCY(m+d%A18w;m5l9v6MbiZ{{kJJ^D_3LOYRT)sCrMFlca$q$hEjVa3gg6N=AI)1x zu`eW8!=4_gu$W7^qFPf`i%|yb6qrlS5j8)Ek)OgUw-`;OSc$Iu4C%j;WFAz-BnRgn zzsYDVTXMrGEA>j2n|^D=SE@(t4h3ZlX-}rH7-NPu{mm?4G#HY-zR@??CsRnMhrk5P zNJ=q`muPayLz`M(GU*m*B7I#1SELz?UCm)to$=7gol9^)ikgJfo-a|sjEipceo%Sr zqOqlhohkmqvUOIDk`^hd5r9NV1axGGsPzj%tgl^i@Gc7$>4jl5JP83X{8bFY)GO;B z#euA*JTOj}sEiJeP74Gd#njh$!{^JR+l#5Rdh$V9LB&=Kr?aUFYkyVI2oXrX{mRK2 zWkx|c*4MIA*ERl=Z@e-kr@@Mxa&0lA)!+Myi&E@VWdX_Q-Sz!!_(?&VEJZ02qp7Ew z{M6&Ntbux^hzd5O`CK`TNMD@-vEOG4;nMm2odDJ6$i*1`K^X-`u4~YXGzOpLAH6WAs!=J z#eBLAPPz?=cUj)Dxxgxk{}6UNsZDAB%9lNAIF8;~boRK)j)#d>;hT^s+w=?xbQf!G z1+$+6cH*@uL%XrBVx-qUG8U@=@o&r7#Ma(H67L=-gpph66O;J!!y4m{wjEK!jy6|k z>@Hbf4HgnpcCz9vjn(ouUluHJ`aB_KJ_ z07>%~{038jXEUJF?>wG2A1&0gx8r%IihTaq%g8M?Em56u67V3S3?PTt6%kAXkyYkV z<4Iu|b^wvhPA|ILg3{tGbs!suJN%<-D%KN}6$-GiCQMDg5zMPVYr33R<*<@c;a%GZB-HABELo3ubuH{NS2!LI>4u2l4s z>0LL=$-_JLY-gmX5IQZ=-4ja8CeYi*>WNl}9O8}AGKM~P%ArzKRT*hGt&)15#L`K$ zwT%-X$~4i;BalBB(UeFe;)^p-C&NH|AgWm>K|~ie)Hy~RN@N?xvML$TRI2i-iOekA z6%2_}$!z6E`d?Nl#ODSMZ2>}kzLutJ18yye3pWRYECL`U z!9Hf3Ls0^^f2d1ipC|a9i4r_XQUo6Wq0I8be%Vf zS<`fdD?xWcH;>6NHqMTi`!?>xIHm>EB&`(-tc#{d~muN~Co^ zE-we})5l^G$#GP=ioq6{{m<7{eJY5O9o9dk8B!9-DT4Kz)+YxFx4ON8pkI#by5%C9 zo|9(#`hDH4F;eM;!fom`SKJiuXD74X34z?k57)3ad`j{>-^a6`$i%CW}wTO6lycxNn#_CuP}+(n8hGs7)>t>@tKbH z7(&R_Fo>T581oao$I{@AkoDCnNKnobp&^&S zpLN!kGJuUz%ca2{&-ltSnjKTj=UqI3OwFB@Vb65vD;q=bcdh2xBM;|Z&sfw9n&A=jepDs=Fna3{*1Ub#CsujU!G*#PR`hwNUT;axXWqY}d$MPV>lK+%t^imuLy&c&5J4HlOObuiZ(fIdzHG@p(HyTw4|G z2d7duhg(x);dV2lGPmtgmv1s#sZrY!fbG3e`aW@}i~ybR0-v9Kfo}2w(4J>!q}}`` zyc>37m2r)B2WbQ*v41+3`T^Ryn+aog-#f6GeU-XZvaZ)$>RGqOL(Rk@o&^OEVS2*M zQdHZ#FXp=Zy33J+uu5+t`fhwZ?0jvzphh)FP)=S|MoMlXGn^A!^2i-Q1;6|Z?#rJf z2j_n+R;T+ZJ7?u?a{~^UN%VA9#aZ#I(eufu>_?}__QgLY7W=KjmY?C961Co_r?`+{ zJb6_1oS1K>+;hYi7I3eSsQwNAA7%dk8@=&f=U(zGe&TQh@BbkV|F<_@_O<-F#J`lk zj1$-{#o9N2UdSyvEdI7=Z*HLq%D=D4;)E^NJGSK8)tb>)Yvl!O^`lXp%xSO9Mli-IQKTx_$6xjkq8orN-6Z<}q{;#PBkIJ-VCZT=Os|N^i@dIx&=Mx@@t`d)MWj z182lDHo6&J>+WqdMVSpel>mwAC^M)|BqfWFLWg1K8uR&&xZCR!Qq!mHjFx{+qE| zCbz}Hry8~-OK3uuI%Bq-o*o`x!XZeQQt}?Ww*Oj?-QiWvk%qa{_^?2?)xr{OgPF)) zwP$9(dI$e)?63;-YQ+Vr+@}Do#g&W&0UtE}Q9Dx9%Q&0jeW8HVi9r&D7JVifn}#f= zHW`3OyI(evRs*=ou}&_pN)x=9Y<87I(1( zCoVr!R8i0Y%BTc;y=ljUQFPM9#>@n8Hri>TAXU7URusM>k$+V#t|uqvszsJJw>xLW z`8$%;#Z;oTuc)F_8HYSV-QF!C#i&E@8=LGC4+rkatUW8meqdqox`D%td!YmE0DI1X zAUC_9c9b7~SkN*{amt8g@HRJJ|0pb_u-w62*Vbrg)D&icy|yeK6F0X#evrS>oP`v-`Uj29{2D1T9V^Z7El?eia_Mu_JldHCrq{MQHGmn z&b6*IZHe;JHkpdFrT36Puled%VCxySocF$5+ivg9UNYopR}OqF0Yz)(3bF#9)*p~! zqY!4fK8S-8{lE*8h)O_nmTJS$5cSsfLGjvytS6^3#b2Ks-dg>^VBaCMzrHu+C2Z>q zoW(OfoWHLV$!fXWfjJgLX-iF-oF=^Qld5L?w2TLJwcxhf*G^yjd^uUN9X0c|116h& z@MpZZXE+FR2=_>05@SKI959H(k>umW0>%uSEF`$QLACe`IfPe9r}tbxk`w#d@!M)! z$1h4;ZLt?Cn6J*QcT&&=tZOf(XWV95Es{T1hoCQq?s*CH4(j@Dv%`)-%U^TokZvQ~ zBKjtUT>E}F8_{Gfp?$uA@7gC%_O8^P2VZRNPXKYz39TJK7Rd?EACgvg!y%oUc8$SB z8&(jYAg?Zagh`A+6a+bZb7^{$bMzNjzOo%`LtYp6JBHHYlR}J)dW=X$>6VA6kqGnI zfHhMnyviZC8zR6P#j+7Y!Ob_OiTI$KzDUS1CebmbKe6~*5Nm7kEyQGx zeB6}wX;L5fG-RF3@n{z_A6E@pvsmLz_}RQKn1{U%>@(C<2A|B8Eql!_!r<2-BQuY* z2?f4&h?4x2f|vxN{4@kNM{CvT%RrjyTDB)A;jtc)k*EM*V^Ou1%5y^IvM(LP>Tvgz1p^6D4&!P=>shd?XMEszS=EbUK$eWYZoore=O zhhHW)_QaAdMZ0aKACITRa;4wI5<6)_%XNSmLTI)`}8V+fb_prle`)$pm(R^$C$8b_WB#oc~ zC?Sp_oDIT%gG-}${5)SZK@FwG6E%7XL64hNaabrR*@3~hME`G&u`tRodR;*r>-%sj z2ww(7RRl=b{6L2w+j4X-X3&0=p9R{=v)D&qv0nq03iy9-?}0M z;iKq_KU>uNC34hS%i}F?N!7;pBiM9=2}B-0MRDzE^~!U za;948ICnm#@;u|da{eJMyces!Q_-6h#Ha+UxCLn?($%!NC1s_*FD;HD7Q{s!mP$*2 z5$K}9OrwM(AW3&nC5`G@6rwmmzsJnlHW8I%SMEi%rE`?mki*SPcdoNsM`!uo&BRNW z$=F)ecIz?JMi3;Ob_A%8h(sEcj&%f8{Bo3iUoWPsRj1cZrUdZb;OxEh)A&1xv75#8 z`O$3<9ihbkcNB)w z2LdP}_e9ga*6WiMXDMAKojUyn$6*V}=<)p4LSMCviG8Sv#dgpVLNkx!38;R9w~>a; zz3NWoGjEix($l;CrKkUgrNV2P=|a8iL%TxtZd0sPY2~+#_k|qP$L_f~ej(n_gN|eQ zr1;kTe0wQqp*neM0)G#r+X2Ab{O2Q$d1q8asE(o>fo22>+`i2LK5VbifQY9_-mzFW&EyiH5xV~-WZ`Bk6=29S$SHQQ~BJfC9<_c1$@(!L0(-n zYmVlf#Z4h;5s;1rX{8l!fbs%bAG>x=MKr%#znOXb@ zhJz^{!ck#~Okwh0L=@X7bCZ(v&YGj#Z>q+1l{vfD!tRu3?P(Zj2_uZ_e|(+xNdc z(oc<-r*R&cjp8ww<)}ug1mxmR=KspjGk1Ta52lYzl(eGocl{9`nCwr0gU956-raxlYZ44)*Tml0Ow!WFKY9xQPs6j1%`6pl(c+0#0g&|)NinP> zo;T5fXd@n~Bn|y#3NUaS%hm<*7N-GTJnmTozshv)5SzF_vO8|ENJe_GHi3*wJzSGZ zek$>p{C3{%{-k2a3DkWy4F5{nzNoA{)r6NdDdVfSO!oHFqH3?5-1@0YX_1h!?9;AE z2)+N*)lB)R$WwV1xL@gH?szn9cC(!CEf28Z&R{*braFqQ|H(-GP$fK`?*22X1k-<` z3mx3aI=(p=06-$m{}7n}+l4OUComVo7~Q_E<#>gyRtxhT6=YSF02kU^gD7ih9cc%V zMqh8-WVuikNh}Ah2oO`zB1JwoGbb;)tqhcOU*a#O-@pH6$i^j)Q}_jIPA;LhYPx;T zW17qVJhjig-IY8;6c?CMjoHD|2Qvo@a8?mN{}9Dv=j&mmfCbP}ctQz^$(00tl*eml zc~F^oR2Qv8kSp53TQ#;=wVyT^A67j*Q1u%glWg%`Gl{LLYHw9IBssi@<}km+w1Hw^ zz6oQTDnpL-W9t4T6Rj!#iXz73gdDVf8hJ>flofT0Z4q3vj9U-^nux!Qw=$iL)nNfg ztyCf6!rE~yATH@)qs>?@U2?LvCsSHWKzbZS_{Y>jD7}CvIwB<9x9s>ssA!7UacGDQ zcyM~w3c~}bBBsC;0Ys)T895WeaP>1!JsH+d`X{9B@W>u!!-aa zy)w*XBo4MQW#06-O46=I%%dz(wML0C_x|h{kWw5abOoH~GM>=;i_7~Wv64=m#cNQx{3?wyzA|!yRB9yw8vE?*vpcD z3YCX_d~NSLHB$!U{1!z=VcSvh8PZyP4hjPVxH5pE>ZY*LB`Tv(IV=s?lzS)mX=wHz66S)9lvsHhW3o$UdYpbFdCuIiJ~|t zynBM~tf)TEB&gT4MPdu%LoL;e3N_tFD_l@1$BRf>kx=2#I#_kCh8hM%0rYNEruO?- zIJhezQx-kw$q5p882H_JB_$W_`;A~E_6exx87yu2Q!swt2eqt zRA#HbaS27Iwy{a%(-IYlx}#=EBFm`*cKSuSzv%(ddE^>TX$f|+jbYhjlZ|@dTB$Q)i09! zvD>w+1MJ2FQ+?$_ee4zM2giT>)uGJ)0qQ0_>DIl`?b0~flxaXG)#dJg3|ddW<$c=& zaC^ixlzHjzmZ-^_?|oJKPooX;^)-1(58##*s4WV>mo@Z^?Jl}4HnO)!3qJB+ADwNz z9>9%mVWrP1kQ22JfQ}8Q-UIAvTdR2?h&{yZQe(2P027}b9eeb}t zJze3E$yddlhPsLEb-}VBiD?UBAet)swIg8=4-Nc8JD9`)#hUhUDPWi(0Q^4ueD2zj z;sIHv<#u#ypSm~ARz;71)e%+KDEE5Pw&azoa7{>Gl*$XtfQ;fY5->?vujv0#!tB4% zeX0bTxNqU7RGz)=e^{6Q?LL*QtGqt)BbA*gUA>iEON2Dje;8Rj#Q=&bg}fE;(5qqk zIl3-wI3R`u>XuR>Pb51a;q^~xasex0k>$$5WRDXvaTpdqEhhC1Wv0diM&oEos2k9v zyIIq#HahK%^;t8`HRXSG>Z$VQTxyaE$>9SBZ*vq_x);kY`oSxB`&eHDIKgSO6riI_ z%`QE(gD!DBpAPqWDPcA=0j1GfcCZ!|DKod|Vq)Pm-7#Be)`LYwRLrC{7Z{|Vu46I$ zIqeT9-=H~NFt$dp&tlL}lk%wO_C6$8SC{#h{giZwj|%aTBo<@Du##T4(Shk?h0S|( zTE!8o#Z(fN+Swj?a{fn>+E3;0VMcjHQ_)OxW^%dI^g~Zh+GKj3ibUxzs1qqo*;1vz zOZv5?uGY6Kb&QKOuQvhI$~|=$w&3##Un2=9QGgZYtq> z(MB2l=--HcN|kv+jfRT*gt&r92N1(sN?^+G*~S)XK?TK>pbpTvjMr{_m{AuRMpX-8 z%m}lYPIu=FrRV6A+b2^lSGFs~`CDMBRWPW{GoDAXdKe4Rf62|wQ^p_%8Ek9~=l{4* zeV>DQU;AGA7NA91Y}s6!T&t^v(0B?ee_oO;5mBHXogUski67>H2<$abXue+iv_FSZ~a~w$-6K4RKciUi-@VeEX+l-r0C82cHcJ z+Nl#;%z)4oXkl3l#v?#kVD6qdBwg;%dZBmu$B=stwwoRG`ln1ig00$>Y7YA3(xBGh zTID%~W-IZ6)p-k#?Ff*IL`5L;u12bt^c}DH%F;$(&;Q9JOGSOq@!cb>8H zB=_x+UjG*Lh8cPnw9fdSwGoYS?;o8kc{@+fL@AYfZ?YGi?K{>#bXp3}-jTXm7Oj<* zHC)@;8Qc#x<)+T_e7Qi+?S;le{IYL)Q=oI{TB1+?Y&}=2RQ&s|n2Wmz-Fg3R1;t1y zJ=xN%++O?hRsl!HB~2|GeaGUJ=fJJqS&t{t<5ulyt!$qI{KnT~5!nvWXksK*k*qQM z`TB|woDqqlhSCnPu0DfBcHQ;c3N7if5<;H*l3-~PN2rYH1BXK7)P`?}YKtE2B@!@I zXq+R?dFiDf^yk{)@5Bn@{Mdq&m&9-^2Zgf@>3z1voo8)n0@EnJHC1IqA+ZC&% zsE9)1sL~lA`N&azAgK6LRARk^HoCkc#sFMwSi<-%%c4PE&?f;Q+>Ihv)ObtmJ^reX zyxDGMM$5{hMVVc)w*0A#L@C1T1m0PIV5Cn$jXRsq;DmI!+aXhgUszAu(ocUDqm&f6 zT|8s^eC2=GZQS&rNq;G^&3xVHo*^I@7G7zf5yI!KW4CPJHI@?_ld zc?I@U_nT%4-J5}31Ebva5bLVuRbKk z)Zwp;6Sti9uH=NUZ&46fU@R$+h$HxWX)lQ!d?==Rt0H4Y7R-vF(%dw8nHXm;61t?n zWE>$eW1RA7fXfx`_UHnx>h{2I)SlTqs@vhQv|3)BG1=wv+vD*AR~L&Oze?R-Zr*qU zJl{OxKjnuoTtM6+(K|T%>EcR3mH08SM~*%=^@5YD#ZY(PesCr z03(DUbWxsyC{rMk%@WYwxVN!sk0sq?X9~*k=xXCV`BxKU`mEsI%-pr})nriDk|R_5 zYHj(d<$dsX<(i#O&vr*QVh=L}uL4P5nBI!{?5p5iHqAA7|c0X;%&I5MCy07Eioj@CJ>^6nB@7>=Vt~t%n(HZai+&flQ ztoq6>&Q-2+4$`)P06>o2Z1x(q_+ zT>Ddp;+7axwNWItWMS4Y=$t~=KmblokNQy;P#`eUr26)`WbaOt?@9G-h6nw007c|t z`x2vuL~0Ro5EVj-3w?2bdcn z0(jspc`$lN1m}SrV-ju-hj5R;jYr$8PkRq@^5l3b9kT{V*`sgD8qaJTKH$_qds*(RQ3P{bA1l%JJM*Y)^ z`CrD4kz{uEKAqQATMqck{0_PNKRB?%o-*#&4N00{dg&~j z9!}ysUiyaekl`!VeYlZ@4x=M^>+l$5NFP~obs{}qSU4<@c+rDfn|wRf4(h3!9&T0z zFz!|LaH+HEeLORgmlsP+dvV)aJtw3=2i@X^@xOdyfV4ki($AhN*$|?n3ZTSL-DoBr z=APPk7JcMguHa9eXllxn!pOIuHO*s)Mg9!g6hn(`Vg1pamXR?c9|4~Tz7gZx(II63 zb0-et%n|QCm_i#k59}&NhP!|W7?bq+K)9p?Tzj_V0U;=W0#V05+~^m zu3-22%nYxtHItI1uKjC*?(Zw6fWMJ-VY5o~Z$*-MVnq7gLPI1>NFCQ2=Mj=9$*&>{ zV1p8out6(nq|nYr5C*c-&cAX*iAJ>tbg_Dv*=;H9DcxN5-W<$#e-A6?V9G%nE|D0) z>J7s{XH z)+G`hAxk6R!Vjv4G)$ye4T2YmN8*HY^i~<68zJ*%Uy(FI7FBNotu%tos4&McE_Ui? zGMVba0?obw^d-X&fnijlQWVb&tu>)utS2(0vQnTCihre)=CI!fi$p7Ah674;J^&c zn>@zbq5Q9yzKKYZn|VoNc?D(lN5(PZN`R|pVj zR4kOPSFxNvw{XkExlw)de^9K{Cg3q*{*7FE6@)mBPP(af4BkV7N!o1&a}e!M|A#PK z*v_@HJ7VuuvRR>FI@TPTJvsQF8C7vSat;wP`pnc(4>Mjwgv8%XN-tv2M4D-@gEIqB za@*QvJ`BWDvWZA4TeNwl_>$uzkw=!azod&yZXI$T@%eAe{W|SzN4IF8Rgdj#(?`!N z?>4OS{-WCEvAo~=4sAB-`WqonJTzcxG5;ui0NxJt#x(#_ztA%VN07omT*w0R`4;Z?-qRiw;9frO>AMTpr!j{ck9W=!?ZT7 zQ}a>PlHZP+YuBSFe$_(x9zB-cpU;`4r2`V|?~$B0+T>YYc}sjdQ*nrZh? zT{RkQR`IS_DpK#Ym2H2jCfI7bTi^d^2l(G;Z>5z7S6%W`cfSu00Dukv0AOTmsNi60 z=Sc5l=4}1j#=zW)&ce>v^is`ILB$y3e^quS;83l706$}z?0m|eEtOQ(LQ(f?B2=nL zV~=c&EygyHvP@_rq|LQ-wQvjFRC19^(N0QIa!aM`k#eJp6X z^E?0do&W!xIp@45`r&Y8Q6hEuMRiT1QgspIE-g2abj4nsO9u{!YU_Xk=bwtN5W}sn=cEIkL!4n5ZAH!AYPV}>0=QZEOTf3Kh+8j2krDOSS+u7RV1K%QE zM_uo%SkeFGVfeF{hH*oU6Ve%?Rl!OL)?)uY%HRE9`pv&XYHLhG^MsWI&xbpNXboFIZS_+tk?8NPeR)9=ygP>uE=DXIfgC0CMx~^s-1Lr6+eglA^yA&al_r<&Vgb zZ`k%E@(2pq_DQB9O_4);^@vtdhYFugVdm{4mt_8^3UpC0p zlD6r62rGL&<7&CT9i759U@vbQlGPhmVvpW$vN0BK2JLm`7wi^NB}yyWt5ohCpfB_+UX0{R z{UTy{yT908R?wr{w9r}MP;Rk!vT5jlUbmh&=JH@#*T!b=JQ0s%2L|0*O|nAMq#)LK zZ{DEYoXoyRszbulEE#p@^KnA6vPuP%wKPphtRS;}qT)eRQ>oRibv30#k&<~dN+EUE$pNSReIJi@79I?1sV|c6nZFC1qqX2rmR#Mq+uc$6 z9ODt+M`L&2N`|?$*L5rs6P;svT~A9)C{8Lq$Vpy$`d(6-S!@ogQA|oASCVEU_*iK~ ztx9y!T(K%)d+84u3E~gy?x)T)5)P&}w=ZUSS^PCJb0m9kY@~1GNn`ipxi z1EglFq0~pG=TzjRM6QuIy!75~>u|%N==lDvt+PC8H(F#C3$3M}O23$%tMBLKECP_tw7mLo4Ms(0ybL zT}z6~{L{>Yj<03dw40sFD5#+`^49&T+(SEladG~DP4~hlhFiR6#qE*bo6uoQYc~0_ zKh@jukh2?1M&>J^~$X7Bqj<_NrbKe#Wk_vaTb0|`-7K`=T%};rsuA5&n?R8}G zsK7^qwrzsZx8;y(h3n%DO4JIO(kr+7$ID;zU%x_Di=!5{sm3-ncK9H67u*W}>p?Bs zCZwf!V>5HtbDg%uROw7XBV%e@^pM?>1rpyRd@2(qXD?%=>Rn4)HFnP3ZCr(E<#6Oh zUDfdJ(@Cpz1*?6lwi};m|2nEqeiM(VeRgl(X-YY6;$`Ze6|-_^{j^6?)pT{CV*)S9 zN;GP5bxykDaQ^**3q6g4!p*Zv{8Q3xFO>%-w08|(%`zzqHTCysX!N~b)S2V`(lETL zMO3c6qs3D%LnJYwZl26>+kz&WrpCW}Ztt@w_dI#`{dV7g7xmxjZ>Frc)_wVI_Va6f zdFQethRQl!yIx)XCpXQtd9Y`DVCCS@Z{e@{n#=porhJJBdGqEpZRO~|bNjKov@E4% zhOD8?*1+qd(QPj!<#e`=43^YhAOFT3Rx$*f5y2*hIL|ewoD^H`n zaPyWX+Qzz9@<%saVvK&M6fO$U>O9wY-_mpD6Irpk${XhwJYXg{bdGz-YRIL$^y6?ce!1Cly>A|NSd@9NA<=5|BouK^hlALidZhtVoFtqX;0# zh&+PK1ke81*rbX7Z7~aEvKUO3t4%}@Bh*D_XMjHz@JW1WF9LqK6+plh^^+T$WCWgZ zome+Omvb!-wqc_5*LS-?!x!M!q$Zmo2%F?eMim*)zz_!B>;6`s95Dcz2TTJe^Fhsp zL9LpsQSL!Oc&*K%{(klsc;O;Y(4 z1H8T@a991&9Q?~B$$`@gCkWhq$8vCE;hbeDZ2@2h`C>r=U%md&;Z$8b7w;t+NoPUx zSP(cklwsoB=3%~!aKh$CMFMur28Uidm9fEC1Hv=$>MS2d0E7FJvoZpkU!ZBU95C_L^IswHMCE0f+27{QM0QmzJr7glCqxPP2hB9_A z5{r)O;NbW~d8a*N$%$@#P97kl4tx=vriVjDiE_@^z~YESa}98Ce4@P5K(J(5O{|g> z5cQdXjcC3h4jCoNIfRA95sQu(YxK7^9^iNx@@OeH9KFCCa&5B^F04x@$EKj!%?#3rsBey?3p-m z(Lo`;VCoq{XRuhlOz%)IAA=t2>v;GwvBG=O^?r8%^&{_6$NIDLUz&4`8020{pw z5OD>Q&3AVf0CU3B->^a_gCH752)Akx3pIdiY9^-@(5#BMQb`oa(!?m>;{%wIz+Ltr z8lrK8aH|uskZ3%FKt+hSBDGlz-)aRj_~0E_AMgm9||vCvo{gg^-qSB!?|8@4_KNjSI^EA-_OMB@nI zRtaLEe?fXe1sNqoTp6t9S$~iPLOYVVC-MA9Y;4j%1w`Wr;a3B+5j?S2aUWu!jQ&pr zxT&K0ZaNs&DqwfON4&|6OVl!)^-_7?NJj*AqAa9pJ+ z6F01+B?B?gO2nBPdn-wv(tKG6$5om#b;C;ist^OMM4Y>^w+7-V^{7EOuF{mr8&=BE zh8Soi;_QuG_?oAbtpnjWO56oou~TE>?A^ZvVxW{zOTS`q*acL1N<9V;j;r*O+1s58 zG0;lH*&DmU5>Lr_6@=p|{bcs;wt^UFCF1Ojz1W