From bfc6a4b275e39d215c1302c2d9e4c9435075b67b Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Thu, 5 Sep 2024 00:04:50 -0700 Subject: [PATCH 1/7] WIP --- examples/openlineage/README.md | 0 examples/openlineage/adapter.py | 298 +++++++ examples/openlineage/data.csv | 201 +++++ examples/openlineage/fake_data.py | 51 ++ examples/openlineage/graph.png | Bin 0 -> 99686 bytes examples/openlineage/ol.json | 10 + examples/openlineage/pipeline.json | 6 + examples/openlineage/pipeline.py | 108 +++ examples/openlineage/purchase_data.csv | 1001 ++++++++++++++++++++++++ examples/openlineage/purchase_data.db | Bin 0 -> 36864 bytes 10 files changed, 1675 insertions(+) create mode 100644 examples/openlineage/README.md create mode 100644 examples/openlineage/adapter.py create mode 100644 examples/openlineage/data.csv create mode 100644 examples/openlineage/fake_data.py create mode 100644 examples/openlineage/graph.png create mode 100644 examples/openlineage/ol.json create mode 100644 examples/openlineage/pipeline.json create mode 100644 examples/openlineage/pipeline.py create mode 100644 examples/openlineage/purchase_data.csv create mode 100644 examples/openlineage/purchase_data.db diff --git a/examples/openlineage/README.md b/examples/openlineage/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/examples/openlineage/adapter.py b/examples/openlineage/adapter.py new file mode 100644 index 000000000..5abe0dec5 --- /dev/null +++ b/examples/openlineage/adapter.py @@ -0,0 +1,298 @@ +import json +import traceback +from datetime import datetime, timezone +from typing import Any, Dict, List, Optional + +import attr +from openlineage.client import OpenLineageClient, event_v2, facet_v2 + +from hamilton import graph as h_graph +from hamilton import graph_types, node +from hamilton.lifecycle import base + + +@attr.s +class HamiltonFacet(facet_v2.RunFacet): + hamilton_run_id: str = attr.ib() + graph_version: str = attr.ib() + final_vars: List[str] = attr.ib() + inputs: List[str] = attr.ib() + overrides: List[str] = attr.ib() + + +def get_stack_trace(exception): + return "".join( + traceback.format_exception( + etype=type(exception), value=exception, tb=exception.__traceback__ + ) + ) + + +class OpenLineageAdapter( + base.BasePreGraphExecute, + base.BasePreNodeExecute, + base.BasePostNodeExecute, + base.BasePostGraphExecute, +): + """ + This adapter emits OpenLineage events. + + 1. We need to use materializer metadata to capture data inputs and outputs. + 2. The "job" emitted will be the graph. + + A Run will be emitted for each graph execution. + - pre_graph_execute will emit a START event. + - post_graph_execute will emit a COMPLETE event (or others https://openlineage.io/docs/spec/run-cycle#run-states) + - adding errorMessage facet if the graph execution failed. + - post_node_execute will emit a RUNNING event with updates on input/outputs. + + A Job Event will be emitted for graph execution: + - pre_graph_execute will: + - emit the sourceCode Facet for the entire DAG as the job. + - emit the sourceCodeLocation Facet for the entire DAG as the job. + - post_node_execute will: + - emit the SQLJob facet if data was loaded from a SQL source. + it should emit a job type facet indicating Hamilton + + A Dataset Event will be emitted for: + - post_node_execute will: + - emit dataset event with schema facet, dataSource facet, lifecyclestate change facet,version facet, + - input data sets when loading data - will have dataQualityMetrics facet, dataQualityAssertions facet (optional) + - output data sets will have outputStatistics facet + + + """ + + def __init__(self, client: OpenLineageClient, namespace: str, job_name: str): + """ + You pass in the OLClient. + + :param self: + :param client: + :param namespace: + :param job_name: + :return: + """ + # self.transport = transport + self.client = client + self.namespace = namespace + self.job_name = job_name + + def pre_graph_execute( + self, + run_id: str, + graph: h_graph.FunctionGraph, + final_vars: List[str], + inputs: Dict[str, Any], + overrides: Dict[str, Any], + ): + """ + emits a Run START event. + emits a Job Event with the sourceCode Facet for the entire DAG as the job. + + :param run_id: + :param graph: + :param final_vars: + :param inputs: + :param overrides: + :return: + """ + exportable_graph = graph_types.HamiltonGraph.from_graph(graph) + graph_version = exportable_graph.version + node_dict = [n.as_dict() for n in exportable_graph.nodes] + job = event_v2.Job( + namespace=self.namespace, + name=self.job_name, + facets={ + "sourceCode": facet_v2.source_code_job.SourceCodeJobFacet( + language="python", + sourceCode=json.dumps(node_dict), + ), + "jobType": facet_v2.job_type_job.JobTypeJobFacet( + processingType="BATCH", + integration="Hamilton", + jobType="DAG", + ), + }, + ) + run = event_v2.Run( + runId=run_id, + facets={ + "hamilton": HamiltonFacet( + hamilton_run_id=run_id, + graph_version=graph_version, + final_vars=final_vars, + inputs=list(inputs.keys()) if inputs else [], + overrides=list(overrides.keys()) if overrides else [], + ) + }, + ) + run_event = event_v2.RunEvent( + eventType=event_v2.RunState.START, + eventTime=datetime.now(timezone.utc).isoformat(), + run=run, + job=job, + ) + self.client.emit(run_event) + + def pre_node_execute( + self, run_id: str, node_: node.Node, kwargs: Dict[str, Any], task_id: Optional[str] = None + ): + """ + + :param run_id: + :param node_: + :param kwargs: + :param task_id: + :return: + """ + pass + + def post_node_execute( + self, + run_id: str, + node_: node.Node, + kwargs: Dict[str, Any], + success: bool, + error: Optional[Exception], + result: Optional[Any], + task_id: Optional[str] = None, + ): + """ + Run Event: + - post_node_execute will emit a RUNNING event with updates on input/outputs. + + A Job Event will be emitted for graph execution: + - post_node_execute will: + - emit the SQLJob facet if data was loaded from a SQL source. + it should emit a job type facet indicating Hamilton + + A Dataset Event will be emitted for: + - post_node_execute will: + - emit dataset event with schema facet, dataSource facet, lifecyclestate change facet,version facet, + - input data sets when loading data - will have dataQualityMetrics facet, dataQualityAssertions facet (optional) + - output data sets will have outputStatistics facet + + :param run_id: + :param node_: + :param kwargs: + :param success: + :param error: + :param result: + :param task_id: + :return: + """ + if not success: + return + metadata = {} + saved_or_loaded = "" + if node_.tags.get("hamilton.data_saver") is True and isinstance(result, dict): + metadata = result + saved_or_loaded = "saved" + elif ( + node_.tags.get("hamilton.data_loader") is True + and node_.tags.get("hamilton.data_loader.has_metadata") is True + and isinstance(result, tuple) + and len(result) == 2 + and isinstance(result[1], dict) + ): + metadata = result[1] + saved_or_loaded = "loaded" + if not metadata: + return + + """ + TODO: create input dataset if appropriate + create output dataset if appropriate + Do the correct thing based on whether it was SQL or not... + """ + print(metadata) + inputs = [] + outputs = [] + if saved_or_loaded == "loaded": + if "file_metadata" in metadata: + name = node_.name + elif "sql_metadata" in metadata: + name = metadata["sql_metadata"]["table_name"] + else: + name = "--UNKNOWN--" + inputs = [event_v2.InputDataset(self.namespace, name)] + else: + if "file_metadata" in metadata: + name = metadata["file_metadata"]["path"] + elif "sql_metadata" in metadata: + name = metadata["sql_metadata"]["table_name"] + else: + name = "--UNKNOWN--" + outputs = [event_v2.OutputDataset(self.namespace, name)] + + run = event_v2.Run( + runId=run_id, + ) + job = event_v2.Job(namespace=self.namespace, name=self.job_name, facets={}) + run_event = event_v2.RunEvent( + eventType=event_v2.RunState.RUNNING, + eventTime=datetime.now(timezone.utc).isoformat(), + run=run, + job=job, + inputs=inputs, + outputs=outputs, + ) + self.client.emit(run_event) + + def post_graph_execute( + self, + run_id: str, + graph: h_graph.FunctionGraph, + success: bool, + error: Optional[Exception], + results: Optional[Dict[str, Any]], + ): + """ + + :param run_id: + :param graph: + :param success: + :param error: + :param results: + :return: + """ + job = event_v2.Job( + namespace=self.namespace, + name=self.job_name, + ) + facets = {} + run_event_type = event_v2.RunState.COMPLETE + if error: + run_event_type = event_v2.RunState.FAIL + error_message = str(error) + facets = { + "errorMessage": facet_v2.error_message_run.ErrorMessageRunFacet( + message=error_message, + stackTrace=get_stack_trace(error), + programmingLanguage="python", + ) + } + run = event_v2.Run(runId=run_id, facets=facets) + + run_event = event_v2.RunEvent( + eventType=run_event_type, + eventTime=datetime.now(timezone.utc).isoformat(), + run=run, + job=job, + ) + self.client.emit(run_event) + + +# if __name__ == "__main__": +# from openlineage.client import OpenLineageClient +# from openlineage.client.transport.file import FileConfig, FileTransport +# +# file_config = FileConfig( +# log_file_path="/path/to/your/file", +# append=False, +# ) +# +# client = OpenLineageClient(transport=FileTransport(file_config)) +# namespace = "my_namespace" +# db_datset = Dataset(namespace, name, facets) diff --git a/examples/openlineage/data.csv b/examples/openlineage/data.csv new file mode 100644 index 000000000..62fac067e --- /dev/null +++ b/examples/openlineage/data.csv @@ -0,0 +1,201 @@ +id,name,email,address,phone_number,date_of_birth +1,Janet Garcia,ssmith@example.org,"4029 Jose Ferry Suite 300 +South Kristi, MH 40576",+1-288-900-0512x78889,1943-03-12 +2,Jay White,lkemp@example.com,"64555 Dennis Key Suite 552 +East Josephberg, OH 98796",+1-662-554-4225x070,1934-10-09 +3,Erik Brady,michael13@example.net,"00298 Patton Inlet Suite 564 +Lake Scott, PA 59977",8696803708,1990-02-07 +4,Melissa Riley,david38@example.com,"4113 Lisa Ville +New Geraldland, CT 59935",+1-853-644-8994x09790,2018-07-30 +5,Todd Holt,xsullivan@example.net,"48742 Williams Lakes Suite 089 +Juliefurt, TN 67462",(954)298-6387,1964-03-10 +6,Amy Ellis,ccarr@example.net,"1345 Jennifer Rest +Sanchezberg, AZ 29821",791-667-1022x974,1942-08-26 +7,Joseph Frey,marquezmonica@example.org,"32745 Sean Walk Suite 342 +Villarrealchester, SD 28498",(587)681-3404x1983,1910-02-24 +8,Amy Walker,lawrence99@example.net,"41956 Bowman Greens +Jenniferbury, DE 81997",001-889-687-1105x2891,1945-12-27 +9,Ruth Terry,wolferebecca@example.net,"1957 Heidi Square +Gonzalezchester, KY 15612",4148930353,2022-05-12 +10,Jaime Williams,adrianaberry@example.org,"133 Gary Way Apt. 170 +West Rebeccaborough, ME 85226",(216)264-8990x65483,2022-01-12 +11,Brandon Anderson,jose19@example.org,"USNV Torres +FPO AE 80322",228-744-9852x86443,1941-12-19 +12,Jennifer Clark,gpaul@example.net,"1191 Samantha Fall +Sanderstown, AK 01154",(671)318-2174x4573,1948-11-07 +13,Alexis Mcconnell,tammiesnyder@example.org,"3666 Houston Road +Griffinmouth, NC 43228",001-392-616-0473,1908-12-28 +14,Jessica Odom,louiswilliams@example.org,"8053 Frazier Drives Suite 902 +West Jennifer, WA 47476",555.271.7305,1953-06-16 +15,Terry Chung,hayesamanda@example.org,"211 Christopher Oval Apt. 367 +Davilafort, MP 50991",5792549149,1940-10-18 +16,Matthew Jordan,washingtonandrew@example.com,"6549 David Via +North Thomastown, IL 19729",001-623-386-0035,1942-11-28 +17,Heather Vasquez,martinsarah@example.net,"15889 Alvarez Island Suite 018 +Lake Jennifer, NC 53538",423.517.0330x03756,1915-05-18 +18,Linda Snyder,solomonjennifer@example.org,"998 Oconnor Lane +South Lindsay, AR 42644",778.825.2995x220,1936-01-02 +19,Sandy Brown,ryan67@example.com,"469 Kayla Glen +South Ryan, UT 43171",+1-408-632-9163,1957-12-31 +20,Katherine Mcintosh,bryangarrison@example.com,"32900 Smith Shoals Suite 744 +Gonzalezfurt, AR 35830",3362328948,1939-06-17 +21,Laura Griffin,cwells@example.com,"7773 Velazquez Estates Apt. 959 +East Robert, SC 42146",001-564-589-3712x54867,1910-12-15 +22,Justin Mcdonald,kayla84@example.org,"86158 Wilson Ports +North Amy, OR 65115",703.839.9325x17495,1910-04-15 +23,Kayla Campbell,nealadam@example.org,"320 Bell Parkways Suite 712 +South Micheal, AS 31101",(339)317-9523x821,1980-03-23 +24,Jason Stephens,allenjohnathan@example.net,"36869 Danielle Port Apt. 712 +Jamesberg, ND 90121",809-268-5402,1997-11-26 +25,Nicole Bailey,ewilliams@example.com,"224 Susan Harbor +South Kathleen, SD 57734",001-936-815-1918x4751,1963-02-17 +26,Valerie Marquez,mhunter@example.net,"00028 Gregory Tunnel Suite 056 +New Jonathan, HI 93036",+1-299-247-3040x0931,1959-03-16 +27,Rick Williams,kevinscott@example.com,"54907 Christopher Harbor +Port Angela, MO 14988",+1-381-255-0437x31048,1960-08-25 +28,Jacqueline Long,santiagojay@example.org,"51603 Alison Cliff +Smithmouth, CO 37407",559-407-8380,1941-12-22 +29,Barbara Barron,lawrence40@example.com,"3952 Daniels Field Apt. 764 +Hendersonville, KY 54656",280.648.8277x523,1983-10-18 +30,Amber Hines,michaelcole@example.com,"940 Jackson Locks Apt. 164 +Allenhaven, MT 74945",285-497-8687,1952-03-01 +31,Alice Collins,glarson@example.com,"9694 Katelyn Crest Apt. 843 +West Chloe, NE 79813",(631)466-9476,1929-11-03 +32,Erin Lawrence,melissaflores@example.org,"86666 Long Greens Suite 850 +Johnhaven, CA 20338",001-538-302-9217x20110,1939-07-10 +33,Barbara Marshall,pray@example.org,"395 Beasley Loop +South Patrick, MH 88741",648-963-5897x33902,1994-03-01 +34,Christopher Salazar,jacksonroy@example.org,"7212 Theodore Centers Suite 031 +Brittanymouth, OH 51760",(996)339-1568,1918-12-29 +35,Leroy Osborne,pshaw@example.com,"18655 Shelby Square Suite 445 +Mcguireburgh, IN 91418",741-219-4528x761,1986-09-04 +36,Shannon Medina,linda04@example.com,"PSC 5253, Box 2196 +APO AE 64800",317-804-4121,2000-11-17 +37,Alejandro Lane,brussell@example.net,"9483 Kevin Curve Apt. 195 +Torresmouth, AS 30284",961-234-6247x052,1932-06-01 +38,Clayton Hunt,samantha79@example.com,"Unit 5001 Box 7065 +DPO AP 24233",688.871.7400,2017-01-30 +39,Elizabeth Beltran,robleseric@example.org,"91222 Linda Glen +Lake Billy, VI 38356",(837)286-5718x43909,1964-02-16 +40,Troy Howell,troy83@example.net,"6377 Gutierrez Station Apt. 354 +Port Alexa, IL 96237",+1-268-302-9205x8468,1929-12-14 +41,Derek Lee,mariafox@example.org,"4555 Katherine Underpass +North Mariaview, DE 92959",4476109080,1910-07-31 +42,Lawrence Johnson,kingmadeline@example.net,"Unit 2651 Box 6754 +DPO AA 16161",477.573.2994x7443,1983-08-24 +43,Jennifer Flynn,shari74@example.org,"3707 Clements Branch +New Maria, ME 70362",+1-929-348-3938x91388,2012-06-25 +44,Laura Welch,alexandrasmith@example.org,"97547 Zachary Hills +Tylerfort, OR 91719",+1-445-917-3034x15476,1936-03-15 +45,Jessica Sanford,karljordan@example.com,"6916 Shields Drives Suite 684 +Herringmouth, NV 79066",001-405-607-8627x46350,1990-11-14 +46,Vickie Matthews,james08@example.com,"0480 Evans Springs Suite 140 +North Pamview, WI 65451",488-733-6798x42433,1986-12-23 +47,Kevin Garrett,melissabradley@example.net,"9220 Beth Track +Sierraburgh, GA 33193",284.958.6775x17624,1969-10-16 +48,Katherine Thomas MD,rmacdonald@example.com,"6608 Vincent Circles Apt. 103 +Port Barbara, RI 34326",738-760-4858,2023-03-19 +49,Gail Freeman,patriciabates@example.net,"12116 Smith Mountain Suite 774 +Hernandezview, HI 82529",668-232-2075x47811,1964-08-08 +50,Jessica Davenport,tprice@example.org,"6274 Brian Mall Suite 818 +Hensonmouth, WV 06237",001-763-869-4892,2024-05-10 +51,Robert Leonard,marcofrancis@example.org,"294 Winters River +Anthonytown, NV 73764",+1-567-240-0624,1964-04-19 +52,Jennifer Brown,schmittjudy@example.net,"3720 Nicholas Mission Suite 851 +Lake Melaniefort, OK 30214",001-835-977-3852x07954,1919-04-21 +53,Edward Thomas,steven29@example.com,"Unit 4594 Box 1296 +DPO AP 84060",483.458.4693x57935,1944-02-03 +54,Kelsey Flores,mwilliams@example.net,"5656 Brandy Locks Suite 533 +South Susanport, MS 80770",001-736-802-9647x155,1946-05-12 +55,Chelsea Cooper,martinezmichael@example.org,"285 Melanie Mountain Suite 891 +Jonesview, ID 57575",001-996-371-2505x7895,2004-11-21 +56,Troy Sanders,chungstephanie@example.com,"286 Johnson Island +Joneschester, VT 80357",001-844-712-0678x86682,1959-10-01 +57,Thomas Watkins,alexander56@example.net,"315 Michael Stravenue Apt. 385 +Josephfurt, ID 69125",+1-931-862-3454,1980-07-23 +58,Marcus Smith,richardvalerie@example.com,"683 Donovan Port Suite 654 +Port Amanda, ME 35634",(679)693-9921,1948-07-16 +59,Sheila Richards,mflynn@example.com,"055 Valencia Mews +North Juliehaven, PA 37227",522.566.5004x7148,1984-06-01 +60,Ellen Gay,douglasjohnson@example.net,"8631 Lee Dale Apt. 802 +East Nicholas, CT 49134",479-445-0566,1996-02-06 +61,Zachary Swanson,leonallen@example.net,"2323 Ryan Plain +Donaldsonfort, KS 89155",+1-414-404-8055,1976-08-03 +62,Carol Carlson,christine83@example.org,"712 Mills Mission +Lake Jonathanmouth, WA 11783",+1-234-543-7774x069,1928-02-18 +63,Melissa Nguyen,mooreshane@example.org,"2226 Tyler Parkway Suite 612 +Meadowschester, OH 66452",(700)949-3450,1957-10-05 +64,Michelle Higgins,susan60@example.com,"3357 Gomez Walks +Lake Davidside, WV 23491",785.814.9808,2010-11-15 +65,Rebecca Pearson,alvarezcarlos@example.net,"6196 Geoffrey Crescent +North Johnhaven, TN 79391",+1-936-830-9792x1671,1942-10-16 +66,John Johnson,pedwards@example.net,"9467 Jones Brooks Apt. 003 +West Scottside, UT 06859",547.392.4356x021,1937-12-29 +67,Derek Krause,brandonmeyer@example.org,"8860 Emma Street +Micheleton, GA 14221",(720)576-2210x26858,1916-04-19 +68,Kyle Scott,brian84@example.com,"07865 Amy Brooks +Lake Kevin, KY 05743",530.599.7946x37274,2001-09-23 +69,David Manning,taylormichael@example.net,"9821 Turner Grove +South Alice, AZ 53101",001-804-324-6062x352,2024-08-21 +70,Barbara Holmes,pittsbrian@example.net,"20984 Joseph Branch Apt. 569 +West Markview, WY 47710",+1-616-596-5874x2870,1980-09-18 +71,Ebony Coleman,lawsondanielle@example.com,"312 Abbott Mountains +Hodgesburgh, MN 33503",367-951-4487x38940,2021-07-03 +72,Cynthia Young,deleoncharles@example.com,"3514 Jacob Bridge Suite 736 +Lake Jamesside, KY 10050",535.662.5244x873,1927-10-04 +73,Mark Martin,hayscollin@example.com,"698 Allen Fork Suite 364 +Hamptonhaven, GA 79936",919-346-4360x76443,1970-06-22 +74,Benjamin Harrison,deborah28@example.net,"5119 Benjamin Forks Apt. 025 +Wardland, IN 16201",001-535-832-3376x3987,1928-11-11 +75,Joshua Wright,reynoldssteven@example.net,"USNV Bates +FPO AA 87237",001-684-218-9565x409,1963-11-26 +76,Heather Friedman,littlerussell@example.org,"Unit 1671 Box 9168 +DPO AA 76526",6183823196,1912-10-17 +77,Jessica Morris,richardconley@example.com,"USCGC Olson +FPO AE 22594",001-661-829-0045x01121,1931-03-22 +78,Aaron White,sherry90@example.net,"48964 Nicole Square +West Joyce, SD 81713",(316)492-2152x3535,2010-08-17 +79,Patricia Underwood,keith35@example.org,"97666 Gomez Ramp +New Kelly, AR 05858",+1-623-451-4892x6217,1990-02-11 +80,Larry Herrera,andersonkeith@example.org,"2230 Sonya Expressway Suite 786 +Staffordchester, OH 31076",621-845-2260x281,2011-10-09 +81,Jennifer Bennett,delacruzmichael@example.com,"43270 Ashley Forges +South Tracey, CA 94416",(578)875-7289,1970-03-22 +82,Laurie Randolph,nhaley@example.org,"563 Novak Forest +Stevenfurt, MH 36185",+1-508-376-7174x8696,1950-05-15 +83,William Foster,srodriguez@example.org,"742 Johnson Green +West David, MS 26881",001-771-477-6195x49391,1956-05-14 +84,Sue Allen,cabrerajustin@example.net,"8901 Jason Skyway Apt. 350 +Lopezville, TN 70257",527-506-7108,1919-04-25 +85,Charles Smith,vsmith@example.net,"488 Little Street Suite 355 +West Andrew, KY 21281",410-251-9899x5364,1951-06-02 +86,Alice Johnson,jameslee@example.com,"PSC 1676, Box 0530 +APO AE 74230",+1-308-863-1123,2017-06-05 +87,Henry Cohen,michael34@example.com,"6457 Jason Ville +Youngview, SD 86938",755.941.3036x2047,1961-03-18 +88,David Gamble,jeremy03@example.org,"USS Francis +FPO AA 16709",431-951-6042,1991-03-29 +89,Edward Clarke,johnsontaylor@example.org,"41069 Brenda Ports +North Cherylburgh, MI 13881",001-528-917-0283x27035,2002-12-15 +90,John Kent,jennifermonroe@example.com,"19777 Michael Common +Whitehaven, NC 87637",689.635.2818,1914-06-04 +91,Margaret Callahan,norriskelly@example.com,"2023 Ricky Plains Apt. 297 +Romeroborough, WY 28401",001-871-381-0577x6285,2015-07-14 +92,Amanda Morgan,chelseysharp@example.net,"952 Anthony Station Suite 855 +Tiffanyfurt, CA 41975",(345)977-8778x430,2013-10-29 +93,Holly Burton,tracyadams@example.com,"882 Anna Cove Apt. 778 +Ashleybury, OH 55885",+1-684-960-0990x5979,1947-07-13 +94,Amanda Robinson,kennedylisa@example.net,"19589 Green Islands Suite 864 +Brendahaven, CA 12378",313-224-0264x44718,1974-07-04 +95,Tracy Thompson,nortiz@example.net,"22638 Mary Passage +Meredithberg, MH 58223",(665)449-9719x724,1968-11-08 +96,Kevin Hernandez Jr.,dianawilkinson@example.net,"187 Kevin Trafficway Apt. 248 +Pereztown, NY 42119",+1-306-914-4658x822,2020-06-23 +97,Shannon Moreno,xhenry@example.org,"Unit 4537 Box 3464 +DPO AA 97501",474-812-4305x344,1990-09-13 +98,Juan Rodriguez,david06@example.com,"8872 Melissa Course Suite 593 +Port Peggy, PR 25450",+1-208-455-4138x7284,2012-06-20 +99,John Klein,amanda30@example.net,"PSC 9088, Box 5002 +APO AP 33766",001-818-902-1981,1993-12-06 +100,Gregory Lee,evanskimberly@example.org,"2246 Tucker Shores +Port Tracychester, MS 73839",(461)669-1109x517,1992-01-15 diff --git a/examples/openlineage/fake_data.py b/examples/openlineage/fake_data.py new file mode 100644 index 000000000..fe07a2017 --- /dev/null +++ b/examples/openlineage/fake_data.py @@ -0,0 +1,51 @@ +import pandas as pd +from faker import Faker + +# Initialize Faker +fake = Faker() + +# Define the columns +columns = ["id", "name", "email", "address", "phone_number", "date_of_birth"] + +# Generate fake data +data = { + "id": [i + 1 for i in range(100)], + "name": [fake.name() for _ in range(100)], + "email": [fake.email() for _ in range(100)], + "address": [fake.address() for _ in range(100)], + "phone_number": [fake.phone_number() for _ in range(100)], + "date_of_birth": [fake.date_of_birth() for _ in range(100)], +} + +# Create a DataFrame +df = pd.DataFrame(data, columns=columns) + +# Save to CSV +df.to_csv("data.csv", index=False) + +# now create some fake purchase data +columns = ["id", "user_id", "product_id", "price", "purchase_date"] + +# Generate fake data +fake_price_data = {i + 1: fake.random_int(min=1, max=1000) for i in range(20)} + +product_ids = [fake.random_int(min=1, max=20) for _ in range(1000)] + +data = { + "id": [i + 1 for i in range(1000)], + "user_id": [fake.random_int(min=1, max=100) for _ in range(1000)], + "product_id": product_ids, + "price": [fake_price_data[product_id] for product_id in product_ids], + "purchase_date": [fake.date_this_year() for _ in range(1000)], +} + +# Create a DataFrame +df = pd.DataFrame(data, columns=columns) + +# Save to SQLLite DB +import sqlite3 + +conn = sqlite3.connect("purchase_data.db") +df.to_sql("purchase_data", conn, index=False) +df.to_csv("purchase_data.csv", index=False) +conn.close() diff --git a/examples/openlineage/graph.png b/examples/openlineage/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7c99ade4dc80e98938039c2a7f71d4cf42b42586 GIT binary patch literal 99686 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%0DXF7rY9EbjL|I?I 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 MUJK_5YJd8F0Gp3L3jhEB literal 0 HcmV?d00001 diff --git a/examples/openlineage/ol.json b/examples/openlineage/ol.json new file mode 100644 index 000000000..13faa42e8 --- /dev/null +++ b/examples/openlineage/ol.json @@ -0,0 +1,10 @@ +{"eventTime": "2024-09-04T19:03:08.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T00:12:00Z"}}, "runId": "0191be60-cf5e-70d8-8e5c-d6a926c0c805"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T19:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T00:12:00Z"}}, "runId": "0191be60-cf5e-70d8-8e5c-d6a926c0c805"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T20:03:10.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T01:12:00Z"}}, "runId": "0191be60-cf5e-74f7-a7c5-042949e56ef8"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T20:05:39.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T01:12:00Z"}}, "runId": "0191be60-cf5e-74f7-a7c5-042949e56ef8"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T21:03:10.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T02:12:00Z"}}, "runId": "0191be60-cf5f-7606-a46a-8ba92c696305"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T21:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T02:12:00Z"}}, "runId": "0191be60-cf5f-7606-a46a-8ba92c696305"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T22:03:05.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T03:12:00Z"}}, "runId": "0191be60-cf5f-7ab3-b022-981ad77a8a2c"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T22:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T03:12:00Z"}}, "runId": "0191be60-cf5f-7ab3-b022-981ad77a8a2c"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T23:03:11.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T04:12:00Z"}}, "runId": "0191be60-cf5f-7834-ad86-847437f2b04f"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-04T23:05:37.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T04:12:00Z"}}, "runId": "0191be60-cf5f-7834-ad86-847437f2b04f"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} diff --git a/examples/openlineage/pipeline.json b/examples/openlineage/pipeline.json new file mode 100644 index 000000000..6f3dad6bf --- /dev/null +++ b/examples/openlineage/pipeline.json @@ -0,0 +1,6 @@ +{"eventTime": "2024-09-05T07:00:38.468992+00:00", "eventType": "START", "inputs": [], "job": {"facets": {"jobType": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/2-0-3/JobTypeJobFacet.json#/$defs/JobTypeJobFacet", "integration": "Hamilton", "jobType": "DAG", "processingType": "BATCH"}, "sourceCode": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeJobFacet.json#/$defs/SourceCodeJobFacet", "language": "python", "sourceCode": "[{\"name\": \"db_dataset.loader\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": true, \"hamilton.data_loader.source\": \"db_dataset\", \"hamilton.data_loader.classname\": \"db_dataset()\", \"hamilton.data_loader.node\": \"loader\"}, \"output_type\": \"tuple\", \"required_dependencies\": [\"db_client\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"db_dataset\", \"tags\": {\"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": false, \"hamilton.data_loader.source\": \"db_dataset\", \"hamilton.data_loader.classname\": \"db_dataset()\", \"hamilton.data_loader.node\": \"db_dataset\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"db_dataset.loader\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"file_dataset.loader\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": true, \"hamilton.data_loader.source\": \"file_dataset\", \"hamilton.data_loader.classname\": \"file_dataset()\", \"hamilton.data_loader.node\": \"loader\"}, \"output_type\": \"tuple\", \"required_dependencies\": [\"file_ds_path\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"file_dataset\", \"tags\": {\"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": false, \"hamilton.data_loader.source\": \"file_dataset\", \"hamilton.data_loader.classname\": \"file_dataset()\", \"hamilton.data_loader.node\": \"file_dataset\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"file_dataset.loader\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"fit_model\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"ModelObject\", \"required_dependencies\": [\"joined_dataset\"], \"optional_dependencies\": [], \"source\": \"def fit_model(joined_dataset: pd.DataFrame) -> ModelObject:\\n # model = ...\\n return ModelObject()\\n\", \"documentation\": \"\", \"version\": \"bdde123068c590c85d72c44ad02e113fb3419efe974282346c15fad2bb4364dc\"}, {\"name\": \"joined_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"transformed_db_dataset\", \"transformed_file_dataset\"], \"optional_dependencies\": [], \"source\": \"def joined_dataset(transformed_file_dataset: pd.DataFrame, transformed_db_dataset: pd.DataFrame) -> pd.DataFrame:\\n return pd.concat([transformed_file_dataset, transformed_db_dataset], axis=1)\\n\", \"documentation\": \"\", \"version\": \"8d0bde3bcb31f4295da0edca891b74d445489f61a764cbae55965b7329cc0f5c\"}, {\"name\": \"saved_file\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_saver\": true, \"hamilton.data_saver.sink\": \"saved_file\", \"hamilton.data_saver.classname\": \"saved_file()\"}, \"output_type\": \"dict\", \"required_dependencies\": [\"file_path\", \"fit_model\"], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_file(fit_model: ModelObject, file_path: str) -> dict:\\n with open(file_path, \\\"wb\\\") as f:\\n pickle.dump(fit_model, f)\\n return utils.get_file_metadata(file_path)\\n\", \"documentation\": \"\", \"version\": \"2c9d53abd2e853734734aa9e086f8fc0d25d420c1dacab7221d054fd1db8bc31\"}, {\"name\": \"saved_to_db\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_saver\": true, \"hamilton.data_saver.sink\": \"saved_to_db\", \"hamilton.data_saver.classname\": \"saved_to_db()\"}, \"output_type\": \"dict\", \"required_dependencies\": [\"db_client\", \"joined_dataset\", \"joined_table_name\"], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict:\\n # joined_dataset.to_sql(joined_table_name, con=db_client, index=False)\\n return utils.get_sql_metadata(joined_table_name, joined_dataset)\\n\", \"documentation\": \"\", \"version\": \"c400aa21cd5095fdd4f0372a01cf65f2bde44e1785b754cd2e4a348c659fbb78\"}, {\"name\": \"transformed_db_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"db_dataset\"], \"optional_dependencies\": [], \"source\": \"def transformed_db_dataset(db_dataset: pd.DataFrame) -> pd.DataFrame:\\n return db_dataset\\n\", \"documentation\": \"\", \"version\": \"8ad08f1aa9bb5fcaab2aa413bbe61a906aa29a31a11b5e6f59c4920608631631\"}, {\"name\": \"transformed_file_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"file_dataset\"], \"optional_dependencies\": [], \"source\": \"def transformed_file_dataset(file_dataset: pd.DataFrame) -> pd.DataFrame:\\n return file_dataset\\n\", \"documentation\": \"\", \"version\": \"4e4b1e73f88e0bfd4e1bd80acdfcdde56e072a3bc1f04f392f9b49d70ca25d55\"}, {\"name\": \"db_client\", \"tags\": {}, \"output_type\": \"object\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"file_ds_path\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"file_path\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_file(fit_model: ModelObject, file_path: str) -> dict:\\n with open(file_path, \\\"wb\\\") as f:\\n pickle.dump(fit_model, f)\\n return utils.get_file_metadata(file_path)\\n\", \"documentation\": \"\", \"version\": \"2c9d53abd2e853734734aa9e086f8fc0d25d420c1dacab7221d054fd1db8bc31\"}, {\"name\": \"joined_table_name\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict:\\n # joined_dataset.to_sql(joined_table_name, con=db_client, index=False)\\n return utils.get_sql_metadata(joined_table_name, joined_dataset)\\n\", \"documentation\": \"\", \"version\": \"c400aa21cd5095fdd4f0372a01cf65f2bde44e1785b754cd2e4a348c659fbb78\"}]"}}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {"hamilton": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "final_vars": ["saved_file", "saved_to_db"], "graph_version": "a99f19f71a105eef8bf173584b7f920f55603604e92048630ff90cd614356316", "hamilton_run_id": "44e06d84-7946-460c-8795-04ca195f647d", "inputs": ["db_client", "file_ds_path", "file_path", "joined_table_name"], "overrides": []}}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-05T07:00:38.479558+00:00", "eventType": "RUNNING", "inputs": [{"facets": {}, "inputFacets": {}, "name": "file_dataset.loader", "namespace": "my_namespace"}], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-05T07:00:38.483375+00:00", "eventType": "RUNNING", "inputs": [{"facets": {}, "inputFacets": {}, "name": "purchase_data", "namespace": "my_namespace"}], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-05T07:00:38.486322+00:00", "eventType": "RUNNING", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [{"facets": {}, "name": "model.pkl", "namespace": "my_namespace", "outputFacets": {}}], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-05T07:00:38.486713+00:00", "eventType": "RUNNING", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [{"facets": {}, "name": "joined_data", "namespace": "my_namespace", "outputFacets": {}}], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} +{"eventTime": "2024-09-05T07:00:38.487033+00:00", "eventType": "COMPLETE", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} diff --git a/examples/openlineage/pipeline.py b/examples/openlineage/pipeline.py new file mode 100644 index 000000000..1cabe0bf4 --- /dev/null +++ b/examples/openlineage/pipeline.py @@ -0,0 +1,108 @@ +import pickle +from typing import Tuple + +import pandas as pd + +from hamilton.function_modifiers import dataloader, datasaver +from hamilton.io import utils + +""" +TODO: + - create a pipeline that will be used to show open lineage integration + - one function loads from file + - another loads from a database + - one save to a file + - another saves to a database + - there are transform functions in between +""" + + +@dataloader() +def file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]: + # TODO: metadata + df = pd.read_csv(file_ds_path) + return df, utils.get_file_metadata(file_ds_path) + + +@dataloader() +def db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]: + query = "SELECT * FROM purchase_data" + return pd.read_sql(query, con=db_client), { + "sql_metadata": {"query": query, "table_name": "purchase_data", "database": "sqlite"} + } + + +def transformed_file_dataset(file_dataset: pd.DataFrame) -> pd.DataFrame: + return file_dataset + + +def transformed_db_dataset(db_dataset: pd.DataFrame) -> pd.DataFrame: + return db_dataset + + +def joined_dataset( + transformed_file_dataset: pd.DataFrame, transformed_db_dataset: pd.DataFrame +) -> pd.DataFrame: + return pd.concat([transformed_file_dataset, transformed_db_dataset], axis=1) + + +class ModelObject: + def __init__(self): + pass + + def predict(self, data): + return data + 1 + + +def fit_model(joined_dataset: pd.DataFrame) -> ModelObject: + # model = ... + return ModelObject() + + +@datasaver() +def saved_file(fit_model: ModelObject, file_path: str) -> dict: + with open(file_path, "wb") as f: + pickle.dump(fit_model, f) + return utils.get_file_metadata(file_path) + + +@datasaver() +def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict: + # joined_dataset.to_sql(joined_table_name, con=db_client, index=False) + return utils.get_sql_metadata(joined_table_name, joined_dataset) + + +if __name__ == "__main__": + import sqlite3 + + from adapter import OpenLineageAdapter + from openlineage.client import OpenLineageClient + from openlineage.client.transport.file import FileConfig, FileTransport + + import __main__ as pipeline + from hamilton import driver + + file_config = FileConfig( + log_file_path="pipeline.json", + append=True, + ) + + client = OpenLineageClient(transport=FileTransport(file_config)) + + ola = OpenLineageAdapter(client, "my_namespace", "test_job") + + db_client = sqlite3.connect("purchase_data.db") + + dr = driver.Builder().with_modules(pipeline).with_adapters(ola).build() + dr.display_all_functions("graph.png") + result = dr.execute( + ["saved_file", "saved_to_db"], + inputs={ + "db_client": db_client, + "file_ds_path": "data.csv", + "file_path": "model.pkl", + "joined_table_name": "joined_data", + }, + ) + + db_client.close() diff --git a/examples/openlineage/purchase_data.csv b/examples/openlineage/purchase_data.csv new file mode 100644 index 000000000..17f5757c2 --- /dev/null +++ b/examples/openlineage/purchase_data.csv @@ -0,0 +1,1001 @@ +id,user_id,product_id,price,purchase_date +1,4,7,554,2024-05-10 +2,11,15,878,2024-02-18 +3,7,8,796,2024-02-08 +4,18,16,119,2024-05-14 +5,68,13,269,2024-04-08 +6,72,13,269,2024-04-13 +7,42,20,805,2024-06-20 +8,33,9,832,2024-01-16 +9,45,13,269,2024-04-22 +10,28,3,927,2024-05-11 +11,22,6,609,2024-05-27 +12,48,2,228,2024-07-19 +13,75,18,926,2024-02-24 +14,4,18,926,2024-03-08 +15,43,11,174,2024-08-29 +16,62,16,119,2024-08-26 +17,12,7,554,2024-03-05 +18,26,2,228,2024-05-31 +19,60,16,119,2024-02-20 +20,49,17,525,2024-03-04 +21,12,13,269,2024-07-31 +22,29,20,805,2024-01-31 +23,12,1,982,2024-04-18 +24,51,8,796,2024-08-03 +25,73,17,525,2024-03-27 +26,83,9,832,2024-07-01 +27,21,3,927,2024-02-14 +28,77,13,269,2024-02-10 +29,15,19,636,2024-02-02 +30,96,15,878,2024-04-23 +31,33,18,926,2024-01-28 +32,77,17,525,2024-08-04 +33,18,18,926,2024-04-13 +34,15,3,927,2024-06-24 +35,17,20,805,2024-05-30 +36,25,2,228,2024-06-01 +37,91,7,554,2024-08-11 +38,11,11,174,2024-07-19 +39,100,15,878,2024-08-30 +40,20,4,938,2024-08-23 +41,53,11,174,2024-03-27 +42,83,14,994,2024-05-18 +43,71,11,174,2024-08-18 +44,8,20,805,2024-06-01 +45,16,7,554,2024-07-30 +46,40,14,994,2024-08-08 +47,59,6,609,2024-06-16 +48,26,16,119,2024-08-12 +49,96,16,119,2024-07-10 +50,43,9,832,2024-06-05 +51,100,19,636,2024-08-14 +52,98,19,636,2024-01-07 +53,30,18,926,2024-04-13 +54,21,4,938,2024-03-10 +55,21,4,938,2024-07-12 +56,38,7,554,2024-02-01 +57,64,7,554,2024-02-06 +58,9,10,98,2024-04-14 +59,24,16,119,2024-07-07 +60,54,18,926,2024-01-17 +61,34,10,98,2024-01-11 +62,86,18,926,2024-06-25 +63,89,7,554,2024-04-07 +64,93,3,927,2024-07-12 +65,57,10,98,2024-02-22 +66,60,17,525,2024-02-09 +67,28,19,636,2024-05-14 +68,98,11,174,2024-02-28 +69,15,6,609,2024-08-27 +70,60,10,98,2024-05-12 +71,74,2,228,2024-05-13 +72,3,15,878,2024-08-18 +73,13,12,394,2024-01-08 +74,70,1,982,2024-03-02 +75,22,11,174,2024-07-30 +76,52,5,118,2024-07-21 +77,74,14,994,2024-08-24 +78,36,3,927,2024-04-02 +79,59,1,982,2024-05-31 +80,23,11,174,2024-02-19 +81,12,4,938,2024-04-03 +82,2,20,805,2024-02-05 +83,71,19,636,2024-08-08 +84,9,2,228,2024-06-16 +85,5,11,174,2024-06-04 +86,18,5,118,2024-08-20 +87,34,2,228,2024-04-11 +88,79,9,832,2024-04-14 +89,74,19,636,2024-06-14 +90,5,8,796,2024-08-26 +91,35,19,636,2024-04-22 +92,74,16,119,2024-07-17 +93,10,7,554,2024-05-20 +94,9,2,228,2024-07-19 +95,1,17,525,2024-05-08 +96,33,13,269,2024-06-28 +97,97,9,832,2024-08-26 +98,100,2,228,2024-05-25 +99,96,16,119,2024-01-26 +100,49,2,228,2024-02-11 +101,29,14,994,2024-02-03 +102,70,14,994,2024-08-07 +103,65,18,926,2024-04-09 +104,37,2,228,2024-04-22 +105,75,13,269,2024-03-30 +106,44,18,926,2024-07-20 +107,60,17,525,2024-02-07 +108,42,3,927,2024-02-07 +109,11,9,832,2024-04-06 +110,57,6,609,2024-02-16 +111,97,10,98,2024-03-29 +112,45,18,926,2024-08-17 +113,43,3,927,2024-04-27 +114,96,6,609,2024-07-07 +115,87,19,636,2024-04-15 +116,63,17,525,2024-02-26 +117,19,19,636,2024-01-06 +118,71,18,926,2024-05-10 +119,11,12,394,2024-07-11 +120,46,8,796,2024-03-16 +121,42,14,994,2024-04-03 +122,91,11,174,2024-04-14 +123,51,5,118,2024-01-20 +124,98,11,174,2024-07-17 +125,65,20,805,2024-01-05 +126,48,1,982,2024-06-23 +127,47,16,119,2024-04-17 +128,16,3,927,2024-07-13 +129,53,5,118,2024-04-05 +130,16,4,938,2024-04-02 +131,60,7,554,2024-01-25 +132,74,17,525,2024-05-25 +133,24,3,927,2024-03-17 +134,70,16,119,2024-05-23 +135,41,20,805,2024-08-21 +136,19,2,228,2024-06-27 +137,55,3,927,2024-03-15 +138,7,8,796,2024-03-08 +139,42,15,878,2024-02-11 +140,80,10,98,2024-07-26 +141,95,20,805,2024-05-17 +142,25,12,394,2024-04-05 +143,83,16,119,2024-06-23 +144,8,10,98,2024-02-12 +145,58,14,994,2024-04-01 +146,42,20,805,2024-04-23 +147,96,3,927,2024-05-15 +148,35,5,118,2024-05-06 +149,19,5,118,2024-05-31 +150,64,1,982,2024-04-17 +151,13,15,878,2024-03-15 +152,37,14,994,2024-08-06 +153,73,3,927,2024-02-28 +154,11,14,994,2024-07-30 +155,25,9,832,2024-03-02 +156,79,4,938,2024-05-13 +157,78,6,609,2024-08-27 +158,7,1,982,2024-06-10 +159,11,20,805,2024-02-29 +160,17,17,525,2024-05-19 +161,94,10,98,2024-06-04 +162,51,7,554,2024-01-15 +163,98,20,805,2024-02-04 +164,17,1,982,2024-04-20 +165,24,17,525,2024-06-18 +166,38,10,98,2024-07-20 +167,72,9,832,2024-02-17 +168,29,20,805,2024-03-06 +169,36,10,98,2024-04-18 +170,12,20,805,2024-04-26 +171,7,10,98,2024-08-28 +172,29,17,525,2024-02-29 +173,59,19,636,2024-07-18 +174,80,7,554,2024-04-08 +175,4,16,119,2024-05-13 +176,79,3,927,2024-06-09 +177,27,4,938,2024-05-19 +178,63,6,609,2024-07-17 +179,75,20,805,2024-06-20 +180,22,1,982,2024-08-24 +181,73,12,394,2024-08-01 +182,31,14,994,2024-05-11 +183,71,7,554,2024-03-17 +184,10,11,174,2024-08-08 +185,34,5,118,2024-01-30 +186,81,8,796,2024-01-05 +187,61,6,609,2024-02-25 +188,9,11,174,2024-08-25 +189,17,4,938,2024-02-11 +190,67,19,636,2024-04-01 +191,59,13,269,2024-04-14 +192,51,13,269,2024-02-27 +193,69,7,554,2024-04-30 +194,13,5,118,2024-05-31 +195,29,16,119,2024-01-05 +196,68,8,796,2024-05-15 +197,73,17,525,2024-02-04 +198,66,6,609,2024-08-16 +199,48,12,394,2024-05-23 +200,63,10,98,2024-01-17 +201,79,10,98,2024-01-02 +202,52,4,938,2024-04-23 +203,77,16,119,2024-07-25 +204,43,8,796,2024-01-08 +205,66,9,832,2024-08-04 +206,85,5,118,2024-04-26 +207,16,7,554,2024-07-17 +208,93,5,118,2024-03-13 +209,8,11,174,2024-04-25 +210,55,11,174,2024-01-19 +211,39,6,609,2024-02-25 +212,33,14,994,2024-07-08 +213,69,9,832,2024-06-23 +214,84,3,927,2024-03-20 +215,1,18,926,2024-01-23 +216,41,1,982,2024-07-01 +217,26,2,228,2024-03-25 +218,57,16,119,2024-02-06 +219,84,7,554,2024-03-12 +220,71,19,636,2024-03-30 +221,59,2,228,2024-02-05 +222,45,19,636,2024-08-29 +223,61,19,636,2024-02-15 +224,81,15,878,2024-01-29 +225,34,11,174,2024-04-25 +226,28,13,269,2024-06-29 +227,65,5,118,2024-07-13 +228,97,17,525,2024-06-19 +229,77,2,228,2024-02-22 +230,42,13,269,2024-08-08 +231,13,4,938,2024-04-04 +232,90,14,994,2024-01-03 +233,49,14,994,2024-08-09 +234,75,3,927,2024-06-12 +235,17,1,982,2024-03-23 +236,73,13,269,2024-02-23 +237,1,16,119,2024-08-11 +238,87,6,609,2024-03-31 +239,51,3,927,2024-01-09 +240,12,17,525,2024-05-03 +241,76,16,119,2024-06-14 +242,93,3,927,2024-06-29 +243,73,2,228,2024-06-04 +244,82,10,98,2024-05-09 +245,36,6,609,2024-06-22 +246,36,19,636,2024-04-02 +247,6,11,174,2024-05-02 +248,31,1,982,2024-05-03 +249,75,15,878,2024-03-23 +250,39,16,119,2024-04-17 +251,36,5,118,2024-08-01 +252,84,13,269,2024-04-19 +253,31,9,832,2024-02-20 +254,61,1,982,2024-05-10 +255,34,3,927,2024-07-23 +256,57,13,269,2024-07-15 +257,38,17,525,2024-07-18 +258,59,12,394,2024-05-03 +259,48,13,269,2024-01-07 +260,76,10,98,2024-06-23 +261,36,7,554,2024-02-23 +262,17,8,796,2024-02-02 +263,71,17,525,2024-07-30 +264,93,2,228,2024-04-16 +265,84,20,805,2024-04-05 +266,23,7,554,2024-07-29 +267,53,15,878,2024-01-20 +268,43,5,118,2024-05-04 +269,26,18,926,2024-01-29 +270,8,5,118,2024-03-11 +271,21,16,119,2024-04-20 +272,16,10,98,2024-01-05 +273,81,11,174,2024-02-03 +274,44,5,118,2024-08-02 +275,44,19,636,2024-06-07 +276,48,16,119,2024-04-06 +277,91,3,927,2024-02-18 +278,16,4,938,2024-05-18 +279,63,16,119,2024-01-05 +280,63,10,98,2024-01-23 +281,83,12,394,2024-03-14 +282,88,14,994,2024-02-20 +283,73,8,796,2024-02-29 +284,2,12,394,2024-06-29 +285,9,6,609,2024-07-03 +286,30,15,878,2024-01-10 +287,30,10,98,2024-08-08 +288,79,14,994,2024-01-30 +289,74,17,525,2024-04-29 +290,63,3,927,2024-05-31 +291,42,9,832,2024-07-07 +292,20,19,636,2024-01-22 +293,51,7,554,2024-04-25 +294,13,10,98,2024-01-14 +295,37,12,394,2024-08-12 +296,78,13,269,2024-01-24 +297,72,1,982,2024-06-18 +298,64,4,938,2024-08-06 +299,88,8,796,2024-07-04 +300,45,17,525,2024-01-11 +301,42,8,796,2024-04-18 +302,75,6,609,2024-04-30 +303,9,3,927,2024-07-13 +304,58,9,832,2024-07-09 +305,82,8,796,2024-08-10 +306,26,2,228,2024-06-09 +307,91,17,525,2024-02-24 +308,54,17,525,2024-05-10 +309,32,16,119,2024-03-27 +310,61,11,174,2024-04-28 +311,4,17,525,2024-04-22 +312,16,10,98,2024-05-17 +313,96,14,994,2024-05-04 +314,91,1,982,2024-05-31 +315,70,13,269,2024-08-17 +316,45,2,228,2024-08-07 +317,63,8,796,2024-01-27 +318,29,19,636,2024-03-21 +319,5,6,609,2024-02-24 +320,25,10,98,2024-03-21 +321,35,4,938,2024-06-03 +322,30,15,878,2024-01-17 +323,4,19,636,2024-05-09 +324,45,15,878,2024-04-26 +325,89,17,525,2024-06-26 +326,70,11,174,2024-01-25 +327,55,3,927,2024-06-12 +328,81,20,805,2024-08-23 +329,23,1,982,2024-01-05 +330,23,9,832,2024-02-04 +331,64,5,118,2024-06-01 +332,35,2,228,2024-07-17 +333,61,15,878,2024-05-13 +334,8,13,269,2024-07-04 +335,64,15,878,2024-03-23 +336,74,12,394,2024-03-17 +337,71,4,938,2024-02-06 +338,36,19,636,2024-06-16 +339,11,20,805,2024-03-06 +340,66,13,269,2024-05-22 +341,57,2,228,2024-02-04 +342,60,12,394,2024-03-02 +343,23,2,228,2024-04-05 +344,51,17,525,2024-07-14 +345,18,1,982,2024-04-16 +346,8,10,98,2024-03-28 +347,40,1,982,2024-02-07 +348,76,11,174,2024-08-18 +349,62,3,927,2024-06-21 +350,88,13,269,2024-03-05 +351,85,13,269,2024-03-19 +352,27,14,994,2024-01-06 +353,52,17,525,2024-03-14 +354,79,9,832,2024-07-07 +355,82,5,118,2024-06-30 +356,15,4,938,2024-05-10 +357,33,7,554,2024-04-05 +358,84,4,938,2024-07-16 +359,94,6,609,2024-01-02 +360,99,13,269,2024-02-12 +361,54,10,98,2024-04-03 +362,22,8,796,2024-01-29 +363,93,18,926,2024-03-13 +364,26,19,636,2024-05-07 +365,6,1,982,2024-01-28 +366,43,7,554,2024-03-26 +367,12,13,269,2024-05-02 +368,63,8,796,2024-03-04 +369,81,15,878,2024-03-05 +370,21,4,938,2024-01-08 +371,69,8,796,2024-03-16 +372,71,11,174,2024-02-29 +373,26,13,269,2024-05-07 +374,64,1,982,2024-02-01 +375,68,18,926,2024-02-17 +376,83,11,174,2024-05-19 +377,30,2,228,2024-01-21 +378,62,7,554,2024-05-26 +379,27,7,554,2024-05-22 +380,53,15,878,2024-08-09 +381,98,8,796,2024-06-15 +382,53,15,878,2024-02-04 +383,67,19,636,2024-06-14 +384,44,4,938,2024-05-26 +385,28,3,927,2024-02-11 +386,19,17,525,2024-01-20 +387,69,9,832,2024-02-07 +388,44,5,118,2024-04-25 +389,88,17,525,2024-07-20 +390,56,12,394,2024-08-21 +391,3,20,805,2024-05-05 +392,32,6,609,2024-07-21 +393,75,15,878,2024-01-16 +394,92,7,554,2024-01-06 +395,52,1,982,2024-03-03 +396,18,14,994,2024-03-20 +397,84,20,805,2024-02-10 +398,4,18,926,2024-03-02 +399,5,9,832,2024-04-14 +400,58,3,927,2024-08-16 +401,94,12,394,2024-01-19 +402,46,11,174,2024-03-06 +403,40,20,805,2024-05-03 +404,99,14,994,2024-03-12 +405,16,18,926,2024-08-21 +406,88,15,878,2024-04-20 +407,95,20,805,2024-06-29 +408,85,16,119,2024-01-04 +409,95,8,796,2024-06-02 +410,32,15,878,2024-02-28 +411,16,16,119,2024-02-04 +412,17,6,609,2024-02-24 +413,86,11,174,2024-05-19 +414,3,19,636,2024-06-18 +415,58,16,119,2024-03-16 +416,67,12,394,2024-04-23 +417,63,11,174,2024-05-12 +418,53,3,927,2024-02-07 +419,8,4,938,2024-03-02 +420,58,11,174,2024-07-18 +421,31,16,119,2024-04-07 +422,74,20,805,2024-03-09 +423,4,19,636,2024-01-09 +424,41,5,118,2024-03-13 +425,72,18,926,2024-03-03 +426,51,14,994,2024-02-18 +427,42,4,938,2024-08-08 +428,30,15,878,2024-02-17 +429,9,4,938,2024-05-14 +430,17,1,982,2024-01-16 +431,18,10,98,2024-02-26 +432,48,17,525,2024-04-29 +433,8,6,609,2024-07-18 +434,49,20,805,2024-05-28 +435,66,11,174,2024-08-23 +436,83,7,554,2024-01-15 +437,37,12,394,2024-04-21 +438,6,15,878,2024-03-18 +439,1,17,525,2024-05-11 +440,58,3,927,2024-08-05 +441,33,16,119,2024-02-01 +442,17,8,796,2024-06-10 +443,14,4,938,2024-07-16 +444,59,3,927,2024-06-06 +445,66,5,118,2024-06-21 +446,57,10,98,2024-01-23 +447,92,19,636,2024-07-08 +448,15,19,636,2024-05-07 +449,29,17,525,2024-02-28 +450,34,13,269,2024-05-24 +451,4,15,878,2024-02-28 +452,82,20,805,2024-07-25 +453,60,7,554,2024-08-29 +454,5,18,926,2024-06-20 +455,55,5,118,2024-05-29 +456,91,9,832,2024-05-20 +457,67,20,805,2024-01-10 +458,57,17,525,2024-07-01 +459,60,5,118,2024-03-11 +460,9,9,832,2024-04-07 +461,42,12,394,2024-03-29 +462,5,17,525,2024-04-08 +463,16,12,394,2024-04-26 +464,34,7,554,2024-01-09 +465,89,1,982,2024-02-19 +466,95,7,554,2024-06-22 +467,41,2,228,2024-05-20 +468,28,13,269,2024-08-27 +469,76,1,982,2024-03-22 +470,97,17,525,2024-04-07 +471,100,4,938,2024-08-06 +472,61,11,174,2024-01-06 +473,38,5,118,2024-02-19 +474,45,14,994,2024-03-16 +475,2,20,805,2024-08-15 +476,28,15,878,2024-05-15 +477,11,9,832,2024-06-04 +478,96,6,609,2024-01-16 +479,81,8,796,2024-06-29 +480,81,5,118,2024-04-26 +481,16,11,174,2024-04-14 +482,95,5,118,2024-06-25 +483,48,19,636,2024-04-27 +484,50,17,525,2024-03-19 +485,99,10,98,2024-01-23 +486,80,6,609,2024-04-26 +487,33,20,805,2024-07-19 +488,75,15,878,2024-07-08 +489,12,4,938,2024-03-07 +490,100,4,938,2024-06-26 +491,64,17,525,2024-05-17 +492,83,8,796,2024-05-20 +493,64,5,118,2024-07-25 +494,3,2,228,2024-07-31 +495,89,6,609,2024-08-23 +496,7,5,118,2024-06-22 +497,80,14,994,2024-05-08 +498,90,2,228,2024-04-30 +499,66,9,832,2024-08-14 +500,59,20,805,2024-06-09 +501,2,12,394,2024-06-30 +502,2,17,525,2024-02-08 +503,60,8,796,2024-05-01 +504,87,13,269,2024-03-09 +505,90,4,938,2024-06-15 +506,36,20,805,2024-01-11 +507,65,15,878,2024-04-22 +508,57,15,878,2024-02-02 +509,19,19,636,2024-05-16 +510,31,20,805,2024-02-19 +511,12,14,994,2024-01-23 +512,11,9,832,2024-06-06 +513,46,14,994,2024-01-02 +514,11,13,269,2024-07-20 +515,92,4,938,2024-05-19 +516,1,20,805,2024-03-18 +517,64,16,119,2024-06-03 +518,91,9,832,2024-07-23 +519,81,5,118,2024-05-30 +520,90,2,228,2024-02-07 +521,82,2,228,2024-02-01 +522,12,5,118,2024-07-12 +523,23,15,878,2024-02-15 +524,4,5,118,2024-04-09 +525,94,11,174,2024-04-19 +526,79,10,98,2024-05-15 +527,69,15,878,2024-07-10 +528,13,11,174,2024-07-31 +529,6,14,994,2024-07-22 +530,25,18,926,2024-08-18 +531,15,16,119,2024-06-28 +532,45,5,118,2024-02-06 +533,78,16,119,2024-07-17 +534,26,15,878,2024-03-02 +535,45,18,926,2024-08-03 +536,72,14,994,2024-07-12 +537,60,10,98,2024-03-23 +538,7,6,609,2024-02-25 +539,67,8,796,2024-08-25 +540,28,4,938,2024-04-06 +541,78,4,938,2024-06-01 +542,38,1,982,2024-02-04 +543,69,16,119,2024-07-05 +544,21,17,525,2024-05-07 +545,32,6,609,2024-03-01 +546,58,2,228,2024-01-22 +547,44,8,796,2024-01-14 +548,49,1,982,2024-05-19 +549,19,9,832,2024-07-14 +550,4,14,994,2024-08-07 +551,75,2,228,2024-08-26 +552,23,17,525,2024-01-30 +553,98,17,525,2024-04-19 +554,98,20,805,2024-05-12 +555,90,7,554,2024-01-04 +556,46,1,982,2024-08-21 +557,33,19,636,2024-02-25 +558,87,20,805,2024-04-26 +559,90,19,636,2024-07-23 +560,74,4,938,2024-07-28 +561,22,5,118,2024-01-12 +562,68,2,228,2024-07-21 +563,68,13,269,2024-01-05 +564,81,11,174,2024-08-28 +565,93,12,394,2024-03-16 +566,52,5,118,2024-07-23 +567,49,8,796,2024-04-06 +568,87,19,636,2024-01-25 +569,33,4,938,2024-06-26 +570,7,2,228,2024-08-08 +571,45,15,878,2024-05-07 +572,76,1,982,2024-01-10 +573,16,11,174,2024-04-18 +574,74,7,554,2024-04-18 +575,32,6,609,2024-06-23 +576,39,15,878,2024-06-02 +577,98,18,926,2024-06-12 +578,98,12,394,2024-02-02 +579,85,15,878,2024-03-04 +580,63,19,636,2024-05-06 +581,7,18,926,2024-03-13 +582,79,5,118,2024-05-27 +583,27,18,926,2024-07-05 +584,98,3,927,2024-05-25 +585,27,13,269,2024-07-25 +586,16,4,938,2024-04-17 +587,69,4,938,2024-08-23 +588,54,14,994,2024-04-18 +589,30,8,796,2024-05-22 +590,50,10,98,2024-05-26 +591,39,15,878,2024-01-14 +592,16,7,554,2024-01-08 +593,46,17,525,2024-06-26 +594,8,15,878,2024-04-12 +595,24,7,554,2024-04-11 +596,40,9,832,2024-05-24 +597,47,15,878,2024-06-29 +598,67,8,796,2024-06-20 +599,57,15,878,2024-08-11 +600,18,18,926,2024-04-25 +601,30,5,118,2024-01-18 +602,14,16,119,2024-08-28 +603,10,14,994,2024-02-07 +604,37,16,119,2024-07-08 +605,95,19,636,2024-04-20 +606,26,8,796,2024-04-11 +607,87,3,927,2024-04-08 +608,81,10,98,2024-05-22 +609,57,7,554,2024-08-03 +610,15,10,98,2024-03-19 +611,25,13,269,2024-03-29 +612,6,13,269,2024-01-05 +613,64,11,174,2024-04-04 +614,48,2,228,2024-04-29 +615,1,7,554,2024-05-17 +616,25,13,269,2024-07-19 +617,40,17,525,2024-08-12 +618,64,14,994,2024-01-22 +619,56,17,525,2024-07-05 +620,20,10,98,2024-07-15 +621,68,14,994,2024-03-16 +622,74,7,554,2024-05-12 +623,94,1,982,2024-05-20 +624,63,1,982,2024-07-27 +625,37,2,228,2024-08-30 +626,88,17,525,2024-06-09 +627,23,9,832,2024-05-08 +628,92,17,525,2024-02-12 +629,50,17,525,2024-02-27 +630,65,8,796,2024-03-16 +631,45,4,938,2024-05-23 +632,14,4,938,2024-05-21 +633,41,6,609,2024-08-14 +634,52,12,394,2024-07-08 +635,3,3,927,2024-06-29 +636,4,12,394,2024-03-24 +637,42,7,554,2024-06-11 +638,6,12,394,2024-08-08 +639,45,7,554,2024-06-12 +640,12,4,938,2024-03-07 +641,56,19,636,2024-04-28 +642,26,4,938,2024-04-04 +643,7,8,796,2024-03-01 +644,38,14,994,2024-07-15 +645,47,10,98,2024-06-01 +646,18,17,525,2024-08-10 +647,85,2,228,2024-06-30 +648,53,3,927,2024-03-12 +649,17,3,927,2024-08-05 +650,82,18,926,2024-01-10 +651,18,19,636,2024-03-14 +652,30,13,269,2024-07-27 +653,26,3,927,2024-05-04 +654,66,16,119,2024-04-28 +655,20,17,525,2024-01-13 +656,67,14,994,2024-04-11 +657,16,10,98,2024-02-02 +658,62,20,805,2024-05-30 +659,9,8,796,2024-05-17 +660,51,12,394,2024-02-08 +661,3,12,394,2024-07-11 +662,48,5,118,2024-03-31 +663,59,14,994,2024-05-19 +664,82,4,938,2024-06-12 +665,15,10,98,2024-03-14 +666,93,9,832,2024-02-25 +667,57,5,118,2024-04-08 +668,56,10,98,2024-06-04 +669,68,19,636,2024-02-05 +670,90,6,609,2024-08-28 +671,37,11,174,2024-08-22 +672,79,10,98,2024-07-06 +673,12,12,394,2024-04-11 +674,20,18,926,2024-06-08 +675,5,20,805,2024-01-14 +676,24,6,609,2024-04-30 +677,25,16,119,2024-05-31 +678,11,9,832,2024-04-29 +679,41,3,927,2024-07-30 +680,38,2,228,2024-05-01 +681,35,20,805,2024-05-19 +682,69,4,938,2024-01-05 +683,85,4,938,2024-05-30 +684,44,18,926,2024-05-10 +685,34,12,394,2024-06-08 +686,50,20,805,2024-01-21 +687,97,4,938,2024-08-09 +688,20,14,994,2024-02-03 +689,45,11,174,2024-07-13 +690,80,14,994,2024-03-06 +691,60,5,118,2024-04-21 +692,47,13,269,2024-05-20 +693,38,14,994,2024-05-25 +694,55,3,927,2024-01-10 +695,10,12,394,2024-05-17 +696,11,8,796,2024-03-02 +697,40,11,174,2024-06-30 +698,73,2,228,2024-07-26 +699,4,20,805,2024-05-19 +700,51,19,636,2024-02-07 +701,89,9,832,2024-01-26 +702,68,10,98,2024-06-07 +703,91,20,805,2024-07-04 +704,31,2,228,2024-02-04 +705,49,17,525,2024-03-02 +706,59,6,609,2024-04-30 +707,84,15,878,2024-06-30 +708,95,6,609,2024-01-07 +709,96,19,636,2024-01-11 +710,98,18,926,2024-07-16 +711,60,5,118,2024-06-19 +712,84,7,554,2024-06-20 +713,88,19,636,2024-05-11 +714,19,19,636,2024-08-13 +715,37,4,938,2024-02-18 +716,75,10,98,2024-02-26 +717,30,12,394,2024-08-04 +718,30,18,926,2024-05-28 +719,87,3,927,2024-06-26 +720,26,16,119,2024-02-12 +721,62,3,927,2024-07-22 +722,95,9,832,2024-02-04 +723,42,5,118,2024-04-09 +724,36,5,118,2024-01-10 +725,38,16,119,2024-06-06 +726,85,19,636,2024-08-16 +727,77,3,927,2024-05-17 +728,63,5,118,2024-02-17 +729,36,17,525,2024-02-10 +730,67,1,982,2024-05-01 +731,36,12,394,2024-01-11 +732,40,16,119,2024-06-12 +733,42,20,805,2024-03-20 +734,74,11,174,2024-01-28 +735,47,1,982,2024-08-01 +736,28,15,878,2024-06-10 +737,40,19,636,2024-01-15 +738,68,12,394,2024-06-30 +739,25,8,796,2024-07-22 +740,98,7,554,2024-03-26 +741,62,7,554,2024-08-11 +742,11,20,805,2024-08-09 +743,30,13,269,2024-04-21 +744,25,11,174,2024-07-11 +745,82,4,938,2024-01-04 +746,91,4,938,2024-05-25 +747,92,18,926,2024-02-28 +748,51,17,525,2024-01-14 +749,100,20,805,2024-03-14 +750,56,20,805,2024-06-29 +751,41,4,938,2024-01-29 +752,97,5,118,2024-04-29 +753,89,4,938,2024-04-07 +754,21,2,228,2024-04-30 +755,63,12,394,2024-06-29 +756,26,9,832,2024-01-06 +757,7,12,394,2024-04-25 +758,27,18,926,2024-08-26 +759,55,11,174,2024-04-01 +760,76,17,525,2024-02-11 +761,49,14,994,2024-05-04 +762,23,5,118,2024-04-23 +763,15,3,927,2024-06-08 +764,54,13,269,2024-08-13 +765,62,14,994,2024-06-03 +766,98,8,796,2024-03-01 +767,16,10,98,2024-05-02 +768,72,1,982,2024-01-09 +769,8,13,269,2024-03-06 +770,32,2,228,2024-04-10 +771,90,19,636,2024-06-25 +772,56,6,609,2024-05-20 +773,54,14,994,2024-01-18 +774,15,18,926,2024-08-19 +775,38,15,878,2024-07-02 +776,15,8,796,2024-06-08 +777,36,4,938,2024-08-10 +778,61,15,878,2024-07-10 +779,86,19,636,2024-06-19 +780,7,5,118,2024-08-23 +781,33,10,98,2024-01-20 +782,84,17,525,2024-06-09 +783,66,4,938,2024-07-30 +784,82,5,118,2024-07-18 +785,29,9,832,2024-02-01 +786,2,8,796,2024-02-20 +787,23,20,805,2024-01-22 +788,9,2,228,2024-05-21 +789,54,8,796,2024-05-20 +790,61,17,525,2024-06-28 +791,27,2,228,2024-01-12 +792,85,4,938,2024-04-30 +793,33,5,118,2024-04-07 +794,82,12,394,2024-07-18 +795,68,15,878,2024-08-29 +796,55,15,878,2024-06-23 +797,21,3,927,2024-03-05 +798,86,2,228,2024-05-16 +799,15,12,394,2024-07-22 +800,19,19,636,2024-03-01 +801,67,11,174,2024-01-03 +802,57,10,98,2024-08-02 +803,55,3,927,2024-08-09 +804,27,11,174,2024-03-23 +805,47,12,394,2024-02-24 +806,1,8,796,2024-08-11 +807,8,16,119,2024-04-21 +808,93,3,927,2024-04-21 +809,21,8,796,2024-06-06 +810,18,4,938,2024-02-20 +811,88,14,994,2024-08-30 +812,94,5,118,2024-06-14 +813,45,11,174,2024-03-06 +814,71,6,609,2024-04-09 +815,36,17,525,2024-06-16 +816,91,14,994,2024-08-30 +817,18,3,927,2024-06-08 +818,72,20,805,2024-04-16 +819,10,15,878,2024-08-29 +820,26,18,926,2024-05-26 +821,69,3,927,2024-01-05 +822,43,1,982,2024-08-06 +823,98,6,609,2024-07-01 +824,40,7,554,2024-07-19 +825,8,17,525,2024-04-23 +826,69,3,927,2024-06-19 +827,51,11,174,2024-03-29 +828,49,19,636,2024-02-15 +829,20,6,609,2024-03-05 +830,13,19,636,2024-07-29 +831,3,1,982,2024-01-23 +832,92,18,926,2024-04-27 +833,15,3,927,2024-01-29 +834,61,15,878,2024-04-22 +835,46,15,878,2024-05-04 +836,50,10,98,2024-03-08 +837,62,18,926,2024-03-17 +838,69,18,926,2024-04-26 +839,91,10,98,2024-02-21 +840,32,10,98,2024-04-28 +841,66,4,938,2024-08-03 +842,41,13,269,2024-04-22 +843,97,10,98,2024-04-24 +844,95,7,554,2024-06-01 +845,78,8,796,2024-03-04 +846,90,1,982,2024-04-25 +847,89,1,982,2024-03-06 +848,93,18,926,2024-06-10 +849,64,8,796,2024-06-08 +850,38,2,228,2024-08-05 +851,72,15,878,2024-07-04 +852,61,2,228,2024-03-14 +853,61,11,174,2024-08-21 +854,97,4,938,2024-02-18 +855,29,1,982,2024-06-12 +856,27,2,228,2024-05-07 +857,14,3,927,2024-04-02 +858,100,16,119,2024-01-21 +859,100,6,609,2024-04-03 +860,66,4,938,2024-05-29 +861,33,9,832,2024-03-21 +862,14,13,269,2024-08-10 +863,40,8,796,2024-03-01 +864,59,16,119,2024-03-30 +865,46,19,636,2024-05-05 +866,48,4,938,2024-08-04 +867,39,10,98,2024-01-16 +868,6,2,228,2024-07-12 +869,1,13,269,2024-04-14 +870,35,3,927,2024-08-18 +871,60,15,878,2024-04-30 +872,23,3,927,2024-06-14 +873,2,4,938,2024-06-02 +874,96,20,805,2024-03-03 +875,37,20,805,2024-05-19 +876,7,1,982,2024-02-14 +877,95,4,938,2024-06-26 +878,91,16,119,2024-02-25 +879,7,17,525,2024-03-15 +880,94,5,118,2024-03-11 +881,2,19,636,2024-02-11 +882,100,18,926,2024-08-15 +883,16,10,98,2024-06-29 +884,70,17,525,2024-02-03 +885,81,16,119,2024-08-13 +886,32,11,174,2024-02-26 +887,48,3,927,2024-03-07 +888,15,17,525,2024-05-08 +889,48,1,982,2024-02-11 +890,73,19,636,2024-06-08 +891,54,7,554,2024-04-14 +892,66,8,796,2024-07-04 +893,45,11,174,2024-03-15 +894,34,12,394,2024-06-16 +895,51,9,832,2024-01-22 +896,2,17,525,2024-06-29 +897,5,13,269,2024-06-09 +898,40,3,927,2024-08-10 +899,47,10,98,2024-04-07 +900,61,14,994,2024-02-14 +901,98,17,525,2024-02-25 +902,77,6,609,2024-07-14 +903,94,3,927,2024-03-24 +904,86,7,554,2024-01-24 +905,85,5,118,2024-08-27 +906,39,4,938,2024-01-10 +907,92,3,927,2024-07-24 +908,75,12,394,2024-08-06 +909,97,6,609,2024-03-17 +910,24,9,832,2024-01-26 +911,29,5,118,2024-01-10 +912,82,16,119,2024-01-06 +913,73,4,938,2024-07-17 +914,60,6,609,2024-03-07 +915,64,13,269,2024-08-08 +916,35,5,118,2024-06-18 +917,15,3,927,2024-04-21 +918,37,3,927,2024-02-23 +919,5,4,938,2024-04-27 +920,93,10,98,2024-07-30 +921,87,13,269,2024-04-21 +922,85,11,174,2024-03-02 +923,34,6,609,2024-06-15 +924,64,18,926,2024-05-30 +925,15,16,119,2024-01-21 +926,22,12,394,2024-07-16 +927,38,5,118,2024-02-22 +928,37,17,525,2024-07-13 +929,54,10,98,2024-08-24 +930,85,18,926,2024-06-09 +931,6,14,994,2024-05-30 +932,26,17,525,2024-01-07 +933,53,12,394,2024-07-17 +934,93,6,609,2024-06-21 +935,8,16,119,2024-06-18 +936,22,10,98,2024-02-18 +937,76,13,269,2024-04-09 +938,18,12,394,2024-03-02 +939,46,20,805,2024-05-03 +940,67,3,927,2024-06-07 +941,2,13,269,2024-04-08 +942,75,1,982,2024-02-24 +943,41,11,174,2024-03-10 +944,90,12,394,2024-05-24 +945,86,10,98,2024-06-09 +946,38,9,832,2024-06-11 +947,25,19,636,2024-05-25 +948,91,1,982,2024-05-21 +949,93,9,832,2024-07-23 +950,57,2,228,2024-04-07 +951,4,20,805,2024-01-05 +952,59,6,609,2024-01-05 +953,93,7,554,2024-05-06 +954,79,14,994,2024-08-13 +955,46,19,636,2024-01-30 +956,81,10,98,2024-01-23 +957,6,2,228,2024-08-22 +958,49,5,118,2024-04-30 +959,7,18,926,2024-07-09 +960,34,14,994,2024-03-10 +961,73,20,805,2024-08-15 +962,35,7,554,2024-05-12 +963,21,11,174,2024-05-25 +964,14,16,119,2024-04-30 +965,86,2,228,2024-05-16 +966,45,14,994,2024-08-24 +967,15,3,927,2024-03-10 +968,72,3,927,2024-03-30 +969,71,3,927,2024-03-16 +970,95,13,269,2024-02-04 +971,88,6,609,2024-06-17 +972,58,10,98,2024-05-27 +973,8,12,394,2024-03-24 +974,26,20,805,2024-02-04 +975,17,3,927,2024-04-09 +976,10,2,228,2024-05-04 +977,15,17,525,2024-06-30 +978,75,3,927,2024-07-04 +979,11,9,832,2024-06-06 +980,35,12,394,2024-06-28 +981,89,19,636,2024-02-17 +982,20,3,927,2024-02-08 +983,81,4,938,2024-01-05 +984,43,7,554,2024-08-20 +985,98,15,878,2024-04-03 +986,55,20,805,2024-04-05 +987,83,2,228,2024-01-20 +988,20,9,832,2024-02-12 +989,25,1,982,2024-05-15 +990,12,13,269,2024-01-12 +991,18,7,554,2024-03-17 +992,65,10,98,2024-02-27 +993,13,5,118,2024-03-06 +994,76,9,832,2024-03-11 +995,15,16,119,2024-07-30 +996,34,13,269,2024-01-22 +997,95,7,554,2024-07-27 +998,72,2,228,2024-02-18 +999,71,8,796,2024-04-15 +1000,55,19,636,2024-07-10 diff --git a/examples/openlineage/purchase_data.db b/examples/openlineage/purchase_data.db new file mode 100644 index 0000000000000000000000000000000000000000..365bbdff8a6b11c54498ee53e36cba7916d3edb3 GIT binary patch literal 36864 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 Date: Thu, 5 Sep 2024 13:35:21 -0700 Subject: [PATCH 2/7] Adds more facets Seems to work with marquez! --- examples/openlineage/adapter.py | 86 +++++++++++++++++++++++++++++-- examples/openlineage/graph.png | Bin 99686 -> 99672 bytes examples/openlineage/pipeline.py | 19 ++++--- 3 files changed, 96 insertions(+), 9 deletions(-) diff --git a/examples/openlineage/adapter.py b/examples/openlineage/adapter.py index 5abe0dec5..50834d531 100644 --- a/examples/openlineage/adapter.py +++ b/examples/openlineage/adapter.py @@ -209,27 +209,107 @@ def post_node_execute( print(metadata) inputs = [] outputs = [] + sql_facet = None + storage_facet = None + datasource_facet = None + schema_facet = None if saved_or_loaded == "loaded": if "file_metadata" in metadata: name = node_.name + if ".loader" in name: + name = name.split(".loader")[0] + path = metadata["file_metadata"]["path"] + format = path.split(".")[-1] if "." in name else "unknown" + storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( + storageLayer="FileSystem", + fileFormat=format, + ) + datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( + name=name, + uri=path, + ) elif "sql_metadata" in metadata: name = metadata["sql_metadata"]["table_name"] + sql_facet = facet_v2.sql_job.SQLJobFacet( + query=metadata["sql_metadata"]["query"], + ) else: name = "--UNKNOWN--" - inputs = [event_v2.InputDataset(self.namespace, name)] + + if "dataframe_metadata" in metadata: + schema_datatypes = [ + facet_v2.schema_dataset.SchemaDatasetFacetFields( + name=k, + type=v, + ) + for k, v in zip( + metadata["dataframe_metadata"]["column_names"], + metadata["dataframe_metadata"]["datatypes"], + ) + ] + schema_facet = facet_v2.schema_dataset.SchemaDatasetFacet( + fields=schema_datatypes, + ) + inputFacets = {} + if storage_facet: + inputFacets["storage"] = storage_facet + if datasource_facet: + inputFacets["dataSource"] = datasource_facet + if schema_facet: + inputFacets["schema"] = schema_facet + if len(inputFacets) == 0: + inputFacets = None + inputs = [event_v2.InputDataset(self.namespace, name, facets=inputFacets)] else: if "file_metadata" in metadata: name = metadata["file_metadata"]["path"] + format = name.split(".")[-1] if "." in name else "unknown" + storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( + storageLayer="FileSystem", + fileFormat=format, + ) + datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( + name=node_.name, + uri=name, + ) elif "sql_metadata" in metadata: name = metadata["sql_metadata"]["table_name"] else: name = "--UNKNOWN--" - outputs = [event_v2.OutputDataset(self.namespace, name)] + + if "dataframe_metadata" in metadata: + schema_datatypes = [ + facet_v2.schema_dataset.SchemaDatasetFacetFields( + name=k, + type=v, + ) + for k, v in zip( + metadata["dataframe_metadata"]["column_names"], + metadata["dataframe_metadata"]["datatypes"], + ) + ] + schema_facet = facet_v2.schema_dataset.SchemaDatasetFacet( + fields=schema_datatypes, + ) + outputFacets = {} + if storage_facet: + outputFacets["storage"] = storage_facet + if datasource_facet: + outputFacets["dataSource"] = datasource_facet + if schema_facet: + outputFacets["schema"] = schema_facet + if len(outputFacets) == 0: + outputFacets = None + outputs = [event_v2.OutputDataset(self.namespace, name, facets=outputFacets)] run = event_v2.Run( runId=run_id, ) - job = event_v2.Job(namespace=self.namespace, name=self.job_name, facets={}) + job_facets = {} + if sql_facet: + job_facets["sql"] = sql_facet + job = event_v2.Job(namespace=self.namespace, name=self.job_name, facets=job_facets) + print(inputs, outputs) run_event = event_v2.RunEvent( eventType=event_v2.RunState.RUNNING, eventTime=datetime.now(timezone.utc).isoformat(), diff --git a/examples/openlineage/graph.png b/examples/openlineage/graph.png index 7c99ade4dc80e98938039c2a7f71d4cf42b42586..1c47b8332ff71743f9e413d025e9da28b53b92c9 100644 GIT binary patch literal 99672 zcmd431yoh-_b!SZh=_u;s2~yw(hU~irn^JBLAt|4N!fHG-AFemibzX$$EG*kapwMn z@AvoykR`4c&ZsD&X%2f3-S%@yao7BS{< z#MA39F22UnQhbgVWQ>=abvgB7d}`c9rE_>aKUGu+f&{;-g_BKpAlD@oi7ts@VC6#&GMHwWz(x_@lwKb>hH*MLTR5%0DkO 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%0DXF7rY9EbjL|I?I z$rjOP%rYT{1eLsogW`D@&C9 zR&H=p*)NKV;%dA|MzTME{z}Fg@S%z5=j&_;cX-f@n*@Dz65A4zl2@z@`A;4A`V-BW zMn{^I**=`uhERBcTDanC9h8b^9BKktob zYg=W~d{6E>$eHfAomn5uQ5)npX^N+nomZ%)OJhC!vpa%=+xY!?ma{YH6R# z#~Z}1UC$;!grENtq@HK;BzP?gs4;UFDp3|5_CWlpwC-C;~L&NSN|)Kv06Q8b_Gk z00Gv>UQazVI-0!NZN(Jgkwh6jK7NWCGcbujUtR5jg7_3{@j0g}G z4TWhVpddB->uq!ciR^E3a#(sZ6wP4RU+&$lConc>4|fNR(*apoOqc0}YcvXBZBSl* z)c%h10+nDmT<4LIQ3DJEXnlBaB3{TX9j<^_&bJij<$ zQRcq(2&&@0CIUIMs$JRe;ssqEp<5#^T)UksJpx)Nj1;v%OWjsr4-o&yF#i!%i2^E+ z2#v|2`>Xdv5BHt$paFRoW+*(cyEBA>&G2r7q9ShaWC8{S@SRJM%|YZ1pI@9;W+X8Q z$O3LzV&44}WcDB!)Gh?!u844+30}GZ^R-%qk51!e2z)Ux0t(+qgqDRk;w<>3-b(hb z-SgMK6w4^DzGHa|1L1g&aRcLeCz*-CF9dNj_REG)6+5+1r;eT^rWStX?~m`by~won zi@^c{?&46f|J%10jr?!?fvHSm+wqzfu&c8$qch0P@kS$uj)x~4nlL677x%Re($mr$ zwimUnt*uu#HX0V|PU928vm`!4)JDk5kBKuwobpe&YA; zaq{tHJZyORePkqRc>C@k->qA3`})+_^{dp3tKScPe2Y80Lws_6`+wY2xZag|mlodp zJK|dfneN8$mvikgylvm#pLM9`Rp(M>mnnyiM40=y%554{c<;o&AbSg!rIQ1;e|T78 zJyi5Gf+dYO|=+YTO)5B^S;0;?=8Hj$&>wFAF}I0^=1S;iFOaE8Qsp zixjhX)$=z4+&}mp?2!xob>trImd>-^J|($=%t=c5n$ZqsP;>PvkuWPN`G&$|(Y}?H zmp1}Jr{>qn$%%=pqTc+brly*-sI_)KQb|C1aamnm+@IDLFYSJ zY7|1k*Ppv5%LP$A{$sl0ucY{35Dv(b#p12!?(@K>{4+BdeL<@L-+DvUsmcNX1ZE1> z4ZCy-T(1dI6&S;Gn*Da2y7*B6Kr+R@kc{(&sp;vHRgKDndAiN#Icn}ed(XSuHWbjK zz~$&Hepb0Kbu-}Tv(H}tqG|~fL1^F3)YMe}GMK(T@sFTj49=?IAtskDUi=78RghLx z#3w;hM_m-Zsu~fi3?Wg$(lWcS;opnkEKwPuR!NQqOkucjp?MsExgfIPrI9)n$%Fp(dBl5BV&{s^Ea%r{)1 z;Q0#1bbP^N5-45&fH5Y;5=B*2RhVxtEG;$pmUI`~JqVJt6ea0s((Cv88D6iOwF4A^ z@w~lXdA!^;64ji3=p#^b7fVl1hZcy3|MQSE+)?6Z*LXtz{WoflfNr^adQu2oxPG6` z*wj?Az@YZ3pfe*baRkZe`}K3zpLhRfVevWEK>*?P%(!dip*`Uq+1Tdr4+NI}MT&?;#vV6cYfa@YhhW5`v`@HK>h&2eLex!G(A5bICl7%it{gyBjSX z9X=0GFN6Cpn(PJ*#nHzv~I5@K}7tnKw-3dTjM;z77gXgEU8fxnUsbK2)yW3AwS;z^rj} zGsI{c2)A1WK0ZDtzSsMSL8|W!!*I@XJuh%%WMf*MULo#lJ$9?$#tgsn>_t#nlA)~? zw(t}XCER2c4B_cm*26|Cz4UE*8O#Df4>Fl<=yVCD6cC5IW`uX`qiOonPvDp6G<*{m*QAB-9lO;>qwDN_xNkk(m z7eXzfRcc8JCQUjn^7@Yc6xV5X6aW~Z%u;d?E*n&8#!&*hNaO`7`NUQ}2^^@Vzm zQtJWd$d0%(AK$Fr+T+PYsCZky_`>|06EPQ|BFt90mFgSw2ahK1zPvy#uB3EPHj*{# z?FJbM$*un=5Re9+`T-0i8J^(4s`cS9gllCW!Iwfpf`W{J41msY7I>bouPAV@#j$El zl<7dOHbf*xNaYj!upW5u_yVbN+p%{7PV}%B&7VF!`HunvQZC*Dcytsz+o_^`GKSOW z3``(V3OGK828g+?LJ&#iRNJB#dHH%Js8t)`ADd_VN+h08e7K8r- zM)2Ol5^-V;T)r0s%SQ(kf&)djrnuP`D&WyNA7N}6&mAV4XUA)WV3|k4`)RGf+17sJKd0zap=g+5rxx%NA`}rL@ zhA65Lf?}^%Z68cji;0-4$Zfwcu#XWL-kF!3iNe=Za;C$0wQF|1JgJoN@ba_Z!?_#| ze!qRjL~PA9JiB_q?*f8_W(&ldG(uUAo?iJZZ7k`*BpGz|6HvAwoHzXj+pGQHb^I># zBrw_C$Ix;DvVxmZ!L&j`v4BNUo;7J{bSt$x)C4b1;$6Oc8HRX)f1x1+(bCd>aF~=l zdFs^GYjwQ;CV-%US;BU_1Vow(o5F)8G8{`CZNhZKYFP) zV56G|N4zwZ7EmN1h0i)q4qNN_-Ar%5fhj^}+5 z&fYH>S!pfAdrFhRStAPuy2-ptRo$jIWt|z#HgK* zQ_i1!6ivf3>YFKDr+J7v+4(Cg#WugMZkX-Pr@WB!wEJ6QfZ||#n2^G0wS0;6Qo+S0 zTJBa^PM3KYWKr34O9s*w2-85tW?iOWUzDQWS0PM8yl!Sl^nR+7cjf`aY97nJS2%ch z)JOn-_y-1_2Lqh}@9X1m=LUHdo_De3GEM;1!gui0stB+%Zi^n;1LC+8$v4UH@DyNk z>*st4j)IPv{zJlfV2-3CgC!QKc)u-X4WLy^ON(U4)Xt80*76pr#v=@fl!~e+J}G*83xlDd;jwMtOP8pr6<~-W^xA1Woahp~ z0{YaQ*QIFzI7ryQ>NzW*BS(^FF?vR7C-0tV>gyf`# z%~i1(pY~-;g6Ki>3aEdv#mz)vaqpxLKF(M`=B|GRd+M?JhUsMwG*_{vZ*aU(H^m0a zbo)P?>@SB{>OZ!RQrd_M$6_})$;5*%`|(j6Hg(MMI@8MQkR9+X_soUu?|10rCx|^u z$q`!eta(0Rppa4aq`2^eM%@8DnF95xAA@iHFSfor5X-jxUuh{Mdql}56xpH7?2$b~ z$lfcn?46yRove_(%HFa?_TJf>-*NRk@B96&{waj}KCg2e$7h|Z6|S?~dKY_SC}BD= zhXzf)UdgwpxE^0(o*YGw-Ih_iV#l~+X!HhIXfu=LbTsb|ism~MHF(`Ioec@NcQ;xX zBD9AmEg5KOr)E|AjruZ4drH=2)9(Sw!C7fR@GCY}I6nd_O7ow}GXLWFl+{yXvl>9) zi|p6cfXI^u+z^V!hW7RV*qHEC(P=0ty*_;SpnK-y>x&e@FjFM*lBxea>tw_sSL#`q z>TmC&q9PQsk6z$ce`u%u{P`t_%R>1WAD z;3sstI6Ht!n4Ff@58B!QSj_|`@!Iw1KkL2Rrjrj?ZFBYazV?*o&eA8`*mv;8sS|%G zH_JKzYr6dH9z8-jz)OYGqQBTs2KfcHw!5gIY#bZ~U(1Esida}3od@_w3YSfiOvc{H zS#&iOJg2Zf|LR|IkLhRG$~t&h?4ec*s8Qi6ubO3o-yFJ_oFRnU ziO({#0|gabm{x;Gufu?&e2E&qBvFI^)Qn8}(;)K4Eff9^==h=;76nv~hZL&MPM6u% z6t{P_5iqtiUo($?@(4%tXlEq~TcYWsy2^*-7+?0swVhTsx1Qu!v$g|-EG;B-1?g@N zY)Iq}Fl-%KV*ojT>55D^`v-l6wXnUZ5EdR2;I~hPq2C9qOtrd!K{Y_)xa2$AgYCZMtm8PPynZI4ZCI~qn*uoxIfBpz;Z4%&z#=LE4SPxG&w(GB6Y6o zG}(0b$QHl)jBPW{RI4WZ_#NXTr&gSs2PAt#V|P!@cuFp>u&85dScXfg_X4!d-cPA!LSaBgAoZZhZb?XTN)JWdXKZ_iGyuChP2-+y{`0*A|abqvTNdk2#a zaN^3$`jrdph%eW%&% zY#eNeXxn7$qe-}QndizSALjR}w6MNLc;tjv;tJw8NHW?Zrwe-eXxeV+Jx{sM^*BY+ zm5|tGS|G{7Z8w`w40CE>9^;uvT)u!HP=fAjqt83K$K}SAeX?cONXHjV_02RhIlUc6 z#Zs%$(X&skRaPx}x9tjehsF?{@K*q5{RgCmglyOTS!6==t%Uw4(b~{fD$QbXjnl|A)UzG1lyl#r7ay$XrBCm>)kQFbz zUhwTt091nO{}C{%?>#+xjZ3_|yq0JRAqfbT)~zeqz_{eNFloqfv}El!29Rv z_C1BBQ1}3o0e!X1Yjr@CwK_rt>&zC@h+aDGMDd}U^ha(gF^Zy@Wj<`sU)^#VV+av46NF(iQRx>*00(+_ERltAZ5;T2b@pvJte_;KNguK;E+vhrujt1 zcD9OdWN2(0kS*?=SHqNaHdYp%7$tm?HJUGbVJ7vDiS#I7`}x<0!CO&OiKVB!{J(S&+ZtFR0czL?ytXP}vq=30*|I2{oSc8abd{!*gEYv{!w&aElK~C~WfTHuLyiOrB&K|a z20>!I|7T$|O|ZzzOeJeOmJ8lehQPTLer4H0=_V3-z38b{owX z>)eeOwUe!du2mytX17jC&3>f$-0mn_`z~+RC9^v8rz_xgp+Zjfa4y##s`^ihfh)CV za}?G^#f7yovi1l0{_;lRYc)jk{BDH-y92L*1tIv!cr7kIK2Q|np6jm2c7qyCx8!u@dO%PP>(GQhc_V##C_Yk?b3F>wC zbj+?C*?e0)k}tG(*QyaPm&Uv#Wp`_oY`h95qc8GWPuasEcEJ3g8kene`X&DJh8)q0 z)auI`HE&BsO6%jCAfe{c&tcAss_pVX=6|XlNBh$nd|Tm1unvI@=uF~`2Ppyo2u6^c zdyY0H;GUeKJ{mL*c}b5gCaNEdX*sX60sqnl3;TayU_2wB=DWf5fb{90grNW#pSGYY z#3t*L#iXS{-*a~w7UXd_B?K0Kg0z7IK38IpkV23`j?4yhhFaS7X_jFxJ;3+w1-~CY zA6Q&$6UGPYE^yDJRRu$T$jAO?ky9IdgmE0>$S>Z_%l1m->WZ>4w6wLF z&(RNjvoCOc;=Cv3cyoBJ@rt=-of2iQDJ+$EWjkGqN$PX+C+fql(sgn;mOEeEHVMZM z9DFCvme|Xe4orb?({R)UB1J*^${Mf**UE|Nj(f6XX4;Q-i<*M zluuHA%q5{_+86gw%&HF94^MA%Po6y%_0fF5NR=PAvgVL^;07Wis&j2OtqpfkSbseD<_X{z`zh-HNQp~TOUFHF`&0`f zE7B2N`73!a1N zZJ@6YI{_o45;UQXot?!6(yZ2OHB{^@Vhr8m%$`*0s-iAgVV`QRU{%=3|1o--AUr;z zp|Rptz*GM}<6q|I7UpD6ELf{}U0o{f64!Hd@PBWfcz0IIEMP83T5V}yo`A-s?PW=sMb1-k~URJ-7la@xWP{l;67Vt;LLz~aQs4wu5W*6 z&*bh{Sv*1IL32*@^n5N-puh=H&QlinEikZF@XvnUlg*z*b;lT&T045u;vBlLPk6qb z(L5=&|F)*#LVAsyo<}TF*#k5q$Ggi7@2}nh>Kjoc=p#hYUCs{#T8@`Iz~q*M^qU~M zVF6SzU#q4)oJ!(rNeLqh>-71t(Z58O2vNj82tn$~Ees6gC%`jg1;9|xcjv_hbJf;; zs;EvEH3jd-H@5C$GMQ`K;QDbx0{B(buqk6>sQTGPfYeR#}Urjn3 zY+bVX!<3l{ojVL%ov?37NE8(pJ!0j!ZtK6TcVb`YFc#XWQF_xRu&#Zvba~X1`TUHG z$9=>L7*2&8xd^|&Mb(Qf>}_l7kLQ~i9{J|SJ(Icm{aGEBmi9k>G(}NVU9^<$RmM)( z5l7{%iA&qF8`043o_ ztdYawTi$~6l&rnWD*z~uZ162-335_{u#{`lL78c6iI^Ka^ zJ(>AqM_l6d?6F)fP(if$;N9C^U~p%Q{#9#uuenF_Q$dwEt)Lzzk4;>r+32iXgD(aH zpY9op=EibGDe1@BH$?U!(#JMxU-H`8y6K08?^U@`@GwL$q54MBiICIZ5`He`-Q51^ z5C5NksKqa92?+@|(9!3B1*UlXI1ET*h{b#k+l_?jJrWWLpw%E!_U%+Ewf9~>*#Y%; z0NjByc?G>ys9n-F3*?{ful*8)FkS?={|^mw=^EzU*2GA314iw$*2UJ&7c?wu*o6+} zdW%b5W!j{sYor0+#H1ysMl*IeD=KG~XVufCoz%o{ZVc9R3>bn=NtrnTUUp!d-DOK# zJBC8d&UN)uA~)|9w-T%DeaAqm#f1gzd#)rT&etCf4jr$HZ53)%IbMQgVLX8O%uH`b zwqDo)g^@erS}XNuPeNJZsq zjTCx91|8O&J34E!^j_W>c;~_Kc-fO@4($7wPmC0+hiZar1PjwE$#Zkr;1n4Y9IH^+ zdHDF(UAGPNsxou8r7dVZwxAJ6RnUbqDaUY6*9>Nr(Z0Zm_44fV$1y@?dV*))`&JM6 z4+KQ*-Ri>94>`{yci{O8nCUgN64{`y2>P|Zz@G2<_~&}?TrZy(tf|9$NrA`w#Z z*#E;)!6bI{0G!!!eU$Al@z#Sb7Rj$yYWk}lPE{SCV*dqzZ)~9$mkc&Ic$Tfu85*PX?<9 zpjOa~09Ol|1_6M$fcby@+8{hE3Dbj}D;6P_T&bw3@yDVOAj4X`a2-@6ALHUuWoZLU zIUdWs(lb%dtr5?tA04e6vA40Y8BkI}fd=UnOsl*+MrvwmnALi^y6@owpgG?>A@1z# zl+76gK=hT7k$+Sa-onCyin_WUe2|z(%FfR2<68cAG((O4ihBNb<*9uUK!W!8LDZc2 zWG$jCprb>}Qd$P%l9A%D zaA~C=YFjmhg|*>#F9yo(o;U!Q0uo!~&4T4sPm`%jf~5+*9F44PirOT5XiIrvA6v`q z)E#5(?*~2UrTa{5-tU9%=8FiUUQMT>iGZ<%ouh)Q;&pmfSbRjD%wdd3itH;B6W_!d z($dn>kIJ+S~~QpwD7s>q{%G_21!K&c)vPdV!fpouUJ(n+ z3mGYDHm=xjk+1v0OVX)nB9h_+jtD}@T73bi~~yvSl`7X~yNLI!`A zTY19a30%*Qz1A1`+I7;qi9A44;2IT_4oxks_yEGQ&y-(&IG7>bvCj#kwL0aM7MR1d zl~*Xt=q^JRA6vl%N7$>E)twTmbBpuK;VX1>lvIr=!J!o7>^_YngyA!@e&x6}WJ1%2SE9Woa zOvA*7(`I^R+TVsvhPe8te^+JD;@;wRCezGk$mD=4st;&WRW$iDrXnI00$2;se5hn#&c zpQLHf^1$UO$Rd?syA5*eDJ=#M>O|)mx&G@MG8PHrIWUWecx<;KLHi5qsoMA`YLuFl zH@Hf!ten&-@pJ2q)CUwd_}(U1aG3Sc^p5`?H|i@#gZe2I8a>di-y|T2p<(-XuWUs9 zKTa9QgzcsehkxkfLCOp@baXDR; zOAFy&z>jXmR93iyuVh?(wlcM@oHfD+48xrmW-O2zhQ%-!Ew|)7R4wuXeV_4gcEc^R zQ7l|sAz&cCmbg|Iu^=0aBg;26MkN2ut`1fvoLDil^Nw7#*rdr35rS%Ht3+_%ekSYz zZGj&RIfzkUqI}g~Rq9US@+@ig0Z4O+&HAog{IwbNx;vSf+ru)1zA$yA)JihMa!QZQ zps3a0wtF9#C2jd|j#E2NJJes`IgqAAPaUxYeb9dhh@T)&ONLQGLIThWjTJZ8Jh`+& zVrChZx8U_9p$h{U{bM!(bQ70QP9f)a9{Yo1De#{WAZx*bgi4Sl2}8*QH-hNQW=g#= zH8mQ{py_c~k@Wl?Ezd2iK%d>FCQUZd(#v}>dw9+ZoAM*O6%&L&MQ}1-ntx{dqg0^S zt!bz{RXdbPcyQ&=f}IQ53ZxRg=c*P5kp^HLs8hUD^QNUiB<+8ul)wHQd301G{B89Y zK@=sfFqOWUp2UfktI=c*GZaRrm0Kp!E`P}RFRBwkjxaSpufK-%KO0?puzw*cRx14q z35nVHn3IJ%`R?Q}(7!0KWMPs{ZLHJ6>M@1Nf>s23ULX=RSOoQZOR?7C;rX~oh=|{I zOniKYLr!$@#Ui6e{mAsc3oPjaoJ0r*4H)6p-d+Z@s*>^S!IkHiI`8&{dICWAIHnG# z$0K3QwAAH@=oWSG%%HM%22>->m|}jq=^_4z%z7QZ_8F;-s;Qumg&NO+N)Q;C~yITIJDvI4AfibTn-y|jZ5PGs{XcB zAiF~h)GrrhC$~YEe){eF*7-;UDzrILqu=I_LYVu$+40=f&Gg8?@C7eXr*StkVh=AC(vN7 z%{QL&CUAZwuwk_U!ALVq>_5A^PwX89A`QCqdT0>`zSETlNpcv(Pd82!5%mmcLcX(kgzo!fq0xedgnMa-@gsjjy-RB_yP&XST1_ zcPA|9wpuYI@`(koqe0IQS9Uvf^7Gacvwp3lpnrSyn*es{!)+6wf@MY!#NX9UI2rP2 zO9qjsb8~Y`V>t@+u-!EOuCNJA%mI4n^swPJczO{{$XB~n_oIUWtB+q44mr$4&c5Rh zIBz(el5j+^)qMFJnJ&cSb$9X9KTQLjt9vkTQ7&7-cI{_ak5Zm4aNVG1)bpil6y)6x zvL+YmC7L(a8Vp?TftKmvE-p~BHd_N|Ouk7ESa~skD1T~lG(D>wLu_~X&-PYBe-{2< z^hlmaEHW9W`qX?;EIgtgT_)2)8nvx^5(MQWb~q^44GCaqq{lPg4VdBkg}U=fZk&B` zshecC`0yY5je<37@Kj(jeV(nbf-{=|?ziV@y_OrlxuDoY=XRHrLaeNgR8p0j>h&JSMv9Ws&A z@i!=viuAv$tG9Nyn!0kh^U1WJQJ%5hl#wX06TU5`ARxA7)hIMRV?H3In`&;&v4US_ zp+U3q_KH<+867R{v+O6xw*e|XgCiRnXJ_lqU0F#q;7i&5&ldQZ7--~f(60q_-evX& zrCe6B8v;Rx{sxU?*&#@iZ=j)(!<>dgebqh7($@Y*M;Ut(U#&vUblS;yS=@#Mw41H2 z0irRu_ar10aDkt{V{?KpH(X$~W6a4>;2ja3d-YSC?{#qP&Q=(7LBa+d=$-08>Czf@ zYfA-s86hWHlho=b%h_~7!dh_LzE{7a>>m&`wUNi~?_Vh_?~+iP2<3<hf(Fu~q)-21}mHhqk8?IC|X;RfOxSU7VqQ6=Xl-j6ENs-^#&<40?-mXW{sE(Yb+LIp%YNRhT>A;AWzC}a`d(- zEHq!39bO|MB z1MCOkOAGiPRaIUY+u5!v@fut9_NF*crr=jkPcDFl^=^gX^-0+Tx3t(m4EVzvMP{=rSEyY`1(12hT< zP`x=(lYoiA$dV?0Lyix`dD-);5 zzpu6H%tTk+T$(+WXjynPoodz1qO-m8J`Zce?f@<{z^(8B*pPO=DF8@^bh?E|3FVna z0Te$c7uWR6nq=a!9pG_87B<$_^&t8Mq6vCma17FIX$U+GL`3ZKpQ^K|?cEn10o(~3rk-oLl10TVZSAf1X?RYwiZ~CZNhi`|m%WT|a z$eX?jft;JWf~!g54et3*t2*dh`d+?74^nICtiR04YV$BR7kQfs>S+pbsY7pMW8>3G zhp1|9;YKN-vUd7>+0akmJ8S?FI zYp!xVp4FK1__ZKgM1Kd&`g?(tNA_>#H$cyOx~hGl3r}%`oAYP79k_Sd8ry1!jZK0J z8*ozFp$4O3Q|-tznbzQT4ZlU+BB!1Wh5A!yfty8)r*D!c-2ryq5U#BB^7el0u%Q80 z@;wLBN7(Blkmq(m+)NOm{!uHanwXeE;5si5!GW3rp>^R3R6w9wTU&qDNz2I4P*9)( zz9TM9&&BmC-SG7Xr-DwZC2AE2YsFipU}OwVSgSLx0c18+fj;o`x3P|q++3z7)R3j6 z!UQaXDkieol7-)j>f8IUd3bnob928I71cL4UxR}M`JlA489so{YrvQdL2E`vrsn1- z{VmAJ5+k+l%%~b>mo@`36cO)Sk-*H$=8Zgz@RGSjf)CNDRQxhAL2#QC6|1JhA`b^m z*2uWcvt&o+qw3pQ!8IS+JF6R8mTuyVxo5>=d^))#Vy5TmUoUi!<&Vu^f&mbi%I86V zp6JhJoqAH?nuWLfYhu=F+!tyUK1zvIL_Cx__kn!{$8+C<&$syVk8WSM%wmMxYw{6aM+@WhD;i23j6u97Qoms|t zBU?ZQ?O$FW^L<-T|7yKmrrMT@L{H|6z+|p@*v3U3LPOAqXd2ViL@r9S%8ixsr{Vw9zd`bii=C)Zt zhjuvidEn4Pjf)z}wj7V&?z@#0*2KN&G#kHfu!g(_<$`K+MssmIsz%% zF7X{NQGlAR1^gV8VoY9+)MAKrStts0SW@7|*veK<=HNR`?;Ctikg>D7HDALvX?Z>) z>=Q~TH}jxEri!`l6p;86li#QM~xz`jg2jf-$9}57n0T@_)rT@1K04<-`;rQ$mS4J@ zL6lzy(cZH0tTxR(+7I?xy=gB!G|Sm88NQi$d&5(`&dnCC_!)oP}JbBvDf#$a`zq<&NNbS1YhfJ)Ml%@2h<@ zc8k0bW~387so-Rxb`D@TS8O{Xf0&)(MoSX4T$~^9udS^Okjf_^$NvPc^T(Z?&86Di zswk{f$D9it2{qfL&KSKGIOE?ZtvQi<(PqN6Wr)rS=Kqhu!6>+*1`Q-=cD__zSX2Qb zB4kys;O^FV=wn#me>?y{BYY85IGj8@#T$Q&9-30dGEZopl$p;QWZVKHhO7f^#g~n# zXY16AgnVWpm4bJKDH$1~Qq1^Xk4(MmjOUOUpPr+qpz!3Dmi{=Z&@k(pJU|+PB_OPG z``)7>J%(D%uO3#j&DlJ6$-P>qK?@D;-H(7*!niaTCc9>Ce1MIBQjG$s!Ud{v5JdUa zGn71T2W1D^)Ehu&^j8ZS+OPf2-jLm%TVL<$BH>u#J!Y^2=b|I(LiA9%?PgbKM@&Qu zF$KAoY#@XN0Ok7zd`bXdHV+RghtEMNgTE~q$-~737A?idLIk9+SOa$vAyG_A;l{}d zrZ8^dwJ!A;hgJO0d;Ci9hT*2DTWpgBGKwv6@YNezKBN0f!tk=dnycVID{$k|clV1k zQ3z>Kt$E9q1Km0J2|vPZOFR!@{Cl;kVzaPPmndndtY!-Mog6or;?&f3Nlw^m3C?Hx z>S$1wxMn1F+au>Yr%}ClT|8>T?l6tN#WxBfceq?`y^o6m7);BzaN)510;ZMfMcKET zRbQYA_tEScee&Jd3pxGN=na{KNlyHMrXZUM?pHT>XWLR`Oy7hizG%Sxv{>vv^Ao%j7j@-)S?0kFtiHdBU)U} z0kh5*S6+ShqKo8UV~!-eML}jaVdGeJq80blW%ouzKoheV{mo>nt1oSBZ3E{6w&C<7 z^YW6NJv;t8#`sU3JhA+&eml7%W)OhCRNNgv=D-jO=t>0m5LiJ*0smtFS>@HNuYVo*Q|9uU_yyzR~#hq!DXg)@T(+vM9lS zv;bfB%g>AbEW;zPAD4Y&`Y@7O-#}~f%1}9Egf4@ zFipk0h=7z7!=pAOC5{62O-5HiL0ICM8$dy3NP;m49FlWz2D$(Wg@nxHVb}VJ-yjcQ z5Q_}N)&YTH)0+6bz{Ty|UO|-h__*F8Jpv!c&Sw%5dvz;Ww>J&DPGg_C5(bo(vIp~fUy-u0X}hPk<|$@{s46O|#(2wTp7hImr4foORB#(znQk zbUIpFU;V2rhn=0CeG?Z9td4-vh(({k6C6I%85+ps&Hoxqz;m&bce2!%kIs+ z80oW!+22z9E-m|P9jqsVKVhf?MGrQ&md<(elX#ns^%fns?|Xgz^GG-zKCPqHCcnHt zIy!o~!j`OAmw)y9xA3bFN&mE(ptHgGhX%iU^x#QoT1H0RK#im3)Aq_`n|Il$&UE4X zYHFh}E3tPT1`OI{?$FNh31)T58U?}B)4xcjX>7tKAeH*bsC~}+hroZ!Dv~azpif02 zP+8(Wo7wOsN4d*r;%-H(IdfPZIVW#QXfgxUpEk*f#Y?^rlQz&e!1S8vdMG28U9`>< zL+c*jMj!iu;cXKm8SLH7pb#ZwHzkAsh*vX>{?PBILO9>XSKycuY2bK}Eq1Ci)oE_m z#w{?+KaS$9b%-**hj$)1>ArjUd#$~u+ek(7q_oEO3}!TIPnmghC-h$&ixo@4dub=Cy87m4Sk88694bz`7eu5=dgUcwlH?Ph*9EJBC%-C(w znv9nfi%E+MD9eNzF}N-C#SBX=^#S#J2_(pSu^ z9dsm~Q5cP15dEw@Zt2bD@l_Mdq}N?PA_${dl~&Yx9@H0WZkh>u`-Vk+{4`Jjn+8l4 z*V)=gqvYslE;+m{%8M@6TgO_F>{Mp_-X@FPwBd8`D>J2rdj{{yZ9Q-ffALh{Mp!b~ zS`iyDoQr?<_ZOfDiJ}BIGj7;ZN|T?CiT^HJ&1j>I`-@_v=VtDxrV(HRI{q*y$u*R=jKc=l&8V&G|$ICkGpq zw_Gtk$}4qVo2Fm0ADn-M>&i_}zj^cK&o&=xTwEOdi*_6~JPcA&QtWpUG@->#N7yTD zX3_^g8kP^eNl=b`<_~*LKJ*fd3bhO`OC4&t|y`-F+To4hf58U0z3f^nDvHm?+C@UMV1^ncxdSuq& z_P^b=UlEAmNQYD4hN6DnZ`40=yHr{cE%aK3gT3fA1d(Z)T4dh8m0i|%pYLDsjj)+D zMN>B;B{d$jX#KGs|7)*<*j$6VVE2o%;;6~$($C{!vbA4-SPOf5Myg%V;$xUoa^I1Y zzTHb(z3*VVw|nzcYmUk!gY#KUCSy^}!S?Ej!{tb_H2Q-xsb-_s8d~9V1>{s8#0}8W z`(Aal>jxBQCrLVvpQE-*yL6I0_83!Uo*nr7n33CFXH16QdeLA(>%JW^o5AnuOG;NM!IKw3p=seI7&rvXY4)g#rU#0@#28^3aBu1Pq8U8P^ls^BA>`Wn+`Q78#;0wXYaz z|M-*=Tch?8AVgN5-T9#?36v2fhji(*<|PusqS-~oqx}r=lOGY8a=m?VX;l}Yki5d8 z7aXX+cszJobHp*^oXq$KPTg+<1a0!`%4D7cLxWCMT5559dJ6Nkb#0ssYRcUX8X3Q; zwM#9}59JI(2~l20KQrF#Z4obXFS*-2QW5y*aY3U`#x1TQo1E0UAw@Fw)oKBTb3sl6 zj&+x^FweUd<|V8XF07rB(I(wOp%@x+U2W5@y9m#_(g%OF%h+V0#!~qfVZUtuR#q?{ z37>vlfEUm>4Bv-K^&$7mD4iX%7D1>Zc|n`k@H+pewMJ15+b6I|RKNy)QGGk?xUYwO z^43M+pPaDMuRACn@)49eDJeq2UJUs_j0j@m%v>7Ww{sjH(M=ZKdiWrL!BED^bTb*0 zFsQK%-NTH#a|0=^zsnt^?=;L_KZxb6=C4aEe-^vQuO5{+Ag^B}PQ*e^gJTVq;}?DWC;sPI{q{K5x1zMJ0A&(cok=KNx)C41}|l8W9EU-UIQ_3(J~i1pjb zZ>g>0?d6DH-Fr2*(qSkYyw-Qmnx!sJwI+{6u1Ngax9aVE>U#R&xQl-#V&cp%Fl3?q z*GtFEbAF~|J~4US%f9Cp67MDhs})Lf@(+)O@HUTY*N@t)|aX3&57-PqD0^HIo)H^sGwuRJ)u zF|Q*=h1G&uMnLdJwN)aVra@AYQE`+p-X-4H}ZHK3}KQb{H}`$+O@sxQov%? z)C2f(k-_;xbB(8>8j|P)GGtk*C(`0F#&E%nd`26+eydl4WGfnZV+Ue|fkol8zXnIx zMmk`)M;ySc%Y8-|A+*J*T{5V6(_yn}3D}HXE4e(*qR;7YdV}AE^^OP9)fQh8jH=Ws ziL-n3h~)tjwa-NeS?a2X4v1~19GZLsX+jNo4yMOnH4U>R(+INk_2b?1VZHr&Zi#}4 zS|nrtQmt|H(h^5zRTlBxzDopSW0uWuD7N&;QFg3$=gX@ zKC(mKu|hYM7vF}Ou6@zd+x!mO06aJUi@h99&Kgk{Q}mNE(<>~>9c*^X&pb92GnzlQ zyD~3bEY7U|=ULIR#{Sv0d}q%aMp+U*D>lNmDr@!6y#Tsn`~m3ZD~> zawRRI#<3w8>*##=(CWf~9Yrv+b87Cq=9$4!PVTBZpDkrlk8+GCKl5J7T6(m9Y;0cy z+;2!d_gX;u#+LaDNy*pHiarE?Fyc1=myeE->UOeyh2z!(0w#^t9aj*$tCe-1OwvL) z9f*!H&Ui-2K0yZH$Y|{u&V&FiHBv#Rz%zMbF`+T8gDVlW{-xjbkL9_=x_CDk?~6@p z>Bxdt%@IGbP=eayr}}DQ`i5B_v7`>STIFg#iTV5|D`;(ixWT%)QG~zYYl2m&&AKrU zU9A?o-2>Qp7e*^sp;o2~$)cn|mF*oBv0972#A|eFrOvm`@gjTQj)bGBuaq9D5aa~y zPUZ|K6uTEY2e&=FHOd@27@9_4VUKcBN!IdnJ3_WyY>lq@xs7vJM06I4bqd0P%(_;TI>g4DZ@iA`l(&B%8rAkC^#P7G>>XaTN8QQ% zG8gA(XrOtAaDwuxsvIb=Z6G@eP{ZfjJ3a0NE8|rMCOCO9Oq!tarsz4yaBYKP53dP& z8kqC}yvU&cXl=bgK|x{XD`&b#!a;;ep$FZnh^|Y*10A)UvulzXrxe%dC#uXneIgPf z8#npihJ__bo9?pSoy-wE_(5@Ke|n?IiEYy2y9e6eGZo5oPN=%!GafAm{L|Azs2&m5 z_xrxB(+rr5UZz=W*5JRmhh|mi#fz?(eHNrx_fajfd@$;nfLW-D3Y4QYSeBZ_6RBcImm#EUJnMFmb8p0LxJZr7i@C zK$wLmpqbX7w*sVo+d}0%jAxzVOdTX>?5^xB1iGfXZkZ*2_~21ndrqRQ?w3jl>0bet z7M08nSCw9b%<}q#q_+H&`xVlqc_A9I^R1-B%I=<2%(-U;!IX@tEiM#x@;|C)NSe}8 zQl4*y%`VNbf8^nCeOy+Q*|&o?Qqa7-!spZD8&bbHs!y*v_Da_vY1OIn?OT^BtLrdY zFs%g(BvqqE$3}SmtT&TFSJg6mot%=2@|C%fw;kJwDFb;_4S`cr@pb{QMf3JOmsZ?I z!Z9v1=Hyy=Hzv`(H|9Pl9VEpamfs`Gww{b4T@0CZRk#+yHgoef>ml2nMina@$ct)xc2Id98a!F=wgD+Lob8T-Y|RYe*ch1f&cXsy^HaT(Z=f4P$0?2@qS zgprripY;3hsy~Okn(rSU>wybq9;8Z7-hBG~G6QOb0U5Z4#c}j1c<(h~clhd@dg$z@czH zVN*R%$jyl*B|*&FrKjhGOwZ#jIjrq?N;&HM(|tQydNF@AaVg`bmgc#Sx$+$Pddks7 zQ01M_mu;#ljxwCoWUkf7?rqANmlml0@aHeXvR&*ZDIpN39wXy-3xdnK-Ou(2Kn9}& zj@2c)LY-2q%}S_PAs85fF+WK03R{(Bwkk(X0!sz(D2 za|d__pz8vk{m@&RUjxQYai-+x*sgta^>Ti*tUS&x)`Lo6%@Ok*n>GwtipPp(|(N*Y`F>! zF9dK&h>3|I6eJroy^-?i{@XM%Nk2c!Q9!EN=a*TSK+(L05FR98DElQ%do*JQq_BYJ za}<~XnZw*HPWaGU632>ct$*X#h25q=nbNiq#w zD*ggQ2LQ$cCJXgubHEch(7@8cYenJ%;U;kuz~Iq94jH77o2?QDH>!t&6>$e5nDA9o z)yB`@=tg2O-VD2+9zF)NR!~MJ6gae>kgSa`DYlA^34e2IGi0pdQ5ej(K+9dV02wR=i;@|}mWCbyHAYBG` zF0swd`!UYk&l#DS;UF+EHGLS*Zib|?D11@y2hv~*jKT|tT6Y9+gMe&CSiDcqJ;9xt z2A+Ia=qg(~GB@n}LPHl}J6XXLM252IJ7i3L2AK~DyXh-dy;bLXg8PPbD|M41Kh7{(lS?_Az|~)yf)$dhRuX{Es3u!stq){Lx!r1XTpG^Icz9gg&1Y}la)ajt z2_A$+3`E-xn3mQ7fMGg-oGJkOk!HNPu3jCf|_xJY? zkB|ExP2t}`$5Rd7hIyg;=8YdDs%g9K;Q?Ht{3Q|IIGi>Kyw1_EtWc3y2bjy>A$53Z zvW_2*UO|>S1m;{?R#pqZ|JiCK^eEt{L@ug$nGg{f*$4>>O9RyF>Vh;kOH0dFV01z+kR01Mmvi*w~I1;w?b%Axl|=nEYX*!4tD?)#%lzb#Vd)a%Wu-)?J~PaWw38*hEAS z?)Rd0{g&=;5WLex0`i!82;ck)mLig@0)h3sV-Wp(90>mK*C#fRnFb-bAJ;?c>iEG& z)3#5;%}tDf5v+02`L+@qT+sa33ox?4vLdMc|H_&x$z+_n!%l zc3ACXklGy8GBY*xf#Oo+py3dq@ldW9=&zt)M^d|{re2+%o%x4^G`F|YPx9sF<-u0m zVgHa}Ilr^n(SpYu+yuaB@2oFM0pCyrS49a_?86WrO?lqda)vz^6DF35s_OK@LNg!( zcoCPOS*49E_o58}>K{@7??aAFPm!txeSy$XhpQnK12CK2unLjX3{YH9l9OLbyc{fY z!+N}v3(Bv@6)wP{gKVJ%3bZ$4rHn93(_vCU2(?2R=r`r$uU@-`gtjwjl!IH124p7! zFN;+QSaDNF#6j-^d>KBcKX!@=O?yK_!=<0_X13n-gUAzviUtyvi!?daBIan5Ec)%Q zop~YP>+Qitmqp!KGkjSEC{zaJ{6>f)h1jysr>*Wvnwv31goLkGok7BeWcBg#@*=to z4GoQt+;&LM1C09onCQ@+b=umsNDI~t<%r#@+0cTE$E?!5fGG}&b3M>wL5%{yR0d3d zBkCP5#~2vO1=W07c6KE>7ODT<;U$VwK-MRib;Ed{p zT?}sW1c_8VNsvgj1SH5OS};08++fB3Mll;4Fl- zfB@C-2Kv4zGN?Yk?}d$yfnjr(_3>l5FL|M%w*j+vqHZsy&WEYG+?#eCkZt4GXE;sD zLPCuuIAax3ebv%%e#5I1Pfk`eynqCTT$RGha6<*h=#{@kmhdL*VMvYOetzT&+TWSw zWq33@I>{iBLk)C(77t_O*0dR_drp3p%I&Kprc9guj>WS4FKQ(a1-JMHw@+bm)s zw-k}q2#O_wB{oPXmx2L?wdmvHqq|q(>4^&RD|qx63=9kq_o(p+s!4dnQ)X}#2Yd?{ zB-@}ec{A`itP*j>q+EmHOiW0K{1T}7(bmpR6$)Aal`^2RL4t}w7hULlU=EjeNWi2t z8p@6B8!j#^)Pb8xTp(8rDNvDXMp9CKz+nTpVC+maoKbR+5e>53B6c%v|` z5=sF2P%1dkKtjL*l0HaoK;lNBK1qXYbR>Nma+={`|EjcOfOO$c@N*Kl?E;`oc$u%k z1##UF9|~bB#0uH+S3ST*^$6|(xSVqF5l)u<#9_ zQb$(Xyjt(1+Xd#Cm5`bfTpaA}$x-ffS4#34?))iVBzo zp+`gn4($F&+9&`QUyTRpk?d~R+Z94+INC$1z8))Q}7=?y~5TZjdf%>CTrfNh#^>?lYdX_7~^JcYd68U2Cs(?WOp>&z#Sk zW8C8oLSo|SwKZv=iu41EEb%Tp7D`ZbfEx=mza8M21<2hTJd1Bn?P_7o>~=SA%gXX( z@j*TF{!JI5Glp;*G2!d|BiB8@wgiodn1ZON2)=%$nB0sEx9TaM<$Iv4SPW%~)-y6^ z?fsCf=YrkV(sG}9zG-?IHpiWr>6a3(rqvtS?`(M7p}>gBZ#9 z`E|Zi+c-ZvQLV7?g9Db%AiRbi))i^KHzxQ&+-wG(F`;W$fT|I+ z3Ga=KrD5D}8AC!&?hi*InQ1t@y+RVmA zcYNwM;H8;BfWqoL&yGHHUJ`on&~mb4#~73@l>^;)(3x3DF%iy`<)J0rp=u)Vi+xkM zIf~9wH4TjvEcW-K4`3NY0IXJRGh&ls) zmCv5l?&M-@R;;0dQ33ZBmX?<^4b*Sr?MQ@Vy_azF4y83UaQCtorH@c<9PYmfP;v<8 zW0A?)Pi)6m4M;;Rw36ZjaS0@0v5*ns-YR^yhr@+De1=y`Bl&! z69|R8+P)-uR}3yz#0L;+x+=VsW@ubI`&Kun8j#}@sfZyT#xCj|a5#XfiI`)<&I$$thX43Bo z!V5IOzm|t`Wk!a6`YS7XiHFp5wd)9}qaYeWP(~UQ+*dwdW6FB`!SRN1FPXNR7b7OZ}$4es!$tP|+;NbRzL3F9}8rBK6-JN^4 zKLahuIwt00Unwg@FkAvV=iAUX0$#xvh;-;ogU)Z?zHJk%H$~8<|E4DWC#(QB@f)|} zJ|moke_@A1Gm8bReru22R}P1pln{+o78c=5A`|yC0RRz@roRS_HRLz7!VUpo32BKD z>Fb-WzQCV3WY03X1q>YXlT4hFT#c!IQHm!< zV=slAp6(B1{m#%9gH#1@RbskF5=cK2`!a;U7QUmr?KLWOFbx10=|4yY(ymfWA8jv`9nf4cYt>u@ z%LlVxDA>J`b^lk|+{m{AHx{@`M?m`z`LRuKYEy};3qdRlI^Z!FP5J)?yglEV?0Frc z3gpaWKqrvj@tc6T*Y@;-3!nMtvKo_wlfSnC^L7UdS91%K`dY8a&6)LvpQr87sbuAO z^9y^!Bcq5{aDBacykjf7>^ku3;U@cx$@Gnu9NMYj^WPSk-2Hz`T$z#iCrrr}$4npR ztS4P6bsoS(Lme#N(>K!B&$xW7p49BPr)Ur!5>XpjSU2XfT(6(##Dm2{@||PBcJARkEc27mh~>@WeWa@ z3GW>Bry-3;y4_8-!*KA&^J$kCwUXOf<~?D)K$0sCS_`Dm}gUh3V^jbnEf zay+Y_?*f8P4z`c-WJSp`Uk7zBxn8^B{CzC~j=n*~wY*$;f-1HvCGExZ$aMZ?&q}+T z;;&4pDx7zBWkrxu33vJS-Mftt%E1kBe9%eG18VdF6e;7HUM26r{H)3Q-le?%16Tx* z2{9oDZYv=Pi6sR2@Y=5XhKCbCU8PLt4=ZB zSm%AZuva_wcRvhY==NrGqeXsn#9UllM!2tUZB{$zyEClT2K}@rCcvwj163vm`V+a2 zXNhI1XB!-7dj6#MS2by8=ABVc3~@WoqREHl2u=2Qjt((vYw7xz&H142#*2R2L3yVf zsy`JwoDu8)IrP2j?5bSNh?wc!cIo&Vt0SdxpH`F~XMboFixm)_IeKx!pM@&Q`PD^( zs~C>uUX8qn*o*1ev4~@e;$+};paHIY9XK(UHV@_}uT_yW=3R8kWima}aw0`&N?TQ~ z+mARd|Mtf3Kgr{1Nb7oDB1M#fidQBDPBh~lq0HGlMQ^&!iqS!Bc@)216;5DGL_{`= ztkWrn?N#7xTR6+eOZt!tzhHa+1x2EEk~``8944NB_Fp^iB;1;0nRXD6dF>=%6!Nc< zc&iJF-TxwvLd|17-$ArI!0^XSAkoa1j1M2;5`brL1oF<06P0ChYk;d>!^WP68y=1} z!cWjn{Z0_Z1lgAmjL-yDJ_*#k|C> z``E6JLtu^X_4t%0y3%0n_gs8NDr)*5FAbUL-3(XDn1?WkmY^h4Q@b;*)!Wmb{Hg&b z-6)*L$H`)nT<8mWFBb=Nb{H3i;pP@DtPM7Et8~?5g6Ph|52H#pL?kTkT#%oVbO(No zsItM^;5>hw!o6>D>}GvKR~wi;T@*z~0m`7~DlD4S7ShXAJ2-La6F-TIE)bJ}Zk!~F zVg|va#e9nk!el*mcmK6GdhUxW9>;s^fu=WK2Xdbzs;0&dtVo;U1i9qGZeuJUX zc250V2{H2!GMS;VT$-F2{=-KbR13)Zp+-&Hi8Q<362;{!cL?y3Xpz_UnL}gpuMuJ1Ec%r@Xj6% z6FzaOxfX81PgL_)G^oHKwwy7FJE~qe zUGw{g{e0Udv&mPY-u!z97-x#at|sPaq+`{Xb?Q3{!w4=oYvpRt8Pqg=^d@N z=S5LFv=I;?F+)mHjPN5jIQ5%L*W>dx0&eY+bE>C^?M$Sq_EbG{y)!eDKE98)?DBml zkd<=c3Y#nlcOJ07utg6#a}XaR%ao!_;$s^fA5Q@%6oB)6(7zgOh>D3}L}oQ8&H?H? zb8rf`=!Xh*0NBC%7}ehH1FtkLDXA}DVW89n?09a}qo|0}!NFm~Ux#WOV2~Z-Txbp9 zvW|qHr~kNV09X+PlPSnRJ#mt}9T^=xv$`5%Dwz2%=<5k{74#aL=KvF4djGqisl&8X zIxr1)!yiR?z`b=~!p3Ids&Qv7QDkv2JNk55{!>tJ&^6%54aPg?aNAtGLIZw?_qXw^ zz1E?QXmKYa#w0za7A5lJOl@i4Yuj60#7VH8a%*FS{$yZx82n;%amZa_qY3Lba>v8c z^$3H653^|nrta(fGVe!+b*L$U;Cs#S@KY-DTH#)j)VmsnaI{kEqX&CYPsDbPSa93V zpS~QFk0 zR8mH z2&IMkJust!yewphjJ(z`#;U8WeKxKc>HzqLcVj-Un}-L+kF+$8E(Y;e0EfT?@Z^R0 z+qd(oy&-$f;YD))->^Aqr8 zn)XLk0n}FIp+<#JODx*4Z{+tRYFjxcr(*8iTYh;(wtr`8c3_XHWVXcr5l6L-IR(MP7=dB6pD5duU(2O8#i&pYw`;?k0) zmR3E;XiI^AC>B7T0))gPuDhc3Lx-WtQDMy%QuuJsgtwl~a00DAbMi6D5d=JFv_b9_E-DSp6!`LkwV!xz3D&ljT_48`_y4cZVL!5icf{Rr)C8txa^mqUXg(3fBXXU>`{H z_7}8Wo9^0S!{p^H53&FHEu1zIZo`*SFVP@yB?cPVgsdz{fbaTABWYhjTCYDu;lLFS zqcHBU}bV0sY9Fz6XasN|~igWOdTX8FJb=?;5T<9ZV1(N2G*A(v=}94GjoO@B5O)88xb7U?eLPFr}txqSIOLcY#`Zh>0}6 z)cec6epMJC%1lzJ@b~T(Nwkyr2O97>b$riqu{tW;QAitAw9+zMHmRvG>UH*xYi{I8 zw@6uVaIhR_2n@oy*Rli_!{~%zfe4H(hZQSc3NeW$q!5D}64aUB>^A>i3Z|CPZKrU3 zFFWEsPsYps!9jA>kdF?Z-?I-o+t2T7-XVPy4bE97z$1{UcBMV+?8k8F>ktzdd?N8) zz)$D{h7-~t0QYMc9LB)7ECpIdQ;xDA7%&3b6bX0|43SsI%7S&;!+IfM=IyVK&tdWi zkb}{9c_>tYNHPk-I|sCoPC17ZoGpPL1D)b6nE0UA0_C3&(vLn5Trq|4Ihd9-{{9^d z%meuv7iaJUxtrC(XT5y+^~bXsLkAX-D%00f@ku{N5JN zpQUzYjQ_YjC*3(fW|Bbw?;A;Y*No*d1#>L#bI>*b_j8HYj1bvV-7Ong?lMt1;?JO?^FBo8=`}Wy zQG4n?Un>`{{hT^O6uqE{_`!|Jl;B)79GcrNVtAvNkvZJMUbD4;kNNDa12HI3=NwpG zt&Y0|n%hSeul;C@#S`t^c-xi6qHevjEvl9HUKSh~x|3PMtqB9U+b?)(>djnS3a^lnhc{&WT(Zzk`*TWr3)7 zU={9?Km*>U2vaM;q+d1F!o&;XD)@7V0F@CoVG0D6A^an7 z1OU2YJ~~lJVBl?_7V-g{+oBYf{_k8&CXklp=lP@#eA8#02PA*bI~h&X${L$o{mnuA zx^Frz;_!BU;q2`miKa#x^M29td*!TG#gnZfb>7z;>tjiVu9uqo!5fK)VxZw#45gEd zeL>M<+aW?+Y~%;`QfMwyit;yFHvp$o&7*C+hdy)V28V@Z+Wk5cJ^J49!D2^-H{a%* z5!>YAYt$aGmSPdHt%>SFNy-gzNpa0nCzjA-(?7)+j!$wH0_G&s->U~=-D5DH-@F7x zA9La4LQxHPd0gWDrG10Kb)ToM#MHtLr6j60!lu&>CCKGxAo!RHpg_J19Aha~qgeNt zHmmI7Fh*U{GTLbxQO%q22b%k)BQGnu9kosLvv&{KmCtknFrLZe-kjZTf1@SzR4;%$ zxoU-=%w(Ice`9~=gNNoKZ#(~tD6P5iJ3Ujdi_o%=Hm^~qTS=A}c|fTS`v*3WL@vNXfd91D31cDxT`RIh z<{Abs)d8oPOE+9Eg7I9}w9bTN5YvZ=Do5baiMDdtZN9&XLmsm>Jl*62!-)LpJtSZD z*9q9P87K*m7$pX>Gypxo+6y46Q1H6cgy9{4qHr)N z#00;)C>s|J3{DNhFCyWVulURkjU^rhNrQB}&)9BRZFV~W58T|W-HAOtJ+<}C_)te6 zgzd~svVZmD25~acKC7^v*Q-cG7OUP1ef?@@$Ku&jQ8$Kj^FIC4o1Z|6oS{B?UHO33 z+Y4(=Rlqh==)C)yti*sF-PWeTt>IB+=bqjH#npAyiT;?}nv=kkixY4Cuk4cFpg!D@ zUC7xb;=go*iO^+`-DyKj)AUuvqOk{b3ldfxY0Fks3%bsfzF(@xWnobaIX^rZ zTBzIe*gHL+-F)O6N0?fK`2z-MEU*6_+76NCS6*#TH(P5*!1~wINAZ^Fir{#9fYLg6X zjeyhuMHxh{j_@BaWZAR>%N4vG<$)8)#-pK9P$ZAnw@laYh=-)_yer=8(Z0}4 zJ%6#hnSiP0k^TSX0=$$dyLuO2ZLBJ5S}~h9u6n@S%DSN`3Cq7Lhr7ZNu~JSdlyp;X zU=(Bt=${n{n#m1{iV=~}LZ=h=dW1sVcAR=@PS71}#feR8^m#_9=|;D~z}6N{vVH~j z;Xvk2%iBD#w(*qs*s#ax!B*V+NwZhUhGQ^UC({(ko%9{h@s&)OBo{X*S@+2whW z`Ig-#LHVVJ0*RLK;bnHzSd+w@x6Tqx{FqA3~{xoVFz{F)|O%S5!vV$>oEw=TFT?7bUH-+)bDhSI|pvzQ?Di#2n!%a@1ddUD7_ z_uD&Lbw_-27bjeC2MjKcyAaA^FJfVFJ5CeAW00MEvLcuJJKto>DXjC*`_C;B_RX&W zp9}N}F1uZ4<#Y6SP_?-+JGO*3G)j9<`Xh;B4m-;K$Iyz8UjWCW$3E0pN&aLB5{eoP z8?O2##&<$}?qp!a`rZV8xE#~=`|?SY^1-icbg7A!G9IBc zsMg-H4c(b;eJR6W!C3V5;j5vFTZe~NdXkObOi7&@xY!*lvHY%R1A!Fz4d7BTfCDxw z^zx6bX+xv3V~_oPTw-}_LYNGdCu}RhXLb=4PePx>rT%Ok7BAAh)2ACf&(?xD$XAIz z)b8*Qe-ssw4<1YX2DlcJM3S}@=kLbp{F}4?Yz<}J1GjO=mc*(pAd;6I86~;%Gx4;H z(0Tq?E0_87v3;dx1vRHzA3qU4 zArW9${5MA>{@43mwrItBytmOEnzbdRc2v>p zV{+Y`fh3eHNzbJlg`trwIh3g*ILej*qj^OLcm8&(or&BymDC2rh+ z)lKg=P%waHrdKe)bUMYz7@8H2Q5`q4IiO`kFI9#>l_J$5W$=%;V@ys<0~0Fa<;RU` z!u zsm!AGVLZ{^eNBDfG<_(Us7l@OD_~pqj$Gg1uYECjl>2p^J^J4L<;8^hClb$#e2ln` zRd0*s70DB*h`d&QT{|*^@;-|ew0xTQIKx&_uIkt56R$Q=EJeBWJE4f|W2Dla9WVU! zfw;xiYsT#Cqs7sUqrYw@KvVuc>3Y%GPpOE7FcCq{7xUDj8yfgr*MV3ik_g`Wmi~`DD>n$@23D*-7;w0o|2cgM30mtm zZ{We*^{#I!?Cj|Del)BWdYdJ(XD}f;|THp>Abm zK?|5Q;_yadVf{KSKXiN{9nVmL7j8)w=jw&sU89i5s?*Dy-YT!z^oM4=6H{Jqt4_G_ zsCAXX+mDl-OK)!~U2AlO%g`KE`ak;F?-YPn*t6gT)?_WhSK+d0zA$Fhz#G|8!Va z&^C~AO=eXx><-%XQ?W%OYIklKKDO;51zOnq<=5WB;9CS7zP}4+G~}&X?1|~SA%?b$ zXenu`59O2UewPrVz0Dqcon9b268h0drCEizfQ>^got~)#~dJo50&iTnbHBVqh!d+Xw@?4RAfM14wM#o7%Ae^gH$kP#g86PaSDaw0L zO5JCn@c_4Nm{e@kSQ4?e$nB1`>U;gzB^u~s5a``FB8M%*CJPD=a-~?UX3Go z-9N*^vG9;p(B3IrgQjaPSVn-7a=(BPU8$9H^a2MuHkkWOxGu0M0htd?i>2{ybRFY2 zyUIp2&$`KrF2e$laZSz5i2~2{)~Ly&?gP*>0S6c8(6>}nRMHjbiJ^smWUmfWy%T2K zcej`J90t#h8OV++<>+!XLj0bL$7zoBD3@ByVNFa-q+*MCO3*-}98ib~-`AnTKlGN( zzLnC5hd`D|Ixev3+};{@3r2Hob=20uuMSCY!cMxojb03^nSA&Np|1jKK>z1>H7kNmL8yM!+MIOB>i3jo+u?d`|tjQYvvk3v;;t5 zr-YeDZ?1;M`I{nNa+VtJk-dqYL@gfy`xtpKY_^pZx>W4B9A4Yy#&xpMMfO!SdBkGu z*}^L_8dl~on1KjvvI3xb9UGe(sF2F)_E$cEuO!f+5QGJpy+Ik-5yg2U_LWCknqHvF z0;pWzO;7p7oS}-$?B^w@z?Fr~nl=%=5Uee^@~*EZ+I6(W`0fy?gY^Hv&)rTm=>`H6LGv!VH}uNQs;3dap||Fu)I|=hoxG$x#m#ouo*CA>U>@ zOHBmtO<8|32*(A)2+~A^5Qqte$iOe=w0*t@KYVj7&Z@Xnu;ko3sgyr3^-D6+z+}E-KWnhV;L+ z5@7ef85u_Y(Ccsh41W&{)Lef2ExjK|UWndf1Wb{U@i!<3kicvpHv&241!QJ`XhSGl zDVkS7*6Ux_N4IT|3Km!`vCYenwtKezZns8Pd|C>{HonxUFVKw$#HmBYAZjU+UAL#& z*%5AF%BnUuyAH;fr{oYs3d(e8d|^>FMuprVK?PO5i$lK~dJpmo@~7MqOvCL?=LZCD zyB^)4cXV{9db@w&$`a4l-dp8}_Ho}zO!X;wHOpBNx31`Ga@PyDbYI}W0~L=8A$h`O z11cCquY@RO4<=m$K&l4&pW{&%#qO&d;QWL!tF?jqI9TzD(rLJ*w?M@QhnP@)Nr~Q4 z9|a;kRK!51So~T@JGpIP8F@IklKwOM5PEHCGJjcMgDg%YVG2qe$LQCbeooodxjUV2 zb{HSKdTfaSvboyKm?BI%79Tf=_UQvQGoo*S*HLmVqWMpu{X@s|V~nD&GZ|WK!FtJompplrw+>9x>2q26Bq`cO&)#1!`wIjcz}(je$ADH!I0#9e4ED0TscoM z>$>Bu7$?pcQ?CJh(N>!CT|*#DmO zTH3}Bz@6?b|82AbG>QUPdVIz=pCTcS0pxaoXMm`)H(fTVqB>r^#)TiYq^IXKV2O5v z`4A!7hnGYey)#RiSUFIP%CZQGDKy?jQ`q0%bzQ)C1*-xni@QX4em#fM#GSA1*gcJ!({+Z`!n#A`7y6NwlOd<)BBa=T8R2$UP9;MDixz z0V#lXXViez;&9;Hq>J>0t-xdJmqMNuEiYweb~Z2dU%U39x85xkd*So=8^+zicSGO} z0i4Ol9lRP4;|mHsj9S2nfgaxnfvyeQ(I>mOlMti~**@7y?R_cWH0Qtx{1na2zjbhF z@b|5d?2m{XuC52@>FJvB%#(JRtlOUcxR~Oy^yQT?uy}wUHkiKN%f$tKk$o8tJmtxQ zH&5unFjz8|%Te4vLtHxH#}72Ia7+eWLiXw(&m`+Z+ux{+{#{)+@17w#sk}}}uJLaJ zAHMi1^_^a{>*18gBWmgb&`yKZbsK=+M4Se96*CnOO(w#x17sXTa%j&WY75TC7r8@8 z0|rPMu!lz>%uf*msI;_&r1E|Vmib+A;h?dG3VIov#hagEzv4k*j)tUns5mu$hrlQy zPb@>gR~539{D8n^$#cvojPgZwP1N;kdST)^Z*$8F+Tl5?GefRaiz z`NsgXZChFr9iEHPlAAvezb4DJrOeEF?)UtAd^bpDZ6-ywW>S9<+!!x0jh{M!TMAOb zkWn(?I}Gw(4#UCKK(+SO?iX8={>JJ3`yJ{voq7E5fm8h)!gm7GdRF$((#c4d4!TaP zR=8U7CKskKc+5Wv=8(s^Z_U(W;@&g=R_+(wmnn&()OiwSnf3||cdV4Ip(euMFb~Jg zxsSkw^K&wcR=CSc`^qJ8)JgW}=I6NtO)d&`@OEfiUdX93N~8p(uJOLkU1})GWZjRr za^siA#xLTzCh8hcLyHS*>Y%|PXTfqqcXhq+-~~xWv}W-U z$nUtF4)ZjN?Li*q-SMQPxR@GB@fN!(^={CQf{ctAGQOD$=21yXLDN$W`0S?2gQ8<_ z3%PG#`Vxw+%`M_H&-A9qKqq5wfHQPR-SHM&^XkrPoKU@Oo`(=YuOtNymtX2f z{c7x1tTP=P^EFrICD>P1_gxm??FRI76WT4JYJ{-~dk|>a2x$}wb|GP5@g{!|Ca!sBq%on5y{m&-l`B=`B$K zQ_FLbmFH7wXdiTRzemRTXD`o7ZFTHg_2p1mE^l7iKdUNhDT?LJ3uxV_s`D*!Mc*6^ zy5e*(_oiV6i=ACAI2e&OOf##!?^tyMOZq~?-wvt1gt{;P7#6+VH=1Zk;OC<_{3B`6 zp~IfK-F~X##!7z|D592oeWE$)WY^D*A5#!m9F2{fkT1N|LYFyk_^jiIy#u|p*}?WDtPL{>=~s_9 zdA#N(@tJAKUZ;_>51MGT`eS_CbGZHKqS$n%CoUG+|HG~5*2O&sMn)!ky?SLhiu|fg z{lMaX=5tPdGHUDyWs27CT0rGfa)DZI(7VaLl1oKxCb0eJ_mGj+BF)S#?Rk?wb;&7N ze&o4BONW*NSZHr;*II+fFy9pHpgB(xU%I=08t~Mj<)8Dwa~me6_D?TPcc9!>5CXn4 zWXH!NT0sg5P~wZ_KRUX_RSf^RyFXVW9;ROW1*Q0|{DB(t-4Ec1Aqb#{Bkhju*3)-` zryVr8`zb$u%e=l zR%(x__^0TD|Jp@3yja8>re1O?Z+v66&!gQ%cCwpVuA5f7uOAz3NXffEvZDPj*jMUBj>gCc8xzcn$H1o;$%1K22`^^_Hk`{a~6Z<4NR3!a34 z)*W=vQe^5G;0;X#Y;JAn3#2IczjS7~CJwEb_LM5VE1P-l$rfb86voKP1FrqfjR0^rN$RP&^K z=Z8g&LqvG?eT&)#$Yr=MiROfHgFwfp#wovLZ7ZX-mG&-{$ypH>91RJt3Hhs`ZUAAK z#V6s4;zF%K4&tXHLF&2KDeaOh81D`Bx~prrNcJi@O~&{A5!;X|m;t~Ra-BSbR63Ai z-{;^60cZ2ax*dcal1FC;*-Z_B8r@GiNHtguqY~`i&?JioYR!6z|28+X(X31E9?5eG zOduqJOEf1=9ai1KY{=%StAd^X*NS2i>d{|oTdMh5vwV1|e`n|G0w$$&SN?>$Ykf$< z&-S^iI(fKz5q{Id?%(Gpf>Cp5J9P8F${Cu_dsrberN?@FA1 z9QyuS2Zu_4Eie*4*X&D#FagdWv~PP>9L~?y0abQuyU?iMx6-e_I^1+AV}Zdf6*u>A zKPA5fyfX;P0CozZ$!@M;y@si$2OYievsi~xd;6qhcM=^~ zN8eo=Qs?@$ghACNX(5&3cBP2KeRGI~;n2F*=@t2Lz*vltugQzrEx)#Um*T7ppS$`oCksgY3summynPFql+d(Bz&-W_#2|$_?f8gS1E4M- z)Fr85iV@Zlsz1ZLK`9}Up>PM6@MUn%>lZZ#*g*I}K}p-M$sY#QjP0Ziy{;}qiN5(U zU~uc?9Qu6`5s?sw?c~2f zg|Dtq9A7drc^5GKoWPQ~m37C$;&8XfB}U-wuzD?59(A2xv{qJub|;SIx?@g|uj`&` z{NMGZ&f-ZWJj>$`nm;3neyVYY3o0>cPE9)cxlA<9q(M7lt2&eb%7g<_0+3FE7;)pc z)Hio{MsgJ33E5dwxbZp00^z)YRIbt)!&2|1+4B*F*o z&s6k*yYck&bo1Z<1&k~B3pAq<97}b_KPLPFTz^cRJiJ&>eOL3j8yD1$wMH# zWU^EHTL6)1#F0(K%*7g~lj~}Yt3AvlxwMb#?nz#wdb;2XepK>2NMW>&fq4z#Q(#}v6%0GcJ3$hEyao)pt3 z`2@mQIi;M1&6*}-VYYA~oBaZpXvr-e56smS4@o2PJWul4B>$;)Ly($cdU3I_fJkGj zi$FfVI8a4AaoVd2x50hR$8Nh7^W7DYQCh&xYckQq7xLUj08nsa0vq+0@8AERyzcUl zGDj|B-SxYi(tzOi%uAf5cb(lIUaU@cY+WAgl7V1EH|B_^VC@q<+57)KMt1|vv=Pllp6R%EJDuT zQMbZ=NwO_hDX$mhTVXb_>74EE_qpB+hs$9a--Nb0!YcKJeBzd#jL7EJ4*|4YXT!@- zGd!<|>)sLxrXdT(3-cLI9_OGW$AiCW;}oAh@mg=)`guK~_DSkdp(xAevgPzeUUfEm3WV4SA2C$lX8=KD-;4ME}>F0D3+?hGJZZa04eR3fh z9Az*JX9KFT!d9`NxEDkHhknJr)rw$C`qo~QfLEHSHG+!3@p)RJO@jTZD~8V+oi-+6 zxKda-DZZqlX{SzkQlQ6@`Wvp!TIae9#sM>Vvs!5xejsa8#}l=9&E9@5n161fys6NB ztxdFVmeTo@;VP!g!LQ8w4{LI>$se8!4LBWj;i?-B`Chy$2?`KA_JrebYHiJUc@q)ZQLd*0*T?C+!2)J*XfMl& zJ)Q_sxJ43Gc~mwz23OM+S?*B?1i=8j{*RKV`YV6Rk#}J8nwtIRlZ09Xn!QcW>tmdY z_$ixx-(3y^f!p!=blMtA>W7*AbSd7))1Y&cb* z3ngTfP;O0wvyzafN6^1|(l=GQx5Th1nw50K#(PrxP5Qs_QYQ4LzoYOO#V5Q|AHt!Z z5yR^QKA8uW%RR0!ycXAB&QVdkX1A0gPTNH*s)1y3=ku~<+XSUT} zSv+ubpkVo7V>X-SjPiM!Iv-;4~pGhMQoXZn?Ee#MUPdLJ@of z02*Uq5N;@wr!m{vZk`Dn>BDIl)?T*eeGoua*HDp};AzG+5=n&YW*y_NRl$~CD3nI^ z%hS;ISzW!E`6ag!jao9n6T*|qak{vms9h88I0F);Y_=S(3fx2sUbDYwK+0wu-o{bP z6i^jhmF(4v;J3Mpx)@ddP!XI(f-!O7nWv|L_BZ^f@bC;p@lsskGM0}!hTvfYAa9t@ z039GY+B0f6%r;bJ1EZ!Dccwp&&pqZu{c{HlR7%Xq85X)8(J=hZt5Q09QF$>?Vt0(6 zW0^3tqQYZK-ClD>T=fd`Stku~&&q%qbrlJAZ6j6IO)q=x(-LPAKwi)u+e`#-nEb~6 z#CfAy8{QhU)4Vl}r-PuD!P;YcJa6flSdArEEKp6fcdHu^SW}3y2}!O5f}r;{?;zghkY*4i%bU4|F^upbE<9{cbjQC!av8)Z&~pTszUrhX*ycv(S@#Z$ISc@`@x_ zHrZuPN`g68U!}bz45y?>0hEJU{;X=ekY9f&=yN?j*}c#Ch5IoQJev0*g`jt9bE~Og zVM5#%&J1|v=?8Y+s*Ju)TE{yW?;d<5J>H{h>pXT>R8?Es^)5j2B1AW?UAqrvRWK}S z%3A~5DN;Tg-`{C6c=zs!e)w>ArT7fYtf#WM0HM<3vdug^oSvWagA+DpeB9h7_X~te zzRFqWuBZ?!7!?;iN)(r*qGJ90%dqtkO(Ud9iU_Uh+{sa;X5DAo0vmX78I0Pov6#&2 z>dON+6SYSNFJHMuO-t)}^%gO(FF#B(-2Qiw;12`F#3k$HzA_nCc@KH|w>HbV%eaV> zzyo@S6Gfy~81U$mV4!EUqO{v-4iE{Xyv7K+PHb9(do-Toc|exAIe07)j7+{rsUN7q z!e(aXE-#;%U3UL(%1cx4z%8Jt*kEG=z({-7yP#6aoZ!!?6PO{iwDo+4_VL&3BZPMW z{}$4CSuXgFxa6w`Jd|-Te%Urr=@8CPm|mWD2cL~|kQW;CyMZqdVp@XKUOPL%6Vu4I zNjD2yj1T6Oact2VLzQUWgD%$!wexZK1 z@Wa9YqkB!yun->vZN&D@c1vrUP;|VEjqX(-=zoB~#}siI;b5fQ2ht7@8a^0cmFVfi zKl%VArvW<8D;t}9?TXUUzw1-a@8RH}S5}(kQXu+Y5MUxYU+_f&dr@e!*(n8vs1dy!WCW_6Qeb1S-{q7u;XLg{j$Q|8HNJ@*%WXr0UxJ;o#SKCpZffx zqYrvIf#K1@>tz0}3}DJhN=j;OW>wqTdL5>?sFT1Uq4DVGklNnf?)iv? z*9M6#@Co1n^ekCHW(fjdedL&(p9_q1y7%eV%8aS)40lPqAXAZDfqgbSK5!Po+nmoNB^b&{*M1F zX)5Bu{6D|>8!lMP|0ibnKWh#)y$G7~Kfg#e0s~f0b-@R$D_uFl>hrv$x;I#0{R0aY)uu&nVQ)Tiqkl)y?-y~j6eBi&iGJUkWJm3Q((kL+9lB=*WmiM3%$@t#%6z0(X z`6-PLlZIA^_-q(quE-IF-PQ5tfF?KKSSn~XAR$VIP$C#RAYK+=!0yfnkk-KwFPM(a9H%~9uE1(-C-k%!3uqeg5%qD-3=yCch9mLmP!_>P^$BxA zLeMXJ+@qtTZxHMSE;ZnW3{y+@sdf}J7b2XkKZ?@WAg4p z)0kIKoN#98Eb(+7wImN5w+YAfozuUX@D9v%f&T%I)!}1}vs04l&zvyAwiAIr`w~zo zgWYi;s>>5HF;U2qd-l&99H<`Hr+Y&hH!04USr@cF4y0geRG!=hq#{wFZIqKzLf*jQ z&dK>iy+&3TVkx9 z(y|~@(40}m+O@dR%K|X|5j<47+(7u0hLiKq87zi`l`189QHFe4fzgqLKy2ZgpxIDB zF=OrLs$>xa6(Vq@`#9Lu;22tT|61Qrmj!+ z1#|uL4510x^pOJmh$fcZRHm(CD(8^GE=c7J+az*n?n7oG!nHp!iRwh;FIdB zC*65pw>z$hA-7U%d6S$0u&_A*o#94!FuJq7jraS52lySTd| z4R=u1tj9N@>+RQ{^nzc^xMfEvMM+KV&KmF1*4`j?2k6Ye8EI?T`RZ}od7DtUp@GMK z`ZB;_so3I#2{8ZN_0ooMf0oG1t^`W@pGqqJ1T$XoR2#@OA{B0=wDaRVZ2F5 zt9p6=IYJ=x-HtXZLB65hFVBV7=p#%Qsdr?cZr8Sw;@ zkMhJ%Or=o-$LNoDf-lUcYX#8G-{gNAzQKC){Nqnq?Mn{=$jkLqOQQJB@wRs?>@^oh zk*{?=eoS+t`1EUEeSNxR=iwm+Jdo}x{4P^Td^6xssPb1W4%(t+m+!s@QYoO680G{l zxNp+PP5t6kf0jl=(H5`k+Tiu|MBKkdBKs<()rR1AXmtp8YNi6qoQ~LF)}I7}M-KhI z%V1~~+$`VgXLsQ|R^@D`+k*=vqPF4h0fID@@`k`JX$D9b-s;EoZs{*AEDI!KI;!EF zIt`UX&=`2;XtYd>i~O_F4Fa;a4_u6^!r4&|-#p#BA#h}JyV%B{VIKrKc`$7J&w41_ z1=piwwTiTSYb&kgwn_7YZB}3@C`g124&FSTL@8w5Zu})9I13US!R$Abtric#QNLu^ zXuBdmFR!+_*&UqtVoD|)Zdh9GY=_fwO*c5*qtIZE^Q(vY>C>d^>E|On!G?-*L3la{ zZ_%~HMC%})B(JD2Nim#!c!ckJbo5uZ6e<}GW6cOflaApB<^vT6MpkgBOx9#4IJ`C% zSo|H_aq|`vuhsuU*jqqVxp(iP7#JX;B7&rnvJem{X(go_l~ND195^{+EPoDy|pA%KGr=v3s~bWxLT z7r&Rx?rBaOb=ZG5*t>m2ydMlJ>qDXTU0~FpB2&}hjWli#f`0=f9Ed(q<1YkvD_51W zz#g2JQBN!*f}zLl!60gG^ig{aVnj>3Bgv0Y;c9QxJ0M3|9wQy)({pm>s*SRR$Ne1kKLQ2*u@c zN-4Yb$Q0eQm>$d~h`|6mPT;8zIL9BhT8O#g(s z$M_Km8N83a_Zb~^?!km&Z}jh_KLKkf9JaA+sg~rBUE13EUOfH{l2MAGc9bHE=!LBa z7RyMNQXui%>g9@t@sqi=MUCDWMDyK5A&8G}YyY!7w@>B4d3Jrv)uHHzgSt6qdi50r zRhtk>HQO$ht%;(<+l@+qeKFPdKa{ifyELsEz(V$G8sNyr+DLRr>{#j!jYyu^4*|b< z&cIU6MBX%ce3#tle#*9<4pN!0?qTZTxjEuHzmRYA>dNGI_wNv$svva@10krFYVc7* z5@Iyos6rP=fkEsW_c}_41!8IWv zkVjkhntcmAheyjTNDWKypq!77k2kll_zfj7vbHB6*gTQLgMEB5KUk|=WBqAJ#Zj`U zjExd=b16>^yomaIx9PD^=6uswM?c1MlqY3H(P0aPUje{@9IC=S<)0Q2(aYZsC}_do z4hwtvEOGs~A3{RH^RUifGyfiw_cVKpk&@S6-xs>xdGE2V?oDq-`fAwI$T(%;4)Y^jn&rBrr^TF*m!e<=tu!G&-o|I(XaNL zAOl+}aKLDnjFh5B9mv=Z;9|A6FVEn8?E~QjKvpOx)`P z1Z~}&>h<4~ey+MP6oB9c^d7g|GcP^;jM6D6LvigqDI3_HuqM)LL9qkJ0Uiu)yNQCz zwUi}noNkrJNN(-(a91ASf0(u6SKT6I-@XXCcNf$Bd_oyI&AY@5*U&ra`D*&=A6cap zwi=B9oq?2^^b1Ri>ql)bwS(A_{QP1Vtk2d_rUL=%EzmhZnB`>xx?}5^NQYHA#zN&C7L(^l;rc&Ud3PB&!Ej8nJoa;}K1U!47<~tIRn1Rc zWvN~%#p618f*cjQSxxfS_YAeab2x8%u6+rhl}-f03|tr~DnU#3PUnxqpFBaam)p}? zn1}(gl5V+DJ1$)vdnj*J*&M!PL-6_Vnsq!Y(Yp&urR$zKA73-!H6$pKQ~kU==s=S- zWJ)&it)q=otCJxIK7UU5ux1qW5)toVb%F&g(n-Nd%lOsTB2w9Gy3 zA7ILxAjgs6LY>wJ@DCaYE3=J_p+0TyYezFuikJ~A1`;I#2lMfZe0juZ3oAwMtck!mNXi?Zj%rvhg+~Zo&d^=HULAi zx+rB*-u>uL780p3y9Z6;n>TEaeKfDVEY3xHUsh;BsdQq!zc@Sn4p11A1qe$?FTXnm!``L zkSE0r5LWZa&;IJODJSdok%!>iF5|ub9zu^F$B`owL!h{UjRc7#-Vi#>b-v9DylEf_ ziHF?120CP2aLnYVV1uR~>GjRwu&Y({)^I-Ha{gd*%64HOvi}5#75o-cE;04)@_}b(E+s2UN{c|!8!tF#OkHljnxE_0a=?&! zC@A^j@xIg9#XmYmxY*!-2xb`4+Rmc$RA4FT5w_Mf>c2!P@x803rOx&h$_mx+n|v*N zz@M_?*^53HJ0{#`zun^0Y$gmA==KoNQsZRzZQJUdwsz`shgzF8dFV?##eXya#S(Tp z?=BceE{=e+@G)9@5U}HeqvAxCWi*baKg#NhC8B9f^oRhIL|1ej9z+6swB>_SsM#T1 zoJ}BEQWBsxq#F###GuE<#BK<%AqOt$`!AGAc)Pd^!xwVV?&aOl*VBX4G`@4J7-nnK z0lTfSsYuFeNTB%%Ro%rtFGsbDz14b@7a8kY{qa}w-3cFOo6=z^`M`**lrxFNxXOC- zC1CYlT9Z?Kog*I@`uk7x_5>8|T$&}n)yQco&+KU!DV$;jBC%9dV6wk;cIJQ$-`LWE z1;`!DHo=cox%QEW^SPX6USp_3M@|UK&ke%-qB239Eq7s)pqw$Hh%us|Sk>dKje;V( zw>oO&UENdHjFgm++9EUtIMgIxbV^QY9NO~#7+z`Z{PV4=hmw-o@4Q+WZm_oZB5)6j z3pldH#4^6_?{6DO1<8B!AbM0AhifPhctAd*4|ryG=Sy2-1r`=qsym0f&HY7az!?4A z-;V_zEMVn^PP}(0pmI0qsPFO9r)@||POUR4o)}xAoXbwmLyv?S(kF%>SX0PI)zx`~ zW$`&lK9?sfQuwXOh)}1!5Rzw?G_sjOdD+oS0b<;AX&Qb*9$eT0K-SW< za3Q>@g&xf{jJ4=fpx|CVwbY^KDh9vP_frQy#V;H<(F?m3MbMq_6(mko3{&z)S{HO# z{g42T#obJ|y#uQD?O2-{NdgO8Po8&Ol^DXZk{5LcMr|EkOcV4rRpov-uUHgjSEbtf z+d|;{UPzSBT7Ym5uRL&KM+(a-qH!T-;jOf$X2|N#vfb>2vG-c?ZxTTy9qm z2Hoz)qD(rMDZJnC(As!>7u;2UkgkqM0avSI#3BhI#ix-ODquvVq%rms+2|>Aa;^-y z1p|47XW|Qp@)WoU8ln}>AjpC_(e-pkXnWG!N!l6w3(3eH9}d@sJSP56C=fVCKDM(v zy3Hm5OBHY^!DPwp^`f3#fOF>N_Ks`Pr{2FG{;6;k7_`fL0PO))ifrny zB}661xv%u&s|j~Kwt!-ZA_h;QUi30zoE?pqGO|gj-K_k z{-Ri7;JQA_>v^Geabc&ele%~Mvj=6)FZ{OcCC1wgujfsNaJD}B*2vIqMi+gZPk`W^ zhOPimCzPj`UQG>NfKs<;E=Vna_UGp0Ar5@2RVJ6h5m&{WNa)R^%Y@n#n{Y*t^B=5= ziV7r46dXydpn@bx`ToXXmki|7q}+6vDEJY+h$%UXqYPiCw=|!Xyg>*oAAQr#qG@!J zH*`Aasg)J^p?LQQJ1agH$7BF3l>^1s8A#E(8u@|ZBO!|dvSyW;KN&ABCr(-J7AUm# z(4D(TWo=|g72UEi98QKnISnN2yvcMys|$cYlp@qa0jQ8G04 zhCGUm8^Wp7BG&j$a%f2I6LGYHT!Ynm`2pybs0-iB03HD{uXK>4ykTdL8an||4050p z1DX*K1R_f2BFR)1!3giSfoI_26q! zJf>Q_JfF0NCg1DnUzR7Yvj+d_TGo#gNJf9nFS0A&I&1vebf))TE&x8mnW@D8u4?Zr zri*>+!)EJ&kaH=pL!7HrTCBqqkpHkhHGTWAh;U~+w|!p6Xwv~BC}mu!6qrlq;M_sd zw#Qy#jBM_}>N@Sztf2b6ghY$LfjtgC-wJG*)by!3o0SHL+0Yc{kf;9+MvhKOS zMneTeWD&x38aq0&2Iipf|JBeEb&XVjUcK=JlB#~tYWJ1HG5V*LpoPWJtI7|VvWN_T zGaE-ffKNf8Z7+vo4W4*JX6!jrDp z^^IiQ`TRNvk;9Ur1Upy4iZ{oK_zJE!s=NuRD#Kh{Z0aBKwlx!k3$bNM4Ix$C9LjeB z-W1aoa)V|lE!-0wI$O`56%zjZdgFnG(VLw{-L|}WtpIjAbI;x#o~JpS<*W=~6uv~_ineofevI0$w&nL0W4DSTxNrQ4L*nIl4VU(w7cF=Fn?po@soytJ^) zk(*~`9UX1t6L>(h>;A{d?oN%JH@=;j)$)i%Jr8fIJc9n!t5k6E2lXW}R0zPOO7F`V z#Ga(9J4g0r`a?4=UgB}&w1@~RfplH}Xx6Ah;{AoQ9a69_*Mv<7aMiwWov%6^InhcV z=O!z~K6;bf`RvQ)JQ8Fk=+X{;pamr*G;8Lqot^Vw?}jSxd;8WcNcZyPN&W^vHq_ln z?=Y&TKeDovGU=b<<6}K|Ael^8e|x%uUs3oqE9+u*>{0PG4b2HHQ?-iLi@4#8wf=B} zx@-YKma-={s@(B4N-VvVR+yX9)y=gzZkFVK@1a1XgLdlDA%~E-C>aGwyj9Enx!&xw zb}gCEM?UtrJQox+s`h$={n%5eSYw&pHbv2R8!U9F8k(k3f4i%Y4d>>>_m3?{X~VIl zZc!1_-GA%qE`OCI-i{zlD0ez|z2+M4{hA@Hr|x3rB*}xtLz$LNwve2P%4ct>M?|d% zDfol5N)*_z{V<4HSsU!=K;NKDdx}7$NuMaq9F*iBS%G zJ+0E4#{=REs7ThQ>xiM-0NJCbC`AJ(rNQy09};vF%S^>~8Fa*9CxOM2GblG9?yhoR z^8?{f0r^@W2hEK1=5h{QHO4?Gi0{&-dZz^+uKlt8$iZcMav zi7jC!i?OixC9g&9M|>qgJx0VfF&@uoUvOJ~e(CS}v0E&80;pV(A&K2z;)W}%HeTE1 zs_I_#V!c!=_za=e#t4OU9ls|?!%*n7>l(|{q7*=BsttmpeZoC*;(PciLo;^_%`+C7 z&&AlI*&Sbq#WLzFiF1Qo`s0vBMC*NS?rNnn8cQ9IXLlB4zNFLi4)toli45rs^CjI0 z(b26yBTto^RmfF-4x|dmT!PdZ@W=iEt)sNqPN8VN+&md8M@|MF(W6doqeziF1zYp) z;tc}U_>A%C8|=vuTNfM5<}aeoB?>Hdt~1lBx_=6xuki}_e)dg6^lD$r_0*69L#gEV zNGAcc5<9Hz?%mP;4?ENJ5iN`4c}71aSq>LH-#%7Ud^7m-<6oPIrAm7u&Ktb&&LWz1 zsUs$8o$uOhHKQIntnD^U3@)97u2L*U`d_&|cS;iPRLw%9%ooj3rOI>*%+ zA40C)lPm3VDB&5v+U0OPhkEf-Rh84H`I90HYtJ8+mX^``7IrH@a(62vwnn$a?v6VIU<@vl69_^1R`~9HAPL`X|akvyDDzkbLVYZAI3-P zO8HK*9zlFED9uJea0f9j&p0>;0E8MVHfTVeIS~2P+$@2^b8>oG2#FCHy~WD3pkDTb zI|11qN(V48BSJajSpLq9C&Fg!CYWg16szkk6*PNkVk}qd9&^O-!`DgB<2uCg`nSNhX$u)8XC5&Pk&>wdgjBrG34R_492=8B3o&9qPAvt!|bI^A-X@Z;_w z`!H>aELTm@ih*0;sbLe^x15|C{La%NB4RW9pRV+W_ZmpzoNLi$>6qTV;KwB5P)DX- zmFS?CnN8LYOkB51O5cYRXjr5p6|z`$`*-pJB1@SER|jY$ofsHMzbHj@Tdk}c;}Z(sLjMtU4l(jC%8!!?71Qaz6$@ug*=CtowY4zZdWo$aGisM zzJZ@ob4@ooLI7l;RjcHya?NAurMOey(c3rFTw;0yGPXpRq=+EO6YToY$hvdY>VWIP z+}zv@;U(BVsZ_x@2rVg|R$}b%IJness$ONhKTho^;cs_I$A=H2l1&wv`%V|DH-5Yq z7Y&a!q`lh0rJo5(t>Tp<9M4aqW6$%>eB5)qg~M=3J{w=DEtg#Ix+0$D9SeGmYME3R z$(-TP3@1ly$^2o22%L6vvMK3`Le*t$e!`{k>~?_w@xmPX6NDRqv5oZZ1lVh#qx-$) z`n)?cb&w_fy1RYoeo|=#wJ3(aSlZxEhpchl%?a)4Au*JFg4f^cDcYx>fMyR)Tbv3* z(8qAMfKdc+iyp^GtUwGSSW5HJB8kNf9(S>jVI#i7l9zw#+r66lDGTjS`A}fnR8N~d zxIrn3DqH6s6ZN9Zs;$QTV@uXUv2i=ZtEfyIsx`*_!%Zo0DR|?b(w*q-1C#(^i@k@6g6 z1(=NNw$c4(N81Y?cOi2m0Bl&d2Nl$k_eAa1ebphQ7u2?1LEK5tLg%sL)6*%mmM$6x zBpiFeN)s@WFKIeWCpVUWbPpZDjAV```7!D{cLeQVx#Pwd_4qXS`ln*gI@~P)M}&~D zurC1aLb7c$JVh8Y)b3;nm6VjUIf@sR>~^;f_@4&E;hZ>LhWbG8+6TD;y5azYmYQCC z-si+m8p+tp3-7>jVr-0pZYtmZv0NcJFo8g{XnB5Yfz0rOoXjScX=hTGJpHlajBt*l z{e9=Ox-4%G4|4#+z|Vg=D=?*=NI2*$D1mH{$8>m)ckJM0!fDe9IY%JPK2vy(?4zqU zPh|X-t`cLxbZWV#D*B_m;|ywAdGrhG0}NTjbMQ~&g-0F9tfNLNssam(fYtIQ+=O82 z-3DC)mYooGt>8aBB%g9@s{AB zc4OJl7GFQM-8h(FM}d=L)NNgxZT~X*uM$f^p1cYoBW)FR^c;`TL`q+I>GI3Ugj@c; z^Z7YHcoP5QE2tc>CEXqgxt^EyBW?FgV$UIO%U${+PMEA6bp{)}vx#e*+`fK_d75;! zB^YaKkJ&}Sc8bR1keZVsGRI7)KaqaJM@F~Mso(77xx>RM+YL=Hm;~Fl_;FnTP>zr1 zTp8C!ViI`;YVF-6Hw_Go7<6{>{5N)Jp`p`)I!uQ!w4I3CKvhd$Q?WVZ&gXBmyjU`( z&CQYe>qQIL;D~t#6Z3X3-q`|Of^=`(ldO);PJfT`7NFi#7vS9R*nLiaNv~^~t3&9e z_!!Mo)|DK|+`o41n)I$Sq!5F+NF=~%kFrN?kz^byjFaV*pbw?SPmvjJpi0PF%~y>f zrgZszBGZz(l(p2OI~Pj)@o-Dy@RH@)+Ln{(Ye z(N3BZ>vk4r_EQ6R25H2I*uIXH+= zb%Jn6aQ_MpU4r76l7E+ohb3YnQmC6gZRXr*q$ zC+P7IADfCZ$j3j}bxA@@JoHhsu+EbZOkN*9pU_ea%)8AK?E*O`p|f*eg92utWG2`> zL;CliXp)j1+f1>u@FM~^Mb%ql?JwZV51oxmc_6!K*4N6X)p^h@8F{i zG@6`YOIjx54Zn}%)Stx((gx2a%bgDyy={#byt`acPd&qLg}lJ=P*?^7d_b6c*C)G4 zglMbjVd0x+$a#NpI&Wut95D%b?nyW_n#%(pHBqXj<{ca_y~D$9I(v0O05JFV4leAD%8*FWhR4D- z48?7ohQjTOOVa5VOP)qoHNOHAq4RM2K*5*6^G` zwOKxJ^PxIK1|t=}Kw;^J8*13rxQ9Wni=vx|>sP17#kFI{6-5rEVp_{_PbIq|s|Ll$ zp2S&ZD!Lu4%<$Gw^HUfy!M3xw;MLVxX&pscOA=0(t6Yg^m9 zjUMzetvK-bAf1c$hXecPH8!GA}+t1YT1U*AXo{Bw(}t3b})qDa&Hgy?Bx;yWHgD zZ3)UoGjrp${-lqDl^oaw)oeH*mkH^d3qJp}YPF)ex)c!0P+nDqlxQQ9>cOZ9a+&cJ z&3Y3^=|mJ1qK0x5tt_|didUwpvKt;wNm3qN`jrG=06P9+O;Q!zljr#$dyf%MJcu~p z&8E$tfVoBttCj92KPQJaD;5?Ocqkv#lVGIH$Ip-Se@4bw!`DD$(916=)K4)mFn05@ zg4?voRrQfCGMI|t8ZM&+TZ`=yEk)*1zrVm%@r`dSe`lQcv~3)Club`+0O%;Uczy>3 zTA;pC=EFeiO_r~oGR?`dx)vi_#Li>IlrN9DPy)uS!(%bnWwU-aIN7ll8pS>CA-|GI zB_qH7$7tk*vf<#hzhM?(Z>qJZ;j|iGh76kAxZV8G1r6;4Q$xe0jUCzaO&RNoxcHX;{i|(ee^SXjlvfkB})nX8hlk z2@66VM#~iIrDSi{0}NBu z05p>najYy3enO?hD1)DAhI7<5u?88LWM}?k-aDGJ38yJt-iY?5&8HUNim> z3H38LQ9|w^Iq-GT!1klOvXTUcTTgY&{aVuYyR9h?@0(gC3KovZcd&WklsUV)43oHh z-=2E&Ep;FmDFgj3!jSt0WW0HURRlyvAp^8wfQ^G>O0TVjg@j1y6OT#=2M~Z+6CRV{ zD~DZe3W-F2TdJscFU)q;?7ODTd+SdPsG_Q+sZrV~srPudrXp3dmSpm+)i0Nx+nLQh z#v|dhGy1S?_kx9P>$=ZwwdY+FZf90sVhVp(wle9MDzWW;6IB*iL2#G1LTXXR%Ukax zyVxIsBw}qm`RFDmWn_K$L=d&0M$( z`UO9ew@k?rEJPEPfk9@sW8q6qJ@@W7nI}QJB!wtCwp!^qzNqzTq|A!R-dMNDS^Diw zS{rPd7tfl_%|e&h($ycQOE|3uM%@!Nwy5r7iBtYDdz=x3@hGkBo!SlGA-l&kO;)YH zdFmlFoclyvcv*R@6iG&$kZkCQ$Zt+kB zI!MG?j8w@sbY(p(;i&$(D362B?#;u!eKVO+M^}6M?~n~3ShK6(`*r_~m?+;HHpf$Y zX0s-oy(hDSvxNKiRK-XmhF4%(Ix;d^7m4k~GitfFt1(#paiZ2G4#Xf)$YG}g#!v7a zc`yF{@6-V`!E{j=RI1k2Rz?AE(;h)1NgsSB7^_T62}^1_Se-VJ>-Q>eML=aJ)+1!$ zq9}=?cYl*cGHhS?*V9E8`uL>FsT;q>h--Dm$0ASwTTSU~CxKH-uuV>H;NFNM!8wpTmu-4lRcWJj0B!W8nl{#Y{vSR~{>2GYY zDW{K3CkBL@dp`pEGkPdb5|e_7##yV>O^%B78q$h>=%1(#{}|^gvTqw|<9FmR9($Rw z@B8cyIq7Sw&ywv3x!n4*i(B+ZWi-Zb96n|Exuw19k3?SSs90Qj@2hn8cQczjxF$a^ z8{u7XjH z&if+z=uH0djf;;EdQ|W1BrW!9q5Bm992?4+5jME>Mt>!lSXf=57J40+YE3gy8J8@h zC)5+Q!BsyoUHW)rv3sxsSoC8@s}0_ybtsk!lh+3h4BE#U^hO_9izpTl;$yd6;47f7 zlLA_0S9vgdg!N8TrO;P6BJ2Gbq%o0Dvd004b^XuzWH;2LzbaF%IWtK zr7N9@>ZH^Q*RmNi_>gyBj5HdqhRU5=?cAq6B5G+Xd4d9U3QjpwMY&c77S_XVCzspX zb81xp*>k#I$0&JXdJ&~agmEp^OHs0XXHddzOLsB^#ktA_qFyCXd%T+q-)|eq6 z2Bp~d;oy)r!`T5jDSP;KL`}_H&3_u#oAA-F6C(rf!$1Q3<|A!hqzMn+k}Z-qOEomH zdvh+#mbKG8l06!f5y>XuoUwWO9d?VNC$G@^whssqVoZfo=Tk5Kz+7&q!ti3Hk2ou6qGuXk?*G*l31BM=+~m zE;Q*v%e|Edp`!;CXZfW?QK9*g`S0Wa0FH%mDw~~N%c&e0d1KMPqletuYlK|OB2m|P z|2T^C(%Hm*;M^M7r8eNDk;7N>%<2^tkt3h{p@lJgJt+xK;xgE4qK_nv-c6`Gy7?ym~CwP3;C-Ngrj1;!P$6{`7PG)FE_62}R zfHr+gPJT{aZ#3`|eujGl%Kb(lp>~lNYTP&nQ1|WP8iq3JfphH4;zHL#k=}bTaT3IO z?^?{8X-~zTCpjm&gSVcD;x@p|lrik(B`Of~JE_;M)81e__l8#}OoqJpxr4(J#H4vR z1}E2gP5!=Gbmhwa_1L9F^zHPYXzr*BQAOdxa56hUb}jaBu*c(79(dIMvoM~c8{xmq zHu<^MU;JzB-|^|mD-XD}Ng9YA;Sh=$YriSWQ%2V9@N!pdsatC-O*C~A<0SL6Jquz` zn{^jqB_^Bcd%&#Z)T{X<5noGP-y`ya!;bL6;Fy>&nDBBX&NtexI9T#52OmY7%k1hXI6E zTt6{~>26+ES1VyF;jHQHXHj3vOyl3=-H9i&OZ=oJo)#KFb6awz`^SH|0HtOC%}?~v zfJp;jb5E<7bF~hB_oF@G3!u&{)#F;uG)r$Oo3i$kRh zp|o$6zy-IOYsLU}@*nw`qtAtlgS&*bs+ctUjz{p)UAFa5Rr~vfbT`c^{FFl<%?_G+ zTy%7Q@l@@Xec>BFJy~TDl6PakY$E44afu;^KJ0CKG$ z9$>_X3V&Z3RHi{Hz1lYe}K>1$y{WDhjPxBr(!`thbmSOw= z%R|J+$|YrjtTM6o8r$h9gjqrd@>P^VaJu!yksB}Xyrr1+!9lOAesanWzsS=2ieqfc z%PZeA{_rTM5m!_@yRL!tJ|!tPt!UB%5`?ZVY4SR`tIK51&B7#e8PDcI^fCa;Sn9a##eToXd$3kD$ zS|jpnVz+{t33bK+hT;D+dg;XKU!X~3`Q#<=`{q)_TQ@4!QFwS6;cb_014gIOYL-0L zdmm~Hn2mittT_vf5B`N543@i~!^KX@NfS|{#N2Du`jw<5>z_4q_6p4qISq3ZBw1O6siB=(AIvd=ID*} z_A_WuHKdbF{m)zrmN`kPCE+&k`yoNLeXN1Z)tIhz>0nDmYa1KGGg@Og%jH*bxd9^s zlw+O6#}UoNn-hcp;^w`)1%wHFCqd(NLbdXo#81zmUsf$AbT1909h~s3MVEMRb1=Ne zIO5qII(~&|cSN@wIvIH)B@H>N+APOq8)C`hhmR`N2|mOFtM|#sv~{-H$3iXCDn^zy z`j}r(qV5mk4Mt3Mt5U=6qs`1#Kk7PTol@Ch#=8At*^KxAgtjHCtM}>oGPjU7GQQwd~>|Z*Q}0$ZT%rk&Y%bt zNx(TLsnOfJ#Z0Hf2dA~Q^@09GE-9(*xx~ge+hB}ZM(1o#8u#4M8D55LP)P!3?g7WK zc_YpU8ykb(fO;-!Vpy{%@x*OdwJ>RVpSBY`{>SWJ0APS%=zjo!%3p>76fDuRhp&*gkU=PL0UX`I#0t22q|yMmOXEcmFeOSlEI0nSC*%RGOo57kN9kXTPlfyoL3|IjKWWqR9A2 z15WS%jtaWco`*dItT+&C$e!%F8;Hnrvk)cQuQGqLgvtYM=K`$@gk}l}Yw0-Va3w}` zu{moP*Cq@gI9-p64e~7Sjj>gVs#SWCGf-HZtUonXseIB@kwc%-38HzWi83pe4f)uVSQOtl<-w``*8n1{$aL_UFj?=hu5qUo$eE zUYxpgE+x4Irle?n^rpP?`C0WfMoY_q>Mi*P9-62(Z~k3aXv#Yi*EFGw6}oE{IO%rT z?M1w_a||}7-n%@twY4ugbDo}bag?+GTjk!ypU?S!&t4Q4<8ry&XIf?c+vrv`Qf~jL zc(QDbd2Vwu`cn?RkWehNr73If$&F0{Mb1NvBt%{)udEifU}E?Yv4`o{;{Db8IkE*G zsX(V^W>^}on9jFqz(avX7zfx*BNZAn@OEyfk8YB}hJsAHcC1 z5J$eJ?%mToHEo!dwYAm-gaN?dS?R3%DSB?+8EM#SZt*Rbbyqjln|-IZ^@j>a?1g7} z%~%$D;yOSVF2ZyNZaajE=6m77>y$ieA>!*1g!Aw)bIlOv7+z)$q5V z$1SX#SK<2uvM)^#T5I#){ zc-ib|wOq)~oy@jrcVTS2*H3e8@T+&<05vje@a^tLXpRvkP;fX(G310Y-jwED5ECPLbEfT= zD+ZoxXE=g`JO6)uSl`ehOziriiE9a(FtG$gdLo3$QGz~iVUN{4tEOtNgaC;iI^?T> zAJ_>1d&0l#u`(p&`ED$88SKUi@={RS#;?Z&wP{$J{yvI<4Vmn`|!o*iK3@ zu4^zBd8gWFp;Xt1rv2{4*8lNIRFdm7ft=C->M37Bbpr#TGSf-l3wvv8Mx`=S?7606 z>8F@~H#Wp-91jw!0-ga>_hFp%eGpv&Cx6FLrEpJA5{LYHIrX(muzmiXAvqs-z)i(8 zC;NlLlWkA!?tWD0M2&Y)@>Vq6wUMhJ!!BSWCB+B7wdTV;h%5c(vQd)`rJId(&cbWJa?E$@A!m zUD(Gxhh%tzW9WQbvNfourDM4Nr`jshnCev-PcoI|tJ{Qd(30k9fHCuK?ce$f_1200 z{0Bw5%|It!VlIQh2kuaE9UqtSQbdL2$nLg;dWs%v+*M>_J0_m$k&tP=_Qz=X1=|s^ zvNp$m-aqnZ$w)NFn0Ijjjy08`QUuU)qhOd0e-q~ne>+=S+MQZhvZ{R3e}XZ+f;0~7 zieP%Kdt8eXuss^>&ENar+LsEUg}l&RCY(O$%4ciw}V%6+18)&}o1y#2hpWFobN z+l?s@rVq-y-29r#@%xTYHlaiqZ=?>V?{9h9tub4#vcFB+v8i^+FR&wnTN@vT?(cfY z4cxd`i=#2@XJurfbER9-O%({($~qnGYHwWrayznEHZ*pAZWT;M!Htcc9pCt(Iro&? zEu?)b?4PxbT-I5U3epTezM=}&aPi{8PtQ5M{Zm{1 z_LN(!aKLCdTJgh^iUa_&tlY+tO(;AF{k7#xrYTsX$Y1&gx8xO)5Nqm7e_bk03-@g5 z1~6h)Sha6%9pS&<-cSNCXhyONo1sG((M0<1vGQ3`UQ|phhQWy$i&BgyJ);c(=5NVT z`|VoEvp}rYUSW{|(!yhJOhSYuK9a70_H2LCgf^b*+S?SnF=TA>?~Mwfbilj+4(=ul zb6t)99jN8x^W@~~`SV~pw?_5s+-&VkRTXf{*~P*4IrMNQ${AJRI9^1>$jIVNS6bOA zuQ~i=s`C={GMc=F*iciLMp1G3@+hb*Q!`K6N*cPH%nEE*Vp$)-e>e5bt#R1lHy)xhm3F6r??yVfaTHx=>%S8VnVGgrnl+&PuuRawz8I2$CcGgd|2%)oW z80)ST1zN>kE&76Am7P{ZDT9mdLdk#E@8@l>2jPeTG9H6LpLRON>KBo&vEt3Xu*EIg z$jy4}_BvopTj;k;6O0u^%s1Y=bszT^%$Q%Xu+Z81!^w`_4k^m7m}zU16D2P_CMw!$ zbK+2zS+)6MDBC-fIO@lf4bH@M2tRL!g85WA_+5Y^bM{c=--FJ+VG!KIuP(PfICD_U-qI` z872jYqOZ=lzR*eQMr0>e)j@bURFe6{1vF9|nPACIvOlHL`I5TEyre91D}-&Us0w-_z35XE!zi($dI5Ih_I_X2phsXeK5bh4;n&dxlE`C*?QH-;j!FV0|_M z!$f6Gq43b#jGmsQr6iHEgcE;OvFFB8YzhBW+VBf5W-p~ET63Bg?na;VDlF)~?iVu} zmRI(r?45z@yeEZN?9Y-v8Is@6f!GFf>)R3%Jqmc$&+cThR+zC+*IvXzzW_+h>|`a4 zjjCj+M$aOKv1;j8IK3dpw6|PEP@wZz&8PNV7F!*VH=q}4hIBl#X3kr`#=421Yjb`x zi*8Jq5W`^jYWRAOkXAb8<`*MQ%;p}o)IR&x8j^C2UQCEs4h0H33cwK-dxm^lGb!i; zB3%Dh(i&-$5f=-Q%|w-J1Zo)9(q(`Vz^W+f`o=s-y>rV0dhUu_A(dNIh?cvr{=Wv$ zgKYBe9$2odF1m6D`1)#s*B(T#6R4=Dz$EWIaLram3P{t_({%{a{=1yh-T~(WT#);K zsZm%|bobu9dC({ku)D?+WaA&hgCof(4?9f&x3fj~!*tM+*>SGxr6P zD>#%JnhdTM+q0d?k)G7Ny6o(iNID?!Z2SnV;ElSI-cDQkU)wrUtBkJyHgza)#y*Sc zfc}jF#;*Vo<(~#~|H~n3M)DX;by9Zi#l*yhF1KmMhjMTJnrO$E;HmE0OS613a3bd}3I~~yii4k-| z4{>oDr?`i9mS=c@z7Gr<*}@EeXzqvZivzbQweSlTaAV;1(A3|xr7H(6!q*_5=b)Dn z{C#8@Hj8O_g^6A(sBHWa1$-I>DJfTnvjm6fQ=k^+LP}rjziSU-_>u_c-Qi&k$&oF* zY;i!M`hWT~kM~&zevZ3iU2SN>jH)S6MEw1?kKRYiZ0av83VL5AF$F-Urp#d#`X6DA zPDZDj^{_3<>M5hn`h+KLT+H6ugcn*OD! z9>sY+pJG}KOf#Shx0-W)21{-AF*0(h`@kmW6a!kjl63g7TW00}cVKKiY&GzkO=kTo|w{0EF?3`!yO3GgT5VvZg8 zN}1QhCxU*PiHWJe&itEW$?7q)k?6r{k|YFmz^C*Zkew>K-`d`VMTbNsu3$3{({DBPgW!md7rXIJ~e$C3@<$UiKa+)X}p2grMuS=2C zbxe$MD3=ArfEZLEAYV!|nbp*UZ0l!kR4-si2>-OtL2CoiAdJtpM>IeP165c$a(ov^ zyhxOi_~{{xA<4<99=fYG2+Tk$j*{db*EmC{)CMjZe-3kirXi=zk%@+swc&h50k}^T zijQj*Y3gi8_>J{cbCQT6q%x(3`%F1aOLobnZr)9JVXo6`Xf;4KXCrsl0_`hcy7MD@VPQ1LJS64dhzGj|5>ir!W*DJC77)$ z=##N4Q7t@2ftwU*3IHR3fqCsdY0E8L2_az;Ch`~%RRa+PeM5#eN=w7Q2LjtlBTOu; zY`eAjpOPd^j2NNTNsEWy0_OF(y>Qoa&JE2ke zlb<$n4K-8!E?zgI+RvdxV_I|Co>s#jE!9O;xX}}u7@4`NoEbPQ`$B)Pf*r|bqk5hQ zEqgxfM!?#ax8JE%-oyP2)oBpXL|F6r_QDI-=vRu4iBZLlkDc@WTn=J89+mEwCrT7u zC+@i7nBO#s2$D)Tsv&DJ&^IOtov+8=f-ddmty|w^5kl|ZKLdF|YAPAX!QYFCk&}~q zg7)eW78WcA5-zU9^>yQjLlbp%cc7<$krJX}mjpC#t=g~QnS!=iyEXVZcyktLw}nQr zivG71oO%Fg;y|uS9E_Q`?W*7#BHz>bF+G^D^wsGlQBqJm0*?phbFJ4AA1A6@#Kr`t zX1{R&jV(1T9sAh+GGgqO*R4J)pqYt^ilzpEBjP=bdw+U+lS4i43J4rVM@Oq`YkL5$ zu}^np1h=VdrtIAq(ZjwiB?GK~wwUyuN^<{TKixKcz>+hA!y!J<$D&r3Gp$5?+4l5O z)976!iF4KN-27E*Xaj(4$`7+&LvkW&Z=%@dZo9HZ2s4)wjMRDp1$VJIHog()uLVYP zZ1Th$VvAvpGr>xse8`S{$>{W>bi1?A>n=S!3w=Y*n%N9lgdCTE&D2pSfgbrdf{ugs z-Opu6kpv6Zcd&LeHABxtl+uJD7d|;JFDNkZer07PF!xg6EP~lBV4(0fgIkrJnOQ(a z28)-Mx45LFx4)lPK>>%5FyZ& zaNoa}bBr;^Xq@@w!NksvV*TOg-<`%EnL=u6_}tvw5cty06<+oUQTB?1i^S=S2RaVd zdm{i1+g1K|q~LU6I9%e2B5mxoq6w+@P|US>Qe8OG7O(RImlo%HKd;;rOo_g)od5xs z^1MECy7>0yhhs9(xgd&q%k!t*i98}ss?;CK-qnK+36BM#Ln3XsyqeRKJ`&^xOsj5I!rD@DI|njB5taLfg!+2jJ4$A2{R(t0GVx_?2$H zag=&FW#akL6MjaT}B)$cV=M`SUW*+wO5n&ucYHp8~gKEZN(Z zDv5vcD9lasWmqYpUpx!6;fbYY?V`_H_CV#cMzn;wIZ<#2I;XMs+n4Rfbaxj6T9fW# zwL{ZYj{(c{6hogZtU-MIZT0QDtErprgIU@YmP$bb_Vaai~>WjeVB zg`absCG@WfP>$1D@(y{CTid!LW0jU_gXN6^7bwckGP$mfBK-Uvwh2Y5j~}|_t9}Nw zJeS*kd7qR2&p6(|FG;a++{_gO?m#4kyZ-(!8PBK#QlvAlZ$AHK$3%}e*69_}D5nwv zc?phdthGIThV-{g=!04)NGtz!ZhUJ|>Dw4D3mQ}yk~qCvzn+qReUKMaUFis;W)~1U z2_oY{-KP5?q}YG8=?=F)Sxl4Cy|@iknVg{WN4&Pv%ZdYvEFx>P<2(89T%n5NR-%_} zsHs(*H`nakG=9UYB{rD!SQO`X1sXd;e8x2PW0emlv~d^t1&b4C2(bD5`w&8+H-K{N zVxYB*tcfE8!VBWSlTRQze?z1A=37SEkGXMNb*Io7Y)^KLWUNKl954tS{)+a~j^Y42 z>w?Fup7Q17JCKdwUYXOt@E-`)T7I^|EBL=?7NPIS>r0DLFfNnETxUbazPj6^6_8q* z!46}kAvo9+H3=~x$O2^J8D%I^|5Dhj4BESk&#yb2YwKiT^=CleEbe^tTq^KWdsU7G>yP0t{jDNu6_9dS^2Z2ai9u=8!f@V=Rp*- zSI5*KV`Ne{cX5 zLRe@Epx_1C`>&0M>|}Q{8;V|;)~b{sgGT^TN<#yPh=qm7Qp4em%b~9TElMwC@F*ClKqxV4r90SxiX^3*Uk$z?wfp z5jgaxKf*)fux&b&mm&z@UCABONuX3}plAGnb zgxc%vX?Y`l7|Dr-nHxT{aZfSgW9{Sg>2gOZhS^KjmjuN44L?-mafj0Ah)>J+yLOOo z#dF9pZb>XNl@v7gH$Qa;k>^Vjab_*ox^jU~9{!up_3&y2o+kZl-;BfVk)N#LGejrW z?r)h~m967KoQN>P@y$9LNuuub3ovWgqZ!nNH$V^=f;eovr_A5m+8e;g#I1Oq`#*c+ z>lT)?D#(QG&D2|<`J-fZed!S9gSYreCh-3qyF;BiWBmua>(Riv{Jyl!`IeOTj$3np z#B$+}k}%Ac9`lT}+%C|RLU4*OsFi^4GYKfO$!dmQ!URoVV}ne;ynJDCmVa&->KA7; zDBJ%x=x!gOdYKCPoqbKY=kk5JoO3-W;W-a$bZ}J}Q%R;L=nVU72VH^&p$+AIZM(J- z!45G)kU9V`rO;AX#2FMkh&Tp>L03eC7X-_I#YjC&g@UJmY=!kAbD*jNzGMQ=X%qgv zfAug7o6SuVo;F<+`n1o9o?cX~z+xmgw?|1e>{$k|53rJ_E3?IjQN~2xfVHhd$L;x# zz^Pe}THqInK3rPYU*9n~eTd{*mp?ml-PPFq>rwvG?HvxTFIon#ljRnvLGq$^{q0~0 z_Hp$2DdWL|2gYMt8q6&HoLAHIwYYrlF*I&1u>D~yW1{js5qtgwcU8XD-G$I=Dri>( zYMQ$eK2$r}^DSQn;A0&H!^o()CKsZeH}1{Uiz+1r1ABjoKBZ zOoMua@_wMp;JRlNH9zG>^*^5HkR55MMJU5{67ms4l+yU!EPScjl}O1g1Bv;27KxxGms zK@5%Pmav_Q~c=E~dSj zrx&N=_f6Owy+J=d&%RF+Yr9h4YHTCRGvSeLWW_Mdpz^0ztS#dUmieu&KMjKL{HyH6 z404pce+VEWsoHI}`8@3UUE|0bVKOq`9ASw$KX1!2&T^b#GEqCglFvz^sFpG?)pxHq zQUiJO-M)(2Ra0%!(Fu2aCDS)4y@wYSUNEs^y{OChy_nUR$aRU8bvP-k<=GwEq3DJxj%!&2CR?C@9#z;tl}Njmj>nxt(ObzFOWCX+q&;$+J09+%@+D*oK1tuFk=riqd9);({k$BZmW zy@m%IHL>FfeEL5dJxT@x$CyR45-AxeBjVTR zIQN|)QNAqSH0(rrn1a8;4c)*1-ka-k%m~3FC*;TS^3@%YBithy`%hOx7m&PozuX*S zPC+7(en(_tlmm_>?sCSzCL8!;)RCi3|__X8%xLULG7^WwM9vkhKG>KppXAI9H7Y zk`H6qEgt^dTkO#KZF`?YGr#e~!Cd`bONJblvtjoLVNeaR)XAy9@MXC>nya6Ts`AdS zoxTb#d$>?sSttg+xn!tQw7^;G}k*}*e2{*}}y?K=>CYQ)S8(%faa z85MZ1eKw6aHJ;1@YYjbAd=cLUMBx3&IU(pen{wz-0pG9&*I z-+trL=p7+}Ez6{h_4O8EcOsvd7hZ{#HC;{>%9MVG;qRXc$udcd>?2(~=x7fFAPPbw zz4}+7h^Hnvmtr8+i++TyuQiq}*}K5)p~(FMCQGkk49Ab8?M-U>Ae=))o^wAS*&{3A ziU7)dp$+S*KNAspd3Q8}}vIHJCvFv@Oi{fZG93!t<& zSMLb$>2N;k(sdV&Gv|BvVecmq5?-ls;$ro(G$BgTyCJ-9{q&LZ5;;n&n}PcAN)S=l1I)8u4*ZSHQ^{iNsX zkmi}Ml$=*1>+RC|y zzMGI=5xLg1qB7BO_^iX97@AZ1j8>Sn@2V-$&vz!@~^&KBp6Mt&4|yem!hyZ+?ot9qN9x&4ctt zRW)+oT%+WHyNDV0&PZ$oXDRndj~zig>a6-VN-HKN_fk@^IHH=vv9z@G6mhAh_Ti^* zRPmJP?+mPHm|2exHY%twlkedjZ%-vBNgSOsYSdaL@JF7@riYa5SHyq0HTo zGG3K+7H+ReKUggaN?JDK-xGJ^PO)Hnu)Z7r2(shAt*Kw|Ivd-YKYupk*48tG0PFj3 z5x{*r(nZbwEnia|E0GUhBek!V(D9#=J{hhZrIejrXm~UlX}Z@(T^!i- z?R^?<^YVq%TT^5lHY-RvFAaYK{IB!trP~-_ z8f@IVrlDY*MKE@XE${8x7@nwzUmfKOi)NSW?QoO%SaQ*p^3vx7{@0hEzIk$-`JX-L z&2vDj!w~*WJ!D(bDkWKbEhX+V!fmk-VHvnR`KqCmaEDS>{5a+r6_afKWUX1;JM$v80PuI=4WCK28Oud>uWBLKN!$k7|j24#~4Z|ixJc`|+qE;6*VwC-jWIIDDzkOhp4yBUu-M!a_Fj#-U@p!ZA?{b zf^p(SNm{v z`rFJtQ-8qG(7&oBmuV^cSvn!jY$OG3+*PA{?A1P%a;w)T`aFWkLv%GI6T^7JVIGU# zGY!{R&X{=oVL3P)zBoBqadP;8Vcg4Hxmj-cDy6nmX0o6;^Xc{Hfty#}@zCaM1>g@F z4L%9NOe_Du5(+2V#^jHWDG5`OXF6V6crVowC)BeRcDn0EXUcr25Am$_*YsUu*ipG# zJ~=aAnr_x`E$6eRCl?NzO?`$^Mdf(@2EkXweNo|(;^RA;d%9SbYrL|cuE4V4sL zdDR&qUjM0EA73fVj_{-Cy~E*2zHgJ>m)5+BODHq0*ZBDop*J(-DWA)Ww}B{jY?OZukdJNdX?0q zk|Y;R9whSk;XX%MGfCj)z|!5Q-afUvFd{#?MnZyvDPY|G+wu<6lOxJ>zb5sp!Exsz z;fnj6YIOm)&+p8+ogiI#qpxTdmDqzi4f){clD5Mjk;L#aYd8tfJ>_UJ21V=}-jqp| zm3KDmYWdZsVxOO5W@a1bjgOZtoksnD;25i;E+MbV4kbhIK>|m>Q4QY>0b`wy*>Nb3 zlCf2|Trgd^(fQVMA3u|JfcqkhLYf(DieJMpB;;B{AK%H;R%x^RI{kILxPSms(-$lR zm#$s!d5`kP@8B5~M2s`UDDb~d;1Pq20Wd1ng>Wnw>LedON_5`42Y6hLa-pF82Et>!?&4)An?0b)c{6qGYW;OWM9b)pA{ z(QSe2t4qWcgNki18Nk5}vE;oPqJn}qu&5QZC(5lreL*HMZa7&d&3EbvX$Fw2XKfqM zQ<=zM?P3wziPr{X%e(Q?0RF3!o8T7@qvw)9sTxgIzF1mX5($*^sm=gS2R`AiQJs}t z{ykz@c8e847AB@&Fg=gCNTVzJv!BxHb|T-)g@~PuQY)&p*AY%=TJpkz)jZIKbVtOa zB4_xzVF(2!r!vCdYHyCzg)(Vpd-GNTM}0hg$V8=G1WKQ*Q{1OjgX}kX>D*DtE)6{> zp~;E^d4^hiSGsHR`6LJGNPts1bL_b}wV)BwureZn=WO;XC>Hhl;?M(MtR%gs9Sf3UGdLT!RD zID1IIApio1s5l}p*vDglxRcRU9<GBmZ5v5 z8oL7qVVY9a;jU@BbHR+;0zVW9R{ICdv~j-VXk*10BJ*Dj*HNMI>S+L*um>e$qdGG) z3av@jB=oN)ZSU=66#gi5Nw(I9oMi>m;B%?s+|3R6Fs~!$;dt_`z;3GIEm9O_WF5W{ zsTiIcyMN_*-%Bu`v~#~zCY$L)d5}Mbg~v!FZ#_1;gAv1G}StuCv2+@RUk>9iLN2`U6}Ocor@$ z?jU5;08zY>r;@8^bFd-{hVN0Ehx}rxeT*i9l(e+89L^_j03)^;9QjE9G||9xe`p8NvxzkZPSdzErbbRACNVg3tgsQg47i9fWPI zjN}u;q3c9ub&tfK0vZNTFrh>>Xoc~yNRsVUX?iJ+qoM@k{sK;}^ zAj7ST2{Z1mmCt*;80-I_z8ghuG!-Y+z&T8>sxvKGu-c6Iaeo@MV)xOZUez^BW+4OH z=T(wR2W#&{|B4p8Rofez_}7WFTbd>)_QW~R#*0U|%W^%Q12%YL;d?#_zW)uN_%I(~ zO3vHG9|YoaDK2d%loB8GttSqgND~G5`64G7dv~iCjQ^*FI?5V>U|PY2$oP1|wh?ol zs$>WAI#>3n$LIE`GL%NAS18R7m$LwbD~kVvrZH~q)K7i6zEH1)11!hE(0YKZ4Ou*b z`qlQ7N>rOduIihph1;8t+sr46ZNr!!cYlVE`(@ApK%|DOg@H{Bv%Ye9hQtDMFG8K2B`c&9 z#s#%W=`iTtdIr_d#Z$A|p6M^{G_BUI2-Y9)6rn_ZEATKFx6<;gLVM|v(s>-L1#O*x6AiPv)eKRSm+msvREvG5))0u_LO-ItRR5 zR03a^4nJ@Qg8&>JbLD8e7-u+Fi>ldl8+~Y7egOafNhFm7Qg0#dX}#ttHa3cY!%6B{ z0X;qa6Nh(2q)4KoW`tQS67dVoX%b@r@p$arm692%FE*_gdV6Ii3n!-dh4TB3W^+=p zD-s!~pFR5&NvFnaKCvIc;SdQr9T2o6j6q09FwnbZs}W!jTN7IDiP0QZfvfepNVKLS zvL#iR3Q%Zk-V4koaTBHE6XMe#P~BN=o#=oT2@Wf^H|sA_-jpRE(SALlLLf#n`7dZH z91rh%G)uE(G6=N(W|0n9w~|Pg5{`%zFZ=cUHz2+Qlb7fnc7!i=%*}h1QEPGhL{gJG z+)3VPRQR)aKb!%eVbkd-O=tY!MWHU0_tj~b+DM+<5A|0fl5rl{ao(B_3XdU2?L-ZL zyO#&?xv(CnMIEIB~v2W83Vsg1Cw<~QrfJJ2U^-li>a zv&cyM23ck4wyYnvU7iUtAVTLR6N_#{M#9FuG4@-k&)(eTY{nJ#x~}CkbZlD_<*$d% z0up21y0SK?@h6+DC?|6c8lj^dAj(dQ7zb#`Mj9CU3d~R@3-9DkFG9Z!O*ozYcZH11 z4D2Wm59QNMf@D7OQ%|<^5+|c9g*3dJW z?WS>3iIi&XU!N56H80a1T3=texW8M+d- za;?D$mKL9#i<5H~4)Qg!b2>Vksb0D=7Bm*PPtpGv&#=rw=ilLVwXpec{h+2f%8Gwl z5d?}Qs&sLV_e0Qe*FD>@-z|N^kDv}Fcxn&`lra?*!DNkx(Dj8c1Sq48 z+x-NWw86nA(1K78<>kk{G5=GmrktA3g{@K~RcCux${~`zW0Yt+BpO5dGSW;I0dXl- ziX-}VD|+?t)T*oI4Ba;qH4>Ify~xnS{D6V8`cF5r26C_f0>22lXpv^2V6ocmsl@3f z;_gIX0l!E4lZL7?`{g)`_ZiY3UittI@0#os^vt5lS$MH%D4A@6Y+JsD6A4Sr$kAz*}~+wqpR`v{a-B15{~ zV)>=VxdC~;1pbaY^}z-%e2>-Q>(bhc4mmc+@G<7LE{(9XKC4P8%V66^Z*N8MTNKdjl4?G~?`&>`NplG9T_e)%T-rrgP63^DxfG7ZF zZmBzMu4?O2)bYtjY5k;DLm^M@w$cc@{cshAbbIIvv#IJ+iA1dR#l_nIOrop|iq*Z= zgZnx1D2An%*nXv#1PStK(1_Ss3Y|fT;&jlPe_3fVL=BQkxFx6MdqOxhv*gm0Yn)1^ zOd(YZ#@7tH1zcrgj<*5yC^j8=ytAk*`~Qd^hH6RYKDakTu9F=>I`;O@2sgp8s&aU3gR^=z|tHu%ul+V6b7o_o_^`P zoVL_WDM9BycVi3j;4YOWPf+`i(&?z*wtEtUFRoD?X*lorc*GXI8CuIU^20l?le8fyp>%jk!;dJfh?<3 zq>-|oOT|*Kw-90eFsKa+i&?LUD;%9TxNKuA>=9vX(TDvr=Mc&$Ozeu|<)(><92%`u zHaLgKF9b2V^IlmV(`Qv}cN`M{_^4TywbUPv;#=z?uaw@{TU!##%FdBjxc`*t==PlR zg^oPAJPQlknYRI_X2t8vck?Er>AXYuY$O}be;8+FIYiL=g_-Jj%weA`^b}wS;xxCn ze*x>S0>gbSvG8TREUGqwvk&-Tju1~f9)rIP z8t?_k*Sgbk!1G-(_lsQCV75?#F%)|c7S{*P_W!;ecJ(KE%DiG?aJyn(=)vWKQ20Ox z%VoPpDrQZx7XxFkm^KX5EnT->sxh3}E!ci}dR)JxL$|m}Gt6vMA1-RfikIhQ+F|7A zV9Gw?{4d%`#o#-BKRc)?eR}<(X(Bvt$Iqu+XVGfK+*|GRbXqqj?%!%~Rpu{sOeE3M zH_sg1cAGymDEqD z=hJV1zypMn7ByOIL;GilZj&uP&6E4;lYXn0btXpBBe=^Q+WLADX=8_(eVL$BOOyw# zFB=TjO(Sq5vIQ&T0#P=H@{6qMetA2Zzs@W7_4I z5V|UDn0Nz136Yosbx~0-(6xoms|1HifU^$vJ5 zI1rI@6XhW(2S>C;?dcsa!C%27LJ5u!)8yI^zsq6y2jE6?2xso@?m)=zV1|qb)nX&W zD5Z@p{}=2LS0o5JoKFqnOM%*3+Dxn1NLIuj=NBXo;es1F)PoHZ6JKGK6j;rRK$edL z?ELqee;xQDu!uai49)YmrBY-lm5YrYA;v>wNU}1>g z^@?nzPiSPnc(_?m>@+^wn(#sJ4?I4B^^J|5a_Bt~6(ot$izbyexMS>4ZR47}fQx%^ zo*|v@5RcjPrt5!q^Ja%X*9m3N!LOLpJklKC66u^*pE_;LDIr+-vw)T1AD__dA zpb&U>pw`&PP#awR#bLd=bXu{*dy+Xa@hf=fJt{g7v`PBzP?Gc~G8UoPV?Y9m1? zA7ZNK;_7_coh_LQaAJeb=#cfaXgby6Bv5-?oXiKQms@@WEf#N454=*KRB4q9+=<;T zWbK_nMGHR>$lu(bKon=e=cha)$LUZ&8^UsGekgQz_w!ws=uY}eW#)4+Q*1X;WC@yB z`(g9X)%sq5ecc1L42i5;rzqkna+i4&xZ+yIqX z!I4J888Tid*mHa4|7=@d4LpoL+#cb)L_r05;5qPK?9vvUKTh2TlcYYFup-#!U~HI+ zfQ8)w6*85^>F@10jJd8yR=Yfes%5NpIKUGqo*GQ?v_~-XL}IyC^BYAMHayDj1Nz3& z)>a?PCYm3<@=^a_<_kp$DqvF4tj3ryS`kjCrl|CxN-1Bn(k=#H=?22p5F}qRdFmC* zuJ`o~44UDIMRQm^1GJ+7Hh^53c(MZD_vK0eLTdOR5xCPj0Sw*y0T%%40}wSQ={9`< z0U%EiF``S2W?t;;w*!h5$iQ|GUlh8$yLT}F34OKaTioQ5(E@(}Mrd-Do)cf76DLU>YbuYAVLEd9Yc2JpI5nh8s$Udsk>~;V z^eo?Vpg`(FjmawWIeLx7Mpo-4g_&M!k@95 z$U}tv_@)3neB%M3>tqM`!`}xLa`xJ$9|P|T?$CFyg~qP6JTWZ10TfoR#gPpA%@RQP z1wPpu0AHfnY^mp)gIcmBIT5AlMsTBP!EOdI$KLkz#%Q6(ji3mPCv#@IV9D`c=-TU$%x>+UsWU2x^=IpjsmB^Q*Hx&774y@aia3hL5){TGB}~N(Mvwbp z=~j|{culXxBMnmWNYBz_J&pSh1XBCnt`euj8Rzq}aIrGF*Aq3p$0s#N;68FK)~q@~ zVe;P?ysyNLzLYa{FlgE;0T))QPsnqCAw7V0F5*$){7I0?{9l)n8L zqD0U(P603&P=nS0wnET^#fGIdUC~tqyciR}=0ifmeMIIPdu-BI16%lgNH#7wp{stBfX3+N|+n$Iw~Z0@1G zJT&@T<|;VeTPSFg*++!8666uaficsTPHTVjzGp5MvG(SokZ|ebgE!7oUiT z2-w4*RO$x{VMzbJ55DsH^(p${*+-C(M*g7eJZM_wVvz$8J`1^nx(G(pTm^Fx+ILTH zZ~0UaG`&W>U?A7QoK4G{I9roEZo=Mc`=qRe=jtw}M;8?Q*obET+3j z$d_shg&fnt4LsG-T7O}%LIjr|Zp~TjPnLFcpFq4-b2bgE)f1|84O~R*;=yLzDCg70 z{xNbT7YLkS5P~HII~H8$o3h`ld{sxSE4Fcy$>!OwP3VAtu#5igQ)-wRmCIA-{1TDh z2?#ekyfGhwiJ;1kV7369NlTPhhIkL!B%_kvtW5NPH&Yv*S0XgbM z&m8-_1oUvHZ9PG7T;Oq&l4yn}W)(h%eNw@9UcmC4+r)J496$s+{Rz&C?dg2miHVc_ zGOP_4>ctX1*qe*y?~Xc647xD`LK`l{gSnUQ2iG4k^c0npkiFpiZ8SgrPmQO9*VJ8@ zq`9X8`kXaQfT4P%{;R-Sm5>U(NlHOh^9ElOa{3Cif89Vx(Mn$Pef4O^N>SbC(!}Ry7CJ#q=HM2r6Zgc=(8ktwQCuLYumL0gB`B5p z2i}yIm*a4Us~ZESsO7wSyQmING&yBUAy0mKl;j=>QPJBm;XHMYo{;B|#a8^+P7BEZ zXwKi=9VwDlr5^G!M=Pyy$=V|`1UH=!1$1}eAL40EMbf02aUc`Y-Fk&!FuI9&Tf0n^ zvJ|o~A*wGO6b;P}rG28rfe`k2r-6n>0^n()w{5Uc_nCY_Flx7#)+Tv{bf9TwL6Xhe z%%Oaqkn3tI_4`~c4EqL*yWUvJzj5*A*rIj3+=G7(And$EuM07f1p;#6sXfA?l066H5m?eC4+#aIYKASy&pPd4R|N zJE=CwMX(kGE=LyE9#!nmt*ogefi%OpXkrb&eSc-FX)4HIbIyX(?d%p{P4d8hgBPwS z0%F4Rh8uF+s#d|QHySS>c5U(|dp;(?_&Ec>FHU;C%OhYrGp9$4fr*1Cqx}g39lTx> za|x_6>qFV~!j7`S02c7~2%6I*Luqo?1LWr!Zt?38tb#sK6l7E(j)|_Hu4ixNsFona zefY3HJzMuXJ3EbrzGH!2xt~zt^=tB1p^FwzfPVyobXbFPCBecK4%vw11TZ9v!;ZF| zcc|ezt(s5zMd>o%$|+vp*9mpjz+@UTa#YIJlY$@V%D!^Kla;?bRwxB;-n`4@=ns-q zxl$9ft8-I))2Cf6koOJ*PVIpea%t`v;PG0sORG|#ANf;4Y!)P71ZT_AAW$&^%n6DE zNO9NBQ;^HDbD4Z+E_9ZjPRdf~CT*@&C!ShLNU7c#HZwqh@F!XlNBt}r`|#&)J@1%J z?prkYYIwy?*l$#+z3r}=05D)$%ou{xpP_~0(`%x6Rb|Q=5trCSK4l=*0LOVJ$qLL} zO{*Fe(RZ2T8)V{<3qOzeNo5nfvxZg)rV8Uuj_td+1GmbrW6w zUI-amy7bO(7+#k`gmm-7j`oD5* z7uQeJe*%^BSFQpS{0|>MPaeJK1Ok@PQSJqtmfFoYs5H{Vsy6Iz*4b`SLtXV%L!axk z10qtIHdKmM2Fe(6s}56yD}baF4JksCzzzuw{s|0p0Aag?zMftK@Kw0HPOKeK42BKO z0g`HUcmX0FAm1JiGP_0V*&2WF9t#|Wkd)QNdw;xvs3nwQo5b9;g zNT`{JRI4M#Yggs?mtcX6te37%+3eb(a##lkbhysMIqq9pSuxphiXx* zImH7*xWTsT@-q~3$2xKN+>JX%)*{XxStPc0=yc-ph6BXHWWDgGp7*{gD1rOSt@QM~ z|N2(pe~y}wcu=ie{2Ej^Z{c5^WnPdxFEt~FvW*Yj(AJyhE1Ao-4&A2YvH3JYJvnGH z_DK$ly5_*jO^r42eZ-gKu=I7zNu+p@WA#k~@Z9+%Otia`BmMM@3-|y~Rgy=Ms_v!R_xUznkM_+NRqAlTXbOTn8F$ zXw=IYft#PVw#1lr<_ZOEiJmuUf;?ZRiQ)T@4!V zzzLyc$j^CuqPPMMXFMyeFSY!E!q70Gk$&&dz3i{@xN(rO4}xBGR_Mu1SRS>Aov$ z_&GACam+;|U_z`nAW}(^Jf(Qa34yhJRqWY)&v74 zQcS59(~Zz1L=Ll6ti^?X6&7y2onk)O_^T}j`W3xpWkv~FAZlQy1IB-`^858c0s1vf z%FYUAUJSo-I=Ew<2dHe8vDd^U8cCZnG#}8<-HJpK4XWk${{BdT91Tq_>3m!u}WKr}z zppifm;!lvQvnQUyGtieRip#n87^Hu%D!vb84Wyu9nGU5oh!KY~>;0xgY=Kij48w<) zEy;xAK2X(MU7oY(H9t^SSNA7O`0JBl04LTZy}J+s5u=DJ{%uMHMm>gNX(^PP+cBG+ z5$(>PlgJ#(;RJ2KF8>8F%<7P@EHE9JjW@E_)$xk$RcFF+{*}k^6X3?X0GJf$|3;@x zFzG(DZG!FnbtM0eJD}c0O_fIQkJhZ zpFi!I{5rl8p!@$kxw#1F|1cOrN=jbfvzyOc6gHgLnRiXm;fpC{0qld(Lw4lK3PgpU z#qu!6`1p^vZ9xcx?C%FX7r_W97oHvpiLj>4<(VyD@INaL*R3d5gfE9TGsml6EPfwq zJkW7`N-`x3M=eYn5hI3T3Ma3%&GfrkL!RUCyYc{J54G_>U-ZpR7<{OFnYV9A!Q4zA zDnw89Y9EiV$B2FF9H6R@DeH|msC21OxjlCQe8m7cPj8#vEl`Z~X3b~*Yi5Jj=^zPc zAY~O5TyDv~Kd_*Wk{BQ!)$|~|c{f=Zae0nzd9tH3H>X=zSduDy`o$rFF33J+4+;Qe z`)$nV7%G3lyjBmn&@i976#@>H7*PzjtQPAX^E}ms)5IGl8$6l=@cMF8Sh(J=xEB=_ z6*ge~y~0NK>>nc`-SQI?eyQN;pg}52@5z)oWC9b6oS>8g7o@Md#}t&5cY)wpS`z>A zlp(Ono(hEWvs)UNfC@aZJO24AE4WYy+kyiQ&JSf4R_9}H%!SpLpr11rQD1_=&8>;* zk5HgZO?{+(LoJ`H`r^A%{%dGbs1$Re;V=IENjw>!!qDSxx=fbBEff@+s|!bZ^>Tqf z|GbM$uSv?v8V*GY67BsbNj{=X>JvPcRy3de;_w5z>7URpe9|MqhVdYs^%#mCikFOMF+w{VCRlP|Z_`SOGc5jJLSZVtyj&g$Af zhvME7SQjCQz?51ZZ)w2Htph}x25K>(6Jb1loO;fA^pX~6VrkwoL~F)Y3N~J}xw*2c z%1OnP?p|qR_ie~-=j1TS8-=ZtlaHxv41?olbnHsJXfk7ldxUM|K6b$mL4*vifWO?;iH5l&A|3|; z$mWGn*h~fLxw$zYX`!o1Qq1=C^Ak#w3kePu0Q;#numK|{4~>izadt+8J0kuFjQYTz zZPu6K0GcsuuaVZ&eH29{Y=Sxhf5^ia=KJ z&*tXX8@KO+yRR>tr{ZatFo_5s5<0h^@KHg0-PzRzBG+H_^*3l}Xb^@|#l?eUHUGSi zMm3?o=5zkD^howz@c(Z5=V*kj^Z)6h18auSm;X6X|JraO);rhTt{)@~e(*&g!GB_} MUJK_5YJd8F0Gp3L3jhEB diff --git a/examples/openlineage/pipeline.py b/examples/openlineage/pipeline.py index 1cabe0bf4..3523744a0 100644 --- a/examples/openlineage/pipeline.py +++ b/examples/openlineage/pipeline.py @@ -21,15 +21,18 @@ def file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]: # TODO: metadata df = pd.read_csv(file_ds_path) - return df, utils.get_file_metadata(file_ds_path) + return df, utils.get_file_and_dataframe_metadata(file_ds_path, df) @dataloader() def db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]: query = "SELECT * FROM purchase_data" - return pd.read_sql(query, con=db_client), { + df = pd.read_sql(query, con=db_client) + metadata = { "sql_metadata": {"query": query, "table_name": "purchase_data", "database": "sqlite"} } + metadata.update(utils.get_dataframe_metadata(df)) + return df, metadata def transformed_file_dataset(file_dataset: pd.DataFrame) -> pd.DataFrame: @@ -69,7 +72,10 @@ def saved_file(fit_model: ModelObject, file_path: str) -> dict: @datasaver() def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict: # joined_dataset.to_sql(joined_table_name, con=db_client, index=False) - return utils.get_sql_metadata(joined_table_name, joined_dataset) + # raise ValueError("Hi") + metadata = utils.get_sql_metadata(joined_table_name, joined_dataset) + metadata.update(utils.get_dataframe_metadata(joined_dataset)) + return metadata if __name__ == "__main__": @@ -77,7 +83,7 @@ def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_na from adapter import OpenLineageAdapter from openlineage.client import OpenLineageClient - from openlineage.client.transport.file import FileConfig, FileTransport + from openlineage.client.transport.file import FileConfig import __main__ as pipeline from hamilton import driver @@ -87,9 +93,10 @@ def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_na append=True, ) - client = OpenLineageClient(transport=FileTransport(file_config)) + client = OpenLineageClient(url="http://localhost:9000") + # client = OpenLineageClient(transport=FileTransport(file_config)) - ola = OpenLineageAdapter(client, "my_namespace", "test_job") + ola = OpenLineageAdapter(client, "my_namespace2", "test_job2") db_client = sqlite3.connect("purchase_data.db") From 0b4809099aa63a00c9feec3ded6364de0d944a0e Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Fri, 6 Sep 2024 10:40:43 -0700 Subject: [PATCH 3/7] Adds open lineage tracker, example, and adds to docs This gets the V1 version going. Main assumptions: - we utilize the utils functions for metadata This is the basis for someone quickly and easily implementing OL. TODO: version the utils metadata schema TODO: add some unit tests. --- .../_snippets/simple_materializer_ctx.png | Bin 0 -> 45569 bytes .../_snippets/simple_materializer_ctx.py | 43 +++ .../_snippets/static_materializer_ctx.py | 8 +- docs/concepts/materialization.rst | 30 +- docs/integrations/index.rst | 1 + .../lifecycle-hooks/OpenLineageAdapter.rst | 8 + docs/reference/lifecycle-hooks/index.rst | 1 + examples/openlineage/README.md | 27 ++ examples/openlineage/fake_data.py | 4 + examples/openlineage/graph.png | Bin 99672 -> 105179 bytes examples/openlineage/notebook.ipynb | 269 ++++++++++++++++++ examples/openlineage/ol.json | 10 - examples/openlineage/pipeline.json | 6 - examples/openlineage/pipeline.py | 38 +-- examples/openlineage/purchase_data.db | Bin 36864 -> 188416 bytes examples/openlineage/requirements.txt | 2 + examples/openlineage/run.py | 39 +++ .../plugins/h_openlineage.py | 246 ++++++++-------- 18 files changed, 570 insertions(+), 162 deletions(-) create mode 100644 docs/concepts/_snippets/simple_materializer_ctx.png create mode 100644 docs/concepts/_snippets/simple_materializer_ctx.py create mode 100644 docs/reference/lifecycle-hooks/OpenLineageAdapter.rst create mode 100644 examples/openlineage/notebook.ipynb delete mode 100644 examples/openlineage/ol.json delete mode 100644 examples/openlineage/pipeline.json create mode 100644 examples/openlineage/requirements.txt create mode 100644 examples/openlineage/run.py rename examples/openlineage/adapter.py => hamilton/plugins/h_openlineage.py (59%) diff --git a/docs/concepts/_snippets/simple_materializer_ctx.png b/docs/concepts/_snippets/simple_materializer_ctx.png new file mode 100644 index 0000000000000000000000000000000000000000..55821d883e9243cfc65184c90c95a4cad98a803c GIT binary patch literal 45569 zcmce;bzGHOv^I)?ZWUpxC`fJBT{ey>kB%WnzgYwBmi?d1G{MWU3=P}k1O`7neNn9UdyK;zIS22PN2}e;u$WMX z5BRN8Qc~}p>FMQAoyB*>4f9*XwK7buQM!$N-CCX_BZNC zbm=)cRc?vClM@xKzuHQ2^=it@jBzZt&4VERwYLu*KJ3ZW<_jR_lEKHvSFX1lDv?HB ztELvQx4oQ4B)B7NSXl0PM2fpL`_sT)!XKn5DJiqPnpQoLY)0&^8^$iKuBL~3n`FH9 z>DTV4C1fb3NuWKCc8xAlaLeW9=2lF{xlR83nE-diKYMom^Yc?0W!8!A9v)@_V{Nf~ z4qFTA9{Y=>rb8t;RIW2O4(D}`JB{K!Qe$E$ax{u1&_yomh8L;$)y}*S`S$u^aCLRH zVN1jfR#w)m!&cm=jI-&5Oz(Q^*{38Y(+djfaE;gp)65q4>2$%pu3ov4)R83C+}tdw zm@4(b-`~H)YApB14>?q)UAsV|~pBS$UYYHW{?O zl~tag#~wW$otTM92iIeQ{3-aI2P5RuCk{p*AobW#hZ1SrDY?C41~|t*x(j z?QPD(&QUQK8!orQE-vQeXqIN0_2t^y+jqadNS^tQ$9D29?BG1-n!&lAtZ*3r#zc^i z%7BiJPOd?7SdS|eZhTSxhUIG$Ii;hSCFduqf&}-(?WWs$UY@(MF_RR;NJ}e9MMb4i zXczz)Bj?1aGwHJNf)EK^U9v(s_!q9ttTs^hHGa4i8WE9BBy{izh(50G9k|@TG_Zee0+S>TZ3kprl#`L+6%awm!zwQQJeKM?;%Ev=N{**rPq#+0HLTHwxvWn$LBK9otq0cZj9+MGol6NJ?a+3RfD^k^(DT-0rQ%{7h>;7Z=f{FZ4F}a zO{Lb>){68R2(i=CS(>Gm=g*xhpX|@hzSFF!9_Kp8kfU9x($v(XDxhnToSJG1S#z#C zBN(gxk2LCcf((8C{>dUe?)v1tcT_#Q!OeAfOdFk@-@Q~fte_K#curXj1 zKfAL!v9~{VY`ORrcO&5t>OOr)lCFoFeZ^0|o$)x@owl{JQw*XK*f`uC>zh4K^!tG~ z>4kEir=_J$wa4e}u1_<;7NQMCZEaNv;4+tY{mZqaKxbE14L;oN!An2UOpJS{w{+5f zrd3=8!0Ttn{J!dwE_x`&@b&-xMPg=Wjm7Kg>KGXr6&xK){QUiu)zs19Y+S+;ae+rt?d|Z`*paIqzsnX` zmZ+j1%;5fxZEprGBX>qUA&$LWis)C+7=G4I*hX&?=3@AI4%w% zDFcRN>)-%+S2FbKWfGE8fq{Xr8-wAoLu(F0%gZRrKmCM+kxwiH84uImuBxLGcmBc! z<~li3Q`69o=?Mu5m;-ndj7K#~C8s-6nF;^&Y5Kc&AqCEiEG(n<85OE-CS~Ylh`NE&Fm~eSCa~|Nc8cB}XFz z(#zWFYJSM|){a+MQc%?LTxuZa8yFce-MaNnfisrZL4r;u<_8o-`;8g-x`qa(+qdf! zLSX78FLf3g$&T1}NzaW`mO|3X<@p_U4jErCL0xIGW>AVWO3Wi+f|wz1KNc0ubXp!I z6L2kpp%YV4<@V-i+BH8uWe0&ZywnM|Xbu#B2_>ZDP5%D<5e$6}DYl=UJO@AlOPO+( z%2}ArutjdD#Dbh2L6&%U;eAiA4X23s6S}*Vq+@xNw?~}f0kk}7>NpJvhJl`59CC0@ z!676*jY`LyYs?zSM~D0KK|)8yB}{g>O9V*1sGf6d4rAtZ+sal@RCHMA&zG#>!IzeW z1P4EdMnz?AY}ixs*gk@))*JX6*d(9voN8G4_3bJ(bsk(zZEI_5u0KBs?w!1{V%;qJ z=+VoQCr^^yzh=t7#@1z9*}Q91j8r?f?ImRwmvRWDgkRs@m^Gnq7nE9k(z%EX#k<+` z$C_T_`x|>}&8(piWjj0079$nPZwM(nD;(xSA|i}kLbKrOY z&y3c1RLaEhX9Uy9W|oze4Z2VJzrS$d5)lzmd0Cm7j+5D4(n&1#c2bA&?g;ER*bsz- zglj7+?`fJnQEM9;=EO{-u*GR&-I$tpOLHb6sb^9L#vQx!HHdaH!rp z>uKm(60M`7BUB7|$m9kM*r}F$atCg z!sQfVVhxOW;l-t;;c02p20^QkFV=V|m}LmrY`dpzy6y}J4#D5(8vEDm>g*XMSGP#0r={d%gN zVpH5=Xcu}jIrZvQg;pjO8g&&-EeUn?NPrPp=9SiuQPNskT9b2g8WTI~Ome0giMCIF zeK94#ty-p;EmlnXQ(<9Ywkz%zcqOfSL`A>9O&9y$r!-=x)Bs+nWUJZKH9*wJ9Pcy; z<+}UYU^%_>FDTyX*XqG$Bp?%jGQOC_dUIO_DmPtFN|fPS}a)Q<>krP z4Brt_3ud3YLQ79W^9aCuS7(akZPW!479}YBNIX10b(Znoz5GFnXfCVX$)@0|mo6o~ zfB(0@!OAy{BI6Hm8yXZO@$Qe0{b^7W^#NTW42pLe42_J;I+IazgT+~pxiWx=n2c07 zC{M-TH}It7NR|v>{&3|R(cD;VEjl>Zz{)Fk zY@o;__zVH*KeDp20&9)8Oglcl;xzA1po@1`5DTQ}K<4x9+rJh^DpjF`Ap3cLYw3z!XyXA+Aijk(>w%PfcZNg*$PB{t1A~G}&6yY&?rqQawJ$*VZ)+IRHy0&rt%sN&5cbfR^XXNbQCb9ap3Q#H7 zB=6JRzI`~`Z_9#Rr(=&~OPzjt!Frk6j$zd1i`gFajX)+*zz+`?hubl|wqd~!( z7MiU`Q7?fljsaW?8$6uf2rx<*vu0{zqc~Cn!xjNf14L0UG09NL)6vF8 zs23V$K#YXPteX~UwY3W!XEz1YWdZKrgD3&2q{}*h+YQF1xPcIplF~!+Xf}HB<;j5O z4R|Ef^!Zooyp9X$5MRt{pM*g#kU*j2pFR5s5HgF>D-l)^W6sGWB&2&wEHJxZ*}{?U{C`%g=SD_#0FKzNt3I zKmjFNs@~SYPEH#4WGVv}wx~A5F`gCogSuY)Dt>Yym!A;4sLWfF7KC0dxWkLZq>i|Z=%*DkO zaGgz5yV6k^iUDMX1Q3Acfh6_%*%P-EWuUKb+z?1<+LIZ|>$GHEzS7>Kd9 z`y=sT1<=->Vl&l&p|0wFzlU!KO%?}>HL9HRzkd66m4d>2Q5^Sh;-;V1^y>VsMsZoi z3GU6@YK^$}5c0F%yLU=3TRn*n&%S!|hKZkFD={(A*4o-QU9IdS2qO^GFi}MZ3uCpq zL#0-Iu!|;vVnAJ*#fIyKL8&jEz-6<4GEOuT2?+@ydBUn@Hx)=o3aB~sH*ScWJ9loc zLFgzE3bO-2yIgfI!f#wSjkI8Q*J1lSigEmN^+j|3=5z=*;+jLp+`ICGMdA3@5- zw6t_1`2S$XrujHd&_e_23?d8y6#~?Rqjv?wDy%g-A6>VXav&e_@N)Lof)os2-4ZW! zGX{r-vHTdO?PoFS6FeLyOtQZj9kX+-jpXo5)i7kL4>We3jz8*_UODl_rJcm@E3J`M!D6aNDY>96dhy_2k4eSY_Cu=(e0jZe1xYX-`#ERY?&< zU|3varlzKbO|8u25Aq4D`zzDR*x>I7L-*~VCw3y zeg(LzKWUCq+O^36VJEL#7&irY(ifJae(UHU;r^f38vf6z7XQPQS~~_$kUfAR4H8c_ zWs=DC0MY9NXZ~pKpXbaA4*ClW{E-52xUt?oSZS08&^w#5iIG4w3G!a{@l2N(>~iH= z&qIBy_GdVeKzRL`BDR5R%soj}$3uDlXy@SJ6A29? zX5wN}WOze3^X4M?=BV3phJ$gsPK=;76e8I5pBx|Irk?DjbO^QE)$<|)-ucFi3o|p3#UDP49DTLbV zcz?{m+M(yCe2^xeU+dh+G1V)Fg=~;xe+V!*lqE3ZaI=(e>rjSz;G4FEg=x7p|?vJV*mTq1FHEt7?yrDgj0l zk8biJuR0-eW6k7O8YQ2j+JAkOSP)gH>;<9nis)?06m{dCihw{W0n^3bZIfu$GissNNHm#$tNbOo0Q7dt2hhn|+7+CQyMTLWAR{ixHjKI)zin<; zR%hUIi*v$N)z3WzyK58c_<3eSQvv8?)-jid(Y41a?JaJa7xdy(VAsTXtsgQ@sInZ% z4S5cxm+R)ffAJz|G=9}5CPsVX=M~x6;N8NaxKGvD>MS71wYAp z#S1C=x;bW4Wh+_m+IQaSXwT@g@Yp=^lIdz2^ZYHR&;#nyveVG~>C0bO>t-Y_mUJ{{pWxG^F)d4f__rZbza!SpzA@x193S}P$hl){tf zyT#`%m{7c**hJh)>NKYY;0Emk)Y;w1-^jSvCOlv-H_PW*p|@HC|>tZ5D$#A z!#NE8x?YcE0DfBMEcov(n}47`!vWQnAphf=NF8uOkIIvp1BSzxM%)BpyJt$&l-Qt*3l-Tpmn5663~lULa>-3 z4GMxG+i~H&yq=jy+!clvxJh*U7Rk6R(DnF(nxN2;ga40G6v!0^QxXX>cRC*J(D(d zb}qYnvo#%8LTs&T1>FrQE^jaOB17kji@pPd`J(&GJrvsO$$OevFID%H?*f&XtrHW} z2{(cQl{;&y_hyP~XN|{2Qf|}DW^I$qlx_;8LuEaGu+3!qJC!Z651ow@yt{OcvOhAR z)vUH>s(1{;m5{PGvQ2{O#MDvithxsY9Qx1{s(2KLA6xAzpwL0_wQ*karyRjk~Y$ z=t4{1ihj$bTcYAX^l zkU}xcs_GPc^5GDsqbXxBqNOWM-`*~`qxBHIu5T2hy!KpZa&qA#Cnayw$hY;V!k*r2 zI%?H7?}a^9>qs_T<02wR>+0(nZ`?@KX~$JnD*|N6JCE=BxZm)^h* zbKl=+`NAQU!5PpOEzB6Y7`?fuGX z&!Ma{tZO*R3#8~z17xrHZ-qo^_w(n^U4QLP7cYE!h2ggw9JDc)fdVGzHSZvB-!#N^ zbI#yj_z(#f74L-Z5OxBa(>~@pGAM7}2Eju=-(u1l&(;2KsaKTFJg|0f=xLz#N^Tv? z>vhuge74BVdCPOc^>8A|2|OWM(8Eyw7eHh}dkl?erL6!>klFz`yT~zymepiThuQfT z14v#Byu2_l+;pegN#}x31Vpdd)q8sE+q1rVvu~^rkTiIh#~gKU>FH*9O3g1 z@2S;+QvJCHp{`Zc)tkNRva`->mjw8CuLC_%=TiyJ_r&(??G)FV^y|K!U2hi*hOgpV zxcADjMonUfPyk_nXj)aL+?EV8uJfwSGZG`{J)#`Sq0H*wvtd_fJLVOoKA2_~*d8w2 za~-%3(A%s5w_pjQ>;r2PRjU&X^V=^^;}@@V6p2y&_-Z1Hi-ZPK`%ZLlk#R49G?i_d zUtyam=qL!0URaDisQsO;wN!$u7qJgOtOeCFdZU$VY$jAyw}S-h} zD|V-%nd2oTC6(pmp42_M2rdNZLaOm08)t3+n*NAp+dK_jd-^+f7SI!VdV0`NwQoA4 zXkQKIqcY9}UQ!kT5FE(rZ=+ATo!wMR2esG1Qs-E-=oOZ?# z_22yOUGxX*m!R#_->-I?h6V=!g@b#bi?_Kvrn^4fUg}7UXI$ircN!N$|IGy@t(GPe zON@vbqmxkxHp zo$x>O$0`1GgK54G4o(7{6?B2DPoLy~bwkHk9#l=BiO`3Vv(VMisli|*LZg2-e6*lx zi-_ayoYAeArnU^*nu3D+0E*QGhlYllzI7F1NQ0Yb#2St(H@HX%Y&pmb?vi1r<`}{D zgS3Z0+JN2=$m}7|&C_BXoSvP{fZimurE_wR%`f`k*tPLjM3DeR7QnQ*0`PheTbd1q;PpY+}R3b@6{!#2?uS_GoyQT+OMqb4VR zC4c@|Vr%PILNW34Cw)@1Td2#h6z#x(?%tWewSxOsb>$+&6+A5+dzO{dlGh3pu3jTy zU}BQ>HK9{hP)i>lzj>A9TKYe%vUQJNF*2~^u2P&ylCP<$IseyR?`z|04-PaM+uLQK zGlDeG3~~^a^Rg+U_Yy1CWaT44P9m+AyN<+AZq6yP@rT~ zfDOu|q^VxFTH8RET3v{&sy0|#`;cbkUGdWCLt0QCf0f74;RG{RaGKUT(Q?vvwrr8v z8;iLC;N}t0$@RN%L0Lg7*=JY_t8Ylp#iv-V9*GfjQ{joc&Ku&WFywTcxX@CFX={;_ z7kO?#2)GRY41R`mH0ODiK<`(RS(_eH%R`H^R zeu+2w2L_;gD=tyRc?s^E1eSwo#dHsJ&GN>EWhypw+3z`LZqcL|PsrBdP}z~&t9Ou= zA83@SKuYRKu`_Z21J&@dc17cpyWO+f`59ie2sa1SSlL>n%l_Ve^PNlRWKN60{)N@r zgSBRZAY_@yUO=D73^FOwtcPk~<}r-)pQEF*-cY%w>)2+i7mC6La9#Owc3%Iep7!4j zZqo|$ROB$Pf-}J(O=X86PD+#ndcZs^tFls~^n$8&U$l@^r7Ah4MpNGX^cYF5+t^_3O0ij_dY zn(Hnvv;+k;Pp8@*H2QRq(?O=FoYQgy*~`87Y!K*mB{vTR8?S}OJ!AAfDr zB5`QBOxtN|J`H?uj5IWpep4mT^eC$W?N=RV0{Wr_wb^O)=lZ;!5Wk*rOtY2WDN>H4@=Fhj6pyw);b0qWtC$}f)KzHV7 zc5z7hOT<0BY|0a8PRrqRXrgHYqEir-`?NRArW8Cqnnc*=P@6h*^9MIDzjW%?*7k@*MAQyFK4@>wB{thT#z#tvT-wKvAK49CNGS!~ z)vnM=$%%`<1v8zIOJU2`R~L}N1#+m_&(F_6B+uq-fT-p${_zj=X^;d9Mn-T)C>Ptn zzV3Q^=@!(3RCvYw3nIbv)e?U|fznazD5RwV<&(p_|1Pw&bK7d{ENrEqH3XfzoHdt& zomB}*$u8(0gX>H+%MK90e5k69JXm%o$HzZ{(?ekO`;{;f5~&z&dH-w7Xd1+c3P#QH z)b#;B(3u0AS45EFT8`~xI^IkPJ6Pum@Hn!XbM_$e3o`uL(S)kDoX?txw3;bw9b(@t zb{VWO3(BoLas~M<9Ugvaf{dFEX2P4-{^#ctky5mP2zv%%_?(uMG&G{XG>G_OK(sc6 zR_tJvOCi#cyhzSz{3Ai+{Kbnspe!Z8Gc)n<3=~vM!20w6___ss0%X|t$pZF{_Ln)J zquUz8qX^EL_cRuxRqD`I1drAaXsaQH&g*Q3jm^zj5^>P`M!MX*c2n;}gQ%FHpO~Xt zs{>kSj}QI@c89rcv%Q+)R>Zjsb+mcT1i((x(^o{iew&g-5KvMhC^VL#c%!ZLUK z`9;Ng&9A+&tGcs?T!svbJ2uRR%g4DYum1~P=&tqhYK<4Fm6?{7mF)xL$7ZJ_D+*2J zx%2cQ8M`=Q5C9y7G}KX@&{E5VPR4^bMARzK0040)&U4QMEG;voW1fmno+Qwi3>KLn zmSA=_&_yVC6kyDV=NW7nA@AQOz^)fZ$9WyOj97oWs9Ycg-Y}#?4^~)dt`QoP>tb;q zyY)|DL|omN=~!DW-{W%V<`k1Aq~cGnT&~e<4rf&bUGLc59fk4@W6{q1^5X1#VY^_V zxfK|gpJNtrIZ3U2A#z+{RZpHMRwV}{K9!qUFaZ>SWl z)!eE#cEkmEO+(HQQm7fclOEYp04)^y6Td~eD1P94)hk~wgth-i7d&kIA@BCF{Z9v|pmxH@iXoNDv^(8CLqwIGoSe)X zU&`VR&1>83wbY%@1`e|>Nm>N;WXI7@6q$rlWnwd-+=5HI7ssr;X_>(!2loqWKl9>C z!6BqMLUb|=7FEE1Jh3&DH5O)l#2EmAi)0D3sg`yJn1q{`&k|9E0FnUA2i9hF11(F- zTpH~z{C&u!rlAuG&)Pj_ zV+$a%r+K&!fIdA3gUEc%k-`fqDvL#K zMjji3W9)8g&awQC-Gd)~yj_s&&jcOTtSd@+ZFN0sm6ID2WT+2KLd3F*8{p^H;EGT| zZ@?@l4Uv$L(4i26)4P4BI++2I2%_`!y!`-diV(ya*lB;(njdGW-4o!?O4Rz1dSHcu zhDIjjU}#>8vKh5?!)AAY1|yWTdFZOT9v^PcAH%3#2t07brEI3f3z= zOrr+oWw~hl$!GlQNs9x=lsFITx2XYSv_w|a)!U0g*k^Zpx#MsUS~zxgw7L>V6PRyb zo9=_#1ks5`zzFeQjn>x{e;cjU1xu~QbO6F4wi!S&neSquwGa5G7!-%BHq9Xl2P}~F zkkZo9nxj3l<`T%Z8gY4Oa2ZTb7v1jLUP{{TJ5cNzQ%{DGRd4m(bKMA=FTOiva=6v* zfN5?jaeUOB#6}l1A3x@v6Y1rl6*TM~I~span)%@a4zF3p*1bt4{L<T?i}%a}+&nIQ0LsfjhrtdSM|Oj1dU%aoy+;1KZy% zaOvd$ghQ-a-X~6Vr^&`=wUJ-GtdK?FkOHo8K=6Gnk!;Yu&IUnd9++0T0W@7cq>DlRWb05A*3|C5enU7@(XqM8$TVpPsaj3;|O1okmM*5w+`K!#f zQ|WMoG2z@ic)5LEkoS?_oob8Cf(Ao1_<;5Rg)t8u@AcKr!Qqr*_c+i55a%{H89nx9 z)6mI$%T=XRE-jHf-{JtUBQ!p^sX@C z4u{pxKHT3%ps_>LHv+ddvS28Ruj-$$BDQ0w=&Dp<)E^i zUv_-4H@Z)Po4l&Tw3xi{0j}S$_Qb!Ycx;c1d>XAxOyiIaOH%%!$Fpb8h{?&bUcNky zQ_F+}xIOlY9G8X}V0&sijW}@BJQqQOp|u#QEtKn~HG;sX|7O=vNOLiZPGSMDWV*dH z0`8*-gvh};4$RnC?O+*@herMTP5SqH%;M^ozMQ4*ZmPN|?PVmN6U4y6*!|(qYi4D1 z1X);+R_LK)0OA{_ZB*xk$d~hfS>|{r{0)r=rhn+a7qm9C>pFU^S?hM|fFHIkjz3Yc zLD2#Dj0~l0*X%@wgsh~p>zuqnoZxK~@YyVfeQW5IecaN{Q+4i}CnoCd{|;n6qKCg7BVsj@!UmPZ_iEQ)!zVJDe# zEaf*)b%9po{+MUZ2behGUjVwM>o{DOcP&>I97Brs_C71dU<@9hR1(!&2XM&1Pn&zo!9) zd;Tv%d133fUwIu>mid+y=C>%jD?G{$PR(0gjg~%CbcJ(AIh2S5Cw$BL7xV4#u1w`D zSD8+Gu+t)#Z}8q+DDh9s;g+Zn=7X7Nr-<3y(*W}^^sxhGmxz8L!;lkfzq2*5ip^F=mBNv z;-H;ETSOUU^FhMTU+H~x7KqcK#8)%Y6NF#wx=fc$W0e`W3fkh7ZJvsR^2El(9v?cb zga&zeYm_c0G!89?c*(srcoh(C<$vZl7af3b9Ji(NhBYe0p8Yv2w)Qb~Iy0Y}Te0zg z1hYno!gL&$j_q){|M5F7k`w9}Ubj6T3w7YbsXhlkn|lKyRogAq)544$H>f3;?Ba#s%j(B<8xDJyPbM+{@Gp3&pF1V z=xD7GY1@0G*tsPZs4DocOA!5`%3V{?4l8yMFia8}jW%=Db=G4C z76IZ0e0kHhej7^bwIVH-GkE;!{DrmloaFRGQU)ewWTFhJ$_o_mU0jr>=v&(1s8(H_ zq9!*lPxBM|V)v55(%|T(Bn&A`JCLSsHS03c0Nd@As`2GsVmZ(5CtC{xn8wCWuDky$ z5%pFsL~e|i8(00}#jpUsMTwU20vs&+8xR!`2_b5=cF$cb2?7Nkz9#r{7VjscJX{f6 znuvY}ZXFDO9sT=}#Kgq~P2f;o80Ez)f251kDK~+TD1qQ=l)Mp2Ox+zJufQf1?FeXr1I z)Pn#D?x@5;mn&DUY|iJ^W)>76SU#-J^6{fb>2PYG@1Po)lb;H|K`0HN<+)b?p6@%% zDItde^7HedF(V=22YHtrJcb~XXTUXpb`F-==!M#VB8gP(IG3sGs7_E!5E_D%C096C z3DmV+BX)UrI$jkz=K$6aZzMt)9FAgfH|770A3^4nV>LI$ig^H8bKUGwHP~JbzXK9u z7L;j3p#&0W5CdmQ00f)vngd;{JzTW9AKkh)Ep$Bavz!%iL4u2KIP*GkS#}+8L^3in z7dsLpw86@wYinx>&O8jY7#$r&D`8clfzV2d*y@C{Xwx*!Nj8Fhhlu%V97u!6yM7*s zKsbOOgpDDGl)zjDLd#&jx0&d!yrgK-Dte#gAn42Pw7nK`zy_TeN=MS%(o%)7M{aJt z2!}O`t$#fLEA1>uW^y3gfax{8fyzxv*K;=o;>t#PeR;TC5k$9CIguAh2kCmi!*WZQ zZ{L25oCiD$2%c^7836U{K6Bh9c>t`rj{DMq$RiQUV<(Du84NhpZr26f zxq+L}+uwZrchLr9!m-c2$Z{RvnXUJ^-N(xncAge{_^<; z`S)wHQm$5HfkE>eFF_)4XI~$vyS!3y{E=|70|ctS2ndp4xqZ!)2=%7X#$9K7O?-G@9VuGS?D2NP44@<96R#sPb6t z@ef^1e})P=i5_#-+t0OF(!lxA5+^_oRx^MKO~5RrKmar8&AyHYzX=4cmO3-}&z5Tu)b%;JM$AbGt9z>nLOX@0U(5Gcp+9 zNY&2%{;9vo$tA6=@4}GHN2?-{>sVUKB#8znEkY8>$@Go*@Zk$^S$TS5@f3w*1qN!* zof{zB=z*@m&C5GyyZy4y{_rc0=e{8s-qPsRd?&{a=MjPEUYlRv?`aJStSk?dmOVHv zp}zKQc$fkjEwS}Kz~=~U0A~PzN~I-5<^yP5uS4Y?!}0IFG5juQ5NZnGbS%7rl-v3r zyfLri>P&68qe=g#8?}d9l6<;I?&V z?eOwxdV{8*R~JaGHSNO*v#pf&b?{#MBffFwU~!sk?aDCtpO?wV{2X3lhgXwqrA6tE&a*WaB15E#Q@%`x90^ausm)0CL*u;JllQ%RMMg zaNP8@6zv3ndpI6-iIlVvvhoLs6jCxW!C*Wf79zC49a*ZZfP-3LW%COQnHH9+&{`}L zHul8zw5k0(Jhep@rV2N0%PGj+-rO8;w0*$OGoa30QE|0tA1jHH`ixOI?8joTG<392 z=2zA}a750UJbL_6Z+d0}(?O0}&5wxEd}6*f?klo(wXeoBOX;?d1o~k1SAU@6zg~bu zo%)Ur`J_Z`155}5Is#5g{bLw%>CYl0_M>PnlW|!}fkis?c504V zw{1%>E@42Bn1#c(`QK@SB?eZS-H&uiePR~O@w5c^SF`%wAKhvg*XlhbM=Mrxu*G)5 zEB6Km!zDZtCn9&V-d~6E@e@B8~-l- z3L%(k>3DhfLKk5(fdv>2QojOgc?g^YdGhqBd~$wvtWdbNnJV6sSogh!!rN^6VdR#L zkn-im&%!=hEVnp#d=18Ark{3u2uAXs^48lwx%2d^QRZo1DcW0;KXr~S>~2T)`?>1+ z`$R0J`~_;w_)j_ZZwdeI;=d*QVW0No9Oa>f&g+9EduMm|5^!IA8+u#2fm&srZ&K@R zBkE4gI>TaT6za@7ot(i4Qa zm=Al?f%sV^c1voX7*RhmHLcL&6a5f-cvV?SdaG?7*?eSvUU{B)F&70lhG~3g$EgL9 z=ij_gFS8(O<#kkEoL*!K-!YwKytddc8OpnPLR?l_+20PkUD(*vR^Qkkkr$Rbo+s&~ zX0yVL^$1NNKY64kt+Zodi?uyc<0g9b;CbSQOL|7fjh)^P-S4`dgpFsqN<3Y2?KSDH z{L8OjzuHs&PR~9N8!|HWU0v(1@`n2RtBS&2sOe@e&(7{jF$aD`D)N?=tSpi5BcGZY z!Sk<9g0Ek~b+W6kkB);Q6f7!FEGz=zQY;cD-Zx_*aiH-JobE&fNM4gGlvi}UcwHuK zJ2Y4>LS5}fu*9x;Y5`S}7(SMOHt6F`-vF2UuD2Nksh|*QI4m}mU?qLe*S1camFEs+ zkesP~bHdu*A<1;)48_m8ZfeoH6bb8=b#}?uCam zLVqIX7qgM6X(p%H&#rd?0d;%N4*PU!>0iEl`Sa&b@7P#MII0T<>StC~$6vibaqRE! zPw!nGDrLQw5&0_c;WK0LtflIK!v@Aq1@u6f{t5E%JDSOzxy2u^iK-SY3|@ixqZ)QYyGI?@kxt2y zWx2A1H=l6+d)Kwj&|)FJ`$JJlp{jtRwT-esTWu@8FiY@>zpr{~7H1nK(G^R?d3p*R zaAK2|vf}o8tkQdX^K?!XPm0+rnLT|w`38qaeEzAzLa&Qd(7g;IBQJQ9!v?7EGY>Bd zg57bZ7_AZRjcrHBRQMrmu?t$&?*z#E^7mF4q*_}d@7d$^u`*gcUrqn{u&3hUUAEFE z4Vh!zqj_3&5+U0;558|^#q4kYg=JK^$$a~|x5`L}14)Vt2Zyi=)7$5h13}{~F0WKB zJPg+KUmKdF6Tzbq6*aY>5q+K6U|Sy3QuToXFBShXLqhhn{Ez5CRg2KfNik8;Gtg3h ztn;_n?=lU4JMX8YCI7um|5`&@^GD+Go8+`)>s6({-W-p%y}HuS*oK+>xz(z)l9ejq zzCq0sNYvnQLKtvS{C-VN#pccNJ!O`-^IuxKF5oRQdO9nuocNqmRhqf@c6Kb&62Ifs z!K9da-uX-e5*ezrX78X2{9X!1btBE>B-^%`(@%|LI}6O(=`3U^6y1)|MS1w4nLcUo zaR~^}svvy$A7i9{ZmC=TJw4Zgw5RwYpDOdW(ScXJBW`S-ZSKm^-}}YB4_9WnE@@`5 zB;2_frF&YrTsYCS|Dzqz#>Qrol&oHRy#rp++@5|(tDk3&a$&T&M#bBh>^pdEr_bI? zu(^1KJ@?DlyvnuRqndY>s`$gzOeZm?>vNjJ@fyV?4aTN6z3?)^R>g8Gy74I5dBr~tnnhF5%H*FMj{^d#Abk8M;$B|9<5d#Q;2(B% zz)jH4Z&Kc#cpx&8yCUpMP8HW{*{erNlT)_07EZQVE@hq;d1_!}aM@-5nh66cBx`10 z3jK(LxV)VIo!_MAj)gg8%u2f4CA}+M(fG+Bt06S&dwK7c z*j)n*aWNJSwTaL_28Jt+LfyD`5BZcCIQFd+#Ky*kl8}IpsCfaufn%@ALBVLW96d43 zHPZUC??Xc$8>a4s=rA-jO->0mMM|V75I{R~kn}qFQvlQ@Ef~!C7gcV@cr=&Ksf2~i z%#%OS(+ems=SfXXRZ~}oL+;OkdW40AnFcX4Gb>wwqwA54-tXo9Rm>B<`FZzhVc^W{ z{Dfwb;|I&W{_i2MjpFwQ^9oZh$dx9dv{V{iJSWOb=kiDUsb>JId_e7#)jdQo?P zP^Tu(DoWh*uLtLDhf4Sc22TC@_U3y-10qfA9fOGt`JS94O(X7aYFSImCA+ca{_m&t zt|;Eg&c1t}^9%gICdu?pN(%X5cog4zElzNToWGpB4FFC?xvS5Y?=1vPicNuO21bUN zBd5;25BnIW_F-!BeQcz!77HCMN5F#E>ZHEWhsZclLswp&fdT#Gv=1NRQaLZGiip4fx0K$r#`3>hM)n`=)Dx{-pSj(>>(uz3H(Q=SZ2?N-i}KiTwBg zEnX1(8$juP3$}_wYMX5qU@a4%P&Z<2mEH8NT*6GZ*! z68V+ZSLCJV&L4%p>DX>+YC97Wnis3BwX(XJSdhmW%A{J~*GHnOs|#d!+mHDV0rrto zfWp)O76sisS76ZR2njuZ&4XtE4x3*~aXf^^cl8QK;>x5g4+*QzB(SjNE566AHbt_v1#LmGU0GXscGj_ld!j3D}wW%GtN%WZx|<_$XDrCbzt6fgacM z^;q$4xYzMrRP2%mS4{9UYrexi;pK@5yifW0DUOR8-MQM)V1(%S^zZ z@4EB17>R0Tuf^vCUtNV_%TxS}I|-^!mdt-G8k$%<1hAZ;kXB==F5}2q`jy2RJA6Gi zmalmU6}+=h*uIjb5A_Tp&HXKNVk9!Ky_1X_u;d4r# zQH?D*Jfl#XBBT?VHOI^U>mu8I&Qw69N;yM#c#%pH{R6=<0++w9DQCfHOhRDnMqgjH zBW=dOq^tiHNC1t$u7Xhe%_u(LCW|29vCd({rxhoD4|fO3FgYJ_f{PhFWjw`XT+>~w zMr*o_wF_fwbRYpF!?a{;m9K@Cru;`NxouogQyta#TmXSUIkm?R{8#g)Wks``!;f?!XL2O1Lh$*&zI%&+`AxLD=%Nioo* z{1^#;Q7YwVa6s$VfwG?IdUOOr1nrN0-Xc7%jy*NRneWs^{eRK*)?rn5UDqgBC@LU` zlz<>5DczuiNGJ``(%sz#og&==(hUOA-Q8W%-Cbwy=lQ<(I@h`0^VfX?!rpuR)|zY1 zF~=Aaig{VsC2*G`cE=~>$yF}7wgemrRBK|@obKV^pWD~< zwfVTJTo2hsHB-RF2i|X`GirgiJWAnv4aKb@;uW`Ea*1db4M5^RrFO=}s;AnQlXGfOX@r8BjONQ*8K6yt$ zF=R02krbLPn=ecNL35RBNQ)#~Y`n}IAxE4aS{qcYw0ms$F(|Lmi4rOtnQA9n2rZ&u zXO*E;oR%l(lmaGx&ESg1X|sy4!l3$so=pL<%NU`WwD&|E%2x~qXtO_8g}tk*%Z6}7 zh2+&MU!Y)F0=cOtj<<8#=RU}1Z3z`J6Wk!3(5;@eQ^5j%Hq*?64O;dCunRi!=nU?% zzczefAHLtyG}G(xdD0loWlIgtaTREVLVkgPx?q`*qg45(Vv)7(E{Iz+;=D+*)6H8Fdv(C+wcJZc848C9T$*b*kZsInE>7sNnqADHku&z+E| z4c`~^0W1)LG@x41yRZ|S54h6N2+3ZlpM6M$b56fa1ckYOsEX2awa&T!UYv2$Q;-x3 zNvaAxr7`@7W{FO`d-|3I@gJ&nzCuQHpFrPb#MPO+{W7w%Z*a6VHHUj!9oulChFM+y zayL&Ed!>k|V#bqw88Bka%auedLc$NDUj^3=uirdZn}#jHy|q6+cv)@72|D@|m9lMG z)xSuAqTXjB{W^~}kta1M4j8w!UO;ur z(4%~MXMPy5Qhrf@vsIa6cU&lZO>mX(9F+N4?!NLYq|AJeiu&hRltDwj#?s;Z8whs- z^pUSd*;$(Eo8`kXV0{`|W{AWIRB}uZ$Z9_P82(dQRVannswlRxXAp1)jYof}xg%89yQmCsVp-HKs7 z1Plf>GDqNpY z&c#<^%V4NSBJK|YElu4IOUkyHs@dDj`Rz+g!`=rX{nAD$nA_7;Z^dT3&(qTol8dxKqcbcLnXbsa6w zR46H3jE0hx(#<#`EM+Mo;TUS~{Q6!^KMsA|)xmTI5=wznqjoWf*nPI|8>|rpt1$OT zp-ayw@Ib!69n1)RiLfE52-r+MxAi3r8IJh*^3%37fh z6aE>JCPBm#|K0&x@a4;Z4-&%>(JD%^yW)z1FBkMDc<5fzg-=aUhR^ECyi&r$TQ?mT zY#aW?Rpr#sg8x!mTcW$Wu&AW5J=f%G$m`>*J5p`}?@6DebC`mU7|_~{w_AA@FZk{M zsWnSNNN3Re{6cdvfb(zoiQf7jL$F+A0z#yk_mMI*4V$6wDwa?35`eqNf6s8=s^gdY(JR~K^w+k;t!r~RaNv=r&!L`rY+&m-RBCWb}p4pShZbI zLa<(ACB`^v6*m30pT0>Y`%2#Xw)>2cjj?%b_^?DDOH@*ngp!im{HZV#q|S>vx?o=l zenvFRx1;5z)7aYT4UOeB zF0$O`oK_xBUWyEuFLLlbzu;H%ep$5uVe;&{m(ZoZmH>KnE3@vwT1MylzugU=5EDzT z^r%_9QcN&cG;L^W5<;vc2_wtm!Ok-+fZeZ7_+OAMatvoHjv_v;mM>s(Rf3T8V|;J( z#EIr}<${DlKHM%`Cb(eS0qg^*Q4&KkQqpfT)w3yT-SQ|o_!p`pQRQsKi_q{!OBg8bq{}$->$GdhMp4tZY zs8v|ZUpj7XH5(8nIeftH^Y1!jaT~XlTCl~`B4*A|GIc^HY@cID%d9T_+~FWa74_Pj z@x*NUvuZwC&SSpsfz{d}Ep#nmsF1vQczW(NqVvCoe6=@M{ACp(-?$DTk`t+U%WlG!5^nRwNTXAdUnJ)6 z_(vY{KB~xpQ;Aci=6sz7Ry@qgsyu*Ou^~gQIznM%y2^$KDRF)Mu9JPPTKy7pIxeG{ zG{R@MY(&Pt!kwPvJ>2cI+O;W(X`mU=_Yzh6O?mL~I2gEUY6O5V{xST=G zbsz>E%R8Gh-F>f^o65QbeC4t&tz&FAJE97;K{Y;N%h5~$DGb=7^y}8Oc8srklm$W8 z2JV>-XrMg+%)*wVK}9GeHe3F}nce(HeE69J=7PMLdIeGjCBK%tAG4&V~2lV#hq>&pw~l+3 z58D+r;IdEW#>`8tZlwN+h$8zNN5TS&4hJJv)3?*hxkIHJaFfb(l+Cx%2Mw7?SD5_UWU2||>yV*Y@8*l7WImrzh*Z z4B`>Lq^N8NKZXF&0lG=yHiRrst!c6q^IwF0a&mGyyxFu~Iy;(Rg>6gWNQ6cOVV@>R{bqe%_|7avG>G8Jl{0NkU>gWcfsk&e^(@O4S-pI^F>L{l|ZzUJ@HmLUgF zZe|D-dw@399^N;2neWa{Bs`s-6UnaF8?V_v^uUGnFTYB}6+pzo9T6wXm%i>wjP_|0 z&YP1}347JtKV!n)Lvpstsl#E|-rhxY^+5kSdgjF4%W|(*#5E!S<_{V7-%~*maf@dS zH?3s=;OaU0jvo^KRw7jJ3S)OmJldCv(|xL3LrbeK_=^);C@2;Y&EXbfTNm}El6P(% z-riWyadO&TU40LH5cM%WdU`N}v#Z**Ev)%;qr36&o0JR495`K0F=U_JlXXCK3v2k#6&Mz){fJyfRKQ#EkI76=2UppeT zj!@;V+x+v{oT)ckX&urJrthI?3Z+L()mlIN67Wav`qSa&m-Xwls3NE$CPx zA-KdSUjTbY(jpcDn2`;s+=|oKEkVjWb4z9xDn+7Q1YZ{@EUhWt_eK($t6X zg=wjySa-blblBMEKdo6DLQC(%A-NJ2bu^PnpYl}lBjrDidi;;cI#`6AjHrWzIVMky z$@ziCgU6_K2UZJdC`aial~_F`B?b5>9S=2dHvEr-A$PWU`T8}+?b{DZVp$OJ=1KPK zKw`5j<&Th%uhB~Fv20GW*H?em>5RJWo1^4+$XnXbH3IWYOn1LAT^aq3#{K`x1$b;i zC=@a{@CMLvF1m>V``H@I@XHK^Tzv4t6A}_a`jwv_EJXTNQZg7y=if4G%p14_1R$RM zo|5ts3>N_#M0H+h2=u=}wgB>o5u1@8v>cH5Z)}lJ12$u-^{}8ek?+Muy&K}#{=}Za z9H}Ehk%H(S5ua2EcY!MweeA&mIK^I5_ajRGuFA zdAafIiOc`H{U##;qXtXUZE>_vZ19k!02aoi0%7@Qr=RgENM$TF+WyxYR88YW? zS7_OO>)2FXGMAz|b95ll%XC89z~s@FXisvY8Eno{_Ak&}b$CiBEV0N70H*xPtuIB6 zqCdt^`o9!Kw0R}23>JKFHexq@E2ecTNdz4#-0lcnets-}Qg$5J{JH;X@$8U&g#;Gt z;)fzcrv7>XzF{QVRmq-58Y%|xB-J0)bfQr-P1E@Ziv*J1gv9!nhqD4ah>7hM ziw<{3+RQtEQIlAZhb!Ue58WK z7yj*VqwJ{Wec_A%Z%U=;XdbuAPoqg0hA=FkMK(s93=`TKXCT4?hDQD5WaWD;gQ?P& zH0VU>y#@WBCdRBzcL=*KT*x3UWSgOnm*{ccjvdjv`bYd@d2voLpCm=k%{x7qLAN8k zwV?waY1C?o@%0akSoVGG3qOta_u})RuQYCVe9L5te#9=x@QCcE{x$2?Som^$r7`wR zw>S>fj*2k$?KdV8EI`eX>!>_R`>Z0>6L-tvIHM>*q&P?|(Q%e0DIGaOHJcugvmR&F zm1w&sqxrX_GM(shk9U?+51=s3Tt|)PvO$9LK8(-eq({IM9WWWm@K3Qe$w=p;^poOh z01B%be}>AwE-o6h#T8&g00To^anM&(^WG1D!3Dooy^B!=ESZW6UVw&rRP$*$fPeis z;?b9{1VPVgX-hX@-t#a8)DMnjc~x;hNPz~P4sd`V0NJGcEMgh};uuHd(Ok*{*;8oK z0mAe7`gh^fUx$QPO`Jk|E4{66I~jvH*cx&Mz1h9bGNGXcH|qVf_!r9U=wQ3QKIF)TMRs3c?FnpC|8xN)gRwMTXqqBH zJ7sTY28l>mSj))lW1?nCV&!#v-BnYIkhY$ouX}HeIqkL!gP(>JWn|~;r-PFl4%y=gf_bgl|Ao zuDEs$Z`VPS zb{FV=@Qa=PB97IOArV<4^wj^*($P@{a%9<|&z+oTuND=OkTT@%zDe- zM0)y}mX?tibU)rX9=+{wlAk-A|Ni{knL8Bc(yy>R6wfHeZnev=oEd?C*RXC#wG{Kr zD>4+D&GRhEyjoc48Ku6C)m$$t1Y=_&0%w%Cjxc$;&iCR=z*vKn{6k4jh`aN(@&Px3 zvobS&7X?Q#PvbOrR=>9nkaP$^=_aG4FM;Q!H~8}|^uIM%7Q0|;URHnP`#N<|Q`CV!n=I^rJXni%k7rk^I%AXJ|;uY|W_yC@I2+m2K;1hKcU=0l4 z)p4AqX4&8Qwcv9nY4ORG5QZ39Kk?lp2QaR|eEwWQN(uu7?fD!qBBNqs2Q#E!!t9EG z+FE|-1u6t$7L=Cifl)}-(c?#tfR3!YJ6BJu{3qj+KII0t%cIfjhq~WLItQJ$*W~&}0g(AZ&xPJ)Z?CatJx!5IgMf#QF zr2_r5&T8AUpH^Y-zY2*$^XklE3g@!?RHVk?Ml`8ELe1&5%ejd>VTjQYLBIYORVkfD z$53#XFAq=<@K_JHmjlj(juIe6=oVjLWMN7Mh;o?iLpR-zWgY(FU`n*@mz3Q8$F3*_ zwk9lyZcEQJ^mF5*A5+Zlz1)n88;(e&ASaFNEG)F|la`YN0tEz=q=*uFD#mTm`JDN| zn)-b8#?cuCJtutWC-d+;tM_BEKLqz@|6`!yBuR+dqy?as#qY$CpF7FH$Bncq2+$|m zTvL{c@MXtZ?TG{|)Jk5{p0CiB&N^wUopY0x$e%zdS8Z8Xr23{hhm}{0>G@2c^r0_wl5A5e;{Bg_cDywI~z@i=i3O$(T z8qQRmJv3K>^AfmTC`4L6JRA<1=RV-rYXwgawnok#6U}c28aK7@)V0ifwZf*!yh@PI zo%|C1l>|ZHMA27-Ln1|Pra;UENMY85#4E_%Yixc?!iASPm_rUYen@EihcmHo4d>sJ zisFjA#S*i1U$$1v`HHLFHBww!^R7oPU5Nyx2+pGawLU_nNK11#ms7wdp<7LPpfON* z^M=%Xx+x_&*hsE@a3{0<`f8_D<8(H-HiPaUZ@tyMH7JV?P`pLpSPmRD)`w+(TDvQf zWbq%=x&1eC^(@UDfS(9ep^$2AN7&mPa!bsJEy$I4|X6S8=VoZ5Wz=V#VgD+iQ;jU)XbcU5lsja1;yF9M`z zd*-hfsX3pmxG}-KfcW>3$lv9+SUBHJG$roL^12tFw~jaQ1|TC=eL22@(Wc{(e1B@> z)uu->`MK{d7X;9{#*FvMHrrn%k7DlRXf(!WYvRU64P>b>@SW`&OGt#z64hk!8(V#( z>ew=LLc6oXZZBS&AaHs_17+jt+S)wiJj9Z5S$5`S6c=#0{13O+WU0(Fk0=33nfEs# z+LrViN%Gtu${tR{r?8TrYp*dGzF|myxh<8hB%U>F-qbT(Ykkv02d80;*M=+}#iffu z!}V=jeYKA6?}g3fo+e`VG%?d7!z$Q{!me9V$}lm&>iW`AzGwjkyy)oa&Mz%_LZE@+ z2Wil~`lO;#d)|!%%2E&s|8+TIf|-Gj?vhCmE%pw6}MYW_YANK{Z`1k6}Z_%o}(ZhF}rTpI*DSb-Y(p zdwx@XN(nLK7L}v{FsUx2%UokPX6y9a5JxdVr+>R}c(%!Vhur+|+ z2%aoJIE*JdjIL`&hmRkrpBH2KMXXXbYyeq}95@-!(;O>vtX^OF86Vz$olD?T?jFo( z9M+hnam<~z#+j5+n%>R13*=#mtBm}KuKR#4L4^^$w}$l0bk;jtgfs9&bL+BvQ@QdM zlCwU}A`>2Poqc_)Isu&cRLbxvT4<;MLelW^^W0bc#Nvs67Ri2M{VR8%_IQcxp48TT zH!LMhq36O22;1dO+W}cuDXSM<_5+G^RQt@aNj zozRZ8)Hy+0Hh=7}cE7a&ll=N_Qq*+06P}=;AlD&b-9-vNO4#fRq#=W$u#$Rxhz$|z z1il_)tw0->r+Wz%uR9VzKo6wQEGvoKVga9cit3s5LkhsHKYny@2?cu|0M!a!o6+t# znD#M86G{qY#xhrLnL(>MMUP63({-a)ya^X}+VHW08^5?b*?M+r_UXm|p~7>Xyb6@p zbHT$xp0oE@xDhA+DRHZpMwn;h|3Y)_67D^4vlH0ExDs+8EM)9wF`EnlF#Xi-=$$HW z2eQT9qGiuLVj1I$!=15>I4sm+-oEYUf30TNVUGbRMept38 z{oz$sTldm&xVTG+4Yt4CW~x~H`4_8+UhCFx@*74IwSE^9^QK`jF=B7tAc5Ui>*OQ> z7*Qh(@L{-JG>ai7$lZ8cPJcjahRI~CK!BVN34pDV}PBiKI@No2A}7nHXr* zIP45c^ZdmDb&dAu1h$0IpGW%aCtA~axKKfw*Og_n%On}uzTy0RT3lt+L4+L^-b5@c zj7fl%YXpla3FjVKh-8fP5d@K8vY)2mLAu_)y0O-phedkMTsOlBD)xoEcuS-yJd>1aZt%rT*aZ*uRhSq4CefD3d zl}3wGVivchIbOw4xjfhS#QWtFw zu*>mFxLr?wy#p5^3#$E^mk`I7=l*pRWELagayi~>J-&+soO5RRM8}=b5SLJPR5J3N zi1()FiYcXpepeGozeC$~RI41MSu0+0aNv3hyalcfbe_;5&1W$ld9rj zr^_lQispH!0KoAdNR#PfX(X5)15E=H@3tC?oBDqIf2rBwXI+5pIt`gk{1mJ#wY+L@ zhYbsN<2z_EWb_w2NJl4L1R`x#vVhmScW_GOvd4(tO)K&qXXmTm>B(3Bp8UaW(KYr# zhkw*JRK8kbHos z-J#+?gqtu)iVC8jV(!*pt#-ckN2;#lKb$BnQ?=<%>OCu>{p=7|fi)_5_eJOc*+C`lamnTz{$oRQP8qnIBuV*85epr#w?HJt?`a)Kx|F zM#`;4tH9t8wmtFUM2YkzwN(6jKlLTu>2-&_E%~nC8VUZ-HIf*?koZ;TmXp&jsTU!* zS=Gn?6L26=UCVrxwZahlRUp3KpRjhmvr*{;7)h!_?>|S{_U4w9(PydsJCdJ=IIINSEfLXA6}wxzj=v-5B!&tXe#Y>hyM*WN@8K(inCEn7OO*py z*EtesX0sCM*SG((Ru7*&r_X|;n<6FUw!dI|p=hbf9YzLo1nWCH{XvKOZ)ZmmreyZv zhziUTQn+2*ji*t}dk)ZY1=>QOZ@InV(O6l;{s^P6SzgxP6sxy0hbC;La)+{Lu{{jy zOMt4w0dtVg6N5;PNbUP-f{@=h&SpiaDBrR;?|ZvFTYk4L(0^sv&!@U$AU}QgD4lr! z>huYN$-=fgvi*+Vm;HbLMs#(hJK&N8#1fr~K@0!Pe&`g}5X)V-c0EgMJT`)!l#=G* z7v}o6j|^15BL^BIx>oo*#Zpyb+Wb%a)EBp6O;l<;;DZC#{OlqaJ8Lv+*xm8&)hH+B zQ$6R2xZBe_)pCN@=vxy#kaoHVSM{g_ycXOMqJYX`|HoEzt_6(_nrWW%;j30^0}(2s9&%kMfk10|I+Zu6hpF= zcXV6d$DVdN$^RPtF>j)=M+4NNU+#kZCY#S4E?=NZxqa!$pP^q>H{7HY=m(0W-t@Pf z@jo^sAdh85O@Z6lh#8r;_rF;I98x4#?_kYlduGuOVvB=zA3zsCPR@udHNtN&kcS1t zHTWK?<22LSLgFOw=$j60{2nwIEf zbi7|=VDSoI%)I{pW%;wU9;0Ls;Z*&CCaw69ca2QoMAlONfvH_h!gue3`M(TuC*^6W zWDBy@Y0A>o$ueca#x+VMa8`BS7XS5TZ2K((x{Wnv6P85xT8zGJ*j_i@3lw|(9t@B` zQc}{0+wT2?-TbihI^~?=eP6YGdE)(;?3rJTyeQ}*vu~2cgoe!5dJi=ejsMh?u6Q(< zNe)`ScvJRP5bv^?1*$hxPl52$-AwgRDA%O1)rWP6VP{3}P2vL;2njlI!U8wE0s@=b zfJox8uTa8w`~JqWwdQf02dxHw69Y}c#36&_){FZ)6uiyGa&*92$fk0j4s(LE2igb0 z;a@2&EE&$V6o4jY=Al+M-mP}ztsKcTAoHNs?rtlSSu=Oa;Qg3<39jd@`>mw!r zZH<_P4A$jWJd$S;(pKJl$?1BuJzFCTT01ygPd1SU! z&FGT#<~Q3G%e0y0VLbaZaT$Ou{k3dZPl(hvC!IniBt8J-;tcd0$8r;esU+t=fAA``vSg{=k1f79V0-XRr2n?RxkKn_X3V;A~mKnjx5L^zv3MBQx zPhQ+7|CssF?f$JVa@4w@5;)wN!~qBaOxoHY!TQhZw70c=2CE^P)jnisMuY3#2QWbV zi}cJdT$O%huKxR@=NuUDDFYdxBG1k;1vN+CZnL(zu2iA{4I*r5kc1pllDYm zv~ivw7JODlG1dJAu)#ZA8$!6W&C!VpI}g(n4H{GAYeCu z0DNQNw=u}fA#DeNAFvVAz>yJzEsU_>pmb_NJcc&ORd69K)M`eJVKep1&ZdEe5CWj# z3i?Qu3-1GZLOS~T2jFT4qJ4De8r#f}`Ex?6u!`$yT;9-#Y zsgM-R$QEHRX~iSNaad8OISYx3`a~-`eGdg?5GG>6*g*;KxZFKH)&uqbC5&e=+5&^1 zZ-53N-X!>jxPZUMRIPg=qyW7BGU{Mqad{jHS_<7@79B7ayn*d-07iu{ zwvuurUqce+)M->)!O;R4vjDiFoE?p7?CtLMopXefo#Fh08B#Ep(X-Ta5>!~Ed@oQ_ z#je?RfU>Oxj}!_a300(r%^#`5lclKMOG@g)F}B$l`9OzEiP`;acX{!K@UQCy8!#zg z_N%v8IQ8Dm@iuo&+5!69DW&s{@I4YiOf7SHnqz}(w$xm->{K^Gu@XNjLO*5U{;Xs{ z3FlbB4&zFSl zGcq!QLko=6mn;m>v4n9Ym7;E5B(ZBGyG5JX5|efi?W zi!UJOVS;(^z)+OQibDRkun^5=il69u9Brfm;*~Kd4Bs)rgvbM!pFRlQqX>7DiS7CM zdf0Lg(9s$8E#71xiW>L7T@AWq50k7)OFiNZ4^z-zWX zf!Dd?Fe>Je@hjT@h|Vrx?DvOv0l0_?x08j4gjx(d8p|)~7y^BKd_+pyA3A#gTLK}- zgAR!V2$7)8;vnonB^2E^JS=?nrq_wYFGY?@j`!cTqM=vyb6%$~I0mmFTmh}24l;E` zbw}acO$fkn-aV*&k?sc48XFsfPp244L#ax>o97 zkOq3^p;BxL8J4yA&qhWa`iZVBFl|!+BFf&;5h8wrr_gtJ|HEg=0oR)kV@h^@Z~YJ=Pj2g7**P-)bY=TO(EG9M zhb@a*vB86vBqYec#u(;XT3U>HYk_kKbGs4t8}R4v+__T#*2>_DdeC+drZ?;T>T>sQ zVsv!0@@6Wp`TU+=%Gz$qE7>#*JiK-w?=!Np>VjW9xK;RrrL+}98_W~e*L(XcgQE;> zXP|{a+!|2cGy~8U#qVB2y+_hC*wfdCfka732@^t_5e2r7&u4hOUJ?iW4 zukY##0QdX?#{)f317@CIoX-W`A`v=!b@_bv@K9%eu^quQd-kjaT%P4jCgpuPdIko5 zg1uv3()57~pV6Jfpyv&HSCzU{UCi{{G@1BaIx z^4ZUj5M9UANOc)!Ixa5dBMvsU2w*0F(4A*6L3kAU=HfgehR1ZGIyyQbrk;$W zz!074x!{0v38Ojdrl;fKY%_!D6X<0Sl^jg2U4$o+UGV7-u$d5U4!*t*;4;x&?Ms3c z&cGxQkh^<+ehz+pV8GK2TLode18Wq)5SOgFw!WS$N6pB>vgnDU{uzD+5y6j|#qUdB zqblOkZqCndZgxQ~jmM;OAMhIGppQO9+VE%2Z8va_jwicfj_xwQtMy7LewbT%_*;I( z?3B&q+eb!gUY{&-kWS6L^ya8A<`%Itr-Y^Xdi&mPd&CC^XJ>w!TCs!feCWgB;^G$A z@2Hn-fwvR5h%;oZDCViYO_J&ZthaHP&Xh}&*DzIf{H2*sp zq9twF0bdYwDF;BB09jlkSPvs1SYBWjiVQ1527`R3wELdjzJ0sGey4{fze)h|B}SMd zYWH3sj8j%tR^9DP7m+@IaS~Y}CACLF0uel0J-AV;z}ObL!^YfXBnhJM?hw8Vn6m&m z{A?=A7yv9Daec!3(FdZ`WufIu_q=l=0&eF^P<5#nN1U>od&YVn+U26c6gVF)9I>{& zoBOCIm6|&B7>v_EKR+E zS{k>ws3Ttvj{cv`%zEI~U!AGuhD_@@&`M!%Xc-!cDl6l|1p;S8gf;dO+@Ku5EEt5Q z{SLFOA#i(vg=!mIk}!Z;526z7rvk9R8fk^GEUG!1*L{ z?&+aCe`siIEFMbnAwg#p6DFs|!o+nL!`cJvHRRQyOe|oTN#&kuX=>KPcO0*dM&bAb zQzyW?e+EkOVa!yBL?9lG21i!NWijbh|JH$nC(F!L>UwfF|3>QfjCfM9T)9-ZdJ9-;@T1cs%bK3;~E@QP>NAIRllkpk1D)SX9PZgLY zv~)N68=0|MSXnmqH)GSNh^{K$Nfmf2ut{j9;Xgl8l08-7=FzoCMMHk@y*t3UT>zU9Ta{5JHo<2Oc8-ON-e+1XK$ zZVL(m1@bL`6^?lt8c@iN2JfZ`X@{$?}xf`{ARr!|R6 zcEGis#jm)4U5tc)fB@z?s?sw?VnZN-sow~5U2$4P^%aJX;KYr`VexB9`00NV5rHt+ zGyYn&D9{duMGyot#EIV2&iS~BvhR~+W|>YWx1(ZWwY3$0+()R(8(N-$G!sN%a+5hG zri{e}O>JX$UTR}?(bCbJZ$&&1cH_faGX!GSe-%sA?Y{rfg2iD-%BVg^d_h6+<7d|L zCM%NoH0~1=lsABthYDE~d;)4ph@haX2bn$9@evds;9Q7E?tx6()Y6j08x$D0pw;9E zWr9y|FlcHj#}+_^rKO|wEi;-Eh^)AHv7Zf00-{r~-+>$p7eCqjvrpk#HRqI#jm_&~ zsl>{@p{eI;yw%<{iBoaUiWP_O24B5zU&Av==} zfC|}IwG?D&@N1FUEdPBx_euWLL#6=f6b~;iD|O<}p8~3|lI`tq2?O=`t&9vN-~fm( zpw9=!jq8r^9Ye#l#orV^;-W=IT&pRdY7`Y0m*sYo(fT=Y0Hk6_FXVcU4s8k@ex>`C zl$1=MN-gUxgYVI2Gb1rpZev>G;kt%~Td;LN(F&9!1>RDS$ye*?>UzQ%0Xqu(n`>$; zQMWJ|DBVj1|IZ=0Fa6+?va;4$7@BqFI@uYCM_(4Y_c1wi?{}^z9@HIcj27(<2KNmP z>d&p(<1v{fXKhZ2V!g@K`4@Ml>U&??W!5Zb#{Ic5H;Snz!!~o4h;yErAMG)#8ZWOp z5ogR3EK1(~!m>Oy&yd0g@ft*jV;3KtQi+o&gCahq&Bkgw9Jz-kQnBrA{@|i-Y9w!N z-E&Hh0O=ItPH^pBj*7GsEWdg%!VPO7QJs=PILs zc0L5bPlX$`lsBF{bM?nT6qs5&ud7V85$}AIFG@zQ@cv%T&qZ$x0ptJPx&q#OuE4khhrL#!hs9E zB9O7H@O|&=EYF`f@!Wr{XQD7y7}&(g|N+ie&<8WgGZ zE6jYw?Di>J%%y3%s^0m^`DaXA(+^9mHMY-Gr9mG-@QLZNsKG|7Ru`f+dFI-zB~N<$ z1qD+aggCC6v0%-en*51`=fsjit9S}s*Kx!vJ!!3TPe7KI(Xp|<783DO;+--z96{lk zMlbRMFaSdN_3^4j_qfurpgJXUxA-lR!>IWu#LCe+!~LM8MGBP-3zP^s3r_@i1oJ$+ z;k;#@OVzq@`c01JGwDnTl{AS6ttu(F6Sh(MD`v7PR9z8RttQg_yv(>mD)0?TxFOSl zZ}!`k|asrC;tWo!GjTd}dQ-zvQ0a*MB= zpRF3!-eC|T$y^ZNQJxJ+In}?yM>C&oiNA3TNGYa);gv4O%dd-=m`?wt&syXuJ^TWE zYrP=n@4&CG885&?=XW2rq|Grkn5<^sp5Y7F9{+lfE}0QexoPqm=}6^IOaHih$#nlX zHp9)mxa$)nXm!8fBtc_-_^@QZ{)X`1aY^>j{+=xN@|H29iCQK8jUFAR^`V9D1C&&O zq!FwoX(E#y1L{k&sh^h^$tFC~``Ta{fVNF8otj2FsMtTQr>oAZa+!+IX`ii?$%h7;Mi1hKs z`OA^`vTUueaY-e0EuBi!c#8L#&K^31(5D3Amh^Yxbq->}g}f5#dosDUoN9gR`~fI{x(bWZ-3G8J6?Gy@lJg?=t1~w|+lhampk7kf^BP+nySMB66}#20bZ3?FE^u zYoRp{@35&i*;^_&?C1bhH*h%O6rx_LHbD`)Q_WQU*k-x3<#z z7th+lN?K!t7f67%{xwTenF~#`HJ*}<6o*8|)PWO!1{Z7JhP}*OkZEmB;gqvaa!rgJ zueQ7$>!w=o<4eq}-L)}Q^Q>`*JbQ27{1x?P@bJ%?*`*Kq9j*rJHd*xiw? z8$X{PpJgzyEDjF!R{#3`d9<3Qur0k6FA$^paGs~&pr5W^0-)7Qg4auYUd2y3cX_w%p1#e9wM4osa7NhoRjUsm4C z&u*zOva+X}2Jyc#1LYl@dQ&OI+L$N`d4vc;zct`ld7q zc`=(@q6h~W>zD+P@+X2VjUlcu@w#8N1kH|ELLkKX_Hln^(~-q+QeB<`O2ujSYcV=vey*BbE8kYmu+pK-IW3*E?>eUjri*weJD^h_Ti`AX( zD((ZCpv{ROu(wqfSWY}LK6P7`tJ+{sKB37E1%mW7ojarT6oE_Wp$NbjcML{mkh}Bl zrpky4y?=caBN|Lk(&0zO?=do*qa-^?!gB<7B^hX;{p-^mjQ3Y;Ru7o;o;?Gx`2JuO z!vhCHB&?dh?C++F^Y}Hc&1rr2EZ@{GYJD+M+lS{{j$woO(3qg8csm!X#<5#0OziH} zHi7*G)yhXA?eU!6)v*=bndm+8bNk4DR(VSPkHvAM@|DDGjt(7k8@%JL?fIb=z-6^f zGrECC@GaW&Zuf*OwUtSAWnc{4SI@JIpZ}yn(bWH_ZK|)aNWXK1xv-7&SywyTa@ysp zQIg}Z_Zg4N2BXpXBc#9+PiOlLcO@1a*V~Pxj3sER?^4y3Eo8?dI%k_A_jj_KvP!?h9NxX|pO7+dYBCT|_r*c_q9LR7=!{Lo>y1 zNCGyn>b3(37X6bVLMg}WtN z<4Vy}HFhO!jNNp(1-3S~UI5EGs?7p)QfG&OnpsSl?V?RWo`5o*?#2pd5#f0*#g=Y; z2{o=ia=uUwnAmeawc=u}Uhi9LzRo#!dd6DqD$oACCy}dX08jS8>SUs2Vz2bkKZDT? z@)^e@W|h&rWTlIb_+|Di)z9FTCk2tWSJi!KFG!|@u%*UMx8UNf_NvJ`p6HU_u*lv@ zb;^^Y_Vx8cs>`*jzvB=w!iKasrKWfpj4f_(smlEn^{x`$UFJ-E-QUH!-D1EB^2+_5 z(o*PpvL?b&{+G#a0w>E0=}j>jvdO24H@1!2sU|^Jjt8QU~{0QnzP=cXc>lj7gDn3ay>eD5^#kNW|&blw_<|pM((YO zEJDdpS45u_t=8vj5=lsszJFl0Yd+4`0S!S-d&*SjBX{ELny0rG_4HG+(_1q#ndNOi z&DLQ6&qtzbdw5d!Yhp-9M9Y|=M#kfLtCQpUy1pMOio*o!$y)z?g6VC&lC_?%Ux+Ltmb~eYZ=fRdD9h7Fe)l4@$18ALe?mbJ0BkJ zZC9^ac2Uy=bbE8+zJ5>-BllHRr>vE{IB>l$ef*zih2h4AOGrrQRdc{!vIQB=(C+TP zzFC#~oY%x<`5Fs)UDzNIg9#}08{418oq73-{@QW+fgqM?qg7+PY8eG8MC4QFD}3nu zt(`1?3S98J&)HZa9`Xo}y|69r`M7;3wI}gt zb9tPx(JNw&lbt|3Ui|(0BwHpqQiC9BUNj`j0vkQk!^et?E6nx-caF`^LTg9!HRm$y z<(D?5c)ddXW3yJg;r5W%=uOt#D22eB0KbnNRz3O57p?M*&8e`{BO-O3nJ1|-zA{O5 zT?1kZ$2|+G4>k3_BS6*41PGf{G%=F0v>q9M8hY-`D^C`;p&V#rN9=W22f{>GaVu-9 zjL{r&?R3|#m1UCk)1sZ<$`xq0k1yN0+n0O8#o@01;(nkI6%`!{z8q#B(cE*D-<`B> z9$D_ssUx`%u)f-#Sn^*%ma`Yw4pgZp1HJ5m9e@y5uAjK(W+Dm*G4(Iiw5C zQ_>)e5v?fS=O^%hHwN&4|8v>e+R$6n76~{qW&UcwMm*)>Q7Z8p&&oU)#&@$o3-PcQz6tp6Rd+%r&dQ*ZW4eTYc)U-F;B;7mfu zz3P+POAC%7haWvZ%FD`;$rK7nl(ac*Ce6-!ipuHc0psO4xGJ?w?eq1ePscx-5XSo* z;=i&XStUbytjwEE?e0#RA7lKOX>jnb^#Z;zj*B3akMh-FuzfW_=@Rq4$I4%h{8vIEW3%nj3oLqq`4wne+W()j&O9E^-zkTY z#WYLLi<)UMn$+*0Xyi9vcsq3#6sYW%FGd^T@(-@Bt0(SD^5k%n6q+f{H4q;teQ*-7 zN2;F3G8votEHLfIbyi1KACEtZ_Y{Op)Ky!eFS?a3TkvSsc-i1(A$l+ zeX152aTjYDmsWLOS&)q-$eQLiC*7mZCffF+_iT<>F0j*EJdB;w;f*+M%(5OSa#Z`a zvTHT6+U?J}E4tA-FR>aX?Dfq)Y!|(~g>bysr7R;$xe`*yhhd_QNfyn6{SUT<*RYC8 zJ>2bwM!LS61eSAouEsuon0H3Re>yRP4slKvkhPbbGxq07T^wV*Gd`J${$Z@!%)7xY z=>62($MHI$M^;`+L=4RjZkOS1xh=vNPEu&a&%WA&Kd4_n@ z0OxZ1^-(CNxSUz^nWQ9RFsL7KAPD0YHM1BjYqu<*&zsjU&~Wf$B_3NVNM9Q)Q6$)@ zT%{FL-A92d#9LNtCCkqXt*0_Z%o$=8e+YdM%{hFOGDZZ0nT2akGL#Q8G>GmP2C@!jp)b{M>n zg^qcV*1YSdbXDs|N94zEFPl)wv=2C)x zu(7xc<+vV9d}ncMAx-6(AT#_vJ&LwW2EVsYJ1ky#MYzvw*dV(p^N*Gxqt%43BL+(O zKAhX5N3t1Dj|dXOpbU}njlw?D`ZBwU9v$GC@0#_;V+zA;|AmfK8I{JQSQ$7HaM!QZ zuY{yg>)wsuN4#yx_wmA5gtBRY^k?4uxkLwWetNS$XBX!z%sE>-;A_wBqcb(={q39X zM+tHA^qv#h=j7$AcV4U-wmppXc+0}V?RiCA)qu-{cJTYwTh}ZN(uLKiWQq99>di5u z-tu^d)@l!ljcU25xvpq3<~B=mdCBL2M8T{ktd-jNqm%nt2tszo$lQpFFrO^_F~3EE zdbV=Z;f(>Qpn^l*Zi+QI*-~3&46nY<^&YW|o>$zk66l4gDp^$reWwXMP}ncVtMI!1 zEOWa(GnC>y9!)uaq&-~Nd-`E!ZW2Vzz-`LNd6ERimb7e2OLQXy1@^doTo}YV(Q7s> zeJ+FM*UQQaWGcFNGI%L@k?CAxG$*gj%&p2etk;|x68su`9L}2%A*ftFF&Ci##}Ct~gB1Wt>o9_waD*m<7zf5~yG)J9nPxF#G>4_`Dc%kjMa zr4LYxk`d2fNP^m<56Z!cO@Xw*n}KEFzM*Hrp14n`P;X5TIp~$nDD7V{;O|U;mAQOG zPU3h7S|OL4hx;1GS!W8`Ka@F~F8pBQSq5xk5QY~EWw8{- z+HJZ)PH(fo&}$*fj+hQ;l5YMhcT@u8&XL}a{lY5g@=t9Hj}j^~m>HiB&6eB^R$Qce zp0O-XnZMrpB0p%ab$UmdwUl=E4S%>}mlK%%{H&})b8AU?mg{N9b)JQuU~DM?ae04r zl<>D$|s}Awm-aIE)^2$57|E{MF1Y|uU@5`mskzbf(cpbXLaK}yI znkB-qIHkPw?(Uu*wWQt=%36w(|Fb(z^otS2^TIc;^{ncRP@x@`@GGr;BM~jNaA7Rl z^B5Dm6)UG(cE+M@o$?EZpX4O-sFFCl;aJD&3V@ur%GxybG*Zj7vGxmey)BE0-I(#6 z$OLb%rCqa`M%(BLkRV4Isyc_le%Plsh&3Sc+1qE8n?@QN8$*qA+Wa|nzEkn9D5w7K znq{R_2>uWQ5+I)c(%U&?swuJ!`kF0K8B;p3B?rZLOW1>xvRvKV#M}pokeq9+eNMIm zKMoqJ(@?2UnT|IrGfScRaYgoZNJM9vS4>>kE%B_P0MuW9w)4!&^lmFHInI4+o!kGI?gO9#2BSB% zSS?Erny^5<4cUQdiX*7|$Jf@>u&7kGDp(~#&go2UZdT-B|BNp$v`%m*+1d@fs!iUf zayM2M|0ec}z5&O$h%KO&(N<@%m{$hMDjO^F!FhQLYL?C;m1SSfZr&^M0qjUiQo>(c z7}8hp>@FLNs$d``&EHq&J749@3-XeUy}jSN0w}M%O7L4=w>bTpbUqTrv6$}EeMt=? zm8uZhqzG!o%)w^>#7>B;po&r5`eXL#2I7i@Tb#+Gp8A7HY`EDL2e=7!L*w~N2B=66 z3h$E-2^D|E$939{Mh}^4W0aB7{I1-S`>HoX6h_~~bBuvlEf*J8Oz()(X5kJi;2N=z6W0tBSAw6uG(Pl0c71x-U;e$frVr^Qck^&l&37Nl@8!2P#K zhk;-&Y+(8*un+a`{WkBgVGl7knT_PQ7@0dQTuvnBbr1t;pmv5X2UqpMgS`-6nI;gO zhicHDn+(euSf2nU;as);tEu5KPGW-ksd}432xpn}y*uH8JFv7<+U)sk^Jos&;FAtHPQernVhgKt#x4DxOaf zjh1of6?Y=(;nQ?te3Pm!R7=KY&tF$R2{rj)5JCc(&yZp@?$>&MXDrwNIsz^j(-|^K zg}o5Rt`*>$+LJ!^SwFoS!ydr+stENX;F!a6Cf8Uw$w9p)*YIr*>$G`71#goYLN0=U##c6`P!mZAi3Zavw#?x0519j9yPes6UKiaO&-!C8=2o#wEI{twI zG;X66;nl`U!=SPh`HsWT+McYubNWvX4ziMK8gjkvpHIhP(@s`}&5TVzA$*W}yGSs^ zU8h0;KL$}0<0?nK)20`cwXxJJ!(f%2wS*tU?Rwfm6*4(k{)!53|BgGh$XvYB*BVJf zrDJCp3}&-%wYAM1^|1kk6or2MJ4;2OLF^n>gZ()GdfLMqICc7pHxOVf>_@7q-OHUl_OMwpV;zl;)960sN*2|6%2HO-uFUdX3+THY-A z%FCeU<<0-)pV5ot=eV$qKo}v2%3BL%QI5H`uHiw7V7NFWvW2wMbgdeBd&q|luNkdtyA*l6dwD~!4G&~JZvtAp!wige0Q=rFK_TxQMa2q`lT4al zY|s}6`vt0wb2TpA2S=8EO|W^WJsy`lVguw__;>d}z}wTV#x*heRKlZQk|3b6ChO>1 z=yh81jpN6@$j!_t5pZFEk~qNa871>W@aQq+=Ogbn7aMsC5rT;5j>QmQ8aJrHi+T~6 zuDp&D2YE{f{1p=BZiEP-n?L~#0ybSl6^g;~Xae1yK`Z4$;Smw*fXRN!w`OhD zjsJavdH0~Ss!Q1eqDzvM-yZ)cIbm*Fq5id|4U?TXl@SQpi*K1)>{z*i@x;C&!P6&iEg&*pXqVG9H zgkImDevqms$~=$?77UE9RK?FfunUHGm^&L7Bsv}K165Wzu<`5WLk@Sv`I9C<@)W^m zKfkI|5;m?SE@(g@xw+#dzg-%ir{Ycm#}FB{R&bIUQ<5HEDRoJJafcoE=fx9m7WC$D zg)RathM>3j;i{__N1r~NRUp%<2o%Anj1&k8#AAv=1^K9nchvur=)G(=lE1G5{hzUM`q_JLRX#r`DBKH?6bL!G zJX*LmfggPhbdXNGVwlA{PkS`xpWE?(ftipJkJN(Z^ewQ|2MP!h3b~fe{k37`S53#L zDN2Mm+2-LvR-g`?NT*tH#2cbkw!TQlk@womG3>`H(lWrnz7=`wxoWevI1U;&4rra9 zU*2GjeEHs!ky^ffexJ%*#h|I<1Q3eH#l);Y%f{(tc`q|Zd%i*i(h^egQhmghiM_|g z8hCj4KBVrW2c8$Mn}T0ukPNgC!pk{){JKu}*jcB83_ltgozqZ8KVK+rKfDK=2Fx9( zV-isDMr3%dC7!>esmT_@$2T)GGdB6fSKCQ<2vZ3ue;!Z;1jE}U<0~X)0*dQ>(oQst zh^#abZaZ7hAx(lr@s_p2%$`3xt|YaK#mkEovHk$Yvl}Xv0;I4GnqIbr?fdzJvLY~( zT5$k6K_(vQ?*LsbAB@-S`H-N}Ii($~si}EAQl{i>LsGd6>dc<^TqMRBMMd=I>%)7X zz!Twxq-3ZQXpi$SL|}YDSpD~%5A(j0P0RO&%3KoGOsPTdT>QWp35$r>{UkT{%(cEO zT=O752n+zg1&hA6vy&6H$J5pP|BQG9a)g_NCnkOX&OIWf|;1E<=9*!a3vawq4)oqE5j?=zj^DA`e zLKJtyqBKCN?W7wIKR_a&?idmN*F}>DcCP^f8?DS&0${*CFS3;ksx<<&XeaJP_Uy0{~~}izCR1fp!`qqXV4}x_k6+n90X{ zeEeWFAZ1h`C=@`J(C8~PAt8Y=TIYl?cD1!h4W<9`>Ji8zU_k~#6FS^L^$>Kpk(QQ5 zKFG*Kzz0e*)R{Yk?h4n}>pdV26I%hBE*zGp8WiAc*EII98z_N=U|fIS=ee&Omr3xI-b z2tQ{4ko2*+#k>Ev+4+m>{=cp7=Qe`uiW@c3POSg_BbE(kvBOz+hs8d$tS1U-y?W)+ LHT7KVE#LnFPC`u+ literal 0 HcmV?d00001 diff --git a/docs/concepts/_snippets/simple_materializer_ctx.py b/docs/concepts/_snippets/simple_materializer_ctx.py new file mode 100644 index 000000000..6766e27a4 --- /dev/null +++ b/docs/concepts/_snippets/simple_materializer_ctx.py @@ -0,0 +1,43 @@ +import pandas as pd +import xgboost + +from hamilton.function_modifiers import dataloader, datasaver +from hamilton.io import utils + + +@dataloader() +def raw_df(data_path: str) -> tuple[pd.DataFrame, dict]: + """Load raw data from parquet file""" + df = pd.read_parquet(data_path) + return df, utils.get_file_and_dataframe_metadata(data_path, df) + + +def preprocessed_df(raw_df: pd.DataFrame) -> pd.DataFrame: + """preprocess raw data""" + return ... + + +def model(preprocessed_df: pd.DataFrame) -> xgboost.XGBModel: + """Train model on preprocessed data""" + return ... + + +@datasaver() +def save_model(model: xgboost.XGBModel, model_dir: str) -> dict: + """Save trained model to JSON format""" + model.save_model(f"{model_dir}/model.json") + return utils.get_file_metadata(f"{model_dir}/model.json") + + +if __name__ == "__main__": + import __main__ + + from hamilton import driver + + dr = driver.Builder().with_modules(__main__).build() + data_path = "..." + model_dir = "..." + inputs = dict(data_path=data_path, model_dir=model_dir) + final_vars = ["save_model"] + results = dr.execute(final_vars, inputs=inputs) + # results["save_model"] == None diff --git a/docs/concepts/_snippets/static_materializer_ctx.py b/docs/concepts/_snippets/static_materializer_ctx.py index eec2a826e..c0224c3b4 100644 --- a/docs/concepts/_snippets/static_materializer_ctx.py +++ b/docs/concepts/_snippets/static_materializer_ctx.py @@ -28,7 +28,13 @@ def model(preprocessed_df: pd.DataFrame) -> xgboost.XGBModel: path=f"{model_dir}/model.json", ), ] - dr = driver.Builder().with_modules(__main__).with_materializers(*materializers).build() + dr = ( + driver.Builder() + .with_modules(__main__) + .with_materializers(*materializers) + .build() + ) + results = dr.execute(["model", "model__json"]) # results["model"] <- the model # results["model__json"] <- metadata from saving the model diff --git a/docs/concepts/materialization.rst b/docs/concepts/materialization.rst index 73758492d..5d0439808 100644 --- a/docs/concepts/materialization.rst +++ b/docs/concepts/materialization.rst @@ -49,7 +49,7 @@ Observations: Limitations ~~~~~~~~~~~~ -Materializations aims to solve 3 limitations: +Hamilton's approach to "materializations" aims to solve 3 limitations: 1. **Redundancy**: deduplicate loading & saving code to improve maintainability and debugging 2. **Observability**: include loading & saving in the dataflow for full observability and allow hooks @@ -62,15 +62,25 @@ With materialization .. table:: :align: left - +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ - | 3) Static materializers | 4) Dynamic materializers | 5) Function modifiers | - +=============================================================+=============================================================+=================================================+ - | .. literalinclude:: _snippets/static_materializer_ctx.py | .. literalinclude:: _snippets/dynamic_materializer_ctx.py | .. literalinclude:: _snippets/decorator_ctx.py | - | | | | - +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ - | .. image:: _snippets/static_materializer_ctx.png | .. image:: _snippets/dynamic_materializer_ctx.png | .. image:: _snippets/decorator_ctx.png | - | :width: 500px | :width: 500px | :width: 500px | - +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ + +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ + | 3) Simple Materialization | 4) Static materializers | 5) Dynamic materializers | 6) Function modifiers | + +=============================================================+=============================================================+=============================================================+=================================================+ + | .. literalinclude:: _snippets/simple_materializer_ctx.py | .. literalinclude:: _snippets/static_materializer_ctx.py | .. literalinclude:: _snippets/dynamic_materializer_ctx.py | .. literalinclude:: _snippets/decorator_ctx.py | + | | | | | + +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ + | .. image:: _snippets/simple_materializer_ctx.png | .. image:: _snippets/static_materializer_ctx.png | .. image:: _snippets/dynamic_materializer_ctx.png | .. image:: _snippets/decorator_ctx.png | + | :width: 500px | :width: 500px | :width: 500px | :width: 500px | + +-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------------------+-------------------------------------------------+ + +Simple Materialization +~~~~~~~~~~~~~~~~~~~~~~~ +When you don't need to hide the implementation details of how you read and write, but you +want to track what was read and written, you need to expose extra metadata. This is where +the `@datasaver()` and `@dataloader()` decorators come in. They allow you to return +metadata about what was read and written, and this metadata is then used to track what +was read and written. + +This is our recommended first step when you're starting to use materialization in Hamilton. Static materializers diff --git a/docs/integrations/index.rst b/docs/integrations/index.rst index 5ef802111..4f0e3ab61 100644 --- a/docs/integrations/index.rst +++ b/docs/integrations/index.rst @@ -27,3 +27,4 @@ This section showcases how Hamilton integrates with popular frameworks. Spark Vaex Narwhals + OpenLineage diff --git a/docs/reference/lifecycle-hooks/OpenLineageAdapter.rst b/docs/reference/lifecycle-hooks/OpenLineageAdapter.rst new file mode 100644 index 000000000..ce1e5f487 --- /dev/null +++ b/docs/reference/lifecycle-hooks/OpenLineageAdapter.rst @@ -0,0 +1,8 @@ +======================================== +plugins.h_openlineage.OpenLineageAdapter +======================================== + +.. autoclass:: hamilton.plugins.h_openlineage.OpenLineageAdapter + :special-members: __init__ + :members: + :inherited-members: diff --git a/docs/reference/lifecycle-hooks/index.rst b/docs/reference/lifecycle-hooks/index.rst index 4125888a9..693ee28e6 100644 --- a/docs/reference/lifecycle-hooks/index.rst +++ b/docs/reference/lifecycle-hooks/index.rst @@ -59,3 +59,4 @@ Recall to add lifecycle adapters, you just need to call the ``with_adapters`` me Narwhals MLFlowTracker NoEdgeAndInputTypeChecking + OpenLineageAdapter diff --git a/examples/openlineage/README.md b/examples/openlineage/README.md index e69de29bb..a57dbaefa 100644 --- a/examples/openlineage/README.md +++ b/examples/openlineage/README.md @@ -0,0 +1,27 @@ +# OpenLineage Adapter + +This is an example of how to use the OpenLineage adapter that can be used to send metadata to an OpenLineage server. + +## Motivation +OpenLineage is an open standard for data lineage. +With Hamilton you can read and write data, and with OpenLineage you can track the lineage of that data. + +## Steps +1. Build your project with Hamilton. +2. Use one of the [materialization approaches](https://hamilton.dagworks.io/en/latest/concepts/materialization/) to surface metadata about what is loaded and saved. +3. Use the OpenLineage adapter to send metadata to an OpenLineage server. + +## To run this example: + +1. Install the requirements: +```bash +pip install -r requirements.txt +``` +2. Run the example: +```bash +python run.py +``` +Or run the example in a notebook: +```bash +jupyter notebook +``` diff --git a/examples/openlineage/fake_data.py b/examples/openlineage/fake_data.py index fe07a2017..02450ad9f 100644 --- a/examples/openlineage/fake_data.py +++ b/examples/openlineage/fake_data.py @@ -1,3 +1,7 @@ +""" +Module to help generate fake data for testing purposes. +""" + import pandas as pd from faker import Faker diff --git a/examples/openlineage/graph.png b/examples/openlineage/graph.png index 1c47b8332ff71743f9e413d025e9da28b53b92c9..1d996e7367f5d17252d2b131667e12cd7e46e21b 100644 GIT binary patch literal 105179 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 literal 99672 zcmd431yoh-_b!SZh=_u;s2~yw(hU~irn^JBLAt|4N!fHG-AFemibzX$$EG*kapwMn z@AvoykR`4c&ZsD&X%2f3-S%@yao7BS{< z#MA39F22UnQhbgVWQ>=abvgB7d}`c9rE_>aKUGu+f&{;-g_BKpAlD@oi7ts@VC6#&GMHwWz(x_@lwKb>hH*MLTR5%0DkO zYir%i*^_rfpW?}me;@6lX*hNKyN2)o*^l=n?B8%%Pa6)E*&5u%u8`Z?Tx8SvbtOUP zcznw;DV6aq@K=>;w}bHCrx^=u=M}P43L9pKj*qD5HOiq0O{{X=Gp zd6q_H|9=i4at=CkayW?~*YU64GNk`kKaS`jn40g->QJ?)Op1ykOGtpYLc;MC9tV!v3hvar$7ZuzP)bTnBqE>6+}<3pU~^p6)iW?4B|mq3V8q!R`hVAi z^S=*~Bkt>0sjXq>oHBcKcF03j{fUe98gJr|bIUFE7k1e8sHea|k{OCQ z-OFP?f;tIV5h}mylCX2odrlODieiEVLNW(D~&P&@r3Ivbl$@?txtf&z%u*lEje&u*nhRORrS6^i}{Qmt%FH}AGndeob&Q$5Vfkl;4tEBU|w=(ye2$)rTsIny!VJ3K@s%DFXF9J&Ks?!W0!+qa>QcS%k;N#_sct_zN7S{_w;# z>C4kI?#YfeuiDW+*s4D2;z3s=#K+%t-CwCgCbF4y&-9z*1oxSC|M~K4YGNXRRyO(f z*ejwbSq zulq|Z6UN8KsSvn)>z^6QX5wXI7#}ePXV!otG2q4MIY?Q!f@m%#gy z3NK&AAp--uip*3I?LTk@GGq9hV-^K)jwgqe-n3H2e}CWQp<0PlrSsNiP(Kp?+O;^# ziC<}Xc`~A*3|-0Mkp+%x`a`Z;LorA-q|^G$7d%R#s8ttXr3W|pR({@K4i`gGQBY98 zEl3Iq3SuUDcVoT~^Bre&CFVQab_=Nk7S#u)`-tP~#`S3nI`Y{q_TMWW$ZBtI=YC&I zMLijf!=awVv`+CADD)~alyTeT}om4g5u-@)%dMO?g@w$=V!tu~iA zJ6sm-8iCBoK{KJ;)xVzXED|AU4gc+J2ZVryUf#>^Z@5v$#>R3oGIuk&(iyAwWsvJb z_9I5iqu*_Rne`XU!r+v_a097aH@Xzd#y*hFMTv@v^2|CO4-0ESS|jHwIXBJSyHDvA zv*qOF<)f`TQX~}(4O7`od*had${Sl-B{LMV(pmJ;!<8zPP8%@BJXqhmJ9~Tc0!KTN z(Gy)=T`DE7#t^M1qg);*m}=$Q8f3~S_jgz<>|u4?wecnAQ79g=iv+`g8H}H53^nO5 zFe;l%&*;q26bKii9&$fAh~RTBS}K{i>Py7*l$Ms(2}V8NM0oAmE19+E%-&ul@vuiv z7%P_FES1eOV15USlH}h>^z!nOm`9&JzNz6~Cf=)Xeu}L@`kadR@})9SJv}|A^)}%` zhZSuEGB!5$mmhgXO01g-d>_dQt`N+)a=8ZE30=9x>+Huvc9n0VQ#OWTpSN#EqT7d< zWzvS5&Hd1&@?diSnFuG9VXRz7npYoe${sqOtZ*@N>5%!>tk@%$?N^9)$ zY>Y(y^{^`S_4Pu+$Dw32dfIW(Yc)_Wzt3i8DzwKryP`tv%=s%)aEc9ZSI#0QtuZOABNlk1q|W_%JjY{nVDVb*c$uq&fAeN?sHU4TYzGon!_Sv5UtVwFLDR6X z$XZnGB)8$61g`s!rQITKGN`2*#5f9p5ww@1t1{x^Zg0$WiN?C^&JwG0T|GWECl5`7 zWZ;l_Pg6JxoAtC90Rch1etvyjUEPe*$qWTPmv%efw`i9@dHe~M1fFQ@$;JLpM9JpX z87$xCDXTP?#`o{vTa~KO(bLOHO9vR6n8>TEXCaZ-5i-ik;dFF#RB6L&)pqOKfm3L7 z&gkfjK-RNk9L=O>eTRp72Yi!aS|s$^BV$O?s_X zRPaJfq8AX*gm2T)&`4=%eL)?xGUOUrnqsuJSQf?YZMJbmWOd}hU=?WYA4>V9B7mFEwwKOM0V znuN2$?!;2k(qlWwxcK;|Nl8g`w6xMNjVRG~>+9>>nsl7eE!=B+J3F-CIRR+MfNkLu z5G2ja7#13J2$A#H$vu7gMy1eL?@!0EPx%(E^FmrfRyJXBQa4MpS_5`Pf1ydJjEqcB zY%C*!IkMTy-+wD8e{rB#QB2GyK0dxPU7o(sv`+>`9Wy>aN?z&2$IH84fXc|sl!IAc zU0vnX6q}r!q@kx5<>KP%uXeBQ&e6;%C}5RLGtckiP1<=+sFBL=x|?b-Qnk9ZC9ueQ zY_@-tND66Mo144VXFCdCjXlLo6)US8#3u#VhnTQOUAvp>$aALGBDm`X|R-p^Hp4t z#mG`2{o%3ov6A!qI_4Le^vnSk5s{Sa0W1Pxqdly+P8pC(^7^_>Qc4Ov509$z){?xC z(1*6%zn8}veMjQzzpC})gVDk6hSR}D4+bl=MDt{To0{v*O+W>I{v4N@n)=J{L*VDw zSahG&)bHWda=XR$BC`QG*h3Q0+(x}$wIT%Et6W@2Hk?l|<+eCUB@G3*pTiY@cN)0z zd{0i#2OQD@=Ph&B!yS|e0wE21f~wxQkdB*M<)Lbk9GD4j4j74`kPsb2tgD{Sz`!r# z;OJq8c1S5HVPGM|QX1G@eSLimEiIe-pHXcB3(9J04-l8HT#<8esknaqI_s;^$M>kI z=h{UXA(Wr+V1BY0-|JlJXg5msGpE zN58R~_~py(upD>w7B5X`qivImu*h0MaZ-Z|z)%;mBrv z^v)V+H1;@BJX3D}n}Qz3$bgRQuuk(dwx;kW)@XOy0r`nh9P&eAd$ z+=7UxsJx6!yqDKyfFaJ8SKv-1pDfvx&kxdr3zC+WHXbS~gbj{?6F5YV9=El%f${mG zE-1RXx{@BCj~5fmAVN#f(N&B(P+LcbfRuD#v}Al-o1EXJM51qReziC*?lEiyj2on* z!}vXnL&CbVHDP>nbH=R( z5P=#R8e|)Y0jNQ+c>nI*Z}3T+oJ!!6^z)VB=gP`T4C8gbLz%JPdtbjk0?!-W&Ub97 zakM-s5a9qLj4K};sFn^baVI&t(ibM}Dq4xIW{&g6q^HvbhlF%<*{zFg?4E_`HZJVu zIsDzQxvNk`q3)O8Kze+)65@dm8d}c=)=w&npCHO*jb9d3CvQAn|L;%IDgqv8R;hUt zGV)K&^B?V7yKawprtsk&4=K(Ke`-Ui+%5}XYjRXn6bn15z^EfAD9EOvr#XU6)Sq|t zx6!}eIW;!6?Np24h|8L9vRHWhlegz->FDNsnz$^-pF{Ey%d&Q|u5Loo!!LyVZ@Ee| zpMbD!<-mR?y}=So5%T%9^Pc6J4T3xD36!=^%5PdBw;T-@*9FVq1a!hYk@ z_k+B^u;$$*krywdOieS*OQ&u&NAoDMv9Tc&S0?IAz_}n3nRI>`wkINDOt7)BZ2>Z+ zgU>MT%S-xjl{~#w;HaWyKag6yUEO{t$;amk2BzWR;l)hY4?Ci0_0n3~)+VQ>X7d^u zc$Vf5wnhXf`%YG#%S490!F_*4SWj2i5HN-nCt2CJ7kzrZ1wU< zyK;FIm2^lBJGtx=J0--$H^{s{ew2c=hSbGxBx1?|79xezqC(oPTs_uh^^+<4fO6vr zzHLSXs!HF&$CpE|Q0{%^nCvr%m50om&2|oxG#QP4d+oF}WZ#veS$#f-C-1%ki0_O>$MIG`D_WW`caQs(O@+)bDJ|DSWfKXB&7l{$(Z$o%6Gfz(Fe zQ4IM0T@Vfp*&zG5PQ>@`-(kZAVC)lc%?xCrT}h!D=@1aXS7QJTG7*>&M0eR4kWfE2xowYN>5L3 zmseCz0upNu;(CuCInVl3sOB8tDNLxl<+?8YP@_T#If+80fUBH?`3|Yq<)&9A$peId z5I{>G_EaBkgsoxb_&g4YjZprvt9@*(V^u!1)Dix2dwC3*cuzDWYFnQ=5VOZ3&C6zO z%pFw#ZGxYtE;Q~Efi1WZ^wZJN5d;4{uafiXhxHjg8X{{MRQCVq%?hT^YeqQ7#I3$8P4^rKYtAf+^v5o}MOP zjvKddadC63A8>Q;hFP*lE{0Jwnfg31s0nZS*QDR~EJ&ZcdF=YXKNSA2a-sVqYx-cP zJ=jZZqC0bSgl!jkr7bNjS2s4ynhZG+=EbUjtRecXRM;)_ zegQfUv-tq_bin^MV9DiAojN5{cg!Ms+%WEp=LPVYZ_wJE-^!oS9LZq<6pM(2go2e- z9{>LGGk{Y{|9Cjqh=8L+n3$M=ppXHtrBY;?2E=L_ge5q?EM$uhZi?#gKh2kymi_{e zZVH8>zkgpiJUl$+Xd03VK%4-_z+D73P9dp)q-YH#_2=6R+udBufRNVMnj?Lrd>lQ$ z88Icct*@-Kog-9>!)7RnYr%lTR=O#OkB(mb;FC3!m6b7|IH*84tXUt<_Wr{M$Xg0p z_5h{9Gy!s@`>!bN$&)9LR>iDA9*G3|Y}tt~2G0SU0g@`TF==(xDmW-874o~<+FAgx z{{f9DXBin86`wqL4Y{nGl9Ce26)qg@eD>^F8fND9H9^5p26dZS0>xA?bqvmcP<;39 zT^|RR<5lELXh{>|goKJv(vLXr@95~5vf-8oTn{4w z;EWkbS=nx4-uCwPZ}Vc&-BKTcJS#pbs>zapnkbQaH=Di#6If_Knn*W|S=Yp$hYxqM z6f#haXT59VfsBDa(DL&ihB4lRh*eWlgHKGH_WSqmz_JtI#%ha_lXheF3o5IYx3w(< z-;811;OamTw5FRN=pH->8d%))36w+cXqu#M^T&MfvW376X|cPz`?(7jM3Haayy4w* zJKEiEqo0IpL-s65ds0Yn$e>mXie(TGsP14GI9^e#W>5dNli#r(UH{*~ssDG@`vfXh z{Qu|U2td3fz}F>3Nu;zfkp$Oj2SCojjVS?PUQrzpX3|x5iz=?G_4jw@=5q?o=Gh^_ z5Runk)Atqx-`a)V-RKzo{+8|KH>{oQWp}E-U&QjDj8K<8Y!jxKMN9I2i7m2FoG)78 zMk7aN{W5YwDJ$ML-OOlPA(7X6FIszUM`WN`Kzj`goIDZ zJwMnY<6Qs)M6enmt9Iw;)tMYpe+g`4a@+8<&M2XRnhGjaa!1L&43@g<`67MVrmMu?NT!xv^;lu37u``mYBMj2!eWwKet(&4;ZW!X5ka?RaN zNIEe%uc)Yd#_;%tUWQRu##baK3w`?ZDT2ko&pdqD1M?4(ySCgG$2QAF)~OBqLaX`< z5eJi+1&j~H(N$}Hz)iKa9iJhtjcqpGWq*4`W%+Q=X}dIZW6vaqgIgkSt!}J1RX&ol zx#Y+khuA6_@)#DNdr8Sp%#}nwaL7roJ5$+dt8#0-*L#hoUh;>dD??XjvA`dDlj;tj zHVte}{J)`%cpi;ruJ-#|&I?Sw;`@;2$5zIUgY=?Kb-D)M9_BY~>y8*~J~2nrZ;y$8Gr39Qc2Ou3g$@VpJx*~WA{rqN6jWo<{m=pCG%p4q9Vh|A86 zsoP>+4&*ts4cKc}O;*2}$jw@%iF=;?;k8O0$!@&1i(XHO6l%b`bqArczUxiL@F0=q znC8Md;~*|wHR0)-Zd1y-`@N3UW&i9CE7OsZC)gS;3WQq}GqepChU`-4)ERy-pKKtG zwTSqNf)XiY=NHv2q0-oa#Sp4+vE&oSe1hT}w;$gO&qrB$+?bp6{` zli-*#VMYHEamuAqP5!E?2!5jqewW2_ttElYC&gAy{v0J~{>e?IJf*DuibEcC_c~77 z%H?s{7|Q!B>OX!BWwhb)Q$uvLH_M{NEmw%_ai^a}ElN-Gt=aEfIBWRpXzxWu93RobX-k$=}>i+=S*f3l5~WB4HYX+OCvXaU+m(eNH(kSXEA(r;{5z` z{quLZL`7^k_u^#iO*^Wh1=7&L?yEtQ$WHF6x8RaxML5xK0?Q=lBvpfVI~1aOiepo# zLaBfoQ+NC!o}QiFo{X;IpH(})hQ|lTTCY`>?|9u$PrZI^>vwK|97&}ZE_-1s1%U)Z zacL@iYhJmQhz<-cl0n$dQsKa^=u_tpV$q_^oC$*dC_K=PWYaTq+<+a?Pm7F zNI$NvSUn1(4FST~PF`syGb+RYhdJl;pr1I@nL~2TB)BL}=EzM$JxI9FPhLX542lhW zbypYqvfl1(MX#z|;%ia#=*w)LugbCpaM*&azYa+o83v_4W;CL+T%-- zQJ~JVJ~t8=lxOCBn7=^T>}2=`5`No_=3-Ig-2@#f#F5H=73@2H{g|)6X>iIGC6W#c z#B=y|2p1*$l6+j#oQ|gYcFm^@%CwiI1nUZUDleRP90!LDf5+iR)8>o&Ov)w-4>}?U z8u4#+$(+e9mqr%o4riqBjx25o+^x^@ABo5~QZ0Cl#J`D`<{9fO7~N9+7-{pQy0L3# zUt@Rwtvd}Ln_$OL?qrzblEX4nS9j-3pnFA9tH8D=YP*YLB)go#eU5{d_W15c9mJM8 z_G|0Let3!^LmqGyE%OD&IE-JaEM7iSxjO6KvOOrcXU|dC$JA8(=r6V|-#>G@t4NmcoM*2j&p>^IQ!Du# zK4}(67SNf)_nDZaLAU@}%BphZ39KcntDw%09|S2uAzR(y@^tu1Te=(5Sv?^$XJG#RF3h9x`!%=%Jy1 z7%(*KK;L_8gWqT%`1pH!%N~AF3ziPy@X9>c>x6>;zxtDJ%00SXtB|ui28d2OP=pDx zjrC%RPlmNN7Wz77XpX1tRX1CBd<6u*xz5u3D$V@<8Jgzd4~&Y9`q*vvLe;eYdyHj3 zP+F7cWkdmG!gXZ7z5du;GQx#8`I3Dcd z1Vb6YQYt`gv`u*F_OZ^tV6-hr$DGtrscik0Fs*+_Yse~|O;fCrg(hWZlGX6fZH%hIqQymIBxk1v1E}UC2Uzz4_E^ma zImM$m+x~-(QX_PMg7oL#Of1z7n>4!j7&nBecB0$eoS>xa`yUL3 z3Hm8I!xfHDVd=8Q9Z6|&b+&DMcL9o>K7L)gnQE)AHQZMjNt`C6D)(A=phU*Oef{|E zS<9%){ZfWfEAdt0+<0{-3f?#^-`8HwXpDv`SB zUHfmf_~l1x^&kq%9(DU!&q>|df{Psqloo%Ygwcu(MGuAQxKX+bqFsY&vaDKvf~^S1 zx+B<3FqQnBZB}phlWbu*l65vq(XTr}7}pi+Rko9OhAQGroQok8kjU2|Lt? zetf{`_^R~-L&H7<)?d^0ps-3gSM1)sS|MSUcYWH@Kz!LQ$}1W#i!vI1^Ej1x`=qLu zz*-)^|522o^m(Y7)hCqo-;C$=Cz9CzyNu`11dR6bML?A&w>C=lx@;m&aK) z#-BPK;{UfFPaD`AUnedXShiHCpac7gNrRzi1$8^1eKB+^rdSgkoE9HnW9>Vzr~tHF zw4)neGCzL?ka*9fnJSnZ)ERssOVISOfZkA z{1{zmMy6T|QXAd`N5-b`379HaKB@A;#+D0;&6%4^=U!8J`v(8kt!zwz-Pc=oP&x<0 zO+gU_XxsCAY%d>pS^Zs1R&G!p0rzGChTC7|S`K=r!XwC4hRPK$TqXOQU(m@?B&Zv7 zS4Sm7FoUQN-K9t<_?(W4RqT$R)cbcI>f7SqKYjW`w@8V!M5jY*bw&EsNA>S_HgDjX zd*qiWz2EVamr+`_ey#C2C;pAg)RgZ0V})d7v0L_F<`n{p!e}v&DQHiOcQRyW^%wcd zVhB56^=%jX<$?Q6*)#mc<$WThG>``)!_;Fa+_s;98emtegBo}^Q9X$iD%woJciR26 z^moe&TaFIoNr;93E;D)gm}h-dV7h$q3hVZzh~zk^)xLih^-8TYU#?U+ya57^x&DW% zdU|vm^v`&z_eCtKHi|?Y0Cz%|L%FZNF!kryyruf+j&Eq7h zB^62>u6v8cyK@;i>s>vXCTsoz>1Aaq-;1u*+An5ruQ9fx%}WH$xNYQ2_xw^Stw>Vp zuH$Ex_(kLQd>mwHu{;50;M7mvc zdAd3(d-umzRVsw%RsA_ni>meyj7M3QZrq=XaYlCmS-*}dM|XdFeFjJ33aih_@}`&q z$?LTI{X(Jr2>(XuI2|7o`e^ozC}W_1PEK3f%g?ZqyA$G+8+DOF={54%Xa%?IU~j@1 zs2sFUg&t`zR&Bp=+FUTQ5sTB{7drO3k2_W;10{`tPd4t#^`1W3Q$3iP+9_MkI}Dm! zzR0S|I$B1`wszodycsWPTaqY8xHX%g*BC-fj+3gGuPV)NG0f`D@3M|Rdj*qO@whKC;qU|w3FoE)vEyNc!WQ_ZvW43@_ zl4vNMfWT3~^xt_H#*oa;_J@f8t~&uPCQQU#QZAo6l2eg+%JJS>CjUW$r3+Mu*tq|K zAHy0bmBy`Sz7;8R4HFVr4?E;sxVcF!{I(%F3Bo$P%5JyXInQ@A{QSc+FTOGTEhNNU zq6g8Bt?hxBy!8b?NsN>I@fDd1L1W9Cb%E@@cc1BkSp?NS9&!%3$f|DiitT%E_N z;QW5&=aVKj%ZJk1FcwPFl8F^yLWxiLchW zp*C_hhoeE9V<_?My(tkVt!$JMxSo;ykrb8UUCsWAB~_>-rkOo8u&qw@FWXwm$R^at z{BslUeDbe80E{n9=#Cg>{INI$od-*fM12>P|gE12IPWQO|eYd_&?R|>f*(&G5 zOsEB)kv&rvCM2IX#T?|I+zv0Rp++_}KcCWjmAvbV39dTxvj5TE>I5&a z3Pj`-oDZ9`X<|V}wFz>mt_;N!dHA<^<+o;Yj|4 z>h6hkj~{HZkyns=ffVECzwG@{PEITnQc!$6OmxX208U0LK>G3}9N8C!VW&@@@pUSo zu9csblZHsVx+?dIQ;{p27)JZ&3*`}Cn7o0-&h1EXytXWY4t9;|a;LB3+*GNyE*A>@ z(2r^T^watXrVM)PeRh9O)uFS_Gi z?riU}cT>jVb;-+H1&7uv%Vdg#iV|d71>Yn{Yf?^+ulPYn_gisAItO-4%$9JK2WJi5 ztuG%jN~~gqt>I9byWBz#RqN>D<$dlZsM6C={ftXF>+?iXl|Dm^W2(4W0s@B8D2ZS$QF&Ea>p|z< zg{yr(+;;MA^QH&GmSAu;EHT)qY{sJ#_P%);$6v~$Z}6r5w*jf+u7)Tb5PPQ?#JYCV zd#~QeJwE^xEN!ycKEgLAJyTBEsGg}dKfmB-KHY$_S|UI;0*0QW;m{1o8ey|Hv~Wrp z@EceL3@&N%AMtL6cJ;G$v8}Fb1lO-OhCR*~JUmrxiZ=o3N^2>pXvepvcOZ!8c^1MT zGQoKCO+KFnW!alIdY3NC#P!|HuT8(L`VlarWUj@f%iK%;2B$f>_8E^;mgW%m#~uq> zV*owD=)Z9_)y@19Ogu)GcIR^pYJr^iX7m?Scu+s!<5Pzc^*9!hGB%r& zwuQ$x+F*mbLy6tj@1N7a55uQ$px=jsSxI*pH@B+)(92Ozq}|9GLm3qX1>ZwKoElm= zr2k8N;e5T;Dxk??(83Dojf1a#vG7hfvsphYKfjY-2^Pd;owsVQX z6t11neKN|X1SiKdLI56YV_JtWiP2DEbj=_F{ZG=|d{uDA(&rXm|I9!0@#-mzC$!6$ z4UjUoe7b z%)mb4QR3s_eK8*@Gn#G+2Vk(_L&|0x1e%5-oh2R!#p-r_dgbhGuSB{VdM_yUH2sx1P6AQ5n@Fi?ZS zG&EWGms*I3cvT&2s&;jE)7`oA1eCW(DvVSW)*|KLn6c#K%Lrv?k88l+Z zC#+K-0RqwqbRMCwJs}V{Z7pR1FpF;~>FkulG_2tAE_+ZJK{EwLv5LVoL)NW)WuU~D zoOAoXN}LS#!~dGvABT2Xdy}p@3K8T7|Jd8Y4)4By!g|sCN^qx7H&=MBl1OuPN%MuiG@Qs)frtqLhzfxSE`qmhbGD2d8YK#R>v^SjReBNSr_BoiNg zijVKPRjyj0*P>8SXh(_XE@;P=@Ugdk*~2Eax1S?!e_B2Lr^9&#_ic(m1y*g@cq{Xx zM_9i@4Ucld!oqrdBre{0ckLJLn<)?R!+g$iSyc~*PjJPbuwPY-#G zura+)_R~dNo!^N@=Zw*|q>Qm@zJufNUqg+iCcUntv#eggsHA~M6N44C0ztv z7v%`XNU_w^)UfbPqK*__ym%4ti~3|Tf_bwa{SJIyAZuIUgvw|8Nhl$$`5k=^x@x^K;vo0so1v0FQ+}3oht_1M~0nZ)r zO6(R%dU7;dtxaKTV|n3lL4=VsG^8OWCiY?uWz=*tN2(v2md4MHj{MG6PWkRnH|`U0 zn3Lh*m745I#PBMwxaSt@eSdRK3}mw_ZY@z<4$jVm%Fe)qXu}&`m+d**Xi-wVI(v90 z7R_DwLfat}?XLB^q2Z~hD7MF1ooip73lmK1>@=H?`291zHq0I(UB<}pfbSoP`J2@8 zKUr!r*3=|lX~U(MR956==O%$tuZrE$<;UAuq|b+2ha{H6KRf_pBw#vnH z%0uIauxwiv_q0OymE9Ur@#eu=LcgWH+QrZGyd|WUA1APrJ5&o(kVUI+!%VZHXLeLv z6=Y>6`nsH;J4{+umU4en{3*j(EU5%HO4ttGWgpHLO*O22_xLWkq)1)0=O$g2)#E$T zS>x4;V*Fy|tI}yQ_C2MeS|Mspz^wqQk|16eGskeBH60y+nr=JqVRl)ZH%&nwC<2U( zVL$6uZY(tR1;)g*#65YtysOg2lM0d{F04VE`eC7v%lF`)OuBTp_N3Fz=OUUV3C9BrED2LSb{^ zHWR3P@9<`VWh6~;h>c~>KSJsvOPI3N&E?-~C>fzA9 z^LL)K4e}X1wGp8pT+*R^ifr^I7fjt*-Ef> zY&$!omQ+ZcVO*&=6!!TsVKjZ?Sp(FP2eDCW91p6|ZJ zg{S8fIm|UH-yDqyTiV#&VdB5) z5u$DtI72MijpaF*q{zy;mQvTy8%jA_f{Z=s$zpuS^NH#PBsj>)mPv?$xU; zisk_2pfN})Nra%5NnBhU+JagWg#EVxrIxzvFbn(Ns;#McDlMd`84J$u8Zj~A@nbAt zwn2P0Ix+D~LgH$_q#KQjk`iWiLABXiZjUD25i+1al!!l24Wj zg)@1C`r8{-9a)IVxbSX0wU91HSl>L{rziD`o>tRNNKP=DpkKzy1_60QIpdZ$>M2k5UpsFAyg_7eClfkG>X}6clI^y85vaNSn_+* zPK>6~*so-2#;~83Bxg)4|J*p7)?RJ97yWx6WCT%bav{ZwX5Mz9+GUA?IaZl&dt4v| zUqI7rp^e@YVF{R|_6D>fRXb|CjeSLk%AI@`d6cdKz=H)0@ z6-dU`mxlIy=kZSLdu3xINznTy8JE>N0OztWamf2 z78%I`q9gD+TPlm}hJQRDDl$7PzvSPYp?v!E=}dbPHaKplB{nxVH!>bOu@!z^-Y95W z%LhR*)T@4h_F4=A1ZY#Ip|esp2>Z$vU0}01GZg)yEe6oC@7uR$Kw+i>r6Vl4Y&Bw4 zRn^*gkzhJ$k|<8g)38jiIf>a#i6BiNAR!@HpJ{sw?cylgoy4@2o6?(i$3Be%9u^6=MUB>>c~~t$(Ro7X!}rbM2Ky6 zAeGvgegE;fo^&GK`r0V2{rg%R)>{eKrPrhkBUPyHO}6aXy-I)gtak9H`)JyPS~dRJ z$5z^>t1S*L{dSH2@+InNc)a61LJQA^|sEkXbhWIM(zESL(GgQU+ZaRy4gudJ zoW-EM%GH@#JmROvsWXo_I4;~~Weoy3{Mf|A+lUAfXznN}FSmwTlwd5#%a+&Hehduk zl^!sDf>vX1KfkN@C1Vo7;;_V`I0ImBF&VUwVYI?@iY?K^``i;5O+;Z45miACx;LRm$EgbHvd>MG!>syL=wT zN!KzqPwU<9_}zKM-<(4GrS4D9SUgXyms8T8PQm;}u^IhmBy z)E}T}XLM;P`^BHrh9)K~HZxL?H}^q<>v%~_%q$!>{5&N|26q?!B5{vaufD7|+4U9Q7Deu!5(OS@)XWqwDw zjFLkSdF_Y+9NZRVjS^!SG?EHnm-kzh|4p!r9u0 z;ZG};a?lJaov(59%tr+$l5RH&8T6v_?H*RA*|3+gfcdYc_RAi^c(}item@phkB*7; z8P9hdxml9c^Ql^+k=KCwY2KnBDOU0x6kTRyOnW4dC%J?NWUA> zo>MVA&c()E={tUW<*}Wzz!jVxg$5asV&{opI9Tb5IWg$LROy7EbV@3!cMw;huYU)` zifd8c{{9z6r<)_abh^8{XXfUnX$|!C&p!sPygfJcImqQ(?K7b#6icn#PTVpxZX#oW zh*y1gUHq3SP2HDxmNmEj+8@j1ycL8JDk7H^iu7_br0}u~*b5hS>S>&=5I^}{`xu}% ze*NS~HviExN-*5Iv?5mv!b zYeBRh-~6oJ{5{Ky_H>ZEzpnC#eRJv&Gm~r9=6f0hl{CZgyxr@Cr&s&|EsZUag}9j5 zmCroZ+tr7Wavuio$sUTz%CfY^HhlE*I{mGsMPk*Er}i zc0?XHIWbE3R2ojSw~zOwoQnbV|Cv=k*C%y~eM~eyfUI?TxE z&G9;NWGyU6mD}jr68hNw^!n6s_>+FqH!zUF{jNCu>HEuA5Vd@ucWRo85E9Fr{SM-p zR&LAjvse-m5+cQWtd`ExO~eqVqEUl@UFus}^#8;?Va%E^a&Bp9G3_s)Z7qdXa_G4o zPQ&HXmpyQ0-4hTs6Zvv*gmQD<~+C0r2wi@!@5OaCLDBLaMyGy9*KO33Lw<)LlMy2E`7=tVTVvUGGI+sy?j{6&ccx z0e|wNqhqb>-21-_!qXtmt5>i3kZ~cQBNPJ-T4Dtx0WAU)zs$7SDD>n1I!+m z{Sp} z+HuDxCT4qbC{V4jC^*vtm4c7(yq`bG;-sKkQH$Ffo0+-z4f=(+AYXc&{V*FyLqQk> zrI62Pdy?q8ckdnnih*<;0nh(=WoM@l^l)aIj^})XpS@AV(bJ17*>tun4YiFJh}zrR z>k=7q?5v+7n4lyIkBCvq*T(@m^jsV$m>;N@1p)3v(ek|fh6VZoVqS+wutZqv3w?n& zr0n=5LjX|%0|S2mvfVk{L!bIuSg5x)-3(NnW*Rp<@kR`m9Qa&acudjbC6)eXAFgOY z+bLv91T@L;EDf-*GYZ*ih*z&30TO?xl;U*UcOw@+e>6%U{Fw4 zh^;34^yz63?NCuu%Tzkql97=O(Ba1?nmF~Fua{Zn!@xkn?ipolPa<6NxDi2v2{x!uHV2UF5!@xBef~u=(0@hz@ zZWq=HG)&L1;K?-jIhvsX0eDcGaZcclkq33f(~OLguSG@E(6XnPzTo|f5VElI=g;r> z(Sv#T*h>!{0p!hlHCA&M5j0X_`4*sX2T1#Nx6qP6bGCJK(68IQyB1Fs@VxZecrZNX z;FGWKJ$CjGc>DpF20}#SE+1d?yLV@qSy(V}n1?44c3)t0w78lY85j)}71igM7zr7f z>$GWUiB$K`TqC5AggskTbW6Z33azA|aP!j2r5!&5UER2}v~cu_oUJXJPb>=ykRkJ> zqz7{|GcV(Ea6NK!nIa-0fZdDB&h`rrC!U*|!@NmL`vkY!-``I}L==~i;SJCL_Bnvb zmxhKP;Z1UKG7%{$y}k9{DHOpxP9n{!sHjMg>=TVCbaP^C9UfaSF*TJm_sT08o*m(~ zx5xou(i6T7EKmZtbjaS~(r9Pz-uYQB?6!Jo#Sd7uQJD0fwYBhc7E!oSDETW?9BwH+ z$hFM%+Oo{Gq@tddlsO6w$i0-BrlqU>CL)6SypT|;iD8_<%a0$DZm38&Vkogh2f>Y(MCLbG_K-pDtNlDRrd=J@1RyrqjnOT^z9D>3g zONgB3SQ5nIqN=UK%rqeIaN=;7+<@?a>=)bBAHi)>QzwT-goEht&8JV7ruFqlYExl-n#ZiPlS9 zpQJz>zhBfuMDWJc=Q~S|?Z$drXS78hZIKzlxOZ-2kGnVC2|b}P52=vRL~iLI?I!MX;I~Fxv7zBhBfa;Pm3$HebfYsf9}^NN;ZaK|fEDCY zrA{5(Z)`XL@-eXP_)gLGOM{NHJMerFELcyaQmcCym@bnfa)pfZGj#0WJMqF@l0l^3 zf&SgS_BF`IYkPXO-lN<>4ohf`B}04$V1Hd>M2LqZ-Tl&nt_9wGhf z%OHK@{d-i`;MRbUhwg!&{7%n1-#QPLyZd9i?;|D;UTMd=pdsjJp+`MLry5F1N=E1A zK-7p0$z@GLLwaiYF){A&3?m9N+9Q?>Nvp7&I1j2dJ?P*sy@7ALYVn!w-L-qlKtohF zfYQmZCwmCHRWV&IO-@q)n3vEPLP17=&+rw9Hj*z#&q0siix(e-)z!)8^Xz(q?Q4p( z35<(p->ILw-_XmWt*3euOjzEN!Ryi)O3EufKCe<|_G_5a>JfmKTMqsV3}RQ-{tv$1 zIxMTL+XKZ!Kn0{lK#-CYkS-;qr5mI>q#IF?lJ1snkd{{IM!G>ly1Vaq{mwb}Jm z*99VR~2dfRoXESDAxM3oKzdf@5u*!o`S>sRFeow*faZK+?JG_F;^w{ z4;$0Go~v3$2@{&<`X;0^0nD3hpPFGg4fS=qpd@QtGHrOe?xg450Y|cpa`=H@J zCXnx`zmbIO{!yLCkw!7!KP&6v5Gzkd*YfqINKejmPTahToWRYW%Y8OW7plD{*G*>+ z2;VBpr#tWC9&BBbf_GL}Ir`{7(9nD#xQ2CLhqKD0hku}CF}-*J0CNP?;NS3RPd)Q7 z=99?ycfF~FAdE*3SZMRpQ=>0mq>P6uv3T30(`sA=Rk?(*&0sS}Ol&nh>Ni61Nf5LQ z$K@!=7ks8iR@;nVc7F-^83G8b=QrwqE*>?osE7fs_+WD~1`&$jF^eZqR|b=Z5GkkI z$qT?3UyruOhOxLA&*ajo?V)|9PQ4!_W&FFEmY&Ozf{iQSQk{+2^QQoaUfLkj&Dz@f zt-T+j;dj!7rMd#C4qW$1g;3HmGle0M2v84n2rK&e;}zRqY=L`Xk!Z5_pvhaAsYkAe zuYA{?=uv>3{B0w|5Np|dQe7jK!2lbuk!Eb{+gN58YaC*Dvr<2&W_O9 zti6CfKt)#B9!Vhbu2F9yDFZ|FUn2fc@@nb|^Da)g64M94PdL;5r{jX3f*M8M=|g>6 zL_`G1ZT*tq`U!8wys-#0JyCQZXn;A>WN0!P7c&hs+9%h)~_hsCig zZ7~@s#rOIGb#Y@W)D8t&!OHn(=GPtsJzO3iii(Qznh@}l5M~04(L;E7-3!;D;R<}3 z7Q+q05u#%!BTIWVn#5%v0DbrlL@wQ|;sk0Owy)z(8#G+HcM!31r$`$+h@HR|K1Zf{ zYJsfB*?|ct7FF>T{T;i(#4a(MMS6?>`cdEOl%4g@taQm759uu|OxaCDE|s?Bv)|ix z7g{I~rC~5eK`%W`ILhI;@xmzh2^mK}$t}TW6Gv+j%MG94kzn2oInU#gL@Xri5|DF3 zL!~vhju-*J#EdDV@G_W$zZdd1R)=!2*x2@J&uYJt2RXy-gKQ*SV50IK0$nnLVwFg3 z1u;%K&7?E3a67XhFC_0_`rGQEf}V^PTBi%@02a}!#e+Ye3SxIDR!vOC#$wXfT(`d0 zE29HmXl>^pEH5E3Od9B@0^l*c`;?0UNXi%2q#SckP~Ml|C&bAY`yfx(eU{A@Ln}AH zt%j~*R~oR*F^N8Csnd&+uWu|tXceyF8-Y68BCYyP7#}DQqqkKDAyp>~k^8^=1pVaN zx(5Or>dyv>l(psL!%}iyz%f9cK`-bR_joiP1E9ay5pfE^q0R>@n24?l1gmx{{iHJHkn@5d z2T#t=7Zw-2A-+TRdGp5;(6n;cQ9F8)g6|&8$iHBwy8--{0d(L`xa|C(*M`3pfDwxT zXo1Jqr$npZkM53V4TK2>6lS8(bHwsEGsnj>Ub$v~AgRD*)anL^2L%mnq5gPAZ*?G(gPR*q^%|9ol@*dsNnlJ9a&qDTm^>Y_ z4%|Smf=@tDZ{6MYg+LIRd64=vx3&2~Ar0-(QdR1^;QMFeGJ zLZGZbC<-kwd^D+t*ho-;Q(F!=;rW*Tozra8}(BmUP zvd3V#i9GaC_%GfeQBqPOpbJRxDT9C{D1^w1lrEqg_JdLZqlciTW>T(vwyvqE+8iIu z%W=?mVLpB=4$mYPfDa^?oio8o1zqC~nBsLzOgaGQJUJMYsRlAXdAy!VI`JLU23WX6 z5F~PSw$7L(lhO;(l3L%rvP<0+qf3uf#yuc2;t?@%FMMX7+}!5?y6OW$a&mSCOBok3 zWrToJvbM8BkQz|Zt02N&)GIBLA;GIu!O|81uX#WZR^?m*ty}{KHi}3P|Y%k#BXl8`4-@d3Q|JD5q71~Ql zdOF(>RTW)BgP<_6pVv)K17bD`=ydhc`~y9N4w~-G6N>^M8rl|;<`?84B&mP9I@W zt-l|GmX_8OQh_%{@8byg&6Cs7(aG4S8cPjtVIH&LWWqx&hGAOpg@82n3|r3uHjqSm#Qju2+&L9bB~9){niVJ?VPBx z>VvOEtS<;4`9jG45CBRDGJ3Avz=O2V7LpC**`2LX0P;G3iSO$}x3aPlCW76U1vb{H zI%oN?4=FEA9sxYK0X790L{iHC9|<#|SXq20wVRj0xDhzlrpV{=NGs5M5OLZ47#)oP zhM%_81@IoAmAzoKPzU1(Uq^;TN4El>vocnqmn@}3t5nbq|5Xi~3R>Hfr_fA;v!&Ex zl1)QX6OETomJ8G{Hv4-E6}7%g^a$Xj!sQOTHZSD*qI2Ev*Y zeMyCKQ!_JtQd4>2l;0x2#f#H@;1~tN$bF~IIl+Gj9osM1Hnd`?M+XO?2oeM=$qo$< zLq-%6d^r^l&l89r1Q_XKZEY=C3F_Cv!X60K;j~%22b6dg1bk|IxAubIY3lGrB&aT+ zKS+U~nufP$=cmglERf~QQ#J%yFHEegJ;yAFXB$?q+Hr`;iBGoOQ+2V`n>`&srE zK&PJ`=YE2KPSep|shhzd0)hLGp5L6z4Onb6d9_n6_o%=d2`P}Ie01kHD`cYy%$;^ohVkHPJCP|Jaa%shlAM+{A~Hh=P@y+c(v-ZsK?g%a zQ^f}_Pdrp8I0Fga=3VIH1h}l z`5P5@JCUb1zG6L&-HI3jCcBfk@c>d%^i^Ig(r)a9DFrdvfM=d3{7}}1+79*?g#rbC zm#r;mg}fLvYrYm27q5K_r~v%!RzGwoZp+CGvhM*s$J4U1ut;JQGch!rHoQ;z-&z0! z1w{rb4Y-8R*w}Uu2gPP7iT+T0UNCWCiAy>`^L^lJeg2)q<7711sr`NFW|C*kzf1``V z7#*M3yj3x~P`iysw(YB@qxo4aDE@_cr+InGY4SskLw2KwBxEbyV)G>YS@Ev!rtGF7 zlUgJKfzn#m!N*?cde2 zPfgi-&si9t|916M>w<>r+qaTTXDEjL8=d04t#?(ZaNqiIMNjzMbD2%BG4aML z<2Nt(=~deg1HIrO{!EoKI14^Yyi2@^>c$xLZ#ONfShF5Eeo^b8@e_U|Q(0-2L5$@A z!D-z5ttwb~4Tr>{o0L7dlLZFJ4jVKIiw9x+FlzO%NDD;Tg;V3DMKV=+nYr7fF&(SH`ojAhJ6=1ZYs8 z?+3<%2U38i^bh?0`J*47h009$=2U+(`LT?i-oXP~ta%x237ex$0PFuk=$9UV@k8eQ zv6+oensdefT>7eE6YH_qnzCC;Z?^UjocOS}p>OClr4^5t=piFG9jM*K6*}tg0Sx0r zL_|I$;rrt6yv4i1rB5DRX~5)Ucod8=-=lA67>-XOdeXCg`%dD*G6)U&*&$O-M>3g* zKyTrqG2x!m0ktE_4J=+g!&067)kMS}!#{T@WULT@W4tJ^@S-we}wOc^uVsvP*ow=M0ud=h45_ociw4 z#o<=JQEsDdrJ3xZjH-N=WUAx#45Abx6rZNUG$0~-4c#QC!v?-VXPuKaG0|!LMWKX* z)F0a75Wjo1f@KdispX4!V9NV57o75YU_|F+h!bgJ`s7)DV{)*jGgZ99iU0^mJUlOZ z{rNovXZu65h-yHw(2aBL>30vkD}tJT-8ELQwsLRR`#G#*>pur#e}f2vVH1>^a3Fui z8-#^?%(6Zh5?5`A#k$6R^WAKg{ly#$mU`RXcXq3u1yR|8SWbfV(xa6%!nZ|f`?lu? zJfB-BGcq&NG7F`G&Vq2tIz4C4ux9(>#FrjdtWM1aE;iqGJHG4$gF8&k#HM|uM z8Z2AD2Af4h-*4(Zjp;4alh|Lji!7b9*vA&IucRSW;BN zm)`Dfa#l{1r;d~k;x-NIDU>rQ+E!QN+kNSoh5J)WddZZP*Ihr_Rl=NDUa*O1O7R}c z*grUU5CoK<(C7~&fCyBhvu>lJprk_A+)PEWzceuX(sU5O7!(QHd>VDMC}vLv#!pNgxr;k8ewpbKxa^uai7fi1hgsIWk- zKHPqNl*My~2clP1X!t{2v2bVFYh($Jtn6A6Ll-#sq5L`1GVRDcPca$5pXXZ-dU2(CUX&te&ztBs*f6pv=+UA^8a zI0DCAXAEOsfod5-CuCzL7!6Rzmfda!xz)E#F7Z{E5zbzB=0q{?+T1G=>6=v-{6P?04sirza7@o0z^N zox{;Vli^J6bR)*M7bK+xdUq-d)x=qk@8&elqxcv(OI-wjwmV%n%JhB;7vTrmtLty3 zM+!VOhx$X^rvbB<@s4YqE9etDlYi~+h)2>A+P3>3J!N;^-d|4vG#{zI#*FcEl~r%a ztcN0bC;HadN3Sr;7obu_Jryc>3e%2Is!NS!TxyAbz%xuT$DmFi z^mWu{{96be+KVAdl=6s2u7fkMvq!vtHM$sg?1GF?~)j$FUWQA z@nfyZR{uY#{^e_HfG^m2 zShNCGWjWQ~zrTP$W#D7<1sD>M=S;uyS3G8uB~OXDvcX7pe&p0!lk(pB%<--xC_5cf z$OniLX>PvLCS{ksqMmO^oBEl=Z+qOzYIymL0Dv5&z9eZIT`~|oE~+wQxEUyymsj}T zt3~@!Y7+6Sq|9jXehLp(;gq_|H;ZApO!l8{Gyu=$ARimA>~8mU;IL4or)GA1=&Re8 z45ii{#~B*(^L!%zl`S&pbX6o7t3kC0L{X9Nt#8|;aQIGTm&jZ?e=sEC{XNjz7$QIP zY3jUy@!Z2tP9%#K08Z*C1_1U!f|xt=mC2UfJciu)`P+P1`G)Zt-$@-EyVboLxw*M{ z4_7NJX6oYp(yP5K5g}3{+R2PELKh21OBH~<(v8^wcb|Q8p2X8Lp3O`I4ElLZG;E#G z^j)C-xp(j0yJkO3jT$?DNP0y81OP`MlnA}Oos5Dz+CZ&>C>Dc+L;+Th|AUFOlCf8JcnE{C6h^Nw~TGQu>0!wg(ggfW80h z?+*p4ti)=T578pR%nC>4V79ilA_#LhQ{=lA%(t+(5qYifIodYH%T#L}=pivQ8@P|+ z>CspsovH!|P%f(YWT*oCUmT5u3k0|vHI3Y##d*u0~$ATXcH_Y#&zSu2z%A{S3 z|3N+~Pr=&0OI})D9t+qZ$!?nk&KfIrz+lT)7Eh}sB@yD@)NS1k=TT!=lEhVF3?4ZwsBa<`|lzWeGx4-_W9;#jgvD(J7oK7hI&`}A`L^vW=Hm*{sq0^li^gAYzb ziKbKCYdu6K=81*98}PAqAj!R^ntOm1i{*AKnm4+H7XFR6xGsnf3N&kRKLA!PFiXm0Y>=dN%{mz2AI0N3bMg^uCryOeuxe0slkRCO2q$?FRd3D%NQ<8%vpt zj11l{3<$?No;}sBu4OL*>i%^US2f{8GM^iwlg%5oiYmS zL2wO_RQs^r#r>X|n&jzhNH{s8&qfjr)9PeYH$K}3*mXe?j<4vOQ4WfC=8Hj@)1ASR z140(9;Xn6ClL0aHa!znyN_E7mu{-_Hc+Gb-5cDYUmaFSInH6Y}61E%8gF7Oqu>QBM zg-)jWy0_o`_m^o<(K18oJWm@W)%So&1GbN+OiW>*Oj?+m3(fuls5r<;48eS%QRfs! zqnJlM^47CvO5`=9$Rf1#5KMw25snZN0StwSf$;&F-T_r+ei3Jwj73HU`l_sHaxk-e{49nJTuj3n;?wUhG9ec z!3>Y_oet!lweZ!AmQx@cL@mc=7Yq2mtY*6-j7NrsGQJ3Mrftnqo$1`J9d(ysFa8tx zp89w(erkI=TC?VNgX7Hh_(Azg=7E8JcINqWPWcELRy17t^m zlFBks!DpTmI~OS0kLGnvCeuR(m{4WqfcHY|0tlE^I+?4Ziu(3oy;PuQAv?az^NJqx}PKr92TU;Sg=Ci!eHu9|w?HkMjOQaqLH-&kpa zl;xi`2$;)#5O(3I)&g}04#thBCD`S)Vx5SXbiL&)4gux){J_>oBAPydeb+!o$II7O zw80EO&2QhnwL4BVH+uuOKs&r8&$zz6e(;*$&gN*sTL(I{1Q??qJbnoa=Po1t@hlUb z)#w+UTTa%;55a*T|Acm3#S1)P)egHi4T!qR9R6qkwsB&&mdGPRhTse12nZCe`noM$ zv&A(Y94u#V$6ij>x_+5^p&+oKC*o)k7?gAiDxSb)M}$X*n3!`X(R6J> zDB6u7E5&aqo`@`mMtncBLQf;t{9Im>XH29r<2#e=oVJS?QrvbwQ`7dkRG&k;77@1@ zLOj(cza`sz%k6kG3k0|v%K0~5DLLR85Yh5f)$5&mw6r%zezw@#ZUS54@h_oM*cA6I z91vtOU{uGyIUjih}oDizP~0IuVS`iJUfmvsG8k=e#a@ z24Ax|d*3II{i(}1-0m1WvRcNjk>IDjH>i(iQz&t`kY zm#??S7aLhyxAlD=aS171qP1S{q+oO7PAT|u9~#Vi?V9ZF+cIXS&ZoNFg#}Dil|Q%p zNjAnqxd$gR4Sz;!cD#|HdQR%K;){7ga=cWZMQ^@@0*{RvFfZ+8c(xxFRr_?)S4I=A4IiZ-;qu0tDlSuI9y z3}~9k82G#zN;6uxU#ly}TrE(RK+Av_^}*$%Ks0~`VixU<$=aB4e#_pfj&O{$lf3C1 z0;x$y!-H5RghXtgoIpMv61i=5=3Yavc{^BE6o`7wR>#Y-^8}srGE>n7>LiPG(oy(4 zgO>&=OWY>Nk)X9)Wq$WU3#;+w*M!j*3|9+na32r`Kxo_!9`nU-eez|oF!qd=B#^0( zw!rqc@ePPV%GsLvK)K1aWYPz2yWLs3g-J&K1=`{%3Q&-}G?^KX2odopQc25nssDU% zp-;}ObRE)h%k{>bTG>PBYF{`WV9+Qtj)^40Gaeh`#BkZ9f$_O>?Ni%(*J5IrB;E~% z`$(?rZyUzZb2&4cuO;5($H_PECdIp%GnjG5VJT^>e36iiE*bgNv>`pgav8onnuKr? z6jc3;>?O1Hp_ImmaZPy+m%uhal_q z;II?lMK8d}{JlNNR&qLd%H#1QeeG>>es~#+<%4+Ujr?)o6YD4-;QzkKv|p;$Cq%aa zuSgMqQF%)FpM3=H)Wx_JuUUIz+`&GaBTjKJ{>ei^f;b=!@ps#yko^UnYBPAT6^O+7 z5Ww?m0o0kvnuJFr1uRQoyB%_9?c(#AA(zri~*i2g`AYOg>(IWqKv z1!vpMinzqsA3C;Rs?lENm}#Mf(X0qXXe27MPV+GEeTh9U%oD`4 z3WF9=YQoWQ6m}9eS&zkb%#XzyI;VA+2>yTfae?{f&dNxFL01es0(@02v3t8C8uczw zK4^HjT|&+}{lkN86(g?BBimPu|DdqW#*zAxIOm3p8fHKzU?~1g+oc*);b~cV3f=CL ziTcf`QIO^{nRn6+vAzWKqPdmt+M7!rjdsRtBJJ&jlWKP#AlQy0XgMoj ze(STSkSYblhx2M>Y)iDYd0g0}&1R;9mx3OXbq_r~Jt5}n-(wfZ@oNaP z@pk|;MfhedN98Wfp_=nMOAEmt9gQaAnS_7={au;Sq?>4vDH#fa)hEHek1bHg3qALf z^G!Tr=(s^_cG>!6d9Ru!k^lXDgnt$|9^ctiem@s$boXb^cxsMZ@|ix**8KDtq`G0; zU$couB2R0f;N16Tx_~9nxQg&fW`Ni@I~iW#Gj^&+!!+nHH)6JE>Hx4q5YjVSNv{i;ZjNTVC10 z@*ts8mzmIdaA34lFx6J@goX=`TE`UtIzZ2E{`k>HrDLk2NX~>S%#&BQykmHLsk!%* z>?X_ld<;2`a9{J(O?r9@kZ|U#z1{N<2$+kfEbU)M@)a z9$m!KCDS}}eXiws*hr#??~h>>B3X--hX39DFn~$Mn zCve2g;hkL}z)wp*U%Raj4Fw?k*a_~~k<6n;1_qCu8J~b}s9T%K_4~K&mcR^hibo#j zxS%a5PTVZq;H7DIXEf&5BO__pn~72|tsB2k>J#lld0!7B zz_OeV=Jdnay%-+aI+_EupP_(sr1xoS7ap4Qa<9UN!?B>mU zWt9!y;Qr8e!XJB~J8IBt08vN?nq3I0%WTvt)sNF>6eG!J+u22U;@nqOG*p>KJY zvdpP@ot-g+QiRSl%;U<)p76UK6DccR-nG7Hnt6JY?5X7sY^wRnmsJ^Yl<^VGg}JKF zmu6_IqT^+IhdiXa<7h=Kv72wVcyZj2J^Fi$Y=d*7S~(1DuTHyIi;?5lty6z%vc~s7&Syu&p)pOmlwU=!B=)*!WngGX?m`-&2@&u+ z4k7Op4ujKvgdxzfrpbxw7YXm2*qC0+F=hx!YHAo0EgK)3NZ4(_jyewUxkn5B#;8W% z%$gaS?!6>S)LgG~h6Wca+BH8igR^1O7j7+0cq1G{m&o(YH<0SOqjLMKg@123&wyZg zxF6wL^K}$-a$>*TI7qe2XA|9aEa3bYGYfxz$MPQT2%C7w=*Y<5<5QOL-E&4H6_prD zRtg_v(kf>Rn*`cr=`!7ISuoZ_)!-EeimG0pCL1M+vI`GrNk}9N4PmFH@EWv~qww6X zm$)v$QmheC+^Q|T{<~Yk)GQ+Weq9ZT>S&XalmXZMmS9v-#doKQJ914Un;-D#L%*(2 zakHpDyaD$~a?^kH7p{zs!cYJTwAWuYrh?BMnJ45`VxFJRP;|~_sZiXh{-``Q52{PW zp#s$i5HsX(!y2b%%Mh)`FlAe)l9IewWp6o-@VH9Syx|y0d<{41fyDAHAS3N@ttPwT z^_ES>s|k^ogNZwte#a-24=Ic=BnrB?aBp3uVRC!9TQYureYHO-{V#rE zTeNSNe|9}!d`RXOu`TxwObc6Uiu(+b+(&3sgv0SoDRvX z*NNF}JHL^5?o~_8Wd@4R29CC*7YvtWhepQw6(tid#9VheG`{oTwEl>yn0IroY$TyS zfjzPTZrpjoMFKK-++pUmn0DQ3*(p}68JV9S#(fj#6U?UB_-^=Wp--M6%`fG^yym&HRf2my@)gTfI#U1+I3ug_yU~Ml*^d! zvBpmq-fxO4=HHsz4Z;(3w16ZgpJ&`va>q@7#fi3+<`jv&r|y20%|9x?;z<{E;Y6m| zny%?6X>_1Ik`j|PTv=2_iY!cITG)^^eiNNBHt2T`TFZW?T>ElhrvVNY50R0Q5*8Kp zy*)R-n{KXA`2p;V{lH01c>X3t64a9ickI`L`u69<20k;Wlsl!2NI>tTy$)o1B|;l3 zbM92S;%oIrO6pHepF<5gQRWb9p3Us+!K_>Su?UTFe(HfeF4e%z+?C2#j~ExruRi3N ziSh*96BJb@d4?77M7z%{$*+9}Pv*^o$Lu&pqj$%TWDPWZC5zS7Non>_vi?$(nFEcr zq`HXJO|Q-Gsxr<>tf0z1Z?7-)XsHdal~oMhYyCHHERT``yx(#~DHC8W4ydi=22CHs z4`>_nIuomrUtHG~$MPF`&!2a*Gad_C8W6@L_@+AIXmgKt#m`wg6sAz<7l^`|(<2_9-`Cud8# zzt%@c-d64~8CYw7ykPjFQN;%nh<;aR=F|nF9(|~({W^L(nFZ{5|-)_-nRN*W;D z5=^HnHZeBb9Epq!{UOwstWoQR`Jpt5C|9Y9@3Tm&`Q_m2ynis`E3Kk!>t-DZqXZ*;sy1s8^Jn#jr$B4pt{gQG--S z1oXblSn{1;iVwVOqjBHp{bf`pZ-ABX)!0j4y&+BRc;0^356^~{vd;4Ih5;H$iL5M- z>!Y8Z4a=OiCrHm3FD=kGJU?@4qwDNex+96>i2d4{U0#j2*TMt^=qV}R!?zZizN4Dz z-DTN`?^_zA;+!u_0vzh8UhC-^r#z?gJ9K5nM8)PE=ybF0uQkE0`rGrW>fd8*p)q*# zS{l`6TP}`y@7kHvdo7vASpY0~2r&hD)2&;#5V!)UEds9jSNN{GBO)Wc!88J%4m@a3 zSjnIBi;3SO4Y-L=RW*+*=470>?0B05usyNLE58hkyK%LAm8t66hdry!WzW;qa09Q8 z=FtyeoH9n+w~d$6~FY%>}o6rd)M_!v3o9XJLs-GTECqE65eyCFCO5EQX=fw3VEA7MwL`6mU3 zSr((js#gtv?JVNRh#OHdaWZ{n!Fj#nF2 z47BCH&5TcD-;5JP{!Zvd^x;QWg9eAk%dQ51rIg$>mzC{OqDxt9$+%G;%WG;Ke2n~~ zLDyh|mJ^9UY-3&d0?9AX-*7w2{#9#2&u99{=l}M!iz{|KtLd zN#(CxR1IBILJ7U-2#$#~O*!YrOEEzn^L9<6Gq}&(>o&F8)1cMyxEU$Uv7>cyI1>)A~CdJXQa*V4$Wpai5q!=@G8d zOXJ_4L-ijLORM1ECL z)U;l-X%L-hfq&A3{UmP`PRx|FYd7{B{whoe1?uPWrS=zpmzlL^*=b5*`EpKf3qD8t z*|xzOQ}KEwd5NE}ct3~yeO85coc;7UVQr~GwTOXd(H>3v606pD3ai1ku;nh`x9^Sg z^gbmd5UTa@%V%U~M}U}D53&ou6D%(;59b?-_@LsTGAlsq^cKb!Y!o;$l>p%^bHw+N zgLh(e$_nH9e2Ge$WJ2cnZf_*DNyox@DpG9Zi)@2sOL3CE_GWKOL6Lc0M=qIXzX;|> z5Y32gTC$G0X|%y?fMODkHY36DgWgM+cJIff&^jvmr8iUa4F&g{6k&&>QDXe7Z>sGP@0KGRx$?mN?2rci>pyLfU`;7CCP6pr}RJ1hJsFuZs63Wj`8?t z#B~p|)Ql&m)Kchm7^@hnhtwk&uT!LwdE&sdyjYzQ9gPd#P*7ZBP*G*y^pm_t zIwbmNDecV*CZ?Z@r{?Nmn#Eyy5DK8TA3#Cg+(PpxOVM=XPlB@q4og(j;dsoaH{z1| zO#`PH*_oJFhxgkaSFB7~Sx3i>z?Y?N8#6i-UPe*rgdkdc8rJo>3S$bbdKSZE;@M@v zCMAp9;cw4-iw>)8w(di>?alkWc;LjJ|GIUrLra6x@$>ps3=UJQy4vsKgl(KM^Qd|} z&X)9m8WQ*JA#L_=@4DZRH8o+^8?e4)J*~Tb>k@RKwB(wx;jX;ICHylK_syNzn_~J- z_LpAl&l6YbC_9qG;>bF>P}XB||J^Kl_RemM-YL;>fnb`JypLpeIG?wpkOq)|)&miZ zG*xZ8e>nz(dRtS|Cpcy|^un#QFaISgE4USP;6QZnmQc;=!6fuc1QamXH;a1IzMZQX zS8i&ap=U~5r>a&;9bY}0^Z>FL#)B`x?q`@b3tUXHGS8Ra`h+WG&QKFW>_-hcfmqwj z<@Zx%Dkg+d23`OH#svd6%*USlf2BZ!e<1y62`R<%iW6)o zoDEsvd9JKvgY!@`f$!d4ya3=}Y%!kN(ZQj0WTf(`9;QGY1+V+9CyBNml9$=f`Kj%{ zgz#?)M5!?#fs}M^W8!HDCIL%d-jIUjXD?8df_~YGXQoC{wIC{%;;6X< zHhZEOR)at_NJo*cQBi!G@s#RLbsgxn-h*gOLz|t=VuK?t&>%@!JsRlkLQs9HXqCra;E(I z?1?@MLhq^mtN4F4WqKX;%fB>l$U!#mO*oi+Xa8j%PdB(q}NG?lRR5xNzP3@1eD~?k! zubWnelRqRiJ_htFYu=u1)L>r$%|g_rs{D~w&KY-P1iv!<^4O8ol#7(>9jH^1ma`2# zAnV#WI%@s>I}Fa@MWi(VB2l_=e6p*Da4P`;2I?P#Y22B3a(X%m`S-39z1nWkFTCv% zuR_B8;n1JpQp)AVCe^CU`(YHR4NnKG$f1de-QaBCa6O{Cy1D`tJM^fx;H+pt1qEzS zh%okl2h}nJirjNQJNP*@Rrjhd>7R`W!YIIAspLovhCdrp`q1VCIeXqaiX*~reM;Ab z{yi(yk5D-lD=fXaP~VkOcA(vOZuHA!!?&zm|3V908 z5&k=fk&hA&HwvzHTA~K`jIoJW+0E2CBN;Nk`{?O*s{?Bfh5gJ?4~oaZc#*4K#jv}( ztB|i01o;#tz}tepEd**mFs=yk+uYpTO_|6Pj`tsB(?x#60uV@{=C@zN_C+T#gj)q- zms>A9uiU`Wk4i3^Ja{@=0r%tuoD&2mY0q@*3JM5tcwBI#c$}FeqZQsGZB7Ws1*4rO zs``zBZ!OONESQ_BcZ~rf9Tl`H}@5&5)eF)i;Iih##k7_c?)q9c8X4kz-NQc zUPg!Z15TwA%;$BkU~TD6U=INUnvR7uI4PIBcpoUTYMxctbcfLp78NtkJi>N+;okXs}t$ zJOQ^I1Q?()W0TrMf}k9@TZDxY7Z=yb#l;3xyU=b95yfL{^MWA`PX6rx4;UQPDeK4q zD+xXzwkeE9uu>tM1@XOcysm8E00Ue6+f4G)1cU~inmSZR@NSvOxWJj4im%VCXOGW< zsF=8<+wwA=kGi=6cH7m&&&b#AE3>7T*~goPs{<4o9G=94goO6KR6@ZvQjy5FZ(Cn` zTos~jFDBK(~yK$HCJXg!5M5t=MlZ0fsFY z#8imjK*Xm9seqHc)F4di5P~L@DIV27IN0>_rx%d%hzQNSQ&@AYpzGp0F@%=HeC)*&BBGM2s^vh&hIf#(mXVcp^M&=?D{%0r(4}iPdVm3%tm_0J z|AOQ@$g6}M6k!kps~|0rnbv61O+u~fyPm7TIb(0 zp$3Z`gn0-5C)tphay4qzMEyU9uoW+Nq)m*@C?d?6K1D>YpqfWfE z7wr|zV-;q~;K+*OakgnlY#$kkmdj*zA)T02D@0W&O_Lv-1A_#%?RBK$Rr>dLPTCZ0tJimZJLlj-8sU{36iM+ zFcrdK>{2kOH(u9b|0UC`SN#JU|Wet2F z*mZm$I|ZVPehdtR!yROXL+n97)d3CQdpo;D*qo;t+zCZRMQN0a3OHmS@&eMnvW5H~ zArw1cKipj}ZUjqg6S%h`16YgKdp9p27!fjUF~B1ZyKgBE>)S|x8gCF-33*(d8i8i) zBPe`e`)!5J668QRoC2gXB!GP*K}P`I%63F_DX{T~hYHb$aI$*?yQjL)Z%l~fgo^lF zy^;JX8F%F#>e6_+h;#Q2(LVD zpJ|fwF$BwvjFg|8=(Pqv5dlYJ+0vvpbvJ5(=qW^XzF=bmcV3elNCF@UUMTlH+-JCP z3E&WsZ}f0Sf-DgMz!UMg9q6DIrRsNti?=bE4pGCW{cio|CN$c}bD($21PxSxJKRsz zMh{+4L0ue8S_N!EcBn3BXdxvd_kxs@gCq718tx8g4{p7HKz(?R{lW7GiAq0PT73Ag zPHtIPSU`j%j^`U7yd~hBg#8#1w&Vuq7{Tkg2WBi#*+o%o`T5}jwF-J(_xzeYCoi{*~UI_j=`Jr5H{l$ zc$Uy6HAH;(riNr6xqgV8?q=(_NJ2wLH-e8qr&@X&85x;}mv?ots<rKP`*6n4GnYj|lffepyIy)S(; zA#HyPkK*BC2Nq;?`Q_*5lZicqY@sfQjpP7B6D)>w*wX+-hnHBR!7UED@aN!ugJ>p* zAx(hddXt)XpWo$x8hC85#u9#j`HppJ#H>P?s1+8-z&aKu79v>>vuk`eM3IKCZCHS`T)cRgK$CYcUwD6mDR zf)fy0=stK40*73+Ax;CRcL}H)I9SNfAm+zumkcf#A_5=qdwK?MPKYQdh|CBoE904Q zyV6;hmz2^AK3C@!ACFFrOybSl*!cF1At+iYRoV!LK+NBtr-4L#?2{``gJa0I^Hlg# z=YnghH~)9hv2@=IK2LOW#XRicJf)@dvmy>x4>9nJ<-$i!r60SuONn}@9Sxg-aPbNt z(gx1-U{7d|%`Gf|c(WV&ad(n(VH*r6hJiE=iUYzC3x+N?IH&5R)l4Fkagfd>u&-q= z&dq^OQ6zY|yY4e=To{;`Kj95Hg-fn>KW9Vu$>8Uzt55Ru=@=Qs6q2YK4rs>t?9Lq3 z6c!Xfo=wj_kCixV;NYmPi_lAfQVa^_dIu74c|@kz!Co)AuKS3*<0lwodE#>y1Vl&0roS910zI&pPbHMFZJ~Fn1F|pUah>nlo#?( z=jPtQX3+%m4I~@=!X@ z>tg}}`AQ8{8ikx6zK0sr>PIYyX#gC~);2bBxe1>zgcVbzBSnRTkiKST$86rp_VKv` zdgSi#xn2oF*Pz5l4aL15oo z23I2J?1aFr4=0`ZL7`!WW*K_!K9G;>@wBbyb#^i&?y`+uGT=Qp-6-pev>c5{fj}(C zG?P1cvo%pc3kSycvcyp}pG!jY=imZJ=kWT`N1M4{#pM);)Ksb(n*D*q(qep)zobLouOqgq-=rS03Sc$D`fmY zq@)NX<;vP>y3xB2Vg3XzckiyOuIlNV20*emaIBC{rne*B(9%D4TdD`Inu17E^I&fU zhXkCiYHNXg!W|H~N!e^PPW9KB-OKxg1E6QWz#vjmw&>>O+w*#Qejz~=5MuBBT?PK| zM%<5zi7y#~SioNIe6%Q5c_HKf=&y>Js;-HNKcp()5Ygxk=kS5NCqT#v5x@2Ao0G+b z05-A@m#h}FuTS;Zj=(HXRu>%~FK%a7E*|292&?)4SorR^QHp`{CM?~6Vt5jew2t`Ks^#LNuV&Lnv30|lxqup^@Z=z?v4*kdc>5)x=xM@C2S zq@;Q@u$JO{Xt}w$YwT79AnsvU?iH5LC@_jz31hvvZ}z!h{lHuPyx!9=5U}LOAyfK8~A<(biN=kmVwtoKnfUv<~ z7TWk&s6bBJRj>!ugh}VuZAhXivP;W=jTbWbtRdi%Zc<)O zZtVN}^!f89U-ZEuO>VFSh=MZ=iCVMf<*fTLQCBqmGdN&n$qXUhhKJ0-!9iVVz!0mN zuS5@flc1W~V|aOb!!a6Mj~M_dq6uyJHPd2`$NGOJNPGKXqHv5B5krZn7%>}-ocS)s zMtx}0PhGmde*MaWM-GPax7~b>*4AHPQh`!U2rB1?U}q=>AReMWF2mxU!r=mJa0g*D z`2wlwZvq3WGK!0@C&pJh10eMfQX89_o6RGrw0c77CZd_4=1uBzKYNx=$9dPnV$&S! zCd;Tzr^zN21O>*JrA>{GtL8S0ZHEJkQ)bwc22BHEaDi>&Q+*Zkp>L} zK=m^-$vRD+O91_Y#t9J#4lFzLJrrHKaj*|%0a}Du)XWB*Z=rpHHJlnNwfXmN)?Nkl zI0FFCf_EnvvfQ9O(F0flvaJ6ljijeDv9TEf^o9tPfI4Qqw6{a{aUKunT-cdfPnH@eI?f|k0H1+$d*(rZHo+;hi-O9|$3XhM^GtQT*G*^YB zBmdf3*I+Y=d$JfdYqH5=;2waa8u%qZ;PS4*j1RpK!;cljJ|>G@AOCb4&<1{p%=VHD z#p+~XW~Pxt%SI)g(JJ!abF45<%Y*9%BadEpEK@)%?2oInjr@o=wptnbe?;sgWc_>m zoSY>5fJ?9T4Xi0JWIoU@KSj(BkjIh<#~uWf0KyO7zYz3j32Gd~^al6wUu*29*24O{ zfM}EeTNhW?LCC)Wf$qImaG&687*f!}M3WB*tFRYPLfZh@fnuSc1Sd@kE83t5F~ub!3WBB<9*9D*77vL z#_b*-FMmSkdwam(sR+t^n6x11^&RY(Wo0ZdzRR6zz}WP?rl!%_l+;5Wu*`&0^KN;bv9; z2wWWSfkJon)wXBqS7++EVcb+Uz4(8D#&^Ir6_=opqK>5GN86g8Q(8{fohulGpoyrJ%R{eQUtj!;*FTi6SjFPdJ9XJzB!%7QAT zddpf*?wGk3lKxAK7J@S4K=)whcqBOOw7zPdhFYc{|Chz z1ie?}c7ZQnrHnqhgXAV?$Pj^e4*)jQG6t|??(J$*cVX}W(bd6Ec2O8^dQ#GSBo*j? z{+vG(?BLUdP{HVDhUicLLxPVSj07=2B#s5-Ad_4^6e^#yjfs*EGPx0Rf6SJ~sw}Rd zcnH|f`88~zJip`CL#x!aGf_u;lYAmNG2t{hZ?GJtEUO)nKQT>j1i8Nkyzu(0blR`@T-7_-R!?g7udMGzePp{9arYV1Dhp;bX z^IlMz!z_=T^=P)891$Oaex-KBBY3@8rZ%4BodTfB}bdRtC*YYKgN zpuYBiNFWxMfSCWF+`%4S?A?3HMu`_qv|ZabZiYqU6z#cKYwkW`=1^L?;pW-R90INH zlgkd`AjDrT5bwjEAj=z>KhdTTpm-to5KSSGagwN3*RbCt=UQB&UP zaM-LSWL@9DtVBQY42B!Z-aq_jj^ONNSfLujX-NV&bP6AP;aBV!C70SJ1%3Lg)*EriZ!Udx^{L=xizNy^CUZ zs%wOOxVx)VN@mr+Qof;;KkzybDZW^7O9ZZBwe8X~U>UkE9?_G;5@XkLH$<2m!3Q_S zB5U355leme$kwqy2D)s&+w0L#B-*`1f1I+RAfdD4?MeL~$KjDA7+=7=igP;>NuvNL zRyBe_3dWL%*sVxv&d$VjysT`Y)m{3_9KSry{q+=foN+ap<9!C(vz=>@MV7=%;FB|E z$xt6G2b1dj8T_3J?ftWmBiA&8ZPCaeU1_zst zH#}<3G=g#01QdAW5)-4^gHgQ1C%zdj2Ax)K8LPY$`0+W_(&pUA zw?uYn=-e&?U5R|=Vn+n-Z6Ddjo*SnyYYoC;1jyP8!aKgM zN#qtE6UPdmwsBPlAFUI)QawD%G!Edrl%-xGi3vUAJpRw_GqM5yGa#nFp!P`DxdRTX zWvTe*z4!aZsvLH>6iyq>Du0$!3(`>ETUMi6XcylAdLIbmfW}VmxUik+X$)VQQT-cv zKV*O&mNM#_cUm?b1%Y<6tFP@4ibuZD1Vg$+X#!6?%LYjLDR6OY;^|Po|slM zLA6aIN;OyU^C(EVUXY}u&1JT5gRT$0{8p;}HT!6J;3acN(OHG?|n%%8|o1F4#D!x5I=YVKX}X zl>8zCQ|bU{{{e`_aeEq^V7&iDkzFjY)c=dhu^pV=`r1mXR(xMZP{pFwZT}W*)c~KV zyvt6N-ssnwl9(-z`@4RVr`H+W2T=+aXRg;7L{ZYDf#q7npQI8qV4l2+)4Fr{zC;N% zRuQn({sV9}lXEg| z{s`MVr{dSjSnsC~0Y;WI*=UQORl=`Ofrco}a<*rUK%;VUCbG z(N6{Aw)V$ZNTTPo)Oz;R$t%sc@^s+4uCD&gvA^VLvu!ng0LT{mdAdT#@xsfWNY{ws zvZ%j{zF(gOjz_U5M16ViGT>o%trcMeP2pOR%w9%TmYws8au=V+kIE@Q8qUYD?FAEQ z1!-x6)$(ECJZq(QyMI?)xY=Nb44Err>eImaYY%4pHU@j!O7k$Qsl)Qu@89jmgMt^& z?4ALUIoF@6af0*n{3~=N`E1;Ww8z^s9WXV&vtt8!;t*K~9VL`h;D`iPAsnC$lPzz{ z&T49EdI8`w2rgWMqyq}uW?&@&Uei@+hfHiQ{vG~7FuYoiK>DdDqx_{J*V z-26;q{;%QJxzKA**jUvlH$Tn_U$Z z?a`Z$@bEJF9pDp(g@?hVtAAxg(H474!Oy*O>=D{iPR6D)yl-%BXs8523LWAB1d$_U z{kP`A|FhLLva zLu>aQ2v2Z*^nyO~?*4unbYZ}j<1;OtF|M=fbLjKor7gquc8w8d} z6G|)?6;f~^lu^^t*urNPus_FtpZ)Uys(2r&(!3ZGjoq8AV8N#0C3{$&yR)o@1b7~-0r&NA49WV6O*Gx`geN59+Os_%y z;%_l1z(P^!M(8jKVFM=t2|v^n$cNm>j(& z!a9C?$!X%TT-}=#adai2$y%q-?e-wOKNMcFH9`DR;|@RUn*9`W*YcweC<8)UeVnb( zv|F}&=tC$@FhJf01X#PmXaaMzG)|S(WA5xh58oChbdYk3&|{GXIC4hs0Nw|BExZr# zex?7(4FidEKzxtPQ&yq23dhB*B6AL2CgVfJxtO^RZ4(=Jffg3F&iI(wKKx7eup$9- zxb*n#hOL#(E`a%h(ptZlz429R;&$DJ#AT=k>UX`d>u~OgpXs?qi869smib34z7=+d zJ5}?z@pYs+t5G&1pW|M#0L(HVslNBmN2BsyWaJLr*=q~}|EYkR{QLic-y123whB#O z((SgVNo3K{k;!^_j^dL%a=)%$mI`|8<|0_MD9=o(fvo%b)vL4@<2P@jorFilcG2>m zJ+qk{9MOLD1$olhS5Jqy)G8R=3Mmm1;L-Fa+u@vP!TRQvXk@IzlgcuAi&`@0NcfBl z5HBcakT=i&oPstD$kPD4HXJ|r8}a@7{5egY$!O|blKvUdfO#>Q8I-Kpa@$!gnfzS$iS~@y9FjERVlT77;It^1~E`ktShY`3Gn1;!j zNiCm0pG6cx!zk6c>{9srOVHbQ;T2ZMyAU!fZ-#Qs@60+M;#7*h8_kh|IslMI8^l+v zM{~()hh6qNN^VA!F$j0c55omZ0W&>)+}r!pe?iX=g>B8>s#Q(mR;5HDRVkP zD%_smm~V>$$m=UCetf+71?0VDS>yS2;bD@{<;O(Y(gbaBqsFz+rNCcYPtt+Y`JxGu z4#j->FULJOK;@0dQ6(-7BT%cz!!`D0P%7;i$8fU=g&~uG`Pg~S`rpH1krl#1b+F;# z#&1)B4m&h|-y%L-x3j9UAzE7K^6ZNRuz#514KgfSX0CqFc0A0+k z-};8IySe%J@~F(9?(mI7YIOPup}Cf zwH7nQaTB1xXW>2CO`nP01(}V)MC}T06cB}joTSH*0`eLOdHw5_lWw{8h}TV>l5hAF z`%j-v{_)ywIbM7^?y&Cr^|RQAGK}j>XPmD@%#$ZRsGP2b_m^0x9BBd*aI*Hklv zTjHdNQ=O^A8OylWyAORC=oLTD1MJ~eRb71#*EKZ8yyC5!yo|pJXm$O{Z!uQP(+D+v z)sPNM7wAXJ0`$przByTq=jP@HlH&l}9V04{p|s&&C@lkCWz@Fd=0uXr`H_k{VzVy8 zozL1d$|JU7{XOie$=f@$aA~7UQ|Rhxodp|!e!JVa!?x7VL&`2*ZuzbX$%@h3p@RN3 zZ`wOo+vriloUldIzW&-5IADcG2v}_Cy6pJu>`bAsAI1>O0doueZXq^&JAzO&#_|2ChLOr8{OcJaY@so7~J9WYG!#))yD>YkQpP>_O zv4DF2PEY>lX1G0o=bLwO+P_^PmFoOeC=x&S^)4P6nH20kXM&_3p&IVmwE`b-ib_g~ z4f;M=_ME!jhK}D#Ps|_1!i!X-G-%#0*M^-^$h*JdfllW`JrK?Y>Dv%sqB!`;=M$5} zEmp0LI3T)7Co6dRcL7<>?*K6>C|Eu_!s}pLPaj+F|3t0zJ0p-JK?Y`sa5?^j3sE zGdR49nIqp#(@!i>t%c}*7m#N4Cv>dQ@DZ@7fyQy?2Mq4%zctH!^F5%MmipvuzfGI@ z#G#M9?PxXYE4-=&$6p*sUu2)8I&eq5fu5-)3%5Y%)>MY$LTCwfwcXxB+bE8df{p5r z?@T@JEpAKP!RTgcY_xqkFnPB@8p_A}6aR8xZODOr8RU>W%7Ic9)-8Vb*3dYorBiY_ z|9B!I;{BE|9io+i;3F%mcpeWDJ3BiRP=BKG`5FFyO)lb8KVk3W`+!NzEX5u;_h8VK zqB0$Ze%xiQUhRh@05zFi)X~!Lih#oY@L-TE@u%>w{jq%P?N8q?DAb4Gy+_PA&KwheL?IVj$k4f6%!ON&k@uco;WY(cZa8D9uu-fku5JIaZKHjAc3i@|GFaOJD0L!4zv9Y@j#gY<+o64#t1g zAgK&qOklVa79Cx0nITI7J!U}Aa15%|zKYT3~H^6w-cLDO83D%Zz@Aic~jF)?3kjglFm!sATKt%yxoLDJi z)RKc30+;i2@uSyjMk%@KQ@6&@m9DMyKQa7{1}_^W;JPdX&1mjqE=Z&-xE+v}x^soe z&onnDq{g(;c_<@4=db>6Io|xM0&l77MLdtkPrNQ1xoNRC=K3){Aaz+uSAO3y*x|Da z=v^sf@Dv0SPTQjMYrvA#pAVS1-%;m&M!oR7W?;q~H{tm$x(bS!^_J%CMrG=i4B11+ zE6wuw7R1C4neJ~3;F3~aUS9Lc)f!1^!Om6A81dg;Jy?1HyuWF@D`Ujcxq#LwP=P>} z&0`w%^#`P9!u0g?#&mrgxSmp`>E@>~hJQv6_o?CrJQ5{aH3v7zVGZfKY4a|OAa%aJ zlwsucDe#Z7p%q{F2+o_%#I0BD-6t2MNf8mR&CGHk#K@L5$J064o%>MpKN9IxPX@r4 z#9e#h!+k-7B>dhXGI4@1I#yNr?5;vebfva7z?Ms$ytzUt_^&4eI1jkEe33Rkh)5%K z#|8%#d*ukE5^C+|Qj-J&ok(Bv`L!AQIxE;UkT=&S=V{)({X!;jk%=9|hKQf)Q`1V5 zb~IJr3RbU`1H0=kKBbp3GcTs*K9jb-=6?j^LM#bqet2#k&P1-?wshQ^>ZY{VuA5&C>w@~XclR>YZtwEaNW|jVZ>IoMZ1yGM%L^g* z=QI*gJ#H)4qsFi~U=pYID?awk;zHq$CFm#v+xT0IFY5EaeomnihurH%JyG`>{BOnBxI^rjd910Wn9E7xw1Lu?rjY zGW45$c7ur7Zo!nZgCBjXM))wJ&?0J#97{l8^Yb)!m`P>QsSeP=N|bk^OMS1^INvdn zR7v~f3C=&}R(KnH@@$~MHePu!Xy_}0FVe-)f~3`H;#~9T{+KqjB^n;udV+1JbdrD+ zI1j)q0o3;(9t#fzcDmSFT3Q^MFXz~Sv37Lj5p5{ox3_W0+8PJ*nbc3Qg@6^DU-OE7 z7}+rdMqSnMEENcuET+luc5b`h`xYP38Zx7@+p*_cW;*o=`f0ir7WrG>eViXu_tOy~ z%cwADJ+gUTIKw2{)ar zhD%El5BdSHD;9X0g9mucAe-J=m40&{F&P{ge8E?T4R8-+Ox(yJ&GsiUBwVJ=iH%ob zGi-9{opwm#)HDV#$br-tp@4Rj%ZD%b1#Qz=Mr6n_0k zk!GfHZ>)G|r(`^UcyYjwfU)*Ac*qmz^4S2%2q>mNV8wx6SPxJ|ey87gBpR{^J+#HS zmiYm3rYBFnh++izG`Fi7Gz%u_UkFb(6Y*h)D| z%@DqwNgjwoFbDBnWhWpd7dIb&mWQ0j85IBrXzqDmY79exk-KH{`q~}ve1HPvM@!2q zps?p^O;p4SI=(@&JExm_5rsHMvjUdmWiAT_kX_0FPyx-hmie|o9=L)AU|0jx2SGbQ z7B~aI54Nsx+75x{&BFl!@NRK;clY=A|JlLFKni;JAZD8xZ*boM6h;hcTwMX_`vJ=^ zNG4tkjuyflGJFuXCS5@ouNJ${{^F#4}hMUt5kS^U# zQ#eP6ZEX0<(0^L*XD-aoBh5PCiYkOp&{y8wFo{)@iR^e;ug(tlD&}eu6B2%N=P!iO zaoFC#P7Q;I1&y>9(5DA#n=u@1z+p7S8712GQT6O6cJci;?cj+$Q1u7oYM-X##Ef%%#-mt*sy++Nm_)76Z*k=OK5Bv2xO~AN_7*? zmpf-bi%=+=Zlj6+YPuq3tkmfK&lwV!RYUrdfaekZgtiuwJ^Y^SHvJSh1E8Y;lmBv< zt0Y9AT@OR+0g=FNnO!IiR5M4Urz_DzNI~~k=p8>G=lL`Sj+d3zI&H4}LiqPVN*d66 z?HFKpBKhb;J)J>`rP;EyvTbp0B=_3aV#0w%t`hZDUN0TyCBoVQk&W91+E6(S*IjhE zbm#t^rxx+JgN0v5%wUdE zX)$#s2#?|;4oN(;lu?WJt|OtIUT5qtE$#JJhx7R;eiO~ zX7g@MHndKUFL5*r^j@r#||$CHsATwWP;tYhmHoNfua{nB>;sS;gyCXL!G#cpd}ZvQ zc8lb~)fGQ-aTkoR@)phJquz~zY00N!Dn!2ALJ-vpt5^TsqaJKg_T~1E!k~_Du#6K6k~WPuRVua1W>V#pRLp*9*O*)De0e5^|#Lc@qYq^@4z1fQb%P*@le3# z;t#cyO6*oWt#640{VRMNVI25WK1IoN68PZMB5O-of`4E5^(1i76!BXr{OR1vGi24# zGs^5~rT#>+pI*w{j(CQC-SGMLNM6z7<3ziy@CjhqoyTLS#9eB(v#*Nh6cn^gb)VOT z3`Jj+mm8sDt<27@`eYT&5Of9z}p zs)ps@Ay$GK5SyJa2=Daie5()K5%6ez5B$~vppOL}sS`XGjOjI3S(wi?Y}y;D z*i>_KWV7CL#@di7ooZTGTkf0fNJ^iXMYG)0Cglhkw2a$1!uWoeBw$AOx7P7j$t&Ec zv!j*u<7s^_bq17OvM{3KF4F5Q4=oHX4!c8{VlJNvi|(P=9PcfkHCz%4obp6;Em&6~ z)XF~!vn6KHu@Xj#3(NP%nMNMWh!3$l_Kd5uNz8bJFC}^Szf?hg@AZbx))J5CU={C% zujpQv0d{zWWnMwQ9WVw8EwAGlHx6ZAp%{gK?w^V64y9<6k#gWbxt20lCb`k-kw($M z%3U_FvMIUi-#r1NEpj;<8JyLWb2VG;oLsV<@Xkf|LERj*9A2u0vOR*{hfgU_q-7};u2;kD#sK?q&{*{ zR8bzU$grGgE^XN=r!k9!QMPg;Ojj}to!IuT@voj=9N3{K5_La~ik#bc=bl+roR8@t z_SAHu^80Ro-pXH6oT44=S2;=6V_R>$&4)XSu)?gIIU9tAz*r$ zqF7?p_RdI($UtH|uGeU|=pxc`9l^Uj;>lv*$?1hP!{l1aBErWPAx~iywf7;U`SARagoCj*V!%bLi^~NJg2qp zTmT1MWUfd;C0pAg7VFN=P9KquFRKxUv z1U)!BtbH&_*dH$q+tUmUEtBQs{kD_g-c?uQXMgi+KlWszzLW|srrTM1!obZ?5{f+MZs84<;3xr(eO9;UAo&= z()n(603jMT|FJ8qlIRa3GGiMu%7T z9W$Lrr#c|z>5J;=PqR?5cC&H!TC^Sz&s>UP^7xHrr? z5Wot&ctb}uP+V2xqU+UMusHuakDY{`xrf%=n&eh}$Z9l^w(}Ja3?BN5q?xYmuv7ta z{VVW-K{wRdpzDUR=Q#~3Ik}Xd75`!g8Wqbu*wJ|n8ePW{(`_#cjCRkr*&xQ{WVoVt z5Mc0E=+gZNxX-vcQMpZgPR7{r4CtFMuhR@OxuD`)L-%y~tzn7NiX)0TtwYM6;Q9|W zdlZ#|PvW^UpNm-*#Bg*s8vm@y>f?@*&(R+o{8p@z_t)OQ`e`E|MK-1u_2BZoSdEA!oPW-yl3G$Tw1P0yM{yXC#Xg3TNr>u48FHGz)wLPyESKcZ_JB<#DsAvWyB#_a1PB7x51G9-_s#Z(>AehGI7d#>p6Q^gZCBM`%;nac0m=+wK|8Yh7S6Ld*2!Z0?-Euzu#)C zD&gVfQ(y_)4Pf;D#~{&Eh~+SEuib9wMl$^Y-xw`3#Y5U0l_`prr=;h!)MmO=)%?!4 zWF$YGxkSz@0ic_S^*41Ntonf59R%J(#)&SUzKIC>$7RuO)=a;E4S90o)?6yj<-Dzs zznuYR9R0{TcSLn)*`~&ushT^%fuCS*0Z5(rW$Km+e$K*U<>rKD<KW}BqU67&==DEOZaW2+5Omrq|zkI6JvK1LpQ`7#!99aY{`AWrvRm<2|bxupoL(9pk-TWm*eDs?~ zM@P}UMj8{?;DG?n#9BMP0_HN=w1vEXS)N9YUpd!`M7%E+l<+Y8GeEK`t0MF|$LwTy zT#!4WE3Gu^TD-J+=)60joxr!J=DE4fRwueg80Vyw{aZUnL^u6JXBrzjY!GL zoPU7Rx<=7RW8S}2qZ+)#q*3xkr{N@;#>>j&zy&Y$X}&UJIKqh#5(AXk)S+jKyPr44 ziX$^HW^T+LrC=}2uD15wT~{l;a6|bd?M&iSgwbf#oblbbLwVX`R}DodRlkp3?yCD6 zMd?D4!-=1db_p<>R7fCWvb{zZI{nbPSo5MLP>7u-ukE8eeYeJK+v3-vqHLzWsewLt zW3X3!aQ#q~2N^XKv49R?nSP%TqF zdlvTd=Np(XlcU3j@vZ%j?RccbmTq+mGmU?_oJa5Uk4%vJy%xD#F}NvAN?|Zq_RWIk zwRBX8i}$AO-m=$U&xwQ%gEQkP7qSUK>ihwNOsk2v67OcXT;mHCdnjhSrm~Tnt~fs^ z_2T)smJ@2_B-afCHDW%l{FQ!+M#B!l_3Xmjw@Z~e9A|ZR28ba2nh0C;d`V^BP>qd3 z!i5dF6pF>t29{xF=~`_ON|kYInu-NTW82yS$;Kapl9Q9b$q8E^PB5-RC&oK1yhj{Y zC27)I?c(Cp&wgt%Bj?q<`PdX$I+&g@`DbwZAvN_O%)gnA6p{g+P(giC>{AsO*gb|; z{X^(s+MUkTrem=I?@$>V&hWDtQGZpdBq7}MqoWGs=pt3k%unAn zJ&=s8MJZ2v6gPa)bU`lz!?KG82P8JEVAw`<_ZDZNb|={@3My)bPxXA2r4CcE`@D{? zHQm!Xdib1w9B~(Fp(R_*w-n#xUFT$H3e;sM>dWyGSz}4`*bzY4qTu^*-XWd5vgtHX zV_^L0aP{^JQ$2wMw?nHzms*e2maHIAf4l@$Mz2+$PED{}MmcCO#;M;XwjT)9QC9yr z+)_HtDPhTc_8a$kU4OiP5qng4csYd(#Y|}*`pA94`NdRI#XH0hLO6z$PHx;txV(9r zisTDyIl}hB;>!c^)TIpm7eQRWL`uF!b0to-5B<2*uKxYD$ z=jWC+09E-wRC99+kBS-|)Ei8bWgr$XCHW(IHzT+CC!W)B+k_wrgz@FH(kbgzC$!>% zi7VJrq9SawDPP^sulOufFZqrg%s$s78x31L4k7OdgBean7X5<){$D0j zbgX~U25J&Uiu(eC*CV zW7(Zi{7RpRtqvzBlkt^Wbh?ptP5NaOQ8?YD=q>Q}+Z`UvQf=H*$z=#Sx#_#JxWQ#Q zAW%Hb{a*#g(3YbEWQYqgzpZz?567=c&29!7J(rQwW?_g7NKfSY!|-=7JnHIfNi?d* zGX|1ilqxqDJCB(w%%lra@r?8<9}}i(FKvH}bSRNFCac4zxsG%Pf>xZfjYSFSb}%(Y z3W_iH;T1L~GcNU0G%O8uh&}=F@2l;kQn*{i z^{UxZW0!XNBnUO}KWg7=?HOSmE&db~*ZS*DKbVCJNhw7#k3AU4@IcK)#~UUJSglX*eVISQI8jl_-e8PHrh&>~#q<4c7u|t&^>i*-1l+yB?AhGV4v*c)_-K=~Z zcNB6o$fyl=%~{9C3pI-4RVXN44h(Sj8nLabTy=HqlSJj8?Jl(SxbDemgiT7Pyin0> zl}TcmTN3p%Fm0{D6!PbFR95p;_QxnpPJRy%%KoO)OtHbaW4so7nWSW@%XvuIn>W;% zh7UGm)OFwZXTJTl{$`@VcS?inYlS77DPKj3e9r1v8m;%ODdg!4^q!s6A_Et?Fw&;*wBvYV!1*fq1=#a-i=co-xw#qz`_TtSJLegBdhz1ak8j zI{QXNU1CDMM{_^-aF-b?Or893Ri@~E-Ft^muj0UKVDxDL0ft++(<~wW@9Z#~B|}$I z(gX`bn!XG#Pif9mKfCP0{8n1ZFUkJd3Ju4m8!miG&sWTrPvmY?@$Mdu1n2d#^v%Gq zdMBIWv(sQ-!b{b-k$j`G>=cx`ooQP8suWt38D>vE?3EsrS??jl`~#w%{v@wfsAy23 zCMt)jSKrupWYr+}?@0JYkUh#7B&g(-cXh|YeDgKroKnO#SAV8gW9%GZ!$v0@t#`mf z>F@CZ9~SGIvz>0%2HSm`*<_^A?Aw6DZ3|z`z3OpxzX3-sO)*#X`vo$(5RI+e+AG1< zEmCGXt5z`?&g5VBLij>nWE^PP-l2m>Le}j+J(W$zg)@|TKeX{V1~!GDfXgMvm8!DS z%XMGjq~CLA40`7MYxk1P2YI=FPW7XQ2zxz{M*JDwgZOXo2b8 zW=Q9eVh3QJikx!HKXJc9(VOr=z2I@Gnq6~T2i`#b&9A)+pG}5IX$jRd#Wmew*Kf#3 zK;B_>l$Bv)V@={$^6Z)k0b$4CRL$;W`e&rtz(^XK>pzx03oZOOslXW`P)4_v)=K0VXfg&OqgY{!4 zE2)&GYr=6$B2h03x`YAP zVIJirvl3@T#d?l{qGh$#-Rm?mq=5}9KbL=*f4PLF@w_wcDkHV7@Dt*PT<93VPqL%M zx5F0)WJaYii1S@OUd@?>I_)Byk$-8@S6?5WCjeqVuL|`Ac&h+8*ZBNs6R9y&q+IyI z=^!-A`UT~Oxvw{TgmFmk3ERA7_iUnq>-Z<8y{&Z6E!3NS*k9eA1h$|Zg@;FqX%Bn8 z!`kRbF3O`P#w8Jl$*aEt&N!bxe+K23o2;xwk3;@Rn#^yI*Iqt8plN%d^>NMY*BN`c zpUkptY|My|e_;RA`U%;6tHh2OK9_T}QF1yH=YWEIiGZ)grl z*aIy^w#i5S0&kv<@KAkmX^$sqQ?HH+zDUo(Ja<+NeyxfEBHgq2GBEd z^RZ&rdk6N6#woQAX9;q)L2(RBpD<~iz+J<0H@%)$3}nGLx)R*Ej4TC{QSJ@ zW`d^X&e35H?bi1N4q3a8{RDiGSw%xb8^apLI&pfwj$2W&CKZN=qOoP zLoY7e_xATYdwa_*ySv4Wk3TsqE-lIFv2(6&r`igqIkX7pwY3f1H&$V0DO8W=P-j=) z9N6p-WVf<{3s8=adwzD&r(Qi6e3Nq(G|L+Z6jhY;b8}L1Q?HkHzRoC)Ut41cGBi{q z>Z0R{&|_jutCRE_(EVYOJ)y1lM3;S)o|Uo1gf1<&q@-yShS^WfPUp5)L=|-@8!YGV zU}Cm{(KLw7!L%#b+P962sIb86`*$6^enfotQz=)?|9^HZk?XWI4sj2mp1k*yZ zK8){^fY2L7Ot?9W*K0Tq+k;KVNPOi#1J=VzSl0xXzAPVaiD@rIPtqPW3aY3;`{pZ( zhCx;}f5zYCF;lqn3@OTacd)P?b90~MTLz0fIz2s&h>DU|R}YZRdX@DjWn_KbgJtON zFGJ&ZFH}Y{C3Qr`2A+`{&%8X8no;uzId(rdNgg#Q)_UY!A&rdpuPfN7}8M8ME}7ZA;w zhR1j?3_Yl*BIgmXE0Zou2QX1b@6=rw0sBXF-1#xZdL0@gP@vd4Ia%+F!ZaiVjY0Wv z?f)z%%WY(OyYQd%_Hm!*dMd^7X!>Jc`OY1&Khc0oE8Q1Ktg2<5zPh#=5cni+Z8~lG z*EW{EM&-@f>462+XX}RcZNfnfbEF)EiEZw;hT|>k%~%6dh8^iXxgNkEkU<_=*mQZk&%%B&wt>` z53rzj(+dZwyY2IjP*y{a1jmYPr3D(aN1muzKZ}vgQM_xUn5XD)=RBN;mv??~@Owxt zNTD5x8n>NS*QP-QcN>E@cEj;ihWs25Skw#J+uGVVLtruyggH#uNj5e&2h7TWQZT=@ z6|znr0-i6(q6BCDxA{c%17^JNH)C~QAvg4Oss6V7gSJj()8>_o_QkB-vJ{D^sT>vL zjBBxU_>-4AM3CB=n7gfbKg!7|T;8u-)-P9u!UJ!jh8dNdq^)N+ZH-L-XO&o0RZX$| zT%4j3k)_yP73ZeQyCaRNpKc0NB)xrR4Pi>vgPPBt|`aAvOYWGH0<-ne{I_Fij z5ouh0w%}Z!OL*sN7nkZy7bT_pk+c!-%hd}GA5+%U)C@BguWxNxO%y3IAQzLHd)7UG z;hIX7@IOzw|E#Ex=3%@hJ9o7SinH-qgvjCF|H&Szbe}@vk%|htt=txx*7Z(?Ne0*6rjZM1A`T3ZzHB3$E&(cEg-a=ja zv?mhTTmJ>(PGOH=)Du37du{Kir;TFf#M#kvCY1@9pjVETmw~&h^H|?Wo$P@h zMzFb9t((=IlC@X`C+q8W4+_pV<~F_aYCC8`5sShGtTzBLs0q`De1MLb>4l2?Yq6IC zHK{@XsdkQ*`9iT2LfV&dv|8gZEg;a^&Y7lW5ybpq8dMY1%S_~o*n51b|5@1m=M}t! z$qb;NAel_y@)wOX^oFJZwE6tIqXtagg8Tu}tQZDlzdKBDV!bugD_4g|g@aG<@`dUR zxlO)-&Ayj6K8fPskc3ovy#SjFG5QE`C{+5@`DQFQ!;`|LwmvYu!yfk77_Us4xl)z# z+|pwzFX!gr`%_`b7smVeH<(32Pw8_=NCTy<_<3P*x;2iJ_dw{o6vjv`W$ODF{> zDX1Xs0Cz87VO7;yCovH!VO?F~gJv9Xx4DC#6q9ycG_*k=y=(zj#GSo8vo#!F6ZxT` zA!JW?#`8QFp;7uti_b})Gj10f{c(vfW6h*1?W@=hyn7?plinx02EGj_Rmf3B{X#MI3A+4;*m5q%cZ|@di_rqWnIXOKEmKe#$C?KBEp&-NG z1|ufOp?g^OH0zlLy2!3fOeKGb%$k~5;DW^T3n1cwA|tQIj!S?iv7TNy$?nX}jLSQ} zv@$cOr+uh+bmY^~evkZtXwkLf>#~3iU-9RpZ;v-MXn{7K6M6sheax$C*D$O0r9WX3 z3$64eJn#w%ykGY}9~rhp>ryhz@xOih7R8}76C@{ca&uElO7;XjSeTh1oOvl!Ll22u_Oech<~@L zl@&`-;}vfpq1TI;lpszqE$5w_9BR!O)R`Z%nOHI?(50ClFQYA#a!cMiR$AVA%UPt> z%gPwF-^aI&bDyl&hc>w@j%Eg5TB49*hq@0FEpmtG* zesS`jzu(mhRwAM+D=S6Q20#`PIbIKM5uboSzgSgzqQl+(YyHQM*O&Vex*@BthV~JN z$5Ml}BBFmq+`s#!l+<0;hLeY-D?KmQx0=X6tTqjS62swn^LuIOBi;s%f!zXPXc@oV zlGa<|(%EVCxl?yCFHv_m95-p#&!4r)`d??%Kd=?H{cPCK@fEAsDVR&j$;fI1dwwUz$&n^_c`Ibc*dWk3PG(=^^cL4BDP%W^2R~*+XXV&o2{pq`=nI z<+)u4nN#wR+4|ZKm6(1$N2=IykK?J1xr^)57oQk$dj6LS;7J4B5h=2esuz>>?#}jS zlDIVv#>;qVP@(Bvob28m|L^xGq{~k7V35wQ<{9(j@H>#JS~XreLL*ZYL=9xrRy6$? zm7oa$iV%FPUMG>%okj8qu2Vt?1b=Isbv=?6_`lKbwyoLy`}bdfT11BY=P`@NEG!|Q zwe}A5*#5x1`#40_KhPNdP8597KGXR(t!)usVs+Qnmoqb=$Hz9-j&cI0zC*$hd1+ryzaV!05CLt67-}kJ`YZ}o^kDR z{MU^E%ocNVrZEYKR;6|;(hwAXK??y?R#ccGyU1l^uptJm{z^dwN*CzbWaPBqeoNUz zTnOuJ&ACp%{H`1~HWiru@InU>$IzR^9jEwA~T85hfY zgDQ3sk4?vTKX%Cd>PXY`Y!TIpm^=ExcAek%Xd@}ISZ=haadk(llen42)38HEFB-b% zVJZUZU2~}CG)Vdmv{b9vVkF&9=KSjRw`w;gi&1GI4UH@R!AOZ?%!+^`?$4+UMI{=# zgj(Y+hBhdjYz&!gkvw@1@;M;8J~}w3^;PmQ9>`z;?_>ZX7Cf5;1$fm$;mYCQzp_;S zE$NZ5S3CVN#F#B`=1akQoHQ~j=ygQ}8O)^ph{ww0aX6RJ*AkZ&;)%)2pG3$P(Rx$Y zI4c=}+VYn}m$K3Glpg-Q(;dY`{jl(+mi3lI^CACds{vd--_)E}_i4e&`Jv1HE#%cB z$moRxK#^&q>olKzeKo5iI-n05f|g$YdBK{uJQ0^p?ZFRZhCeXX9B%eAE+kPkyuxLO zyr_NL>YEOr_(D?N$>n-Kv~!VAz%0ni(NIz*=e(*-g~Gw0T>TWpEY*tjZ^}Boy#As< z8I(^&+})o8ZLi{nEAV3ruGW`+nmn=LW(*%4wj>rbNVKeNNRRFreB0paBmmTg2j$+V z-sB$h@$H4sqyd0!71}*3@pP5yOmEX4FHqoiRjDi|R%pq-9^?sTgj~BPo}&=CG+VCD z>^T~o#YU&kJTKQ21l;VfwzLJx{tiYiZ{nE@G(4Iswxx^c%EUU2MfN4n3dulHsCBC# z?#)!m=e1n%hx6(--Sw}KzwX8-4$p*}E-OfB$lC)xn72@|1rBg#JkFU%4jUrHw%z@8 zWZwYYq*bYVsylA_7&G;l-x~?E3&bDd&a`nFG<~denf-tk%Uj1NE-#PkcC^uC!8tOa z4Hjm|JgKMWE%3*XEkxWY5Lku83&gsCg=re_UB+Bz4-1-lyLZHZjxjtjl51eB4yNx_ z*D80`za`ng5Yh^}xxgbsLfE{q5&W4tP{waZ7pg=XxXP`-| ze)3yUl4A&y^pr@@{XhV5wfi7Y<YJ?-GmD7ILvKcT@V{ zeB*$u4t5mIy^)W#6vW;``g6J>yl##bG;AC({Ct(W6I?p73Q9NMXN9tUn7enwM+Aq6 zKw4Mz1~920`86?v5$|g#Do)s`>SgJd4pYS3 z`b@nOwDX%@dRv$gP%1;p^BQjySf2cD)BdHkXm(LoKGwQ63VzhB97y2WTZUgkRg!I) z|Cs%}wB%$jkd<0(`Zfp(T0Dunu!n-y_T9VrHbNa_{tU@lH>+I3de7%~D2Q3v61Lx# zl_Q9QPBf<2-RCdozS^%(B*o@3TwNO6M6ORC$z33(iKaQE)zqN7mB$W?X<3$bJ@`|p zty$3b{K1r2`QA$C%)RM+9=z>ZGK1<5g_pH2%~FeQ8h53r(z7SKexGNb>VSAv{~-y z`LT|(?SZ$X7lI8KCOin%FE~P)p8$?-HdweF8e9rQHV&YOe3?W&U&n12L;DH4r10)K z{ZGE2A^mGVS|-q(tSNvfWqW+k4uuPR1DM{3FK>JjhT7tT(~DW*K!tzoZrB{E zdU{lq)2@uuO;mN?R~4YLMFzl;xRMUe!*uxFba%RNd_iJiM+OUAB+NmK$IaQ zMirr@ayg0sZvg)ZiUKy6Rc*L2keCGB-np$MkM=#44B?w7RW8o*a#phtI|kPKJ_LCk zI!o=Zo+u-`MB;&gD9$Fo6^9E{r4{$1f?|(wU!)wdZO2I)GBgefE;`a)yE3YRmoT z7z=`6E(2p#mIoU{@KVJt`a8R59xH12!MeRUm25JyYgMO-=fo3@gkDS<43MC-a=gq@ zya(9$4*hV*lc7PI#a}P6C`M(P=19fS_vx9L(#x{n2TgUZ1_u6$#GeTJixMK;XEHfy z^KM{vasFdz`+Y(cW~iUzwKPMlMo29eKFa4bcM5y&`NaMu;o_Pwi0rxwqS5Q>wy)?Y zUmkaDTsP0n%g!mx%!H!ZfG1Mqk%)Iqh$k0iuI2kXN-lxXx>nj zi_601dT87?t`BTiqd1S(1f)9L8>8uvrC%TZL$Mvq- z^Fq=-uznaV`M9gQJEyQPGd1-il(o5ed6t%kuKX|%1?b>)Sv4goLqlQj1yXabhrlP( z&Jr|~WQfdt>G38~{B!$I`Aat_2S`J&T09?e6%arMC~g?4ydL1~jS4gR6-Ok&w}7bx zSe`5$KGHMzAC3a)EfBe3#HO{g^9~Z~o0{s+G0MQ1ABPH|h5vZ+l|zB=w;6YxutgzF z5p{=+9-oor{c%WSLqd$8%8??I4~N7ItOG_Q{I|zS(E{5(D(7W@<`FeD^%MQp+n{JF z0?J_CPk|4koEHg6WhoHzVD@V0Mp61MtR_7(12v?6S(XOns@!3A{y)CohW(*P((Q8E z!g}X(5YKeG84aHu1q#(yhda1hwp6|@et#$Poa%Q;{#4fFhN1p-`>v7)SAauTRn2iN zDtDr6qv5RX*q#=imA0)%Q&keP zQtRSHb)1Lbr{MUvXcsL1O!+iJ3z=O3aLa&r0X&K2GE1o6SH%Nhqa`E3c(Hp+uJz3K zwB)Rk0j>xBLp54Z2i~xuD?`wdYDgi*yQev1q!ypuf``en((bq!6A~hU{{b`G;i_Sp zopLMZv$Hu{`-(b1ID|vD-Ju}xH-7^W4&bMVhzKafe*LwF_ntbkZu$Sv^%YQAwcWO0 zfue!}f>Me!(%lNu-3`*x(hU|O(%m54-Hk}6(%s$Nao79(|9{T8!j!*A#ZxZk~> z{XA>UIoF)M>t(AHgJEOwfLl^gKO-xZPLUg(hcyjQ z8izd^4n74%1?ckWpWTPO*Bz(6zYGR zLD-l^itO+Zr%(0pB3H58chf<;@`L%;XM`<$ySG5EPex1(^=VZGG`M(OkEO-Mf18v7 zx%0;72@S%^ANp=)sGCdP|4o|u`Vk<4A|Sw=F$ol?uwg2&2Bh4|T{kja0tU$~?aqp* zfu`2|6J|ZVVuj#@a;!+1slM6O(~>*&^DPkd0M+*#gt5>)eCOaCnu@c#yE4MMX$~qO zOG6VzD5TCN`9dG{);YEe2iBRQz_PyYzR~VHj^~ndus{HUu&RlPa;@u}T4UfT1H6uR zo0ZWwCj9_NDRSbLaS*=@FU|g2QHeliALtgVy@I`|7q=dR{M=#C689h#P`lN!^P&DS zae#v-zMLahtmd85j-;fi?R~2HkX1e=80MZuSX( zt0;ZLrk06t%%|YvrJhibm$Xw%-K-qcZI-gSSZ-0B|G_UC;ZZ0*GCP-5x+y<8u8p1g zP72bC_%&_=VA|H(OU}j?fuMi@x9seE$;X!v`@3=hik;&Rv@Mtx5gaXw>)(X3n+4Z_ z;(GEg66iwrrnl{2(%-7tq}=f|_|M9QFZ@p~uG_E?BLK`;-J_$y9+Sd%uh`zPMrCAW z6kH~Pe39W<2L*!d`J?yhAI>L7qBrOZ2d=z5{5d&k;$xzObn4%ccV@tf!5rehl*bKDlgFdVzr|RPx@wzTE4P;D5Xf zde1v+Yk?ptO_Pf204Pk_iF|sI>he8f_2}L9jS#oW8L$tEU1gckLUKR(@F<}t0fGJQ z-X#F4+#4C)4IAH}9N|?`JTFC&(w&K=kBivXzkjFcxC=(p_XsX+CqYx6lJAkkeAPppiuA zvH{V%t76PbkBzTB!4%i0`{-7nv`MSps-DsF@o5#z&OO#xpB;T0q@fCsdXqtq8LQ1q z1M>L4xz~3dK*6FDreqXg^xrLwA9(oC(fNF45$EGjKU)4Dk;XByA)1F)wr^0OI98ui zk0s*roI5$)=d>AT%FJbfqM>Sz*j7*w3uhsbnl_F78r7u;eSbTAGZYJ3MomLu`w11f zkr6B>RI~@AAW#GYqkmc9BGif>KcW?{?GFm&5AXMh(=l9kv)x6#yI5C_|wczE~+?s9|-Gz}WSs58+?Q<15*QW1};GhkJfW-Xm({44>={g>Okf5p9 zs@azUlurD^PS`Qqp$h+*ZF|N8kBgS0L(^58Z4BTt+eZ_A3GZu>CaR-@?7iX0AuFfk zYiy20)nR4s)JWbIA@C(PW96q?UeVvPb5I~0sgA)rn^d)Q(F-tO#$}HU6P{dp&m6z=+nU>TD(MX}1O`_2d6Og&Y6+JlN=(0JUKw5*0gdM^4o zRF1TmfP(|PkBHU)E9H@x_@1rF>d|@+zO?9PNU=c9qu=|*#(rx$gMBW4+p~K3FLrS4 znvzKP!f_a2@IZCFU7s~}*|+6X^0}=k%7CC9_5*%WQzlW+MKsp@hQQb5a=xpS=g0J9 z@{`9t+1cTdBe-hJmQvuI3Obr(cw}IWocR8;AOkH53{Wq4T)TWUDfSMM*G@W~{PIk* zPguhhP?qkol4R8wd-yDOdENA$px-CxaM`ArThEV}+uoiYcyUD@6&3aBe2a^$*8@E) zRORtp(J-{NBpMDkVK=JF!CVCK37nc^kLN%J*D2>01{Kp$i|Ry>*9-=QBp4|uXWdNImuIs8cnGvW4{ zVRW=4nUJ(g5tYH7r6<4rp=PdO6;{)$nmP-?J$?J>3s@A2#A0hc}e4`#E?}mm}R189i+~ zwJK{b2Pad?eort3q#{}bY={Q4+(Sd~-N>%B7OcaSlcBD&ITymUQE!mJw~Z#~sK0y% zN-Q8Hp*dc;X%h=nMBuU^bdISeQ>QACBIgG+~QAIa8Q*G)ZXv=PdU?Si<^`p4o95Xsq4>w z#FtNZe>z}Raw`u-pe!G3t&`HKEV?n1f4#Q4dQ_IDF2G;D<+r6SYk`n6j@i}D<~S%3 zNcRj%8?qd!tfpuFjgPM(aG=|Ec9>EO#Y0RiSh$^!muWh5=GO4d-*&%V5}z9*!@wo{ zbu~%pdU0kt5G~=Gz;N89ed~o(aGfb062O}-%(C&5GdzD<^XtFGq~pM-np6}89{^m^ z%e{txopp$bqk8)r?2O#CU9%IfwTJPmo&I$3Hjz>92yG;`3Fm4W9oM7;)7XMByc)nf*vj%N+^%sqhWkb7K z2$VXP!&XW6V~F$yhKC0F2k-z90|3K2AfS8@OB&{lXHz_9Xv3&EL?5<_lj3uPb{`Yf z8I2R-K6#VvABRit$~-*Tmp{et0tyJxy)=*0xlJd8mYP|O?T){*Z}qo;xk}-y)(a!@ zzQR_?3Mc1T9IVDq2Rt>$d(2NR>+=4(1(4>)u;>bzp7oeR6aSXkRLjyOIiS=O1%v|X zpC9`7lt_!F*~vvX>urgTDzcqld`+pUjzGs;u4!KH<^DC`wPx~`I*iJqV)NmahwTm6 z)%-54QIQ9_DULx)3;omP(u@NIiaqt?kwUs?wKb zc3c+c(*g>icq+vgC|ZQ)^iUv0Hf`BC+@rbP5O`A08TYZ^!(+>epuQyjsVLst(+%&S z=|knIO6!8@jVKOxEV$sjbvNp?Xp^g}OB^ly%jf;m*S>(TnK=ZONaSQ=))_6c2D4p? zN5q^ltBmaH*S&dx1fRKK_Yk=+#38WA=_cDj^_Qhh&YfX8zFin-`tZSeE^juOAx0wS z;z+zIz5vxyPnYLtY}(`SHgR<6%+R@4kw>pZ*~K9_Q>&l;F3~kq^|G3pp0#R{z|%5j zYiM9D#6@G^`~_2Pr|sI~lcjOX_K|XQbUI5lhdO_hc-L>?-f^hjKPpYuwtjRbz+M`u zWWF{y#XLArK<9+g9>Z4PvQ8GxbA$_a2T3-|v=a`~wf6})4}NG%?8Z4v=^Sm0N;sNd zaSY>PMWFZ%`QbeAXo>aKtK9EFHXGTYgY(xEmZGSE0V!pB`+@sRAKBPfjB7vmhk)W3 zEivvFlnjN&8th`$yRoK=jnJR?+yYYoBl&17k<#OKgpg*}>Pcz#QuiW1p4lQ?O`%&h<%m9wH^@yYk zloOuZ9wrUkw<%gLJ$*Oi^R=0IzJ+UR_BRI;s*kxvbz~{rpC@(D;oscS**F+B!~AQp z;y@lS>5hq@h`c8)5wlTGx*g-=FSq9kBMe8y=5K!!EPyr?rg5PcOnJ`c6*VvP82@QE zHIcjL*$RI%+q4az-udxdfPuJi+<@nA)hHMm8Sgp*4ykafqI^)BYeu2tkP~Twd(GVv zpV}qmZ`JM^I<X8CW>&W5sy#k`D@nafmIGQpgWv%HJ_@9g7^ikzYgDin0g_^rKm;4 z#ZJz9`gNB}cmSqU=JlHUI?l30m#;rBZf-Vc*2+y2-u>aW4cy_zHNG<)v(aJ4%m(UH+dZl@iW`5`J ze}Y|(ysYsslo}*pCwc*iE|yxw&r;1=!n?13X2-0lwr;PlrZ2_e~ z7zRPG3Ism%rArf8R4zV&8|7JDeIfCqGXU{e8(_??+3olN|NLtEiL&-`6>oW>Tzf!t z1taLp{w}8R+E!+wf1~VI-5pG?*;3z-4n*fCRbf0%)+XM;c6V#VQSG))HK$X8Wn=g$f#}M zJX;mhL@4AQX6-Znw161Gjz<3cVSAAsQYTiTcsA)X)Frqg!vPUnuSTM+=}1p5_x0A{6rDpnT#_ zM%XQg+uAZC0V)gWo;Yfpi%xWEIW!On0zRw&+S6?WAoDK{xc zv}Pe+k43rr`<_N>aH-FeKPifMHRC12zGFRf>@IW*oW~YZKi6Xf&`2ZSXlf{j#rQ;} zVwclulg#y)-;s>eph&zQ7#9C9Bc!+8`)({x4Ur8swfp&QHF05dOGIv??=<-NSe48)+(7CS&j$08Y`SmZ)_bt!%~gVq>XsVM*qi`yWWWd zw^GBu+URC`;Z(KLm-BLd$K37L5?%Lt36CXOW-O4$yik-5_tJi>Z)2NJgJ zM`V;uGwKvh;IwI+@x&fB@5#(fm{Z@EyTGvC9k6=1Irgxjp#A#ySe`Zch;>nM)JQs7 z(DC+-nU%StM$!(;TM6@Cy}WlC29xb8Ny2=_m+7Y61ts)vb&uO+?7Thg$Co##7NTY( z^yGg7T~1=q9PGAWYWO0e6Z|$F0$dD3rkDu3T~_lSQBkUuhu6f$0~wE6$jCG}Y~*00 zx@U9T!XigVI=jA}y)JXh+d}JJn#o}_M5iMI!6YQ4M#T{H$n0Xv^up!n?- zmY!5BVJEqTVxVX6`CJV9KgdRYKVC}i!kSBGRh@ipucNp9vDQX0c;E2$+3|)z#3xJa zFtIm8lnp=XygBz#S+2%%@ zV$QlPCg z*dTHq;h{r@ZlT6Jj+U8jp*}p~Cr{SciY(JS8Y+{$Z1H@bhu%z;`!y8S$x&g0w{t=A zG6DiQi?i|KN?vu5a`S!jU=Klr$nDI$(e&Dr`06!9@?kvxmc@D4!GMCM*Z$jxFH$DK z3oJbA`zG6Lw)jCZf2qb<)TVaz4Gb6{pB0L_ZxAE|dVhr3Cdh2Thpr1^df6Se@WD7- z19F=m;ISeSNYu(LXo43~=@}Rjzj&ZXUF=8X2|UtzM}BpR22fr!3-$TlqsHQpdRqIq z8_ALTXwFwVqpd0FWK6bm%&#vsNe|AjOfH`uTHg%Zkp!CKrx5A)*dMz-Dz-6*L@_ZJ6n3o-x5w7 z&cm(!u8qAPEq<2q-&XPaY zCF-lPaiEQ3&sr}aY47OJoo|u6A4^{;qw{RGc}{lP=S;FzwcLUL{OSJKv4@FSC5Oue zKbEBmQyCu>9}|{yeRbzsOQb3mLHn&Wx-Sah??&p*`i^Vsoa*v)pLugeXgO?EioaX+1 zOt)R${ef@j9x=!_Q63WzehXROmq!zHDx_n6i@>-jRf^0loIl>1rpg7zqq-aTaRm<6OF}zNN?qr-P|~w} z6D}*AtB0!!Aji*4s|*)D+lZ3Yg8mGzeU5SfXRr2tjoq?Ejv9STeYr(Tu{WEd>A*ry zDRs`Z;fsz~d@`DoXA~6@?ei5b_n*RW_wnv=xMUNz*Nx$#c}Q(QnD!3 zf21|jtc=z6IC)~~f?^#e_Hg4Q?j~0m!_K5A;-|w7R}zXfM~7KrF%?F z#r(4XJfqKw?wg2-7|GJ77uj8@bLRi9#m|fdyR*>w^__cgj&cpMr-0{FomtG?Ox6t zUM+e&Hz0WoD;8PkVjI)Bp63VL@x9X~hREoc`Tnw-?)i3L%CB5d@OUuJvxA(I+t)@I z-Fk1@P2(=7_rxENLf%gq{_`l7&wZg%G?a+P86a1EV9Jx$Wxn298ZM+BSEd1qOnH4Z zvNz;(+i&6Q)F%2o!581x2-7mny)@ML%lU`vp$8W?s&>R$^UPF=0yEB!Pc9oJL&a{_ zU+xf8yQ_+e1v^vag=FKwUhiacfufK-`>-Ll@OOn1C2sywUCHWL2n}_(_41h_(lh2` zgSiVqgDkXU2kJ%6zQ9z>~-$NA->4 z3XNGdd!IuSd({K?m{cadg%duHps4t7P^PB29ugex5AAn3==VMxa%Bmqcz?J;0{N?B z_M7eBR}KhbDI=e{B=$9 zsOBG@MWu`68_p%>Vetf|Vt#~?bbFBMk}R^7_~K{F`G`tL&5lk{_i~$z;Bp(SBgvRRz!#>UkxEbY3k7e80*&2}Wq-PP%GRR&Q z9-dW*j6``v(%fpYCG6#;v%GRYL)ajllpHEFMgPrlNkivnuyT+t_BM&j@-*&b7;&$z zuVWGr3PCL%Aw^)+{pPF2aD5HPkyo2UFs1bt=DNa zB&;hTzgu4UDwp`2YJ*T#=eWXp35#!w=dGDOiRkULixwVVVkQBe(qs4`t`|p0lEezy z+WvBx&lhDM^Yz3D+P-Cfd41fD89;L=`#9k7T&3e0JBow3a99jlhHz}Y*2&Y>>r)@o z<JBNR!=l4QF z*a_qICEkE`ng8`Z&T;?|<-Vy}xSLk}hwx%A^!HmvhAB2Pz0=-4KlFb&Z>Hs#^w)>3 zXOx&Ktl3d4j`a;kh&xY;`3PsY-oJlerOu2JW?dE368?b7frEF)e&315?Vp|~1(jAH-|>$TS-$#$T5FH3hly!2 zkm(hbY7n&fP4enH?agW8jUmYili@@$MVybsZl$YzH@8_gE8PwmM^#k^a@6zND8@4( z#rX(DH6ohuqG0*C=&sd7rF+;$js*9bOW2vF!KnZ1?oDL9>1B&HmaO4C^^~K&ZgHH9 z#lea{W_KwIZydP0V8x-_N7TxZsw#4&&fUbtGs+ikp(iVC#7sxF&0Sp*Ou-ire7*>U z&&FhR1WbDv3&nsSYJPjW_jG?5jm9D5`V?M+N_=j|KtDV-nA_cxm>V)Io9OSEI?p%a zF=b?3`?Pda(B98tdgQQnOcr-$T>fgUIF>^t@ShhUTW-)ZUO@Pd%?c_s309jL7|K1d zOJk?ck1op|rOJKsj^coFc7AL0W3=7+?A+ET9~YV&vrSuqx}8}0#ihrXPk()JakyLU z7E;ZY_sIG3-lN2F&}v0StIOnPvT07^|4_EkUSl@-@hLGe@3%V@q?*G~I%J32$Rtx6 z&dEXe`0*Y;c}IlVc;}Yix(b8k6C_xuIZr)f=nlrPp=mar_Mq<>G(}pIEl2XZRAV~z zAypZLL>r&pkye)+7xqNtC(Ld6$UA?JI>qb_&Y{oAt zE}~~<)E%4Kh9dBz7kZ=W&ei*^sfw1o2c|0%mKd~7w=2as%UpNSlUF%xZ(Z@6?X*S{ zaa1|rWKC#TXxBD%E%NDXFLZU>F0Qnv{SKu=4*^dTbzBwVy=X~YTWy7Ia__2!uF&d( z{%A}Rm zxHo2+|2J3NL8&LEIZ4|AJLb>hTjm+oHma=a0{9!75QX?7@3&JX*fA%Hh`^Il8Rrmj zw#<?1H3}SlyVc73tK#6LDHI=>1Q-QgzN!b$lomKL3!lYAn(!uL zL)nTG{a5h`$LJ_79vkfZKu?y;j#Lv0a z)pjsi!{v7T;MsJi&!|&0%B>u_z+0edMk1n7eG{T&&V1R0JCyKeU75bTK(~2XIH+@x zGm7Q3`v4u4_tbIeS9JbTq46o(#mVrCtFf9-G}HrpBs6Dse_{|iy$TIcFt#5^P=!t#3&q{`LSN^cVheZ_vZ7=)!=@h7CNF1C4ba`%?H2E-r51 z-B>>7?~PHb{p>M#9HiH-36+<8@z6<8t`-?g>SZFT0&q;M>Z{FJxbj z9PeaIV|*-6mstMOV@`o}@8Q{|DqGJXYV zQ?bb)m6@5@kI5rrkvJN1gCkA2&BjM|OFQn8Nf*#^L7Sf>m-&7&6VJM`WYhth!IW`J z2kUNOz&ciQEBAowRfmZ9AW0o~krr;gIrHuPfhg5~3P8CtU@;OocAZH=03Gs|>cqDb z4@kKWSOF0FaM`G;OZ*bBlRFI!e=uCqvqsnzWO0bBGCr5q-YiqZFDxr3SR%OkzOP%&B3^M0{mw8MRyCE1hc1o_aX@BS;`y!He-`3 zvq8s_4mE#;<3LMlnwKF@9ge1w64{-lMQxPl{{uvXx}@n7!FZd9I7m%#T*vCww%m9# zJ&^C;_j`-&GQgMfM1rLA!TpTk0Yr~B*IP zRqa`k&2Q-xGCtk@qGmI-GF(h1o2vV`{LokXlsKGj@u|_^@2n1XpNDE*^5>MY2xoIqx5=-|Aut!nWq%oln^Uyn*b3XZP%UOVbj2uudWUB4YW9RWn_4w;`k4HF}EPsu^bY!5hbSvQQG z%wpO-5)_DKX;H%hYeSfhqz#+W98GXS2TroADYIb zE(N|9tJ^_~KhS?WyK-(}PECK3Gw}jT`SLu%vYr@vargiVj!75BSpnMIcCiB0WjE=~ z_O9=d;@Bk?HSZH=$mQ;Y&O$sD?^A|IJe=N}GfLSHA4H$)ni%$!CAd@A6WvKAsobyK zpOwgBSJu1spRRP7fA;h0cr$>7ugIw1c?h3fajr->jbsy13FCY^&Mew&mTB78S5S1%{}$}LcR50enku`vRAjM>bFtfx zj_^Nz^X1MeXG%mcn0r$O1XsXS!j8Yf8H?jznF`@+^*`6?Nh$G$>@0yzyTn-v`glGm9QH zjd)GeJH-tw==aG5i;7Fp+OPS1N_?>tt`yx=8I{WEZDC^QUl{e&x)NXB1`Tcs0Pzaf z(~URW+&IV#4ci{vXJBRd^`{M2;H93gq+}o-uCA`(k;G6KmCr`btD<7Yb_r?Wpb!B7 zl*Lj%L$PCR6P7|s9+IsP93TFJnB1%Dz!vdUJsl*}FTX&Q-0jpY{cU-=_fmQeWuQ|i za`}>7$56*R)sIFh&jQf5WYKTx2pbI>zNAg=v0ZT$vn-!t)KgXL%dyZ1^b6KSGYf*Ld&E93-BhFJNZeI zY!M^V$?~!GDx0%w;U-!h7oqDO?j%aR=FF8xili3sKYc zdPkIe^ms&XY>HdJFw5~5X?&Wzc1(^+CAxmz{P+j_K_SVi{&UuU?slURn-8H6rd_Ak z`v3RFqYjUi-Ejt~*7?xzY=&1twM1fo@KHPkC9l6h!bJe2YZmJKz5_$vN$Y`HYQX*f zZf}pm{Ny5-bV2Gcmrz?XHmfKh5uf)ug%t$AXc@yD%9#oaOG{6v6tn{q6JHn_8mg$N z=^7X`ulA>lii%R&j~4}UV#=>=)E@Di71%9Wzvc<9>BqCQzFJAFS=JIJ3t6=tTIkPu z#e_m_R3?V;H60$NzmH2Uzo>Vgep))VNGx9m-eT+p``>KQE3!v%xI#)occ6+3z-(`C zUwc~=Zb=2Pyn;f%+7Axsiwh`<%-tI`e_T}D>rh-WagTdNLCqvk9P5YWe0CNY9ffl) z@bOb31ME9cKj}<0WVMO7F^P*y>P}4btyR)RpE6R2A8rGF`6}1E)1az?^^(ur)0T3x zG;<^`n`)8nCgt^z&}4mjwD47->ud9fHVWU}hy-`BU%8C7^kbdmVXhiq8+^*Oh#os6k=g)Sp%)tCY+HJ>RwKP9CK(PC$wT32c?r4B=# z^HL8JQl1%@89T%m@ZK5fe3FpfPF0;(r%*rKc2j39T5L^)z3-iwu2{B|=2O0No7~`y zu_L-v{xblxtS>J(Bx9t79wLBZ`Fb^~OdgT^k%!WGa$0KK{Owr^HiHxK3^{yt1X|RG zv6aKeeG^w(^OVf*w>lT$DUgsF6Amv4^CR`9O|e%GBA}9(aGIsA*-Mqt5dnWFS*8wxHV=^@y!GPl=wy6sjX&z4vP!=57J9T=Xf3V6IOmJw~ zInUbWD8074Q+CieHWVM(hKlqm$DCPo4|$%fXsOc)zLg;_h7a~$sEw%hUHDaxjo-a* zJ8Rb78AqQ^Y-=C#_21juP1QkLHQfOSgmqZfYWV%}i{GTBmMiPzt7E}uRbf~GCk{)e za>+suK7amBt%W=SxVu;thUC?uKex#1)qS)>wbjz;nc2q=e z2anRy(yAUxBDDk%^_EY&w*q1m#@;XCSeUEMOcbD2x)PGbdG9}3fYIV*rp@C^kbLh6 z^|nE~AJ49y7p^RjYq))Syzv`o-3rIGilypkVK=%7lR;!#F4H|@#qg*vh>C^35>OkT zuSGi=)bNh4ZXj@bPBjc4<$r9?&bZAw)w(u1B_cu^ipGoj5GLqa$4OW*x$grzhc6 z0SNKfs5G7`w>dGQ%pp?HcXqB}*wg$b5lh7p&qx`lg2!m}%5}W?O=U4V6iiz*m{tvEMN0em>=;640{EUy&>TKzi+t}rmU&OzvVz|+S4LDiW8ADLlFYH;)gDr`y+=9^Ga3r{n! z^A|wW%`J5oL!UixAGQ2Od8BWkKQp5dhQPL?)p9$!NjZsqceu(63-dp#=Z+afyU7wl ziGf<}<}mdiwa_;3ll@--^0JtId{`sC#8 z2*P)KabqIind%9E$Qv?`5!2{@vmy(3%nS?-5utAQrbD_*dn}ylJ#QS#pfrl&EI{#F z8`L}A(gbOc>0(s>)4{^hw0DM^-~3pL7a!~DAw(~yXSr<;9z=4!=2@G9kB~U(aN61K zUSn&Q_=^V4+_vVBR-{AUZac3YtTX(Qt@Ya%bz(e$jekZe+BT{OKaoRSFoP)6VZ)2I zziouOM7J7zT`Ql(oiLg_IN0@H5W<*( z2wmitq5ggWSQ{2#y+x{M#^*Le)UMd!<0Bl{($s|yeQ5i5=fS~_*+kC7{0CdB{;ZD+ z9#G4Cu+RQftnRmmmgVc~E19u5xZ*t?6|FwA*k9DNT%W)sAm;%kMsu-ud5YT;VT*UK zbMFYw=eGUtNB2^}0(40*NZMCoEDv%K)J9A|z=~n43i2IV;T3Z<8k5lUB2l0R!9gQ> zOH!N2ax0OCqxBb@*nv^&v7Q@;+q+d{vQrfX>%?Df+j78`D(Y8D?ESX#pW8rbdbs_} zjt9-pF-QHK-{Q(n!M#;&i+9f}`JJtx@WjIv$r{m8%?d^PoF_tHt|#Bvw!B>H@do48 zo0EKCQ;MArsSu_@VJ5V;L>FawV1pq7@93U1-&~8Q4L*0gTQ--D zr5Uz7xCNz+MbM~2wdGr^>gkWXHtC z{8=|s70mKqDMIO?tmd$FC3j2*YXG(RDf4>_u&{)e_{&I!$W%PH=BwX(pP>Vp&(6d| z<+TdURWJLKqk7tF=o&8?MWg(v__f`C?jY9b6PM*40`LYCHv_XEgdvoeD=)atn2(ov zA0@eYmY{$m5<=XSYVi{Fv&<8zyg`=o(#$KjLosaoN5jMFiC<{qpawbXppk0zk;H_<17IgW0 zWjqE`(@Y*$u87Vrk$(VDey&ZcMm;stuKvs>R3{F=PBm*@KlgAW-%tLtfGQ7Z8+9?y z16N~8O10AZe;3W6T7{EzKjovcLYG_NlOnFRrUJ1lpaXfz{^7YESGmE=2|5I5R#3E^ z#fphb8TRirZ;Y12xA;BVwUohNF&X${r^0{Ranz9J$teycC`!Q>ey%Jm1!Ssl4E*@# zb~-pX(CydVeuEL;1eD`*k z9c*h&i`$%62c%Um`w2Q&Uq-FHj{~S${5r`uTuw zU1zVV(9uyWL-!jypeyCCN(_3WeNp4*TcQ9e7ae`Gr2o1m%Ku!`q6}1;|IRyMx8J}8 zqH_*Lu}DbBf}`Y)RM+@Vi<#M4liz4g5uV(ES1A?r4^`yBKMlw($)l@KcoUe_ht~;HlsC~#4uW9`!8a}E$_@T5+E1vox^U_rQ z#pFLb_&#HKgj^v(it_)saf_gfGlp?O0C9&ws`wlgQGxb;!TYs*GFu#geAp(%B~0#q zdPEIS>-(uZ0Z;M{pLOjlpLBnl_rvx`K>ZO7*+0a7tS8u1Y_#tT9bFdD+y#U1!2 zk4LHL={AcU*bu20*sc#}?!SM=tv3`#Nw0EuG$5DvOkDmIF(q#}Xp?fs7pTH|Ypz36 z-U4{jF%c1Z1egjeZxFV+&Rr3bHeuo&{_NTn2@4AEfD+-m2kvE)d20Mi^PcLmR?5YR zyPsuhe0}f3II)$jEyC_(W4t^7Y#KGaNdNVo!|$OX#4kHAF){Bxc#!I}zf|>I7(>gM z{Kj#S^{@0MK|$h(PM}7DzDcW;=}d?FnVniejP@g_Gy1aRm0NnRY9wy&r5wTOig<5F z4m;K4f(M$F00Q1Io9m95=liMlz+tJLEqHyo*Lcj8(V8AqAc!|kbQ2kigTqYYjD>3` zpO}k|a&bfHCS5}Kef(qh#KYi#jZp-7^9YCF_D7(Y%&U*|n+~M^3`ayf3t&Z%Z*!|5 z6*$%eVPdyG{v{pyL9*94AYjEmYWY+`wyAlr}h6J^SzZ?GrFB3tYZO@fqf@9Jhp2RPno04 zk`3B(c&a9LIiH_%8=9H<{&NgN!UxhJ#XijFg=~%w+M&b3b%dLQxKW@x^{4%f{a^1v z2}!utqpxDb%9#if6U2eIxX*yq%vY&1<@-V=0j*kTlRY4Ch(f{|5KO`Iz)EbMG;^df)AR>XsKK?p>k8XXrUFJY8~(649*XJ=>7X|@An zMhe%ae`7g-5J9&v@0v;i6!GU!@{l1qTHX4rfiERJ4e5`^h6~&t)P`~SG@JL!tl)5h z;$W8Sq<*bCA4CQ8uB~t0Tw^(0+RlwRvDp;Mi{ndHoCOYX@y?x-*LQz1AuRsuvwVA72Eq(MP% zAU0T4RTb{RPZ+Ss8p}Zeij7=@W8zcz86aa{ODeki_(KFW3>FVbgwZ^ZzbM9l==#fpE|wtL(0*3lD0M0OW6xR4KibAaXDe{C~g zJH$cFzAOfrc)0ZMkn~!7|AHi_r@gdl>1dIO+!)A`?n@9zikmt7r%pFr)_Ta9sER%; z>$6b6da2Drlp>0Rj?WhK0+a97%=Bj84=*wEgz#92iQg2_WfsEAp9Dn2rIzM0=kZ5& zxqgxR2Zu%d;;X+FD~%?MX4Nz59(*M#H>ELQYHWd$z%6wA%Mz!;1J>r?q`)5HrRcPd zWsIT_d{J`(GX+-?Q#kN3e{hG_e+>x=dW1+^1n)=4daY{IgJGM0FY=Cvwx6iIVUQjf z6d9SZPEYk#viA|(IeYK&Xc@Q$D4))!6BXLnCJE%%Nkm_l8WsZ^ z^l!);2>|aGTuhiBe+pbPRw(M-DL3hYb4J`3<=ts||EcW&MqMOx*~tFQnKdmm<$$q| zoZfEh9i&Ko^713+>%AYH+i!zz_Fv0nXx?=S5S8Gd7jBe9Zyc4nx(IvE+UP*K>SUvo zuO(?__6p{zutcr@^Xb1XD+E1Sgs^6qDOx9f^2RYUN>zpa-Nf4=SB`*`6ZRIn{nm-T z9{{Pryh7MWPs5+UL!bJYa-uqcppaZuf#J^9h;K9(R4E?EXIjzY({9|Jpy~srEjToV zqS!_y%a*YQLPPTr_X2n*NXYNCquFhvf_r(Vk5gpKF@0ow1{}W!IB=x zk&J_Vj?*uiezw??w9FXV5a6{W^Qe?VNGzv@5~ST#lyxp$SS?yW4^~*{@caeqw`3QG z*@d~53%h#bGL9-soS(GTtBdnMF+BV|`Dshmb=APG)FrBx37D z_9p_p`*B%MU;0XRxAk-lkOc4m^tu~987({B+??$9Z%7sX9i->9ocBQ13suXRUwi|K zwrlbsN8gfNgmY{!&_LoKzF>Dgpn#f;5=IaapB#)Ni*%ds@e2sp5hU#duR&rd%=FLB z{`PvMRw6>u{$FQ=)^og# zOLn|Q!>oup3lU)6!vMt1Klggb<09qa{{#Fn9!Ncxc*!7$Wpj*^)+8dEz3P?8kKMGX z&kt&)w*q*Rwx&8d8dr*y3z?Yd%bar`L;6^z-+kKBGCtv~HT?t~wz8&nI-`JUN7UTh z+`n;mx6j=W`_J~hgX3ek4bMQ5l%`zxUAO%Gdz2e1QKF|GMC>g7K`&Ex3TXkqSRBkH ztG=p6XC3ktV1^Dvwo-Abur^+r2tps^5lekG8{Bi7rWnD`1ev6sr@D!^(QRxQq{-m} zJ)`hGE6vuyzLo9^!-;qW4X#K#qrPf!Da?+BHuBYp|MXb4Z!H34qk7>U466%vxCYr3 zko5HY1XgytDO*fQbgxeD--9F*7H-rghQcUf1i+3H=%P=+<`~7!-oC5QNCC`eKru&G zR0#!93ObeVE&Ri{P8~qVfIhsb-GN^qeIbOB_zaN$Y z>FDdf02MYgULB;4fI|3VZ}X5$wXbT&_Vf&-tb1DAh*T{K*98(tJ-o|-BaGg%)lU=} zmb0yCGQ~i-E=QWkKlPmKJ6tIuGAIYiFr8JFi(n8j)xC%XlZu|SiO48!$M*%juK_{7 zS@VI{rLpLiNH3Y7rq2WKyKDDCrb4>=BYuyaL1aGUh~{^(^y^FFtlaz*k=7q-AjpM%V4BYFt*P zYL+W49j$tI52!(u?dN56tKa)}It{D;sa)gG@k8mLc$ZriIIN<>SK4bjhc1jobMzR+ z@yRm3s^PoNEEO|=iWRw>?l=ki&{`!pE>iV8OG*IN5Oa68V)231@V+CVQF(W0F&#RT zaxt{vaa7kVnz2fAtqdqJ?1W^(;@IYjG&1M+IbD|M#l5N+ySUjL~4N zpAemfmUe9WNum9vOB2!G`g{UL6zKiaWo3$`Uu90Cp;rn5cCxFnEDl_G<>G(3dbei2 zG}&A4cA3w(kM;W`lVozO>zRSN+XCTH%S6u)SPVq`Qaw=+1f?NtdsS zU4R1oh>osh)UUGA$=|wR){-5~{i1?`0;N<;E7VRI|(2~l1Q?~Qwz7A<4ZsnecI&Z1w*jz0y!0qUE<3%wxEev8tOqoN<=7+@9lOO zimAhbWRQ1 zi8*~hB3OobUnnw*d#K9hO5@%tCCv&?;nI`WwWIEWXnee)o_gC`W+m_FJr6v(>>h6> zH-0TPI1=T2$l&@1IsLeCvD}5l4FN;~hv0f|Z9IPp9c9CCJJHL5j%5H@bR#1}MbEi3 zB0$-LC@6HDt8sw6(l%{<|MBF)xLOCLG}y$v(ATGKi+sYc-~QQZWsnKBdkQrA66WUS zYJtfpgj?Pofx}P@XAynE78Mddk^Y<9XHL1-JmF>KF|T;}=lp4I_$VwB^!d9a)_2NT?JeeJ-C9 zY+nA6cIg~Zt1UQ&c>D|UY}6HMX}rdw6n{WQmRP&zva=u!#AHFp#MU7%h+t*F(9jTe z-g>jSKP<(!?K*!9?50oUGonPbmJ(xkvSy55( zmN4YOH4e~^aP`~l2@1Wy4Z_2{^d82#i)jyy6}KoZWbf;B&-)FqX7|OBXh`0Z(sm?3 zSr?CN0>#8e>U=%$kS>rHyEl@JJ)zU^8Li2AA)a}WqbGhJUtqLU0_ZHD6=QnWKma1% z`qo-LOAT8yRfL;S5cIn0%mf!oS`_5iK4M(eHht5^(D)H<4>=22v~$~1fPcvMAq_Yq z4RHcjVE4~upUQ0uCg@Z@7hkwnQ|)p>X>i0D^dBw&q~Skvf?GSgyNjcxESSVRy>TN>j*dmaj&d9q$ z%14Nmz%9k&G$MLn@?J<+h-0Ar%5B2i>eSNCbDho?i%*+3FnOU_f3a2LsaBowW_RAo zJWKsjtW7ptm=>sC5NaH-kxJ})LmZ=kFAw+@X-`k$2V3;E`QAjARdRqeK+_EPgsB=v zL(BZ8jJu3ZB}ii6fn$C>}XpNxS3@^4}$y)Q{ok^FaspT`f z@OvqXJ}dk#v6yl1rIU*s*u$|wMKInOEr)c*&kxUptg-59`TkWRs$R~0V%2Yq0YO!K zTm5ex9h!wB7>H5Wm6R41msxE3xo+I(^LkhMf#k>%Xnb=KtMcvVL7-Mf5Zq4v$otk@ z$W7qj${0NOQ&g+qKQ`8cg(eg{ut-xF=9ltQ+aErB0FdTofy?s|*LS<0zy~#?tgQ#? zDX=Ydk99e_mn3uj8NePu=ywm8XAZvseLtjXnqW~D&w^JelE6$@Oq&KNE`dPyWcP(%-fDnaPbdOp!!7lB}b!FuFnIMqy;wPpqUT16*^*c zXFp0UcIGpHqrx31UQy)I2WEf#BK);}JGL3JMDFe!t;Mz|IGL3z^D=+B3iW-9tR@u^HZlVg?yu0-|bp za$o`4uGQf}oyG2?u<&puxH=av^`UoG!$uVV4IFDjz z-m1#$5vu5FAm_w_UPwMmHLZ_{XVH?p%J;Bo*uG_q6i$?yu7YE9qq)soS(rW z=XQs1Z(WY?v!d&)K@|k*aj~&vQMpiN1zgAm7*oJT^EyRQ9(;yy)DNKxwW=YDxQXXPWoRS9Y3@0kff!z!YMHqSFNDPFht9BFI3Ux!}-e_Z|?w304jdu=T zZh^J!&b^vrtQ6j@`=lMwKOh_13Z2IG+o;WdzQOGZm<*kIpEDf}mc@sq-TT_}=Gl4F zk4d9clkQ~SFGP7EQr6bwdYn@L)Xb^c?D}4Nd&S{F9%g4`=ZFGG_+_)zPvfPsc(V%A zf`hT)4=~3Vrd!tRfD67g+j6*&=tpGl8*mE`?-!`Ii0yrpGlkM*FCH3c-NVOcfg8bd zcAz5}%X8YxbT{LT)n@C%r6>D6giC7BO$2?(VyanaxRZJprOH1a+ z$0i9X#iocH4Tlbm*Yq9KTd**SEw-_~zU#XjEr?wfU}F*tT2_V&y+JX}4CPiErzF_H zPeNs6Jd}3@nD_7Y*V@2ev<*~1tlLKi2e)9+24F`#JUp`S0Ck=SvO69yg7mMhtIHp9 zthTOh1K0xoc{+KVI6y)~-+v0lG@gOMK2clW?tNlg-q@X^7~3nS0W8eSiq+2CP)j#7 zG<;I8eAkt&!3(ZghkWw==p>9SKqVRRA#(kcI~U0yJvXCiU=rxER?aY-J~nWyI*@xsZoF*A+~+C&$8rTZn{TmE#o*vv0JK0X;lEP(sNl?Br%fABR5 zR=m+Rf@=BOk1j)vHI{JMCHZ+v|3T5sxFK3X#;TF{X9Ee>_sg$ue@w{C@Oj(+C`veA zfuplC`%Am~?NGjsJGShfd5C@JdV4rI$u3c!X#=DfgBUCu?ygl*`u0{xR;ff;(qF!G z>5`-20E7JP#xs-1rl$6OuB5}bgLH+L)IR3s^plpBF}kK1AHg^Je1}6Nur^ZFqQ?XU{oHy|Qd@KtUBO0)c8ZM&YdfEQL7vipciN%xn1!#UJ4O0sAU-e%E~H z%~UCtow~!fAob3W=Dc2D`c*McB5(D+qUzSFKthK{-r4b$lf2irDU*{cxGlwV+oPj{ zn*usgx{HkVwW*r>?Ck}jF_S(D3-Uy;t;aW(+RH!ew|BQwzf1nDa{2D5cgtoa=XG|= zuQlpUxjA{HYnFF;+b|QPX0U1#bO-_1$X{Pb2d79$AI7J<6CC$5A z>Bib*wFW&&2sCVqVGI`S$Y0A*vn-?e7^6s;cY{2E4^m;47{LkQnB zY5CWBdR9j}2C(T1&>5En3ut}dj1X`ihz(*Dm8RZ%A0CZ3g+=2JY}sy@ek?X6wOghf zrE%EYO|?P8ELc>SF=>177DSNZv@PE)hUbGcpnh?oFFNF?sa~C%`>OA^>;m{5CAt3aoV4 z&oi6giN=}*8EX``L&$|oSM}u{D`cxj!vxDv*@&wdm>$9i z2ayAj@P9(lgjfY)aJK3l@Pg>hdm{!ZKmrPbwY4>ldgtn%6e;9W8+Y86Kwiq=VAuz6 z;~*da_euv=udS(ZUbXC8P@70O@y5!73$D2p?U2wZ-?dF@cn;&_)6@D=A7ZB;>93~u zd}FtcESyOsA{?qR#jX_gq3`dZkk*?2^(yW2X~N~-hC38_%-v~2Rb85dm?0TEW0s>Fs;(KA{m|=N7dv zj8i|gg`1r@EwfI}^xXk9YK$wa@?8&E_VYh0M(uI%@mm1s8p_o{{p)u$xv=2L7f+pc zs~cuakZ$_3)V!;!UDE1;z`7ydLGY?ibj|x*tP&fFPxi5nFY1PFk@9zFug_#yefR{4 z9-E6Mz^^$p0AaMtdWP!G!zMVC=9Epy^vK6gX5*Z0~-qHCXQP!2BBF=z(EY zrIul5y(@la7MDT&GId^A33$Z07xe*v&{+gF1{ZE&VI^)?NJ}63H6dg4&MHivgJ&sL z0s;bXbRuG6iExvYk7ZmO3xoFEmWw9t7T#>B&CBP30o{l}PP>fE{_!M(!<@fo-en(< z0_hw+p|0<*p0qu#_Kj9LI+V3J>K_#h+9j3T&Cw$~ZB6Op_GQ70Y`fau=x+J?Eui zkz%7C@w^}JnI;&(L~&T7Sy@@ZcF!NJ;Vky6g#$0d#Sylgd&7M^yiP#ML+I7MFQQ4` z|7300((Jl#$)6R>l_ryq;UBMOktrKKYo)iS8h7FMnq08Ap5*5CfK^TrZHEf~`s~D8 zIv<$3UVcEvt+rfpT5U!-WqeIyq*8fh843%&z6fj9rWJ7L(k7!f9KIx^ajjg1wL4BR z_hRanY>E8VBg=8uks{4EI%3;-F3b~7I#x_7)`*6}chsqr$d-ZdM zIK84<-cxUTN^)`(F1ag~&$BIGz3SmZe=P6)2_tR`-WOH$u1?#&2X|Jh2~D z-Y_UzF9}J?<23HA{oZKjWh^fECYNHWs5}BB1NU67>(-G)y|Tf}%<{BZ9DZ3s3h8~9 z&Bg>~4cYJpj@i071J-$wm{7EB-~2jW?pql_`uj{+BePP`fJ?u!U+ zbGPfZ-XP&#qe7Y(IFsMatV6)f%AY@s>#CYeiP_PkdQ_Jt-Yy?T>nF zs~4|E&vV#b1@LdQa*ew_G)3k%HjeUw!<@`u>B-Xeallg1p0CgG7Jk*y+Z%ybXB9>v z;}t9(aX1P2_Q{f7NA6<~B|kqun2xE=+;=bYgtd-f>xdXj0CwRY5bzO%`4=u+5D#Z| zSI}^hOLr1Y5)IBNE*_XE^8u00oifCaJKAsn`xNHWhRXj+!ekJM6eK%6@l{dNr>3;UeV zFVv7JOgg=Mu6?*(eV%MC==iF;zOrl%yc;Ts9*MXl^@JS>2HyVRRjcdT%o zB*yGE9GlVl%T&H2XOUvli<&wLF%V?rowz;TuW{cae4CwO-=}OHw(UYDBHHS*ZPiH? z__RO=U(T>scW~z9vyxh4ZKddb;Y54muaXUKH=GNE2Kz^mb!xsy5JDdOv-9N1iPf86 zVDL7Ec24^#m}9|2KCDuY%|l^ayt8T5QZc>)g++x0MMr z99i$$W`A#0&Q;I1YfU%Xopd$5urgLLne-y4Az9%Q5`zP9u^fys~s63vPC@XIW^_YmdIFvpBH{1Cy0KAIfbFUo}!OODhqled#k|4?alC3*^Xc*a2yGQJ%%$dSMcf^U90KQHeo z92W2)`eeVTC@OXWbpR2@Lj9bkxH)NdfDd7^)Jjjnxdk>=7a9%7q{$?uRN<&SeOjKg zkiYrp$e0TS+z;O_^M*Z-6~FkFA%glvkb`W~`DwbZ8OsTW;rwN5I-gW1kIX8012jS$ zTh6cUT#kEJ`3aiox(sQ4H0~blBOA}g~=vmjh z#y9~DPvGyc{fup9!4=p~3+^ioP_6+`l(`BOW`p}` zN!P14!4MF6W}zHZF`9s%1h&;5N2I?+z@LZ;gNBpS)5U>oVq}3YaCD9^M6Si77EfjS zzooq}QIyTKgJ-QyG%$TuUl>3IcjR?)3X@em2UkVKI$@%`6&pwOmypJ>;FfiA%CEQ1 ziQxg)kCqC}1dx56>B3da|oJ{Xg^{;n5PM-XT9;3zK5DLxhU~Ui4G&R_jskkQ>0mW->L4o7R z2V^(49cd_oMn8FjEjU6M8qz>#i$IeMRR_qpMMuU5Z3<|d@Slx9#YfgNdasyED_2ca z#SVI+lh>vLiI^I{HK7pN5a_K>wgVe>cea8hy2v#@njvs!gJhs@CA;+$CVl_GW ztP*t*T3?BHi|m_twMLgd>GKdj*~f2aJDu~=&Xh@ioPtT%I~)T285GZp!~1G9_6oGD z$=|pF1z-UPDw(kF3~bKP-T3_j=9qV&B}V#D7#_t>-@I{SVZ0J?zxoDa2O#abf&y&2 z0pINI5b?2ARCM$`?su%upFh8W|JVmwiCaWO?Jyl>WM%OYgzy{zkzd50e~xt`-#8RGAP7CHrC45rcDbcM9iv#Fe;Zk3+tnpKF?o$- z=g|}i_s4bH$<~KZ)OR@?2!j_1oR(lc%{aku)t62eU(4xgSXH7vDXD!C`fLQU`|;6{ zXZOBgd(!gY!gl;jn(W&}miPNqk}flB0x_Jfz?fV2IpWP+g<|a9I|TYtt{4_Eaulz- z@_oR_Gx}#`Y;f-FNoY&#`hJ;-gao{e3`E`6GSKr|k!M9F#gBUDjQg~fcdjw(h4 zw}V_7V*_?neucI3Akqcoh8-olVhar&m;Rdu?`ogq@&3A$ygUxflPSSv<2^EZf(>Fg z4&(P&bfJp~=d`8gJ^4B@-CbYr4wLjwfIOnxnd~++!4>>qCQxdy#DeT=>`OwJSO7>w zvzLf0b4r2b(vIh+`>G}8A0STg+K2-d0%`CHI?e{P_u1l$ z%vj#txZeOGa4M#k-QbP})Fsx*Im)K>Vy`#Cx~T0LOq zO>k+jsh5ooR$z)~!18yIa+GFHb}Y*ohLiH$2P<_Jd*@YN_V~pHnbNZNW0Vp`dwYZ6 ziDHCE4Sc0E>BLXT`!*9*PHc_Xk5sR3v^|+XW&{989oF?#0ty1QuP}kGE47+OhNUAT zD$9}UH6Jc1>wI2{W;N`khAs5q^m`5bU;!sc=`2^lTrOob8D@nzk$gA`dryF1Y_U4b z2GiEJWf;J>tU5a~LL81Q;I9#vkVsQ0riXd6awB)!Y0vC^>(W>$OD8}GxM*Iya2QBa zm^qtvu)SkB^Wa0}5wO<;M`x*>BZvhO<+R8cU~dD}~h7<^xqHrdKAaiSh9lS83d+o$P6_rRVuA02)h2 z9d=FK-a1%Kp~z5Y484Ezz7f&6a=t!dAMlf^qxapg{=fK0pCKF668hY}Da(q#q+X~f zkLU-iU|Jnc*+VyuPElYTy)3hEuh-Bze)D#OsKaXW!mmyi*^Sgxd)1uZqfNzFg}!2y zfpw{CgyuHentMwUeiff^MfTUSw|}Hce;XI6ZSG&&yySN4o$ZDnouZ;5h?p1}dl-<< z)WF=@dKUJw^=50Fhwq`|zELQ4c4Z~TE&SzVU_a-z74Um~J-f$Zt6f$L;CI9vSrv#X z04{Mm*I3OdWy(BqyQPrG;2-Sot8CKYm#?Q^lrkO~xRTT}m8Sts=?JVufOv zmxnS~X~4az?hrWm3mu3f9}tuvE-L&U`_N&!ZAwaVfZa4l3I<`Ebb1koU)u|@*#?($ zXyzjui_XdvCNrZu`>nHndF<%>-MIOqfBboRwHo+{oC|3rK&KaB;!Mbyzq6gTa`c9< zZ}~}WVIEcJ&!38iea5n)6p6gC`wI-U=*hP0VUT!ewJNo< zdW(-*Ebou?;}rPDznPnkSc!ad~F?_p+X~ESmH33 z-@(%ZzvtTK=;w+No7tmkg+r5i%!pN_CGYumkNYZSW3~=%CXoU6)teMMu{sEPUg$li zV_?GHp_OQ-v%$#YkWCEeN1~UD1Hk%#Y&HHJK$Zl{YB^rF>*7*aNR^`9{=G24B8kgwnb#?1_r%VnTY3-fA$PTXs_KTf=8HPJB56V@`w))qn#d! z=1b?%F%h4|>QAV2;M$8+INvlX--2Qq$7m(rC!ZVroPI9;o#pGaOKO@fa>8qzb9CGJ_@z z8Ee3jJ0}m)7?!^P*!J;ybq{n4jhLNeO^X!-ME(0Pb4Y}XLvuX`d#<^XvUQ@r88EWjVNNj`1qLHWT%P*;OhN(mtiV%*$Lw%g)Ux{O&6G1 zn45cRyP)qu{DWLwjJ4M1ZXy>{+70}jOLc@_{ul~}o4LqIfHdycHho?ss9uvMho}dY zl5F|NNJ-p)MIq`t!qB~nvgY>Y*G==Uu5(*d1d%!%JuNyZ2+DEsWij3oM}hhisc$PI zUF`d{syd+(5-GFipV0EudvIt&T3RX!5d99JXf9GQdtp)K={H|)C*n<5H+Q>*smP^s zhY7bmf3|pnk%i^YvmlM^JYck0QFQWv7bYbLJ2gE?)xcMlOwNE0)z4F7d%)i;_>+eYeut$|Z$Zj$QTwosoQuZFfMkP3Sdl z2uFvetiKd^Snf!2tQ+^Sc8YdV336Zm~zg$RVRZ`_fVs)&Rb-2eYAH5O389 zlIxH}Cg$s!E3ysseG9TT9qx#bat+Qi&o_)C> zh3tv1Sg3osi;e4^Xz2A|uLjA>&S3^Gv;QUqJHt$|)1kuzQTwTr8_>xOj~^#J_wIkY zFogQvJ&8RbZXyy45SYCqjJ#PeygN&c6WIaN8PC5<*o>|-vV{EzJ>rvCQu9HP zy*ngo$0w^Upv8aHKKk*qT!qNraiqYf7!oLjhTqypL;Bkuh^jPe84qJeVNNVnR2Ezz_85tn5nNogx%rfnuZV2Cot4*izIK> z(4>*07q&5;u6(|}#2G{d7D^3s5|IZxJyPMEXJoYiJD)R6=jIjm*y{6D$ks}pv`yW^ z5|I)mx0~Pr_%?q1EAm*9xDml~8T1gygya+yi<~~V4Tpg)`S8vQmiMkE>bCy)HHe2Y zAR1$=Sn+kZs*O>W+Vd&?#rN>`pR3sDyc#EZuTZxCT2T`p<19Bx(aTb89vlbGHAAE4($nS{#Sd#E*88vRfMx|>BR zppBusOP~2o0yl_2tT??*?9E_jym<8E=y5V3qqEA-xGnLkBQGlKT|tPx%o&uT4HN<3 z*c%Mykbo9v@>dqG{jqEATf1~j7*ZZ#NO|HapY+k5oa`E(4WDrma$e1|+mxh{qZz9A zaYsHlfg$NsVf(|aS)k7N^Jw4ZRL&!S)w)vlJU0&Y>Ds&6Ky=HN80UGaU`Z_6`<|%Clc;SgAD#MRDJ(fhA2a z>tb!BKQY05g_C_*vnk^tBpN15!>{rVLCrjUOplo+A*B=F7k(#-CTwe#Vt*_N7xHcy z?)A+96o8o>d+D(1SwVrZvSO@MX`WTZe>(}nTwrWxCK`7fV$^6jnVMnk9x!ts#wr5M}bBPG^=ptTFg>;@Q&_>#QwNloMt*aybI-)>%qj@~y#BV!E*gA9 zj6kw3Z?AM0y5P8Glpnu5IJbIACs`0svN&5wft zQw)E^qaoL2L>G3M7>vyBlCBHGF$2>4^r;xTy$JJ@C-dHM4~{VLo;Aie!Q5hnZjYL1 zEtD9?KRBcTMjpF_qF#9g1vB0ZRfq@6BaNyk4d>I~d-(E+^65;n)Hx+)B$^}wn=^AX zVCR5ZQ(GILz**5eBN4d(A`l^=t*@ELcv%@59d?T;H>C5V+WP*|6Kuzi`Se5+~YGmLSGjeZFjEx1ABSv6h|{XcD}L}bwM;T4;t&9M*~!FmgTrthMWEwP%Y z>l?%PM_NlSZH&CS&xcwG_*au2#338ACH}2y=jC%o^vy*q!kC-OdFx^Ov!PGf*%vvZ zWF}WuT2o@3o8cc(8JRot?a^dBJTXB*ccB*&2!8`74PDas_&6|-2&a!@^s%5ka6|_} z4iF7MVVNu*UJJrqeqcSr-}j@n)dxB%sCD^Z{4 zN=L9Js#P#AIv7>!10zHTpu^H&Ie!b3It{P-rZz(Ngblxu|Cz65Zl7Y6u`n`fPB+|S zHRujfB12`-IpoNc=S^6F$D@9Q>E|LqXrT6hC$qyXI-1aAxS-1x?@zw-D*#jnT66$P z#Jytn!3BlYbTkY|bKsU#50oYZ8G$}A5ok~V&NAt>6M&keMLgkTp)2t+D(d#Q!#bSI z4MdXgLQKqo(rYVW4wr9+wl`7r+NLEVYwP)5N69gs<%fS}Z#=f?Wn^peA`@jJV&yfN z%bNs)Md6fZt3XhITd4Lw{UUkUg?^WPwo=igxu=E7ZAqOh2fb-2>_P*%uRQkj6jO?n zEnqzq}5Z(X?ePi&p%c_TZ$$hUmyIuNH$(yQxo^=DT=H;4NZx{qb+rU(V{D$ zX^SYvblj1^lFHz7M>8JT5#ICjieJ3Q($AvKQK$NVwU8>+lEItrq~0 z2(kTMv+5SPGFtL!X2h#b{<` zlEnPmG@`zIO@NY|JR9ffrY^60wGphss#W|*aS!iOqyR1KWV7)xpC7T-)ccrG5%Esj z7YSkQ1l)BcNBqYX#TY@=)x5wKg0RJ>p>>@^ z{UyQ=YX(Kfy~oC3RX^=WdJVdxipPnYTyjGXC*H^0KsWw5acl!g=@tslK3&jIXExo~ z1Yz^i6%FROHp$l0YRuG`)t|K!Hrg;wqS@ZVW4#Np9SPT8_vj9edUAUWN8LKAG@i3t zq2q`X2!pBx^6%4f`&%#&C)Smu?;nJT{N(SI+JugVZAtHU75m?bY3EV9GS4-IM!z)n zkNaC_IP+V|kOp3@Y>TsLyLP0HH*USeWIHA=5gD8?g#tEC0^zSpJ|8Zu5yJ4iD}J7{ zzRYE+sla3e;Z((oi|MXJMzfdcc|c*w0iL*;yB|x%35R2|)HtvRDlkz!rcPUL|9Jx6 z^tfHeI#^22MhRmzxC7FN%bI_8>=_0u2m&C60SI&)5G7<&Uw!}j>d@KVC3;nl}SQ_b_|rLEFjbYJr*(h zIsDi!$n;*`-a5eAeagYX(^YvVAtR7zHbFd1HZ7ov-!A^YCj{n})~LVzye%Sha7@M$ z4@(AeFulC4r3Bcrfor~~^|NErHG^9P5iW9rW-%7ummz;psO@~xf8<6fiw09)P|f#8V3UBU>v_oBf_ zfv3p6Ze_{L62@yrMC`cnp+M!&!P$8M+078gY=2{;bLJ8$Dd}LT71a=?K{_5Tt}slk z0I!S#E*%)r?lSD?RV*~b26Ad5U|9mf!uf9(WgzUczuQ^hpXY^D zTLak|DG=nNIBg}VkxzNW2O4788|%twh3+#iNYOwAB%DqmiV} ze2_6u=IX$d29Lvn;}e>D`?m5(a0;}9f~M8H_e>xyZ(nk%u_jb$Z;b*@h;*fMqHu#Y zOhAzC#9mz5g4MLoR}Fu_l4>&~`N(#0PhW)pZ{&@ z82m7KPi}#z_M@vSB)S{U&dwZPB0;JG9SU;#fFfUH1T-1sqxX27xd7}>0pkHbcJHEv z1^u~>*leYYw?GGn9zVzN(DD-|u_Po@MObA8Ty^*?p*}^gIoOUfu2dw&$JOiDgsjP(B&>iYs;(f)!2cLf zJRs)r1NZV}dS4Pz*sX*Wmg0Ag7w^>!)(HfXyM(hE;6Agb(&O_zad#;ua*KZ2em3!h z$!z+uxVZP(k4K^!kny3AB;H$}=#b()tqXZGk?Ytl{-D~UGS|z|BqqschZRKkD6;A5 z(fd~`TmGs0tzQ2LXbF!>osJ(H4P@0141mZQ6~?oZmHXplPoIW?;Ed(37DUzCS-*cL78>7Ni9|snTQ(zJx764PzCtd><7>U~FOn%WRxi2tIuRmLubHBNh1I z59VWCJiWbtj-7V7>t0z^13B6=m<`;#Ka+jF`vaAj5#~D4{fD4Q5CTw%q?%AXkW%6R zCN_(pJ@ASt|8{tA@Oy2o9Y&D{Z+`@YGJ9+$lmlvJ!h8M;xE#te&IXmFZgw=L!IkFe zkD4+(q^W)Ewk!RiN^^yP5E2{0Jh@yC*<^vUAT$QXSRhbH1hNQ7X`nVL1rKX*8wTHo z1;$sb&ZEPyW#0Bq^o#XAolK7^>lV}k+VTAY|VndU`VN>UQHO+{%b zJKQWSu()M49{dWHmkOu0I%UCuouAAuX5F?wT1H@h9V7DtG8@x1Kt-1$C0Z~{{L5r*L3LV%g-!Gqtq*c}~wu-_hv zi)0w38m;CR7th1W=PvRR@1OPcNu7_;(b0dam-|A(+Zxh~)iN{`g=xjLYu7Yk=}~Ls z6Th&qu*P<2^Qwe};ax5Gvz@iENSN{EIUU>JFsQczuh|3sVi41Q<8!YyGQqZE6gkf` z?EZGW(U&L*;_!|2-VmGY>gW5JVVZqZ8#cdO&5$f0yKJBr1x;NrjuJ7L; zNW4!QL~S-&lB;`V^q9?{d&VDYf1%42K2)x^)jpw{N$l!>-Wu|+BY@XZtS~pbWjo6{ zfFuj2X0!@Rh`%K#Ynz&?uWSnm3Stifbrby=h)N(QXx6%2hn#7-*i8Y$D%M7@l}jJo z=JtZy4#UV)7}f!}r+2io2&$H72x7VVU8GfqbCG&DVoH$oxh12X{s7GCKzq;lldZDU zm#bg&dy+Wm)K}f2T>-_q>xYp3_(xpkvw4eeov+KO+f%#;{spifh}pAVCXBYUc!N3s zhx0v5{(H)-C*8MSSNOQ#O#iKO;dX9XrYjfHz@-H-0(z26nw%Wb-MdIx%MKMlZs3u> zzdwvbuEToGwxW+$SU~OB0q5|mr6p0=k4RZ$3$W=>n67gL?tKKBDmY(kZFlhY6q{+F z(8#9NKvrr^5cGZ_DoV49rw(>_l*nuzPA?P!0L)(R%eNm#)w57a7wVeaFWO2`x8ikN z>Q9MM+MIB_O|cA9^2rn_%cITdAZ4q8+P{B(r(6oXrB8vcS`6u)>}N znJnvd#1t6z0qaQ?WW_@{T9-ib1>I#djKYz*CJ+gLok~VZ`Vm?s=`ZxVJsaD&HbCIm>87g(8hbgN)^D5arq_h;5yuc9jHL~ zzjt=#0KX8}3*PbZTDk3X8f^c52-i0GU~LQ|kP02Qny6q5a2o|k17K-bo1v7CM%SF? zt)Om?>`6xm)>~U!DEcEsbQ4bdgeU;yBUl7f46qvK2}*M)LkDo++<}&I>FN!nCWXct z`s2B-sW&c_n7l~XM!L)V3HpS3wK|& z8O8Nm3!;$J=|sb1M?*sc7+f^8WZt;Vu*Ma(r5FbUnEoCAAos>D1J0a}j}IE!MDVY& zv$NysvL_%Q00+!Bppgbl6IsCq(zjH2KI4H&hIRe=^&dbjfK{f30b5>PUhpl_g@$r% zx!|Mrv$%OCccVxyv>8V+QA2@HG{KP_r>hWbWNZyHc~sKgDRm`iI< zG6N_AW;O5{uHC#zvDHmMN=D}O#fyZB3Khjjg%bn;GCvaU&jGb<$s$`> zQ&Xww)yf29W$*fj(px}fYN}e@zB)2ot*4?i@^ZZCx{8A^EW*giwXJDxz+pibYYtb@ z1YFfU7+V)7#P(bfh%oTQE*3Y_<~KkCnOV9;q(n%7%Ljhqpp*uvi;SBNw#eRvFJL(X z<)$vzL-=gR%0!^X1H&?d_QaRe=H_qf>g%tpf0u*RsL4xX)s>Z%u_AuwUw&RAb>j@3;QRbHYv4P1s>?=0|1sFtXTn`a#n8h zW%;(2>I+d)P_`HJvO)_)#1RU-4I!b1u<%How-ee$`&3;wvC&!|JtDTe%C`7$zdaWA zI|PTvA9B%>!RlNQ8_;5ko;`;eMp0!%(?sVB%-f5KY-HbB)t7$4#HNw0>FdJ=?^0DY zH47V?hNh;p!OA)@?|;t#?qnU-e{pgaW-^P%yAKtC3IO*~lc{r_z>I?8(zmSyd_i2O88rv$m0CfBZ;%>W$(y~&SXpH!NUlkHLf27L zl*gzq;=r>s{BI)p^Wk&*3zYs7jQ>Pr&(Mhf{k|YjSM-ug)Bh)6!}m~I7#2nV-%Fp4 z@?qV!DBQ_EKlt~j?}P>i3nJwl(8YELKi~4B0Ep#({qQXYHZmvFKWdx5f83k}@;s2P z?*18nVT%MI!1CYU=t(s;bsb{Kh z{QDCXVdTps0@t@TH-Gf^`}Uz%lXKF(g5jGqY1X+zFz>*L07SxFcv=5>$pUF#;q6oW zs;&J9t8m=68~qr|goQsApNMA3q^;)wMGwdfO8ct{K5JdKQSoVU7|zs@soj5GVh|d< zVCh<9lR6)tWKXi76^`Ut7|De;rTeVGIarNNuSCRfHXU1$Ksy@ohNRvs&h+#9Fl&i$~H^cc?{lsR717i#5 z?QanhH9${Sr}|V%yiPEvnP8NgOTVX#4JozZm%*0u1y0p}KPFE-Wa7Hu3U0KltU-{U zZ{4|5yZH51ZEfvK&=ndRe>6%GEpf1)Rvy9vhHr_zeEi39RA7c5VW@G<%YIiiRr8xa zg24=~LpX>TEa>)_A){DL54)uH8A79#rcq4+pS&_*f(P+%@`zWwK8y;t}zfa(LY z5I(c2vJ4cI%T6K!&t*NSkn0(P`!|}m$MSZ7BFfX#^LK5%H%vzY0;6xfhiq43CtKIl zc8RL^^V8B&t@+;q_QF(1;IuNYYwnlqP#_f*ixI7l9)YwnI6nV5bUbEkW*OrGbIAE(6Ij-;2N^&@?XlVmtnbF(md^7tckDUMY3dcGt5-3 zV`Bbc8Et+GdEtUe5`zWGPcT#QgQ=&1Nk>b|G#G5v)z#g?#}^Y9zrn=BB%tB@d*{O# z;0$rCOTNntA|4gpDGzv)9RREx7Er$f4yzq{bR6n|xem-x5?k zai8(=UHtE04$9gFi1LR|=zU?^y*c+8M^lq6+Lywdg4*uktLPB&GPcgcz^uXG%@=Sr zgUzmr$|^cq!7e_fNfeN>V4wq@^ji9(_BXE@$k&+;RFMN7~PW;v>8+v2{VA)SMM>Z^|!SMBk*~aAB91N_nva+%e zfDa9u=J(XpM<^XlO+n3}ytKIVPduH90pc4oAoqMD=SRy7aK5{p7J&IpK|ucZo$Gzu z{d|id5KL`N$16nO0|4%?{X*J(|KaasC@=N@eGPhyvA&j~cIuBbQ)KZxyt}>UycYy&YKE(OLhAATg-mfCL_pIK!rIg3mdpe!}Wo*k4av zrqNJ6IPGrNj&MKXBS%M7k%T8I`gxA`Cyaw&qaEA@=*5xLM-vP`WS~wBPQ!tLfshqx zfQ1gl8Bhzrla)N>uH;iaFsR&p7R>f+E4o(1G)cw_qzhNC4mSbSQRmSkG^!CgIyxrj z2ScX%`kt9zZlX|9Cd0YB%u;0sOGnr$Q&U%W8L}lvhrzKA-T;IPaB*zt?!NOkt1>-# z(g@>}z#W|bBn6=2.0.0. pandas-on-Spark will set it for you but it does not work if there is a Spark context already launched.\n", + " warnings.warn(\n" + ] + } + ], + "execution_count": 2 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "# Example pipeline\n", + "\n", + "This is a simple example of a pipeline that reads data from a file and a database, joins them, fits a model, and saves the model to a file and the joined data to a database. The pipeline does not import open lineage, and doesn't need to know about it. The salient point is that metadata is exposed by the data loading and data\n", + "saving functions. This is what is used to populated OpenLineage events." + ], + "id": "61f9f29fcad83166" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T17:30:38.628295Z", + "start_time": "2024-09-06T17:30:38.182382Z" + } + }, + "cell_type": "code", + "source": [ + "%%cell_to_module pipeline --display\n", + "\n", + "import pickle\n", + "from typing import Tuple\n", + "\n", + "import pandas as pd\n", + "\n", + "from hamilton.function_modifiers import dataloader, datasaver\n", + "from hamilton.io import utils\n", + "\n", + "@dataloader()\n", + "def user_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\n", + " df = pd.read_csv(file_ds_path)\n", + " return df, utils.get_file_and_dataframe_metadata(file_ds_path, df)\n", + "\n", + "\n", + "@dataloader()\n", + "def purchase_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\n", + " query = \"SELECT * FROM purchase_data\"\n", + " df = pd.read_sql(query, con=db_client)\n", + " metadata = {\n", + " \"sql_metadata\": {\"query\": query, \"table_name\": \"purchase_data\", \"database\": \"sqlite\"}\n", + " }\n", + " metadata.update(utils.get_dataframe_metadata(df))\n", + " return df, metadata\n", + "\n", + "\n", + "def transformed_user_dataset(user_dataset: pd.DataFrame) -> pd.DataFrame:\n", + " return user_dataset\n", + "\n", + "\n", + "def transformed_purchase_dataset(purchase_dataset: pd.DataFrame) -> pd.DataFrame:\n", + " return purchase_dataset\n", + "\n", + "\n", + "def joined_dataset(\n", + " transformed_user_dataset: pd.DataFrame, transformed_purchase_dataset: pd.DataFrame\n", + ") -> pd.DataFrame:\n", + " joined = pd.merge(transformed_user_dataset,\n", + " transformed_purchase_dataset,\n", + " left_on=\"id\", right_on=\"user_id\")\n", + " del joined[\"id_x\"]\n", + " del joined[\"id_y\"]\n", + " return joined\n", + "\n", + "\n", + "class ModelObject:\n", + " def __init__(self):\n", + " pass\n", + "\n", + " def predict(self, data):\n", + " return data + 1\n", + "\n", + "\n", + "def fit_model(joined_dataset: pd.DataFrame) -> ModelObject:\n", + " # model = ...\n", + " return ModelObject()\n", + "\n", + "\n", + "@datasaver()\n", + "def saved_file(fit_model: ModelObject, file_path: str) -> dict:\n", + " with open(file_path, \"wb\") as f:\n", + " pickle.dump(fit_model, f)\n", + " return utils.get_file_metadata(file_path)\n", + "\n", + "\n", + "@datasaver()\n", + "def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict:\n", + " joined_dataset.to_sql(joined_table_name, con=db_client, index=False, if_exists=\"replace\")\n", + " # raise ValueError(\"Hi\")\n", + " metadata = utils.get_sql_metadata(joined_table_name, joined_dataset)\n", + " metadata.update(utils.get_dataframe_metadata(joined_dataset))\n", + " return metadata" + ], + "id": "6b383405fe7b5ad2", + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster__legend\n\nLegend\n\n\n\npurchase_dataset.loader\n\n\npurchase_dataset.loader\npurchase_dataset()\n\n\n\npurchase_dataset\n\npurchase_dataset\nDataFrame\n\n\n\npurchase_dataset.loader->purchase_dataset\n\n\n\n\n\nsaved_to_db\n\n\nsaved_to_db\nsaved_to_db()\n\n\n\nuser_dataset.loader\n\n\nuser_dataset.loader\nuser_dataset()\n\n\n\nuser_dataset\n\nuser_dataset\nDataFrame\n\n\n\nuser_dataset.loader->user_dataset\n\n\n\n\n\ntransformed_user_dataset\n\ntransformed_user_dataset\nDataFrame\n\n\n\nuser_dataset->transformed_user_dataset\n\n\n\n\n\ntransformed_purchase_dataset\n\ntransformed_purchase_dataset\nDataFrame\n\n\n\npurchase_dataset->transformed_purchase_dataset\n\n\n\n\n\njoined_dataset\n\njoined_dataset\nDataFrame\n\n\n\ntransformed_purchase_dataset->joined_dataset\n\n\n\n\n\nsaved_file\n\n\nsaved_file\nsaved_file()\n\n\n\nfit_model\n\nfit_model\nModelObject\n\n\n\nfit_model->saved_file\n\n\n\n\n\ntransformed_user_dataset->joined_dataset\n\n\n\n\n\njoined_dataset->saved_to_db\n\n\n\n\n\njoined_dataset->fit_model\n\n\n\n\n\n_purchase_dataset.loader_inputs\n\ndb_client\nobject\n\n\n\n_purchase_dataset.loader_inputs->purchase_dataset.loader\n\n\n\n\n\n_saved_to_db_inputs\n\ndb_client\nobject\njoined_table_name\nstr\n\n\n\n_saved_to_db_inputs->saved_to_db\n\n\n\n\n\n_user_dataset.loader_inputs\n\nfile_ds_path\nstr\n\n\n\n_user_dataset.loader_inputs->user_dataset.loader\n\n\n\n\n\n_saved_file_inputs\n\nfile_path\nstr\n\n\n\n_saved_file_inputs->saved_file\n\n\n\n\n\ninput\n\ninput\n\n\n\nfunction\n\nfunction\n\n\n\nmaterializer\n\n\nmaterializer\n\n\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 3 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "# Create OpenLineage client", + "id": "992e7b66669582b" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T17:31:52.088986Z", + "start_time": "2024-09-06T17:31:51.984490Z" + } + }, + "cell_type": "code", + "source": [ + "from openlineage.client import OpenLineageClient\n", + "from openlineage.client.transport.file import FileConfig, FileTransport\n", + "\n", + "# if you don't have a running OpenLineage server, you can use the FileTransport\n", + "file_config = FileConfig(\n", + " log_file_path=\"pipeline.json\",\n", + " append=True,\n", + ")\n", + "\n", + "# if you have a running OpenLineage server, e.g. marquez, uncomment this line.\n", + "# client = OpenLineageClient(url=\"http://localhost:9000\")\n", + "client = OpenLineageClient(transport=FileTransport(file_config))" + ], + "id": "66f0e18f3521e1ff", + "outputs": [], + "execution_count": 4 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "# Create Hamilton DAG with OpenLineage Adapter", + "id": "e19a0f03f5e1f243" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T17:32:31.294469Z", + "start_time": "2024-09-06T17:32:30.852466Z" + } + }, + "cell_type": "code", + "source": [ + "from hamilton.plugins import h_openlineage\n", + "from hamilton import driver\n", + "\n", + "import pipeline\n", + "ola = h_openlineage.OpenLineageAdapter(client, \"demo_namespace\", \"my_hamilton_job\")\n", + "\n", + "# create the DAG\n", + "dr = driver.Builder().with_modules(pipeline).with_adapters(ola).build()\n", + "# display the graph\n", + "dr.display_all_functions()" + ], + "id": "9aed7a607948848d", + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\n\n\ncluster__legend\n\nLegend\n\n\n\npurchase_dataset.loader\n\n\npurchase_dataset.loader\npurchase_dataset()\n\n\n\npurchase_dataset\n\npurchase_dataset\nDataFrame\n\n\n\npurchase_dataset.loader->purchase_dataset\n\n\n\n\n\nsaved_to_db\n\n\nsaved_to_db\nsaved_to_db()\n\n\n\nuser_dataset.loader\n\n\nuser_dataset.loader\nuser_dataset()\n\n\n\nuser_dataset\n\nuser_dataset\nDataFrame\n\n\n\nuser_dataset.loader->user_dataset\n\n\n\n\n\ntransformed_user_dataset\n\ntransformed_user_dataset\nDataFrame\n\n\n\nuser_dataset->transformed_user_dataset\n\n\n\n\n\ntransformed_purchase_dataset\n\ntransformed_purchase_dataset\nDataFrame\n\n\n\npurchase_dataset->transformed_purchase_dataset\n\n\n\n\n\njoined_dataset\n\njoined_dataset\nDataFrame\n\n\n\ntransformed_purchase_dataset->joined_dataset\n\n\n\n\n\nsaved_file\n\n\nsaved_file\nsaved_file()\n\n\n\nfit_model\n\nfit_model\nModelObject\n\n\n\nfit_model->saved_file\n\n\n\n\n\ntransformed_user_dataset->joined_dataset\n\n\n\n\n\njoined_dataset->saved_to_db\n\n\n\n\n\njoined_dataset->fit_model\n\n\n\n\n\n_purchase_dataset.loader_inputs\n\ndb_client\nobject\n\n\n\n_purchase_dataset.loader_inputs->purchase_dataset.loader\n\n\n\n\n\n_saved_to_db_inputs\n\ndb_client\nobject\njoined_table_name\nstr\n\n\n\n_saved_to_db_inputs->saved_to_db\n\n\n\n\n\n_user_dataset.loader_inputs\n\nfile_ds_path\nstr\n\n\n\n_user_dataset.loader_inputs->user_dataset.loader\n\n\n\n\n\n_saved_file_inputs\n\nfile_path\nstr\n\n\n\n_saved_file_inputs->saved_file\n\n\n\n\n\ninput\n\ninput\n\n\n\nfunction\n\nfunction\n\n\n\nmaterializer\n\n\nmaterializer\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T17:32:31.534973Z", + "start_time": "2024-09-06T17:32:31.475171Z" + } + }, + "cell_type": "code", + "source": [ + "# create inputs to run the DAG\n", + "import sqlite3\n", + "db_client = sqlite3.connect(\"purchase_data.db\")\n", + "\n", + "# execute & emit lineage\n", + "result = dr.execute(\n", + " [\"saved_file\", \"saved_to_db\"],\n", + " inputs={\n", + " \"db_client\": db_client,\n", + " \"file_ds_path\": \"data.csv\",\n", + " \"file_path\": \"model.pkl\",\n", + " \"joined_table_name\": \"joined_data\",\n", + " },\n", + ")\n", + "# close the DB\n", + "db_client.close()" + ], + "id": "19c1531d99f7e6e6", + "outputs": [], + "execution_count": 6 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "27818cf247cf7682" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/openlineage/ol.json b/examples/openlineage/ol.json deleted file mode 100644 index 13faa42e8..000000000 --- a/examples/openlineage/ol.json +++ /dev/null @@ -1,10 +0,0 @@ -{"eventTime": "2024-09-04T19:03:08.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T00:12:00Z"}}, "runId": "0191be60-cf5e-70d8-8e5c-d6a926c0c805"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T19:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T00:12:00Z"}}, "runId": "0191be60-cf5e-70d8-8e5c-d6a926c0c805"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T20:03:10.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T01:12:00Z"}}, "runId": "0191be60-cf5e-74f7-a7c5-042949e56ef8"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T20:05:39.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T01:12:00Z"}}, "runId": "0191be60-cf5e-74f7-a7c5-042949e56ef8"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T21:03:10.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T02:12:00Z"}}, "runId": "0191be60-cf5f-7606-a46a-8ba92c696305"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T21:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T02:12:00Z"}}, "runId": "0191be60-cf5f-7606-a46a-8ba92c696305"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T22:03:05.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T03:12:00Z"}}, "runId": "0191be60-cf5f-7ab3-b022-981ad77a8a2c"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T22:05:33.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T03:12:00Z"}}, "runId": "0191be60-cf5f-7ab3-b022-981ad77a8a2c"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T23:03:11.278452+00:00", "eventType": "START", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T04:12:00Z"}}, "runId": "0191be60-cf5f-7834-ad86-847437f2b04f"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-04T23:05:37.278452+00:00", "eventType": "COMPLETE", "inputs": [{"facets": {"schema": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-1-1/SchemaDatasetFacet.json#/$defs/SchemaDatasetFacet", "fields": [{"description": "the user id", "fields": [], "name": "id", "type": "BIGINT"}, {"description": "the user id", "fields": [], "name": "email_domain", "type": "VARCHAR"}, {"description": "the user id", "fields": [], "name": "status", "type": "BIGINT"}, {"description": "date and time of creation of the user", "fields": [], "name": "created_at", "type": "DATETIME"}, {"description": "the last time this row was updated", "fields": [], "name": "updated_at", "type": "DATETIME"}, {"description": "the time the data was fetched", "fields": [], "name": "fetch_time_utc", "type": "DATETIME"}, {"description": "the original file this data was ingested from", "fields": [], "name": "load_filename", "type": "VARCHAR"}, {"description": "the row number in the original file", "fields": [], "name": "load_filerow", "type": "INT"}, {"description": "the time the data was ingested", "fields": [], "name": "load_timestamp", "type": "DATETIME"}]}}, "name": "temp_demo.user_history", "namespace": "python_client"}], "job": {"facets": {"sourceCodeLocation": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeLocationJobFacet.json#/$defs/SourceCodeLocationJobFacet", "type": "git", "url": "https://github.com/some/airflow/dags/example/user_trends.py"}, "sql": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SQLJobFacet.json#/$defs/SQLJobFacet", "query": "CREATE OR REPLACE TABLE TMP_DEMO.USER_COUNTS AS (\n SELECT DATE_TRUNC(DAY, created_at) date, COUNT(id) as user_count\n FROM TMP_DEMO.USER_HISTORY\n GROUP BY date\n )"}}, "name": "user_trends.create_user_counts", "namespace": "python_client"}, "outputs": [{"facets": {}, "name": "tmp_demo.user_counts", "namespace": "python_client"}], "producer": "https://github.com/openlineage-user", "run": {"facets": {"nominalTime": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/NominalTimeRunFacet.json#/$defs/NominalTimeRunFacet", "nominalStartTime": "2022-04-14T04:12:00Z"}}, "runId": "0191be60-cf5f-7834-ad86-847437f2b04f"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} diff --git a/examples/openlineage/pipeline.json b/examples/openlineage/pipeline.json deleted file mode 100644 index 6f3dad6bf..000000000 --- a/examples/openlineage/pipeline.json +++ /dev/null @@ -1,6 +0,0 @@ -{"eventTime": "2024-09-05T07:00:38.468992+00:00", "eventType": "START", "inputs": [], "job": {"facets": {"jobType": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/2-0-3/JobTypeJobFacet.json#/$defs/JobTypeJobFacet", "integration": "Hamilton", "jobType": "DAG", "processingType": "BATCH"}, "sourceCode": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/facets/1-0-1/SourceCodeJobFacet.json#/$defs/SourceCodeJobFacet", "language": "python", "sourceCode": "[{\"name\": \"db_dataset.loader\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": true, \"hamilton.data_loader.source\": \"db_dataset\", \"hamilton.data_loader.classname\": \"db_dataset()\", \"hamilton.data_loader.node\": \"loader\"}, \"output_type\": \"tuple\", \"required_dependencies\": [\"db_client\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"db_dataset\", \"tags\": {\"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": false, \"hamilton.data_loader.source\": \"db_dataset\", \"hamilton.data_loader.classname\": \"db_dataset()\", \"hamilton.data_loader.node\": \"db_dataset\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"db_dataset.loader\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"file_dataset.loader\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": true, \"hamilton.data_loader.source\": \"file_dataset\", \"hamilton.data_loader.classname\": \"file_dataset()\", \"hamilton.data_loader.node\": \"loader\"}, \"output_type\": \"tuple\", \"required_dependencies\": [\"file_ds_path\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"file_dataset\", \"tags\": {\"hamilton.data_loader\": true, \"hamilton.data_loader.has_metadata\": false, \"hamilton.data_loader.source\": \"file_dataset\", \"hamilton.data_loader.classname\": \"file_dataset()\", \"hamilton.data_loader.node\": \"file_dataset\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"file_dataset.loader\"], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"fit_model\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"ModelObject\", \"required_dependencies\": [\"joined_dataset\"], \"optional_dependencies\": [], \"source\": \"def fit_model(joined_dataset: pd.DataFrame) -> ModelObject:\\n # model = ...\\n return ModelObject()\\n\", \"documentation\": \"\", \"version\": \"bdde123068c590c85d72c44ad02e113fb3419efe974282346c15fad2bb4364dc\"}, {\"name\": \"joined_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"transformed_db_dataset\", \"transformed_file_dataset\"], \"optional_dependencies\": [], \"source\": \"def joined_dataset(transformed_file_dataset: pd.DataFrame, transformed_db_dataset: pd.DataFrame) -> pd.DataFrame:\\n return pd.concat([transformed_file_dataset, transformed_db_dataset], axis=1)\\n\", \"documentation\": \"\", \"version\": \"8d0bde3bcb31f4295da0edca891b74d445489f61a764cbae55965b7329cc0f5c\"}, {\"name\": \"saved_file\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_saver\": true, \"hamilton.data_saver.sink\": \"saved_file\", \"hamilton.data_saver.classname\": \"saved_file()\"}, \"output_type\": \"dict\", \"required_dependencies\": [\"file_path\", \"fit_model\"], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_file(fit_model: ModelObject, file_path: str) -> dict:\\n with open(file_path, \\\"wb\\\") as f:\\n pickle.dump(fit_model, f)\\n return utils.get_file_metadata(file_path)\\n\", \"documentation\": \"\", \"version\": \"2c9d53abd2e853734734aa9e086f8fc0d25d420c1dacab7221d054fd1db8bc31\"}, {\"name\": \"saved_to_db\", \"tags\": {\"module\": \"__main__\", \"hamilton.data_saver\": true, \"hamilton.data_saver.sink\": \"saved_to_db\", \"hamilton.data_saver.classname\": \"saved_to_db()\"}, \"output_type\": \"dict\", \"required_dependencies\": [\"db_client\", \"joined_dataset\", \"joined_table_name\"], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict:\\n # joined_dataset.to_sql(joined_table_name, con=db_client, index=False)\\n return utils.get_sql_metadata(joined_table_name, joined_dataset)\\n\", \"documentation\": \"\", \"version\": \"c400aa21cd5095fdd4f0372a01cf65f2bde44e1785b754cd2e4a348c659fbb78\"}, {\"name\": \"transformed_db_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"db_dataset\"], \"optional_dependencies\": [], \"source\": \"def transformed_db_dataset(db_dataset: pd.DataFrame) -> pd.DataFrame:\\n return db_dataset\\n\", \"documentation\": \"\", \"version\": \"8ad08f1aa9bb5fcaab2aa413bbe61a906aa29a31a11b5e6f59c4920608631631\"}, {\"name\": \"transformed_file_dataset\", \"tags\": {\"module\": \"__main__\"}, \"output_type\": \"DataFrame\", \"required_dependencies\": [\"file_dataset\"], \"optional_dependencies\": [], \"source\": \"def transformed_file_dataset(file_dataset: pd.DataFrame) -> pd.DataFrame:\\n return file_dataset\\n\", \"documentation\": \"\", \"version\": \"4e4b1e73f88e0bfd4e1bd80acdfcdde56e072a3bc1f04f392f9b49d70ca25d55\"}, {\"name\": \"db_client\", \"tags\": {}, \"output_type\": \"object\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]:\\n query = \\\"SELECT * FROM purchase_data\\\"\\n return pd.read_sql(query, con=db_client), {\\\"sql_metadata\\\": {\\\"query\\\": query, \\\"table_name\\\": \\\"purchase_data\\\", \\\"database\\\": \\\"sqlite\\\"}}\\n\", \"documentation\": \"\", \"version\": \"7903e84928e9adc7575d7285170c9f2f2855a5adb2f5924656cd7fb01377ee8b\"}, {\"name\": \"file_ds_path\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@dataloader()\\ndef file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]:\\n # TODO: metadata\\n df = pd.read_csv(file_ds_path)\\n return df, utils.get_file_metadata(file_ds_path)\\n\", \"documentation\": \"\", \"version\": \"fe990a80cc2567d540dc183f180c86d3a77b72224d180a95d1719cc766ccb5fa\"}, {\"name\": \"file_path\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_file(fit_model: ModelObject, file_path: str) -> dict:\\n with open(file_path, \\\"wb\\\") as f:\\n pickle.dump(fit_model, f)\\n return utils.get_file_metadata(file_path)\\n\", \"documentation\": \"\", \"version\": \"2c9d53abd2e853734734aa9e086f8fc0d25d420c1dacab7221d054fd1db8bc31\"}, {\"name\": \"joined_table_name\", \"tags\": {}, \"output_type\": \"str\", \"required_dependencies\": [], \"optional_dependencies\": [], \"source\": \"@datasaver()\\ndef saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict:\\n # joined_dataset.to_sql(joined_table_name, con=db_client, index=False)\\n return utils.get_sql_metadata(joined_table_name, joined_dataset)\\n\", \"documentation\": \"\", \"version\": \"c400aa21cd5095fdd4f0372a01cf65f2bde44e1785b754cd2e4a348c659fbb78\"}]"}}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {"hamilton": {"_producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "_schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet", "final_vars": ["saved_file", "saved_to_db"], "graph_version": "a99f19f71a105eef8bf173584b7f920f55603604e92048630ff90cd614356316", "hamilton_run_id": "44e06d84-7946-460c-8795-04ca195f647d", "inputs": ["db_client", "file_ds_path", "file_path", "joined_table_name"], "overrides": []}}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-05T07:00:38.479558+00:00", "eventType": "RUNNING", "inputs": [{"facets": {}, "inputFacets": {}, "name": "file_dataset.loader", "namespace": "my_namespace"}], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-05T07:00:38.483375+00:00", "eventType": "RUNNING", "inputs": [{"facets": {}, "inputFacets": {}, "name": "purchase_data", "namespace": "my_namespace"}], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-05T07:00:38.486322+00:00", "eventType": "RUNNING", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [{"facets": {}, "name": "model.pkl", "namespace": "my_namespace", "outputFacets": {}}], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-05T07:00:38.486713+00:00", "eventType": "RUNNING", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [{"facets": {}, "name": "joined_data", "namespace": "my_namespace", "outputFacets": {}}], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} -{"eventTime": "2024-09-05T07:00:38.487033+00:00", "eventType": "COMPLETE", "inputs": [], "job": {"facets": {}, "name": "test_job", "namespace": "my_namespace"}, "outputs": [], "producer": "https://github.com/OpenLineage/OpenLineage/tree/1.21.1/client/python", "run": {"facets": {}, "runId": "44e06d84-7946-460c-8795-04ca195f647d"}, "schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunEvent"} diff --git a/examples/openlineage/pipeline.py b/examples/openlineage/pipeline.py index 3523744a0..f9b0c74b8 100644 --- a/examples/openlineage/pipeline.py +++ b/examples/openlineage/pipeline.py @@ -7,8 +7,8 @@ from hamilton.io import utils """ -TODO: - - create a pipeline that will be used to show open lineage integration +Narrative: + - this is a pipeline that will be used to show open lineage integration - one function loads from file - another loads from a database - one save to a file @@ -18,14 +18,13 @@ @dataloader() -def file_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]: - # TODO: metadata +def user_dataset(file_ds_path: str) -> Tuple[pd.DataFrame, dict]: df = pd.read_csv(file_ds_path) return df, utils.get_file_and_dataframe_metadata(file_ds_path, df) @dataloader() -def db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]: +def purchase_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]: query = "SELECT * FROM purchase_data" df = pd.read_sql(query, con=db_client) metadata = { @@ -35,18 +34,23 @@ def db_dataset(db_client: object) -> Tuple[pd.DataFrame, dict]: return df, metadata -def transformed_file_dataset(file_dataset: pd.DataFrame) -> pd.DataFrame: - return file_dataset +def transformed_user_dataset(user_dataset: pd.DataFrame) -> pd.DataFrame: + return user_dataset -def transformed_db_dataset(db_dataset: pd.DataFrame) -> pd.DataFrame: - return db_dataset +def transformed_purchase_dataset(purchase_dataset: pd.DataFrame) -> pd.DataFrame: + return purchase_dataset def joined_dataset( - transformed_file_dataset: pd.DataFrame, transformed_db_dataset: pd.DataFrame + transformed_user_dataset: pd.DataFrame, transformed_purchase_dataset: pd.DataFrame ) -> pd.DataFrame: - return pd.concat([transformed_file_dataset, transformed_db_dataset], axis=1) + joined = pd.merge( + transformed_user_dataset, transformed_purchase_dataset, left_on="id", right_on="user_id" + ) + del joined["id_x"] + del joined["id_y"] + return joined class ModelObject: @@ -71,7 +75,7 @@ def saved_file(fit_model: ModelObject, file_path: str) -> dict: @datasaver() def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_name: str) -> dict: - # joined_dataset.to_sql(joined_table_name, con=db_client, index=False) + joined_dataset.to_sql(joined_table_name, con=db_client, index=False, if_exists="replace") # raise ValueError("Hi") metadata = utils.get_sql_metadata(joined_table_name, joined_dataset) metadata.update(utils.get_dataframe_metadata(joined_dataset)) @@ -81,22 +85,22 @@ def saved_to_db(joined_dataset: pd.DataFrame, db_client: object, joined_table_na if __name__ == "__main__": import sqlite3 - from adapter import OpenLineageAdapter from openlineage.client import OpenLineageClient - from openlineage.client.transport.file import FileConfig + from openlineage.client.transport.file import FileConfig, FileTransport import __main__ as pipeline from hamilton import driver + from hamilton.plugins import h_openlineage file_config = FileConfig( log_file_path="pipeline.json", append=True, ) - client = OpenLineageClient(url="http://localhost:9000") - # client = OpenLineageClient(transport=FileTransport(file_config)) + # client = OpenLineageClient(url="http://localhost:9000") + client = OpenLineageClient(transport=FileTransport(file_config)) - ola = OpenLineageAdapter(client, "my_namespace2", "test_job2") + ola = h_openlineage.OpenLineageAdapter(client, "demo_namespace", "hamilton_job") db_client = sqlite3.connect("purchase_data.db") diff --git a/examples/openlineage/purchase_data.db b/examples/openlineage/purchase_data.db index 365bbdff8a6b11c54498ee53e36cba7916d3edb3..2eecc0ce7f0c3afd3fd7784b1f26698ef61904ef 100644 GIT binary patch literal 188416 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 list[event_v2.InputDataset]: + """Creates the open lineage input dataset.""" + datasource_facet = None + storage_facet = None + sql_facet = None + if "file_metadata" in metadata: + name = node_.name + if ".loader" in name: + name = name.split(".loader")[0] + path = metadata["file_metadata"]["path"] + format = path.split(".")[-1] if "." in name else "unknown" + storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( + storageLayer="FileSystem", + fileFormat=format, + ) + datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( + name=name, + uri=path, + ) + elif "sql_metadata" in metadata: + name = metadata["sql_metadata"]["table_name"] + sql_facet = facet_v2.sql_job.SQLJobFacet( + query=metadata["sql_metadata"]["query"], + ) + else: + name = "--UNKNOWN--" + schema_facet = extract_schema_facet(metadata) + inputFacets = {} + if storage_facet: + inputFacets["storage"] = storage_facet + if datasource_facet: + inputFacets["dataSource"] = datasource_facet + if schema_facet: + inputFacets["schema"] = schema_facet + if len(inputFacets) == 0: + inputFacets = None + inputs = [event_v2.InputDataset(namespace, name, facets=inputFacets)] + return inputs, sql_facet + + +def create_output_dataset(namespace: str, metadata: dict, node_) -> list[event_v2.OutputDataset]: + """Creates the open lineage output dataset.""" + datasource_facet = None + storage_facet = None + if "file_metadata" in metadata: + name = metadata["file_metadata"]["path"] + format = name.split(".")[-1] if "." in name else "unknown" + storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( + storageLayer="FileSystem", + fileFormat=format, + ) + datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( + name=node_.name, + uri=name, + ) + elif "sql_metadata" in metadata: + name = metadata["sql_metadata"]["table_name"] + else: + name = "--UNKNOWN--" + schema_facet = extract_schema_facet(metadata) + outputFacets = {} + if storage_facet: + outputFacets["storage"] = storage_facet + if datasource_facet: + outputFacets["dataSource"] = datasource_facet + if schema_facet: + outputFacets["schema"] = schema_facet + if len(outputFacets) == 0: + outputFacets = None + outputs = [event_v2.OutputDataset(namespace, name, facets=outputFacets)] + return outputs + + class OpenLineageAdapter( base.BasePreGraphExecute, base.BasePreNodeExecute, @@ -37,30 +132,37 @@ class OpenLineageAdapter( """ This adapter emits OpenLineage events. - 1. We need to use materializer metadata to capture data inputs and outputs. - 2. The "job" emitted will be the graph. - - A Run will be emitted for each graph execution. - - pre_graph_execute will emit a START event. - - post_graph_execute will emit a COMPLETE event (or others https://openlineage.io/docs/spec/run-cycle#run-states) - - adding errorMessage facet if the graph execution failed. - - post_node_execute will emit a RUNNING event with updates on input/outputs. - - A Job Event will be emitted for graph execution: - - pre_graph_execute will: - - emit the sourceCode Facet for the entire DAG as the job. - - emit the sourceCodeLocation Facet for the entire DAG as the job. - - post_node_execute will: - - emit the SQLJob facet if data was loaded from a SQL source. - it should emit a job type facet indicating Hamilton - - A Dataset Event will be emitted for: - - post_node_execute will: - - emit dataset event with schema facet, dataSource facet, lifecyclestate change facet,version facet, - - input data sets when loading data - will have dataQualityMetrics facet, dataQualityAssertions facet (optional) - - output data sets will have outputStatistics facet + .. code-block:: python + # create the openlineage client + from openlineage.client import OpenLineageClient + # write to file + from openlineage.client.transport.file import FileConfig, FileTransport + file_config = FileConfig( + log_file_path="/path/to/your/file", + append=False, + ) + client = OpenLineageClient(transport=FileTransport(file_config)) + + # write to HTTP, e.g. marquez + client = OpenLineageClient(url="http://localhost:5000") + + # create the adapter + adapter = OpenLineageAdapter(client, "my_namespace", "my_job_name") + + # add to Hamilton + # import your pipeline code + dr = driver.Builder().with_modules(YOUR_MODULES).with_adapters(adapter).build() + # execute as normal -- and openlineage events will be emitted + dr.execute(...) + + Note for data lineage to be emitted, you must use the "materializer" abstraction to provide + metadata. See https://hamilton.dagworks.io/en/latest/concepts/materialization/. + This can be done via the `@datasaver()` and `@dataloader()` decorators, or + using the `@load_from` or `@save_to` decorators, as well as passing in data savers + and data loaders via `.with_materializers()` on the Driver Builder, or via `.materialize()` + on the driver object. """ def __init__(self, client: OpenLineageClient, namespace: str, job_name: str): @@ -183,6 +285,7 @@ def post_node_execute( :return: """ if not success: + # do not emit anything return metadata = {} saved_or_loaded = "" @@ -199,108 +302,16 @@ def post_node_execute( metadata = result[1] saved_or_loaded = "loaded" if not metadata: + # no metadata to emit return - """ - TODO: create input dataset if appropriate - create output dataset if appropriate - Do the correct thing based on whether it was SQL or not... - """ - print(metadata) inputs = [] outputs = [] sql_facet = None - storage_facet = None - datasource_facet = None - schema_facet = None if saved_or_loaded == "loaded": - if "file_metadata" in metadata: - name = node_.name - if ".loader" in name: - name = name.split(".loader")[0] - path = metadata["file_metadata"]["path"] - format = path.split(".")[-1] if "." in name else "unknown" - storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( - storageLayer="FileSystem", - fileFormat=format, - ) - datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( - name=name, - uri=path, - ) - elif "sql_metadata" in metadata: - name = metadata["sql_metadata"]["table_name"] - sql_facet = facet_v2.sql_job.SQLJobFacet( - query=metadata["sql_metadata"]["query"], - ) - else: - name = "--UNKNOWN--" - - if "dataframe_metadata" in metadata: - schema_datatypes = [ - facet_v2.schema_dataset.SchemaDatasetFacetFields( - name=k, - type=v, - ) - for k, v in zip( - metadata["dataframe_metadata"]["column_names"], - metadata["dataframe_metadata"]["datatypes"], - ) - ] - schema_facet = facet_v2.schema_dataset.SchemaDatasetFacet( - fields=schema_datatypes, - ) - inputFacets = {} - if storage_facet: - inputFacets["storage"] = storage_facet - if datasource_facet: - inputFacets["dataSource"] = datasource_facet - if schema_facet: - inputFacets["schema"] = schema_facet - if len(inputFacets) == 0: - inputFacets = None - inputs = [event_v2.InputDataset(self.namespace, name, facets=inputFacets)] + inputs, sql_facet = create_input_dataset(self.namespace, metadata, node_) else: - if "file_metadata" in metadata: - name = metadata["file_metadata"]["path"] - format = name.split(".")[-1] if "." in name else "unknown" - storage_facet = facet_v2.storage_dataset.StorageDatasetFacet( - storageLayer="FileSystem", - fileFormat=format, - ) - datasource_facet = facet_v2.datasource_dataset.DatasourceDatasetFacet( - name=node_.name, - uri=name, - ) - elif "sql_metadata" in metadata: - name = metadata["sql_metadata"]["table_name"] - else: - name = "--UNKNOWN--" - - if "dataframe_metadata" in metadata: - schema_datatypes = [ - facet_v2.schema_dataset.SchemaDatasetFacetFields( - name=k, - type=v, - ) - for k, v in zip( - metadata["dataframe_metadata"]["column_names"], - metadata["dataframe_metadata"]["datatypes"], - ) - ] - schema_facet = facet_v2.schema_dataset.SchemaDatasetFacet( - fields=schema_datatypes, - ) - outputFacets = {} - if storage_facet: - outputFacets["storage"] = storage_facet - if datasource_facet: - outputFacets["dataSource"] = datasource_facet - if schema_facet: - outputFacets["schema"] = schema_facet - if len(outputFacets) == 0: - outputFacets = None - outputs = [event_v2.OutputDataset(self.namespace, name, facets=outputFacets)] + outputs = create_output_dataset(self.namespace, metadata, node_) run = event_v2.Run( runId=run_id, @@ -309,7 +320,6 @@ def post_node_execute( if sql_facet: job_facets["sql"] = sql_facet job = event_v2.Job(namespace=self.namespace, name=self.job_name, facets=job_facets) - print(inputs, outputs) run_event = event_v2.RunEvent( eventType=event_v2.RunState.RUNNING, eventTime=datetime.now(timezone.utc).isoformat(), From f4cb8817f2073270ad8154a5814b1af01a6a4a5a Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Fri, 6 Sep 2024 10:49:11 -0700 Subject: [PATCH 4/7] Adds openlineage to docs requirements and as optional target --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index e41829d23..a43f4b79d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,6 +74,7 @@ docs = [ "polars", "pyarrow >= 1.0.0", "pyspark", + "openlineage-python", "PyYAML", "ray", "readthedocs-sphinx-ext<2.3", # read the docs pins @@ -93,6 +94,7 @@ experiments = [ "uvicorn", ] lsp = ["sf-hamilton-lsp"] +openlineage = ["openlineage-python"] packaging = [ "build", ] From 15d39d3b696fee3a9a739426a4327e2f0e8c556c Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Fri, 6 Sep 2024 11:11:05 -0700 Subject: [PATCH 5/7] Fix up rst docs --- hamilton/plugins/h_openlineage.py | 39 ++++++++++++------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/hamilton/plugins/h_openlineage.py b/hamilton/plugins/h_openlineage.py index 307edc9b1..80acaf5f7 100644 --- a/hamilton/plugins/h_openlineage.py +++ b/hamilton/plugins/h_openlineage.py @@ -166,8 +166,7 @@ class OpenLineageAdapter( """ def __init__(self, client: OpenLineageClient, namespace: str, job_name: str): - """ - You pass in the OLClient. + """Constructor. You pass in the OLClient. :param self: :param client: @@ -189,8 +188,8 @@ def pre_graph_execute( overrides: Dict[str, Any], ): """ - emits a Run START event. - emits a Job Event with the sourceCode Facet for the entire DAG as the job. + Emits a Run START event. + Emits a Job Event with the sourceCode Facet for the entire DAG as the job. :param run_id: :param graph: @@ -240,14 +239,7 @@ def pre_graph_execute( def pre_node_execute( self, run_id: str, node_: node.Node, kwargs: Dict[str, Any], task_id: Optional[str] = None ): - """ - - :param run_id: - :param node_: - :param kwargs: - :param task_id: - :return: - """ + """No event emitted.""" pass def post_node_execute( @@ -261,19 +253,18 @@ def post_node_execute( task_id: Optional[str] = None, ): """ - Run Event: - - post_node_execute will emit a RUNNING event with updates on input/outputs. + Run Event: will emit a RUNNING event with updates on input/outputs. - A Job Event will be emitted for graph execution: - - post_node_execute will: - - emit the SQLJob facet if data was loaded from a SQL source. - it should emit a job type facet indicating Hamilton + A Job Event will be emitted for graph execution, and additional SQLJob facet if data was loaded + from a SQL source. - A Dataset Event will be emitted for: - - post_node_execute will: - - emit dataset event with schema facet, dataSource facet, lifecyclestate change facet,version facet, - - input data sets when loading data - will have dataQualityMetrics facet, dataQualityAssertions facet (optional) - - output data sets will have outputStatistics facet + A Dataset Event will be emitted if a dataloader or datasaver was used: + + - input data set if loader + - output data set if saver + - appropriate facets will be added to the dataset where it makes sense. + + TODO: attach statistics facets :param run_id: :param node_: @@ -338,7 +329,7 @@ def post_graph_execute( error: Optional[Exception], results: Optional[Dict[str, Any]], ): - """ + """Emits a Run COMPLETE or FAIL event. :param run_id: :param graph: From e34fb2755f85345dff277d62eae79e6caf085836 Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Fri, 6 Sep 2024 11:17:40 -0700 Subject: [PATCH 6/7] Fixes materialization link --- docs/concepts/materialization.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/concepts/materialization.rst b/docs/concepts/materialization.rst index 5d0439808..89f56a194 100644 --- a/docs/concepts/materialization.rst +++ b/docs/concepts/materialization.rst @@ -15,14 +15,14 @@ On this page, you'll learn: Different ways to write the same dataflow ----------------------------------------- -Below are 5 ways to write a dataflow that: +Below are 6 ways to write a dataflow that: 1. loads a dataframe from a parquet file 2. preprocesses the dataframe 3. trains a machine learning model 4. saves the trained model -The first two options don't use the concept of materialization and the next three do. +The first two options don't use the concept of materialization and the next four do. Without materialization ----------------------- @@ -76,7 +76,7 @@ Simple Materialization ~~~~~~~~~~~~~~~~~~~~~~~ When you don't need to hide the implementation details of how you read and write, but you want to track what was read and written, you need to expose extra metadata. This is where -the `@datasaver()` and `@dataloader()` decorators come in. They allow you to return +the :doc:`@datasaver() <../reference/decorators/datasaver/>` and :doc:`@dataloader() <../reference/decorators/dataloader/>` decorators come in. They allow you to return metadata about what was read and written, and this metadata is then used to track what was read and written. From 6b056caee4236fb4aaf570cfc76375f8c322dea3 Mon Sep 17 00:00:00 2001 From: elijahbenizzy Date: Mon, 9 Sep 2024 21:59:15 -0700 Subject: [PATCH 7/7] Fixes up compatibility in python3.10+ for traceback counting --- hamilton/plugins/h_openlineage.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hamilton/plugins/h_openlineage.py b/hamilton/plugins/h_openlineage.py index 80acaf5f7..ea0669941 100644 --- a/hamilton/plugins/h_openlineage.py +++ b/hamilton/plugins/h_openlineage.py @@ -1,4 +1,5 @@ import json +import sys import traceback from datetime import datetime, timezone from typing import Any, Dict, List, Optional @@ -23,11 +24,13 @@ class HamiltonFacet(facet_v2.RunFacet): def get_stack_trace(exception): - return "".join( - traceback.format_exception( + # Python changed this API in 3.10 + if sys.version_info < (3, 10, 0): + return traceback.format_exception( etype=type(exception), value=exception, tb=exception.__traceback__ ) - ) + + return "".join(traceback.format_exception(exception)) def extract_schema_facet(metadata):